¿Qué es Desarrollo Ágil de Software?

El desarrollo ágil de software son métodos de ingeniería del software basados en el desarrollo iterativo e incremental, donde los requerimientos y soluciones evolucionan mediante la colaboración de grupos auto organizados y multidisciplinarios. Existen muchos métodos de desarrollo ágil; la mayoría minimiza riesgos desarrollando software en lapsos cortos. El software desarrollado en una unidad de tiempo es llamado una iteración, la cual debe durar de una a cuatro semanas. Cada iteración del ciclo de vida incluye: planificación, análisis de requerimientos, diseño, codificación, revisión y documentación. Una iteración no debe agregar demasiada funcionalidad para justificar el lanzamiento del producto al mercado, pero la meta es tener una «demo» (sin errores) al final de cada iteración. Al final de cada iteración el equipo vuelve a evaluar las prioridades del proyecto.

Los métodos ágiles enfatizan las comunicaciones cara a cara en vez de la documentación. La mayoría de los equipos ágiles están localizados en una simple oficina abierta, a veces llamadas "plataformas de lanzamiento" (bullpen en inglés). La oficina debe incluir revisores, escritores de documentación y ayuda, diseñadores de iteración y directores de proyecto. Los métodos ágiles también enfatizan que el software funcional es la primera medida del progreso. Combinado con la preferencia por las comunicaciones cara a cara, generalmente los métodos ágiles son criticados y tratados como "indisciplinados" por la falta de documentación técnica.

¿Qué es SCRUM?

Scrum es un proceso en el que se aplican de manera regular un conjunto de buenas prácticas para trabajar colaborativamente, en equipo, y obtener el mejor resultado posible de un proyecto. Estas prácticas se apoyan unas a otras y su selección tiene origen en un estudio de la manera de trabajar de equipos altamente productivos.

En Scrum se realizan entregas parciales y regulares del producto final, priorizadas por el beneficio que aportan al receptor del proyecto. Por ello, Scrum está especialmente indicado para proyectos en entornos complejos, donde se necesita obtener resultados pronto, donde los requisitos son cambiantes o poco definidos, donde la innovación, la competitividad, la flexibilidad y la productividad son fundamentales.

Scrum también se utiliza para resolver situaciones en que no se está entregando al cliente lo que necesita, cuando las entregas se alargan demasiado, los costes se disparan o la calidad no es aceptable, cuando se necesita capacidad de reacción ante la competencia, cuando la moral de los equipos es baja y la rotación alta, cuando es necesario identificar y solucionar ineficiencias sistemáticamente o cuando se quiere trabajar utilizando un proceso especializado en el desarrollo de producto.

Dos formas de protección del software

La protección del software se puede dividir en dos partes:

  1. Protección del software desde la misma programación, desde el mismo código fuente.
  2. Protección del software utilizando Ingeniería Inversa. Esto se suele hacer con programas denominados packers.
Podríamos añadir una más y es la combinación de ambas, ya que determinados packers  permiten interactuar desde el código fuente y desde el código ensamblador final.
  • La protección desde el mismo código fuente la realiza el programador. El programador según su propia experiencia, conocimiento de Ingeniería Inversa, imaginación será el que ponga las dificultades al cracking de su software. Crear licencias, programa DEMO y protección puede ser una labor muy costosa en tiempo y pruebas, pero también existe muchísima información en la red.
  • La protección utilizando Ingeniería Inversa es a partir de tu programa ya compilado, crear impedimentos al cracking. Esto se hace normalmente con programas protectores denominados: packers, empacadores. La utilización de estos programas son una gran ventaja ya que permiten crear licencias, crear programas DEMO o con restricciones, crear protección contra debuggers y/o desensambladores, comprimir tu aplicación, crear un sólo ejecutable sin tener dependencias y unas cuantas opciones que dependen del packer que estemos utilizando.
Al final de todo esto, como puedes observar, el camino que queda es largo y muchos programadores dejan la protección de su software a las empresas de packers.

Programador vs Webmaster

Programador:  

Se encarga de la implementación de prototipos mediante un lenguaje de programación que pueda entender la computadora. Inicialmente, la profesión se formalizó desde el enfoque Tayloriano de la especialización de funciones en la empresa. Así, el proceso de producción de software se concibe como un conjunto de tareas altamente especializadas donde está claramente definido el papel de cada categoría profesional.
La profesión de analista también ha evolucionado, surgiendo el concepto diseñador (de software). Esto se debe a los avances de la ingeniería del software donde se reconoce que el análisis es una actividad distinta del diseño. El análisis describe el problema (el qué hacer) mientras que el diseño describe la solución (el cómo hacerlo). En la mayoría de países industrializados esto ha dado lugar a la categoría profesional del diseñador o arquitecto del software.


