martes, 27 de noviembre de 2012

¿Que 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.

lunes, 26 de noviembre de 2012

¿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.

domingo, 18 de noviembre de 2012

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.

jueves, 1 de noviembre de 2012

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.

Fuente: http://users.dcc.uchile.cl/~lmateu/CC10A/Apuntes/debug/index.html

¿Qué es Auditoría de Software?

La Auditoría de Software es un término general que se refiere a la investigación y al proceso de entrevistas que determina cómo se adquiere, distribuye y usa el software en la organización.
Conducir la auditoría es una de las partes más críticas de un Programa de Administración de Software, porque la auditoría ayuda a la organización a tomar decisiones que optimicen sus activos de software.
Un estudio de Print UK Limited, firma de Administración de auditoría, descubrió que una organización típica con más de 500 PCs muchas veces tiene un 20% más de computadoras de lo que cree. El Gartner Group también descubrió que más de un 90% de las organizaciones han incrementado su base de activos de TI sin haber hecho ningún proceso para su seguimiento.
Una de las razones por las que las organizaciones no maximizan su inversión en activos de software es que no hay información exacta disponible. La recopilación de toda la información necesaria es un proceso intenso, especialmente cuando se hace por primera vez. Otro problema es que la perspectiva de una auditoría puede ser vista con algunas reservas por algunos directivos de la organización, preocupados porque pueda interrumpir el flujo de trabajo, y por algunos usuarios finales que pueden ser forzados a abandonar sus programas o procedimientos favoritos.
Una de las formas de evitar las objeciones y dejar de lado estos problemas es planificar cuidadosamente la Auditoría de Software y comunicar su valor por adelantado.
Los siguientes factores favorecerán la colaboración entre la gerencia y el personal a través del proceso de planificación, el cual es una llave para el éxito de cualquier auditoría de software.
  • Establecer y acordar una serie clara de objetivos y comunicarla a todos los empleados asociados con la auditoría.
  • Focalizarse en los resultados que se requieran de la auditoría y discutir las áreas donde se crea pueda haber problemas.
  • Identificar las áreas simples pero muchas veces olvidadas que necesitan ser consideradas, tales como:
    • Acceso a sitios y creación de mapas de esas locaciones
    • Conocer con anticipación los log-on scripts de seguridad o claves.
    • Horario de la auditoría (durante el día, noche o fin de semana).
  • Diseñar el plan y el cronograma de la auditoría, así como también las herramientas de auditoría que serán usadas.
  • Asignar recursos para cada elemento específico de la auditoría.
Fuente: http://www.microsoft.com/argentina/public/kit_base/licenciamiento/licsemgt/softaudt/intro.htm

Procedimientos Recomendados para la Confiabilidad del Software

El objetivo de conseguir un software de calidad abarca todo el ciclo vital de desarrollo del programa. Se recomiendan los siguientes procedimientos para crear aplicaciones confiables:

1. Pensar en la confiabilidad:

Las aplicaciones confiables han de ser compatibles con operaciones confiables y necesitan también procesos de implementación confiables. Céntrese en el modo en que se proporciona el servicio y busque posibles problemas allí donde las alternativas de diseño o de procedimiento permitan reducir las causas de error.

2. Invertir en personal:

El personal de operaciones y los programadores deben conocer a fondo las prácticas de administración del ciclo de vida y de la arquitectura, poniendo especial atención en la prevención de los errores más comunes.
Cree una referencia cultural de equipo en la que la confiabilidad sea un aspecto crítico. Proporcione educación sobre los procedimientos de la compañía, las herramientas de programación, las tecnologías de aplicación y 
los conceptos de confiabilidad.

3. Eliminar los puntos con errores desde el diseño de aplicaciones:
Un sistema confiable es más fácil de mejorar que un sistema no confiable (con eventos de error ocultos y distribuidos por todo el programa), que es muy costoso cambiar.

4. Utilizar un sistema operativo consistente.

5. Proporcionar supervisión de confiabilidad continua:

Todas las aplicaciones críticas para una misión deben proporcionar datos de supervisión. El análisis de los datos recopilados desempeña un papel importante en la observación del estado, de los problemas actuales y de 
las tendencias de largo alcance de las aplicaciones críticas.

6. Invertir en procesos de diseño de software de calidad:

• Utilizar una metodología de ciclo vital de desarrollo
• Uso de revisiones de código y estándares de codificación
• Desarrollo de procedimientos de recuperación
• Uso de procedimientos de control de cambios probados

7. Utilizar pruebas inteligentes

Los procesos de prueba de control de calidad deberán proporcionar una respuesta a tres cuestiones importantes:

¿Están correctamente implementadas en la aplicación las funciones descritas en las especificaciones?

¿Satisface la aplicación las situaciones de usuario previstas sin producir errores?

¿Se ajusta el perfil de confiabilidad de la aplicación a los requisitos originales o los supera?

Cuando el nivel de calidad y confiabilidad no sea aceptable, deberá corregirse el software hasta que se alcance el nivel deseado.

8. Implementar cambios con cautela.

9. Prestar atención al presupuesto.

Fuente: http://carolina.terna.net/ingsw3/datos/Pruebas_de_Confiabilidad.pdf

¿Qué es Calidad de Software?

Es la concordancia con los requerimientos funcionales y de rendimiento previamente establecidos, con los estándares de desarrollo debidamente documentados y con las características implícitas que se esperan de todo software desarrollado profesionalmente.

Existen 3 puntos importantes de la definición de calidad de software:
  1. Los requerimientos del software son los fundamentos desde los que se mide la calidad.
  2. Los estándares específicos definen un conjunto de criterios de desarrollo que guían la forma de aplicación de la ingeniería de software existen requerimientos implícitos que no se mencionan.
  3. Un producto de alta calidad requiere menos mantenimiento y facilita tanto el desarrollo como el mantenimiento de la productividad. Con la medición de la calidad se pueden lograr estos objetivos. En lo que se refiere al mantenimiento, la medición de la calidad del software ayuda a identificar problemas de confiabilidad y a mejorar las técnicas para identificar las necesidades de mantenimiento.
Confiabilidad

Es la probabilidad de operación libre de fallas de un programa de computadora en un entorno determinado y durante un tiempo específico.
El fallo es cualquier no concordancia con los requerimientos del software. Hay distintos grados de fallos, estos pueden ser simplemente desconcertantes o catastróficos.
La confiabilidad del software se encuentra en un etapa de formación de desarrollo y es la caracterísitca de rendimiento más costosa de conseguir y difícil de conseguir y de difícil de garantizar. La naturaleza del proyecto ayuda para la formulación de estimaciones de costo y el esfuerzo que asegure la confiabilidad requerida.
Los modelos de confiabilidad del software se usan para caracterizar y predecir el comportamiento importante para directores e ingenieros.
La generación de fallos depende del código desarrollado, tales como tamaño y las características del proceso de desarrollado tales como las tecnologías y herramientas de ingeniería de software usadas.
La eliminación de fallos depende del tiempo y del perfil operativo. Los modelos de confiabilidad del software son generalmente procesos aleatorios. 

Estos modelos se pueden dividir en 2 grandes categorías:
  1. modelos que predicen la confiabilidad como una función cronológica del tiempo
  2. modelos que predicen la confiabilidad como una función del tiempo de procesamiento transcurrido
Control de Calidad

El costo de corregir y detectar errores producidos en las primeras fases de desarrollo de software es mayor a medida que nos encontramos más alejados de éstas. A causa de esto, la propuesta de control de calidad es empujar las tareas relacionadas con la calidad desde las primeras fases del proyecto. Esto permite encontrar los errores en forma temprana sin que se sigan propagando en las siguientes fases.

Otro motivo para el control de calidad es que la prueba de software no puede garantizar que encuentre todos los errores. Los programadores profesionales pueden y deben producir software el cual esté libre de errores desde el comienzo. Esto puede ser llevado a cabo a través del control de calidad.

La garantía de calidad de software engloba:
  1. Métodos y herramientas de análisis, diseño, codificación y prueba 
  2. Revisiones y técnicas formales que se aplican en cada fase de la ingeniería de software
  3. Una estrategia de prueba multiescalada 
  4. El control de la documentación del software y de los cambios efectuados 
  5. Un procedimiento que asegure un ajuste a los estándares de desarrollo
  6. Mecanismos a medida y de información

Fuente: http://www.ub.edu.ar/catedras/ingenieria/ing_software/ubftecwwwdfd/calidadsw/calidad.htm

¿Qué es Confiabilidad de Software?

La confiabilidad de software significa que un programa particular debe de seguir funcionando en la presencia de errores. Los errores pueden ser relacionados al diseño, a la implementación, a la programación  o el uso de errores. Así como los sistemas llegan a ser cada vez mas complejos, aumenta la probabilidad de errores. Como mencionamos, es increíblemente difícil demostrar que un sistema sea seguro. Software seguro debe de funcionar abajo de un ataque. Aunque casi todos los software tengan errores, la mayoría de los errores nunca serán revelados debajo de circunstancias normales. Un atacante busca esta debilidad para atacar un sistema.

Fuente: 
http://www.seguridad.us/privada/empresas/confiabilidad-de-software/