Calidad Software
Calidad Software
Actualidad TIC
Artculos Tcnicos 13
organizan para desarrollar un proyecto. La infraestructura, por su parte, son las instalaciones, equipamiento, servidores, medios de comunicacin, de los que se dispone para el desarrollo de software. requisitos y otros contenidos del desarrollo (diseo, cdigo, manual de usuarios), y la gestin de cambios en los requisitos durante todo el proyecto. Una gestin insuficiente de requisitos es una de las causas ms frecuentes de que los proyectos se retrasen, sobrepasen sus presupuestos o tengan menos funcionalidad de la esperada. El xito en la gestin de requisitos depende del conocimiento y la aplicacin apropiada de diferentes fundamentos, por ejemplo, metodologas de anlisis de requisitos, modelos de representacin, prcticas de comunicacin, metodologa de gestin de cambios en los requisitos, tcnicas de verificacin y validacin de la completitud y correccin de los requisitos y de su consistencia con otros productos del software. Un gestin correcta y completa de requisitos debe permitir su uso como base para estimar, planificar, disear, implementar y verificar y validar el software.
2. Diseo
El Diseo es el proceso de definicin de la arquitectura del sistema, de las estructuras de datos y de los algoritmos a emplear, antes de realizar la construccin del software. Algunos fundamentos que garantizan diseos robustos son el conocimiento de estilos (estructurado, OO) y conceptos (modularidad, abstraccin) bsicos de diseo, algoritmos y estructuras de datos primarias, esquemas tpicos de arquitecturas, herramientas de diseo, entre otros. Los ciclos de vida modernos de software prestan especial atencin al diseo de arquitectura, cuya solucin suele ser una tarea prioritaria. Organizaciones preocupadas por la calidad de su proceso de software documentan soluciones genricas de diseo en funcin del dominio de aplicacin a resolver, e incluyen experiencias previas de la aplicacin de estas soluciones.
3. Implementacin
Cuando se llega a la implementacin dentro de un proceso correcto de software, la mayora del trabajo creativo ya ha sido realizado. En este sentido, la implementacin se considera una tarea de bajo nivel. Es decir, prcticas pobres de diseo pueden forzar la reescritura de gran parte del sistema, no siendo necesariamente as en el caso de usar prcticas pobres de codificacin. Sin embargo, estas malas prcticas pueden provocar errores sutiles cuya deteccin y correccin puede costar das o semanas. Por lo tanto, una organizacin que haga de la calidad una prioridad no debe desconocer ciertos fundamentos de construccin del software, por ejemplo, prcticas correctas y uniformes de codificacin, directrices para el uso de tipos de datos, reglas para empaquetar cdigo en mdulos, clases o ficheros, prcticas de testeo de unidad y de depuracin, estrategias de integracin, etc. La estandarizacin de las prcticas de implementacin de un software simplifican notablemente los esfuerzos de trabajo en grupo, en especial, aquellos orientados al mantenimiento del propio software o al reuso de cdigo en futuros proyectos por personas diferentes.
PROCESOS
En las secciones que siguen se hace una caracterizacin breve de cada proceso, haciendo nfasis en aquellos aspectos que definen la calidad del mismo, y que condicionan, en ltima instancia, la calidad global del ciclo de vida del software.
4. Mantenimiento
De acuerdo a IEEE 1219, el mantenimiento de software es el conjunto de actividades de modificacin de un producto de software despus de entregado, para corregir fallos, mejorar su rendimiento u otros atributos, o adaptar el producto a un entorno modificado. Una vez comienzan a operar con el sistema, los usuarios pueden encontrar errores y aspectos que quieran mejorar, los mantenedores
14
Actualidad TIC
1. Estimacin
El proceso de estimacin puede definirse a partir de tres pasos bsicos: primero, estimar el tamao del proyecto a partir de un anlisis preliminar de requisitos; luego estimar el esfuerzo total (en unidades de tiempo) que requiere el desarrollo de un proyecto de tal tamao; por ltimo, estimar el tiempo de desarrollo del proyecto en funcin del esfuerzo estimado y del personal con el que se cuente para su realizacin. La diferencia entre un procedimiento de calidad y otro improvisado es que el primero define metodologas para hacer estimaciones objetivas y contrastadas dando lugar a estimaciones precisas, mientras que en el segundo las estimaciones son resultados de anlisis subjetivos y no contrastados conduciendo a resultados vagos, casi siempre, muy optimistas.
realizan los cambios, despus de lo cual los usuarios vuelven a usarlos y a proporcionar nueva informacin de mejora. Este ciclo de mantenimiento extiende la vida del producto de software. En muchos casos, el mantenimiento es el proceso ms largo del ciclo de vida. El mantenimiento de software es difcil de realizar y gestionar. Sin embargo, este proceso se simplifica notablemente si los procesos primarios previos de ingeniera han sido correctamente realizados y documentados.
5. Verificacin y Validacin
Como proceso de validacin y de verificacin (V&V) se entiende cualquier actividad orientada a determinar si los objetivos se han cumplido o no. Ms especficamente: Verificacin comprueba la consistencia del software con respecto a especificaciones y requisitos; es decir, responde a se ha construido correctamente el software? Validacin comprueba si lo que se ha especificado (e implementado) es lo que el usuario realmente desea; es decir, responde a se ha construido el software correcto? Las tareas de V&V no solo se aplican a productos de software, sino tambin a otros productos resultantes del proceso del desarrollo. Las primeras tareas de V&V al anlisis y a la especificacin de requisitos, por ejemplo, comprobando que el proyecto es viable, que las especificaciones documentadas son completas, correctas, precisas, legibles, evaluables, y que, en general, responden a las expectativas del cliente. La V&V del diseo debe garantizar que los requisitos no estn incompletos o incorrectamente diseados. En el caso de la implementacin y codificacin, la V&V de software es comnmente conocida como testeo de software. Existen muchas definiciones incorrectas del testeo de software que conducen a una inadecuada aplicacin de este proceso, por ejemplo, el testeo demuestra que no hay errores, o el testeo demuestra que un programa funciona correctamente. Segn Edsgar Dijkstra el testeo puede demostrar la presencia de errores, no su ausencia. Por lo tanto, se realiza test al software para detectar errores que, una vez corregidos, mejoran la calidad o fiabilidad del mismo. Existen distintos tipos de testeo en funcin de la unidad de software a la que se aplique y del objetivo que se persigue, por ejemplo, el testeo de unidad, de integracin, de sistema y de aceptacin. Finalmente, las actividades de V&V son tambin necesarias durante la operacin y el mantenimiento del software. Cuando se realiza un cambio en el software, se debe examinar el impacto del cambio sobre el sistema y considerar qu actividades de V&V es necesario repetir para garantizar, al menos, la misma calidad en el software antes del cambio.
2. Gestin de Riesgos
Usualmente, cuando realizamos el anlisis de un proyecto, aparecen incertidumbres sobre su comprensin, sobre el mtodo de solucin, sobre las herramientas de solucin, entre otras. De no atender prioritariamente estos aspectos inciertos, conocidos formalmente como riesgos, se convertirn en fuentes potenciales de errores en nuestro proceso. Una de las lneas esenciales de la gestin moderna de software es la gestin dinmica de riesgos. Este proceso peridico consiste en identificar y analizar cada riesgo, estimar su probabilidad de ocurrencia y su posible impacto en el cronograma, y definir un plan de gestin del mismo, el cual es un grupo de acciones orientadas a prevenir el riesgo o a corregir sus consecuencias, en funcin del proceso que resulte menos costoso. Una gestin global incluye adems el mantenimiento de listas actualizadas de riesgos ordenados por peligrosidad, de forma que nos sea posible centrarnos en aquellas incertidumbres potencialmente ms destructivas. Un procedimiento de calidad para el desarrollo de software debe incluir una metodologa de gestin de riesgos, as como un registro de riesgos y errores frecuentes en la organizacin que ayuden a evitar omisiones importantes.
3. Planificacin
La planificacin consta de dos partes: la divisin del proyecto en tareas y la asignacin de recursos a tareas, es decir, ordenar las tareas en el tiempo, asignndoles recursos humanos y materiales para su realizacin. El tiempo asignado a una tarea depende de mltiples factores: tamao y complejidad de la tarea (productos de la estimacin), grado de conocimiento o de incertidumbre que tenemos sobre ella (anlisis de riesgos), y de la preparacin y experiencia del personal que debe realizarla. En proyectos con riesgos importantes, el tiempo de desarrollo no suele ser cerrado, sino en forma de rango dependiendo de los riesgos presentes. Su posible presentacin a clientes debe acompaarse de un documento que relacione incertidumbres con el rango. Estos proyectos deben ser peridicamente re-estimados y su planificacin refinada, tareas que deben ser tambin planificadas. Es recomendable dentro de un procedimiento de calidad la existencia de una metodologa con directrices para realizar planes de desarrollo, relacionada con las metodologas de elaboracin de estimaciones y de gestin de riesgos.
Artculos Tcnicos 15
4. Control y Seguimiento
Las actividades de control y seguimiento consisten en verificar que el progreso del proyecto se ajusta al plan y a los estndares, es decir, que se estn cumpliendo los plazos, costos, y los objetivos de calidad. En otras palabras, el control y seguimiento es un conjunto de actividades de validacin y verificacin del proceso de desarrollo. Idealmente, estas actividades deben aportar absoluta visibilidad del progreso del desarrollo. Algunas de estas actividades son revisiones y auditoras tcnicas, revisiones de hitos, reportes de estado, realizar mediciones (tiempo, presupuesto) y comparar con estimados, etc. Las tareas de control y seguimiento deben ser tambin planificadas. Sin ellas no es posible gestionar un proyecto ni sus riesgos, y no hay forma de saber si los planes se estn cumpliendo o no. Un control efectivo permite detectar anticipadamente problemas en el cronograma, cuando an hay tiempo suficiente para actuar sobre l.
5. Medicin de Estadsticos
Una de las claves del progreso a largo plazo de una organizacin de software es la medicin de datos para analizar la calidad del software y la productividad. Aparte de las tpicas mediciones sobre costos y tiempos en proyectos, recolectar datos histricos sobre cun largo es un programa (en lneas de cdigo) o un anlisis de requisitos (en nmero y complejidad de requisitos), nos crear bases objetivas para realizar futuras estimaciones en nuevos proyectos que suelen ser generalmente mejores que el instinto puro. Procesos ms sofisticados colectan mediciones sobre los cambios (errores, mejoras o nuevos requisitos) entre sucesivas versiones, por ejemplo, del documento de anlisis de requisitos o de cualquier producto de software. Estas mediciones sobre el nmero y naturaleza de los cambios permiten conocer ms objetivamente el nivel de estabilidad o madurez del producto objeto de medicin, el grado de flexibilidad ante cambios, entre otras caractersticas. El procedimiento de calidad de desarrollo de software de una organizacin, debe definir qu mediciones realizar, con qu objetivo y periodicidad, y cmo van a ser colectadas. Es usual disponer de un software que soporte la recoleccin automtica o semiautomtica de estas mediciones, y su uso de acuerdo a los fines para los que han sido definidas.
Costes
Costes de prevencin y deteccin Costes de fallos
Nivel de calidad
Figura 1: Relacin entre costes (Juran). usuarios, entre otros. La relacin entre estos costos es ilustrada por Juran en la Figura 1. Juran indica que el costo de las actividades de aseguramiento de la calidad necesarias para alcanzar niveles de calidad altos crece geomtricamente segn nos acercamos a la perfeccin. Perseguir la perfeccin, por tanto, no es rentable porque un pequeo incremento en calidad requerir una gran inversin. Las inversiones en aseguramiento de la calidad deben hacerse mientras el costo total de prevenir y detectar problemas sea menor que el costo de corregirlos.
1. Prcticas de prevencin
Los estndares son uno de los medios ms efectivos para garantizar la calidad del software. Prcticamente para cada producto a elaborar (manual de usuario, interfaz, cdigo, anlisis de requisitos, etc.) o proceso a realizar (anlisis de riesgos, diseo, planificacin, etc.) deben existir estndares o normas organizacionales que definan
16
Actualidad TIC
acortar el tiempo del proceso de desarrollo, y a incrementar la calidad del producto. Existen mltiples mtodos, y tcnicas que pueden ser usadas para determinar la efectividad de un proceso y para definir las correspondientes acciones de mejora. Estos modelos se dividen en dos estrategias principales: enfoque top-down, por ejemplo, CMMI, SPICE y BOOTSTRAP, que se basan fundamentalmente en evaluacin y en modelos, y enfoque bottom-up, por ejemplo, GQM, QIP y AMI, los cuales aplican fundamentalmente mediciones como guas bsicas de mejora. Los modelos de madurez de proceso de desarrollo de software, como los antes mencionados, no han tratado adecuadamente el proceso de testeo. Qu es exactamente un proceso maduro de testeo? Cmo se debe organizar y poner en marcha la mejora de un proceso de testeo? Cmo se debe incorporar a la organizacin de una empresa? Para responder a estas preguntas existen modelos especializados para medir la madurez y mejorar el proceso de testeo, por ejemplo, TIM (Test Improvement Model), TOM (Test Organisation Maturity Model), TPI (Test Process Improvement Model) y TMM (Testing Maturity Model).
directrices sobre cmo hacerlo. Los estndares tienen dos beneficios principales: i) evitan improvisaciones, olvidos y errores al definir qu hacer y cmo hacerlo y ii) proponen una manera uniforme de hacer que facilitan comparaciones entre proyectos y colaboraciones entre equipos de trabajo diferentes. Otro grupo de tcnicas orientado a prevenir errores y omisiones es el de mtodos formales, que hace referencia a una variedad de tcnicas de modelacin matemticas aplicables al diseo de sistemas informticos. Los mtodos formales pueden ser usados para especificar y modelar el comportamiento de un sistema y para verificar matemticamente que el diseo y la implementacin del sistema satisfacen sus especificaciones. Estas tcnicas pueden ser aplicadas prcticamente a todos los niveles del ciclo de vida del software, por ejemplo, un lenguaje de especificaciones formales para escribir requisitos (VDM, OCL), proceso de transformacin de requisitos en cdigo ejecutable que garantice que el cdigo satisface las propiedades especificadas, probar las propiedades de las especificaciones a travs de tcnicas automticas como verificacin de modelos y prueba de teoremas, formalismos para derivar casos de pruebas a partir de las especificaciones de software, entre otras. Los mtodos formales no son una estrategia de todo o nada. Aplicar mtodos formales solo a las partes ms crticas de un sistema es una estrategia til y muy efectiva. La verificacin formal completa debe aplicarse nicamente en sistemas crticos que requieran la mxima fiabilidad.
Autores: Ramn Mollineda, Tanja Vos Para ms informacin sobre Calidad y Testing: [email protected]