Webmaster: 

La labor de un Webmaster es multidisciplinar debido a la gran cantidad de tareas que realiza y a la complejidad de las habilidades para ejecutarlas, por lo que es muy importante una capacitación constante.
Sin embargo hay algunos puntos básicos que debería conocer para realizar mejor su trabajo. Es común que un Webmaster sea alguien con formación técnica, de perfil tecnológico, como ingenieros o licenciados en computación, ciencias informáticas, cibernética, telecomunicaciones, mecatrónica o mecánica, y sin embargo no es un requisito.
Un Webmaster debe tener habilidades de análisis de problemas, capacidad para razonamiento abstracto, proyección a futuro y resolución de problemas. No es necesaria una gran habilidad matemática pero es muy útil tener cierta habilidad para el análisis de procesos.


Código de Etica del Webmaster: 
  1. Respetar los sitios web ajenos y nunca intentar crackear o estropear la web de otro webmaster. 
  2. Mostrar respeto a la profesión como industria con honestidad y cortesía. 
  3. Incrementar la base de conocimiento de la profesión a través del estudio constante y de compartir este conocimiento con otros colegas. 
  4. Construir una relación constante de confianza y buena voluntad con el público usuario. 
  5. Llevar una conducta laboral de la manera más ética y competente posible cuando se solicite un servicio profesional o busque empleo, en honor a su conocimiento e integridad. 
  6. Aceptar nuestra parte de responsabilidad en un servicio constructivo a la comunidad. 
  7. Proteger la propiedad intelectual de otros. 
  8. Esforzarse en lograr y expresar un carácter sincero que enriquecerá sus contactos humanos.  
  9. Trabajar siempre con su grupo de desarrollo.

Técnicas de Depuración de Programas

Cuando se escriben programas, es normal cometer errores (bugs). De hecho, en promedio, un programador comete un error cada 10 líneas de programa. Esto significa que la probabilidad de que el programa funcione a la primera vez es prácticamente nula.
Por lo tanto, el desarrollo de un programa siempre incorpora una etapa de depuración (debugging), que consiste en buscar y resolver los errores cometidos durante la programación. Para facilitar la etapa de depuración es conveniente usar herramientas especializadas para estos efectos. La más común es el depurador o también llamado debugger.
El depurador:
Un depurador es una herramienta que permite intervenir durante la ejecución de un programa, para saber cómo se está ejecutando. El depurador permite:

  • Ejecutar paso a paso un programa (stepping).
  • Establecer puntos de detención (breakpoints).
  • Examinar el contenido de las variables y objetos.
  • Conocer el encadenamiento de llamadas de procedimientos.
  • Retomar la ejecución hasta un nuevo punto de detención.
En este curso usaremos el depurador que trae incorporado JBuilder.Depuración manual:
Cuando no se dispone de un depurador, se debe recurrir a la depuración manual. Esta consiste en preparar el programa para poder conocer como se está ejecutando el programa. La técnica más usual de depuración de programas consiste en colocar println's en puntos estratégicos del programa para desplegar el contenido de las variables. Siga las siguientes recomendaciones para establecer estos puntos estratégicos:

  • Dentro de un while, siempre coloque algún println que permita detectar cuando cayó en un ciclo infinito su programa (un loop). Despliegue el valor de contadores, datos leídos de un archivo, acumuladores, etc.
  • Al inicio de una función o procedimiento, despliegue el valor de los parámetros recibidos y al retornar despliegue el valor retornado (mediante return).
  • En un if, despliegue cuál de las ramas se tomó: la que corresponde a la condición verdadera o el else.
Para que resulte más fácil la depuración, comience ejecutando su programa con poquísimos datos. Nunca olvide, incluir datos que representen las condiciones de borde del programa. Por ejemplo: n=0, el archivo esta vacío, etc.La biblioteca del curso incluye mecanismos para poder grabar todos los mensajes que aparecen en la pantalla. Para hacer esto, utilice la opción -l al ejecutar su programa:

    java Run -l MiPrograma
Su programa se ejecutará igual que antes, pero además creará un archivo de nombre console.log que contiene todos los mensajes que aparecieron en pantalla durante la ejecución del programa. Esto resulta muy útil, pues las 24 líneas de la pantalla se hacen escasas con tanto despliegue con println. Cuando Ud. estime que su programa funciona adecuadamente, comente los println que introdujo para efectos de depuración (es decir agregue // para transformalos en comentarios). No los borre, porque más tarde podría darse cuenta que su programa todavía no funciona completamente cómo debería.