Bautista Pértica Cabrera
jueves, 23 de abril de 2015
domingo, 19 de abril de 2015
4) Programación Extrema
Escenario
La empresa el Pato Volador en la que usted labora ha sido contratada por una Agencia Espacial para desarrollar el software de un satélite que se desarrollará en 3 meses como máximo, ya que es el tiempo en que será el lanzamiento del satélite para ponerlo en órbita. El satélite auxiliará el retorno de una las naves espaciales que regresan a la tierra.
La Agencia espacial ha puesto a su disposición a los ingenieros encargados de proporcionar los requerimientos del software de tiempo completo, así como los recursos e instalaciones necesarios para lograr el desarrollo del software en el tiempo establecido.
El Pato Volador ha propuesto a los directivos de la Agencia Espacial la metodología de Programación Extrema (XP por sus siglas en inglés) para la realización del software, ya que es indispensable terminar en tiempo el proyecto.
Usted debe utilizar la metodología XP para organizar a su equipo de trabajo y a los ingenieros de la Agencia, explicándoles la metodología XP y las funciones que deben realizar en las diferentes fases del proceso de desarrollo del software.
Preguntas y Mapa Conceptual
¿Qué es la Programación Extrema?
Es una metodología de desarrollo de la ingeniería de software formulada por Kent Beck, autor del primer libro sobre la materia, Extreme Programming Explained: Embrace Change (1999). Es el más destacado de los procesos ágiles de desarrollo de software. Al igual que éstos, la programación extrema se diferencia de las metodologías tradicionales principalmente en que pone más énfasis en la adaptabilidad que en la previsibilidad.
¿Cuáles son los valores y principios de la Programación Extrema?
Los valores originales de la programación extrema son: simplicidad, comunicación, retroalimentación (feedback) y coraje. Un quinto valor, respeto, fue añadido en la segunda edición de Extreme Programming Explained.
¿Cuáles son las actividades, recursos y prácticas de la Programación Extrema?
Equipo completo, planificación, test del cliente, versiones pequeñas, diseño simple, pareja de programadores, desarrollo guiado por las pruebas automáticas, integración continua, el código es de todos, normas de codificación, metáforas y ritmo sostenible.
¿Cuál son las fases del proceso de desarrollo de XP?
Planificación del proyecto, diseño, codificación y pruebas.
¿Qué es una historia de usuario?
Es una representación de un requisito de software escrita por el cliente en 1 a 4 frases en su lenguaje común. Son usadas para la especificación de requerimientos y para estimar tiempos de desarrollo. El tiempo de desarrollo de cada una es entre 1 y 3 semanas.
domingo, 12 de abril de 2015
3) Los Métodos Ágiles del Desarrollo de Software
Escenario
La Agencia Espacial en días anteriores ha perdido un satélite de comunicación debido al fallo del software del mismo. La investigación indicó que la falla fue porque no se cubrieron los requisitos de programación del sistema especificados por la propia Agencia.
La Agencia Espacial tiene que remplazarlo lo más pronto posible, ya que las comunicaciones con las naves espaciales dependen del mismo. Afortunadamente para la Agencia, existe un nuevo satélite ya construido que estaba programado para ser lanzado en un año, el inconveniente es que si se carga el mismo software el satélite se volverá a perder.
La empresa el Pato Volador en la que usted labora ha sido contratada para desarrollar el software del satélite en un proyecto de 3 meses como máximo, ya que es el tiempo en que retornará la próxima nave espacial que necesita los servicios del satélite para poder retornar a la tierra.
La Agencia pone a su disposición a los ingenieros encargados de proporcionar los requerimientos del software de tiempo completo, así como los recursos e instalaciones necesarios para lograr el desarrollo del software en el tiempo establecido. No es indispensable entregar la documentación formal del análisis y diseño del software, sin embargo debe haber evidencia que permita el entendimiento del sistema y el funcionamiento del mismo.
Usted debe proponer una metodología de desarrollo de software que permita organizar a su equipo de trabajo y a los ingenieros de la Agencia, mencionando los beneficios y riesgos que puedan existir.
Preguntas y Mapa Conceptual
¿Qué son las metodologías ágiles de desarrollo de software?
Son métodos para desarrollo de software que le dan mayor
peso a ciertas dimensiones tales como el factor humano o el producto software.
Las metodologías ágiles dan mayor valor al individuo, a la colaboración y al
desarrollo incremental del software con iteraciones muy cortas. Se usan generalmente
para proyectos un tanto cortos pero sin descuidar la calidad.
¿Cuáles son las características en las que se basan las
metodologías ágiles?
Rapidez, flexibilidad, trabajo en equipo y disponibilidad.
¿Cuáles son las ventajas y desventajas del empleo de las
metodologías ágiles respecto a las tradicionales?
Una de las ventajas principales es que al utilizar las
metodologías ágiles al presentarse algún error de cualquier tipo, el
desarrollador no tiene que empezar desde el inicio sino que es fácilmente
adaptable. Otra ventaja que se tiene es el hecho de tener al cliente
como parte del equipo, pues de esta forma el cliente entiende mejor lo que se
está haciendo y que es lo que le beneficiaría, lo cual de manera implícita
implica que no es necesario hacer formalmente una documentación.
¿Cuándo es recomendable utilizar metodologías ágiles en el
desarrollo de software?
Es recomendable usar metodologías ágiles generalmente cuando
se cuenta con un lapso corto para el desarrollo del proyecto.
¿Cuáles son algunos tipos de metodologías ágiles?
Algunos tipos de metodologías ágiles son: programación
extrema, SCRUM, Adaptive Software Development, Crystal methodologies y Feature
Driven Development.
Presentación
2) Modelos del Proceso de Software
Introducción
Quién hace qué, cuándo y cómo lo hace
para alcanzar cierto objetivo es lo que un proceso define. En general, el éxito de las empresas u organizaciones
depende en gran medida de la definición y seguimiento adecuado de sus procesos.
En el caso de una empresa que se dedica al desarrollo de software, se requieren
procesos especializados que abarquen desde la creación hasta la administración
de un sistema de software.
Un modelo de proceso de software define cómo resolver la
problemática del desarrollo de sistemas de software. Para desarrollar software
se requiere resolver ciertas fases de un proceso que se conocen en su conjunto
como el ciclo de vida del desarrollo de software. Un modelo de proceso debe considerar
una variedad de aspectos, como el conjunto de personas, estructuras
organizacionales, reglas, políticas, actividades, componentes de software,
metodologías y herramientas utilizadas.
Desarrollo
Modelo de Cascada
Es el enfoque metodológico que ordena rigurosamente las
etapas del ciclo de vida del software, de forma tal que el inicio de cada etapa
debe esperar a la finalización de la inmediatamente anterior. De esta forma,
cualquier error de diseño detectado en la etapa de prueba conduce
necesariamente al rediseño y nueva programación del código afectado, aumentando
los costos del desarrollo.
Análisis del sistema: Debido a que el software es siempre
parte de un sistema mayor el trabajo comienza estableciendo los requisitos de
todos los elementos del sistema y luego asignando algún subconjunto de estos
requisitos al software.
Desarrollo Evolutivo
Este modelo es efectivo en proyectos pequeños o medianos con
poco tiempo para su desarrollo y sin generar documentación para cada versión.
Para proyectos largos es mejor combinar lo mejor del modelo de cascada y
evolutivo: se puede hacer un prototipo global del sistema y posteriormente
reimplementarlo con un acercamiento más estructurado. Los subsistemas con requisitos
bien definidos y estables se pueden programar utilizando cascada y la interfaz
de usuario se puede especificar utilizando un enfoque exploratorio.
Ingeniería de Software Basada en Componentes
En general, el desarrollo de software basado en componentes
puede verse como una extensión natural de la programación orienta a objetos
dentro del ámbito de los sistemas abiertos y distribuidos. Este paradigma se
basa en el uso de los componentes software como entidades básicas del modelo,
entendiendo por componente “una unidad de composición de aplicaciones software
que posee un conjunto de requisitos, y que ha de poder ser desarrollado,
adquirido, incorporado al sistema y compuesto con otros componentes, de forma
independiente en tiempo y espacio”.
A continuación presento un mapa conceptual sobre el proceso de software así como un cuestionario contestado de evaluación.
Conclusión
Creo que la diversidad de los proyectos que se desarrollan ha sido el principal factor en la creación de distintos métodos de desarrollo de software. Por eso es importante conocer los métodos existentes para así saber cuál utilizar a la hora de desarrollar algún software, eligiendo o creando el que mejor se adapte a las características y necesidades únicas del proyecto; de esta manera garantizaremos nuestra mejor respuesta al problema de desarrollo planteado.
Referencias
- Esteller Víctor, Procesos de desarrollo de software y materiales educativos compuratizados, Revista de Tecnología de Informática, Venezuela, 2012.
- Metodologías y procesos de análisis de software, Capítulo 2, UNAM.
- Bertoa Manuel F., Troya José M., Vallecillo Antonio; Aspectos de Calidad en el Desarrollo de Software Basado en Componentes; Departamento de Lenguajes y Ciencias de la Computación; Universidad de Málaga.
- Weitzenfeld Ridel, Ingeniería de software: el proceso para el desarrollo de software, ITAM, 2007.
viernes, 27 de marzo de 2015
1)Métodos Ágiles de Programación
Introducción
En los años 90 hubo varios desarrolladores de software que notaron que los métodos convencionales de planificación de proyectos no se adecuaban de manera correcta a los pequeños y medianos trabajos, por lo que empezaron a desarrollar nuevas métodos de desarrollar estos proyectos. Estos métodos ágiles de programación se basaban en nuevos paradigmas de adaptabilidad, de entregas y de planificación. A continuación presento un mapa conceptual sobre los métodos ágiles de programación y un cuestionario sobre el mismo tema.
Desarrollo
Las metodologías tradicionales de desarrollo de software son
orientadas por planeación. Inician el desarrollo de un proyecto con un riguroso
proceso de elicitación de requerimientos, previo a etapas de análisis y diseño.
Con esto tratan de asegurar resultados con alta calidad circunscritos a un
calendario.
En las metodologías
tradicionales se concibe un solo proyecto, de grandes dimensiones y estructura
definida; se sigue un proceso secuencial en una sola dirección y sin marcha
atrás; el proceso es rígido y no cambia; los requerimientos son acordados de
una vez y para todo el proyecto, demandando grandes plazos de planeación previa
y poca comunicación con el cliente una vez ha terminado ésta. En cambio las metodologías ágiles son flexibles, pueden ser
modificadas para que se ajusten a la realidad de cada equipo y proyecto.
Los proyectos ágiles se subdividen en proyectos más pequeños
mediante una lista ordenada de características. Cada proyecto es tratado de
manera independiente y desarrolla un subconjunto de características durante un
periodo de tiempo corto, de entre dos y seis semanas. La comunicación con el
cliente es constante al punto de requerir un representante de él durante el
desarrollo. Los proyectos son altamente colaborativos y se adaptan mejor a los
cambios; de hecho, el cambio en los requerimientos es una característica
esperada y deseada, al igual que las entregas constantes al cliente y la
retroalimentación por parte de él. Tanto el producto como el proceso son
mejorados frecuentemente. Los métodos ágiles más conocidos y empleados son:
Extreme Programming
La principal suposición que se realiza en XP es la
posibilidad de disminuir la mítica curva exponencial del costo del cambio a lo
largo del proyecto, lo suficiente para que el diseño evolutivo funcione. Esto
se consigue gracias a las tecnologías disponibles para ayudar en el desarrollo
de software y a la aplicación disciplinada de algunas prácticas como el juego
de la planificación, entregas pequeñas, metáfora, diseño simple, pruebas,
refactorización, programación en parejas, propiedad colectiva del código,
integración continua entre otros.
Scrum
Está especialmente indicada para proyectos con un rápido
cambio de requisitos. Sus principales características se pueden resumir en dos.
El desarrollo de software se realiza mediante iteraciones, denominadas sprints,
con una duración de 30 días. El resultado de cada sprint es un incremento
ejecutable que se muestra al cliente. La segunda característica importante son
las reuniones a lo largo proyecto, entre ellas destaca la reunión diaria de 15
minutos del equipo de desarrollo para coordinación e integración.
Adaptive Software Development
Esta metodología parte de la idea de que las necesidades del
cliente son siempre cambiantes durante el desarrollo del proyecto (y
posteriormente a su entrega). Su impulsor es Jim Highsmith, la novedad de esta
metodología es que en realidad no es una metodología de desarrollo de software, sino
un mé- todo (como un caballo de troya) a través del cual inculcar una cultura
adaptativa a la empresa, ya que su velocidad de adaptación a los cambios
marcará la diferencia entre una empresa próspera y una en declive. Los
objetivos de esta metodología son cuatro:
- Concienciar a la organización de que debe esperar cambio e incertidumbre y no orden y estabilidad.
- Desarrollar procesos iterativos de gestión del cambio.
- Facilitar la colaboración y la interacción de las personas a nivel interpersonal, cultural y estructural.
- Marcar una estrategia de desarrollo rápido de aplicaciones pero con rigor y disciplina
Crystal methodologies
No se trata de una única metodología sino de un conjunto de ellas
centradas en las personas que tienen que desarrollar el software, el equipo es la base
de estas metodologías creadas por Alistair Cockburn. Desarrollar aplicaciones
ha de ser como un juego en el que todos cooperan, aportan su parte de invención
y se comunican. ¿Por qué olvidamos esta parte? Crystal establece una serie de
políticas de trabajo en equipo (Methods) orientadas a fomentar la mejora de estas
habilidades. Dependiendo del tamaño del equipo, se establece una metodología u
otra designadas por color: Crystal Clear (para 3-8 personas), Crystal Yellow (para
10-20 personas), Crystal Orange (para 25-50), etc.
Feature Driven Development
Se basa en un ciclo muy corto de iteración, nunca superior a dos
semanas, y en el que el análisis y los desarrollos están orientados a cumplir
una lista de "características" (features) que tiene que tener el
software a desarrollar.
A continuación se presenta un mapa conceptual realizado con el software cmap tools además de algunas preguntas resueltas.
- Los métodos ágiles se utilizan en: --Desarrollo de Software
- ¿Qué modelo de desarrollo de software utilizan los métodos ágiles? --Iterativo
- ¿Cuáles son las principales características en las que se basa el método ágil? --Trabajo en equipo, adaptable, avances funcionales
- ¿Cuáles son las características que diferencian al método ágil del convencional? --Adaptable en cualquier etapa del proyecto
- En los métodos ágiles el cliente: --Se incorpora al equipo de trabajo
Conclusión
Es notorio que los métodos ágiles de programación son de inmensa utilidad cuando deseamos llevar a cabo proyectos cortos o medianos, y por eso es importante conocerlos y estar preparado para usarlos. Es de primordial importancia que los proyectos se realicen de la manera más efectiva posible, y estos métodos son una herramienta poderosa para ayudarnos a lograr nuestro cometido.
Referencias
- http://www.willydev.net/descargas/prev/TodoAgil.Pdf
- Dingsøyr, Torgeir; Dybå, Tore; Brede Moe, Nils. Agile Software Development: Current Research and Future Directions. 2010.
- http://issi.dsic.upv.es/archives/f-1069167248521/actas.pdf
- Jorge F., Introducción a las metodologías ágiles, otras formas de analizar y desarrollar, Universitat Oberta de Catalunya.
jueves, 5 de febrero de 2015
4) Pruebas de Integración y Sistema
Introducción
Las pruebas del software sirven para detectar posibles errores en las aplicaciones. Podemos dividir las pruebas de software en:
- Pruebas unitarias.
- Pruebas de integración
- Pruebas de sistema
- Pruebas de aceptación
Desarrollo
Pruebas de Integración
En el ámbito del desarrollo de software, estas pruebas se realizan posteriores a las pruebas unitarias y antes de de las pruebas de sistema. Consisten en realizar pruebas para verificar que un conjunto de elementos unitarios de software funcionan juntos. En esta fase de las pruebas, los módulos individuales son combinados y probados como un grupo.
Pruebas de Sistema
Cualquier pieza de software completo, desarrollado o adquirido, puede verse como un sistema que debe probarse, ya sea para decidir acerca de su aceptación, para analizar efectos globales o para estudiar aspectos específicos de su comportamiento, tales como seguridad y rendimiento. A éste tipo de pruebas donde se estudia el producto completo se les llama Pruebas de Sistema.
Usualmente es de caja negra, especialmente si quien prueba no tiene acceso al código fuente del producto a probar, que es lo más frecuente.
Conclusión
Las pruebas tanto de integración como de sistema son cruciales para poder llevar a cabo un proyecto exitoso, ya que es muy necesario que las partes desarrolladas individualmente se comuniquen de manera correcta entre sí, y que puedan funcionar en su conjunto como una unidad.
Referencias
- G. Myers. The art of software testing. Wiley, 2004.
- Jacobson, Ivar, Booch, Grady, Rumbaugh, James. El Proceso Unificado de Desarrollo de Software. Addison Wesley, 2000.
- Lambuth, Mark. Bug Fishing. http://embedded.com.
miércoles, 14 de enero de 2015
3) Casos de Prueba
Introducción
En el campo de la gestión tradicional de proyectos de software, surgió
hace poco una filosofía estratégica que se centra en mejorar el diseño
de los casos de prueba, y que llamó la atención generalizada de los
interesados en la gestión de proyectos y en la prueba del software.
Actualmente, la gestión de proyectos de software es una de las tareas
más importantes en la industria de las tecnologías de la información, y
más aún si el objetivo es desarrollar productos de calidad. En esa
gestión, la prueba es una de las fases más importantes, y en ésta, lo
que requiere más cuidado y dedicación es el diseño de los casos de
prueba, por lo que es necesario estudiar cómo diseñarlos y escribirlos
mejor. (Aristegui, 2010).
Desarrollo
Pruebas de Caja Blanca
Las pruebas de caja blanca (también conocidas como pruebas de caja de cristal o pruebas estructurales) se centran en los detalles procedimentales del software, por lo que su diseño está fuertemente ligado al código fuente. El testeador escoge distintos valores de entrada para examinar cada uno de los posibles flujos de ejecución del programa y cerciorarse de que se devuelven los valores de salida adecuados. Al estar basadas en una implementación concreta, si ésta se modifica, por regla general las pruebas también deberán rediseñarse.
Aunque las pruebas de caja blanca son aplicables a varios niveles —unidad, integración y sistema—, habitualmente se aplican a las unidades de software. Su cometido es comprobar los flujos de ejecución dentro de cada unidad (función, clase, módulo, etc.) pero también pueden testear los flujos entre unidades durante la integración, e incluso entre subsistemas, durante las pruebas de sistema. A pesar de que este enfoque permite diseñar pruebas que cubran una amplia variedad de casos de prueba, podría pasar por alto partes incompletas de la especificación o requisitos faltantes, pese a garantizar la prueba exhaustiva de todos los flujos de ejecución del código analizado.
Aunque las pruebas de caja blanca son aplicables a varios niveles —unidad, integración y sistema—, habitualmente se aplican a las unidades de software. Su cometido es comprobar los flujos de ejecución dentro de cada unidad (función, clase, módulo, etc.) pero también pueden testear los flujos entre unidades durante la integración, e incluso entre subsistemas, durante las pruebas de sistema. A pesar de que este enfoque permite diseñar pruebas que cubran una amplia variedad de casos de prueba, podría pasar por alto partes incompletas de la especificación o requisitos faltantes, pese a garantizar la prueba exhaustiva de todos los flujos de ejecución del código analizado.
Pruebas de Caja Negra
En teoría de sistemas y física, se denomina caja negra a aquel elemento que es estudiado desde el punto de vista de las entradas que recibe y las salidas o respuestas que produce, sin tener en cuenta su funcionamiento interno. En otras palabras, de una caja negra nos interesará su forma de interactuar con el medio que le rodea (en ocasiones, otros elementos que también podrían ser cajas negras) entendiendo qué es lo que hace, pero sin dar importancia a cómo lo hace. Por tanto, de una caja negra deben estar muy bien definidas sus entradas y salidas, es decir, su interfaz; en cambio, no se precisa definir ni conocer los detalles internos de su funcionamiento.
En programación modular, donde un programa (o un algoritmo) es dividido en módulos, en la fase de diseño se buscará que cada módulo sea una caja negra dentro del sistema global que es el programa que se pretende desarrollar, de esta manera se consigue una independencia entre los módulos que facilita su implementación separada por un equipo de trabajo donde cada miembro va a encargarse de implementar una parte (un módulo) del programa global; el implementador de un módulo concreto deberá conocer como es la comunicación con los otros módulos (la interfaz), pero no necesitará conocer como trabajan esos otros módulos internamente; en otras palabras, para el desarrollador de un módulo, idealmente, el resto de módulos serán cajas negras. En pruebas de software, conociendo una función específica para la que fue diseñado el producto, se pueden diseñar pruebas que demuestren que dicha función está bien realizada. Dichas pruebas son llevadas a cabo sobre la interfaz del software, es decir, de la función, actuando sobre ella como una caja negra, proporcionando unas entradas y estudiando las salidas para ver si concuerdan con las esperadas.
Diagramas
A continuación tomaré un diagrama de flujo ejemplificando un software, a partir de este construiré un grafo del cual obtendré todos los caminos posibles para el programa.
Diagrama de flujo
Diagrama de Nodos (Grafo)
Caminos
A continuación una lista de todos los caminos del programa, usando el número de proceso, en total encontré 11 caminos:
Caminos
A continuación una lista de todos los caminos del programa, usando el número de proceso, en total encontré 11 caminos:
- I,F
- I,1,2,F
- I,1,2,3,F
- I,1,3,F
- I,1,3,2,F
- I,2,F
- I,2,3,F
- I,3,F
- I,3,2,F
- I,4,5,F
- I,4,6,F
Conclusión
Al desarrollar cualquier tipo de software es muy importante esforzarse en realizar el diseño de pruebas de la mejor manera posible, ya que son estas nuestra principal herramienta para evitar posibles desastres y fallos en el software. Ser riguroso y trabajar en este aspecto puede prevenir que posteriormente se deba realizar un trabajo aún más extenso de corrección de errores.
Referencias
- Aristegui, José. Los casos de prueba en la prueba del software, Revista Digital Lámpsakos, No.3, pp. 27-34, Chile 2010.
- Williams, Laurie. White-Box Testing. 2006.
Suscribirse a:
Comentarios (Atom)






