Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Calidad Del Software
Calidad Del Software
CONSULTORES EDITORIALES:
SEBASTIN DORMIDO BENCOMO Departamento de Informtica y Automtica UNIVERSIDAD NACIONAL DE EDUCACI~NISTANCIA AD LUIS JOYANES AGUILAR Departamento de Lenguajes, Sistemas Informticos e Ingeniera del Software UNIVERSIDAD PONTIFICIA DE SALAMANCA en Madrid
Traduccin: Javier Zapata Martnez Universidad de Murcia Coordinador de la traduccin: Jess Garca Molina Universidad de Murcia Revisin Tcnica: Jos Antonio Cerrada Somolinos Universidad Nacional de Educacin a Distancia
Madrid Mxico Santaf de Bogot Buenos Aires Caracas Lima Montevideo San Juan San Jos Santiago Sao Paulo Reading, Massachussetts Harlow, England
Humphrey W S. . Introduccin al Pmmo Sofiware PersonalSM PEARSON EDUCACIN, S.A., Madrid, 2001
ISBN 84-7829-052-4
Materia: Informtica: 681.3 Formato: 170 x 240 Pginas: 328
Watts. S. Humphrey
No est permitida la reproduccin total o parcial de esta obra ni su tratamiento o transmisin por cualquier medio o mtodo sin autorizacin escrita de la Editorial. DERECHOS RESERVADOS O 2001 respecto a la pqmera edicin en espaol por: PEARSON EDUCACION, S.A. Nez de Balboa, 120 28006 Madrid
Contenido
xv
XIX
XXI
f
1 2 2 3 4
4 5
6
7
8 8
2
2.1 2.2 2.3
9
9 11 12
Vlll
CONTENIDO
2.4 El diseo del cuaderno .................................................................... 2.5 Ejemplos de cuadernos de ingeniera .............................................. Resumen ..................................................................................................... Ejercicio 2 ...................................................................................................
12 14 16 16
17
17 18 19 20 22 24 25 25 27 27
29
29 31 33 35 38 41 41
43
43 44 45 45 46 46 46 49 54 55 55
IX
6
6.1 6.2 6.3
57
57 58 58 59 62 62 64 65 69 71
73
13 74 74 74 75 77 77 79
82 84 85 85 86
87
87 89 90 91 92 93 94 95 96 96
CONTENIDO
99
99 100 101 103 105 108 112 112 112
3
113 114 116 117 120 122 122 122 123
125
125 126 127 129 130 132 135 138 138 139
Defectos
12.1 Qu es la calidad del software? ..................................................... 12.2 Defectos y calidad ........................................................................... 12.3 Qu son los defectos? ....................................................................
4
141 142 143
XI
12.4 Defectos versus bugs ....................................................................... 12.5 Tipos de defectos ............................................................................. 12.6 La comprensin de los defectos ...................................................... 12.7 El cuaderno de registro de defectos ................................................ 12.8 La contabilizacin de los defectos .................................................. 12.9 La utilizacin del cuaderno de registro de defectos ........................ 12.10 El proceso del PSP actualizado ....................................................... Resumen ..................................................................................................... Ejercicio 12................................................................................................. Referencias .................................................................................................
144 146 147 148 153 154 155 159 161 161
3
13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 13.10
Encontrar defectos
Un compromiso personal con la calidad ......................................... Los pasos para encontrar defectos .................................................. Formas de encontrar y corregir defectos ......................................... La revisin del cdigo ..................................................................... Por qu hay que encontrar pronto los defectos ? ........................... El coste de encontrar y corregir defectos ........................................ El uso de las revisiones para encontrar defectos ............................. Revisar antes de compilar ............................................................... Datos sobre defectos de compilacin y pruebas ............................. Actualizacin de la tabla Resumen del Plan del Proyecto del PSP ............................................................................................ 13.11 Otras clases de revisiones ................................................................ Resumen ................ .r ................................................................................... Ejercicio 13................................................................................................ Referencias .................................................................................................
63
163 163 164 166 167 167 169 170 172 174 174 178 180 180
83
183 184 187 188 194 196 197 200
XII
CONTENIDO
15
15.1 15.2 15.3 15.4 15.5 15.6
La previsin de defectos
El porcentaje de defectos ................................................................ La utilizacin de los datos de defectos............................................ Densidad de defectos ...................................................................... Cmo estimar las tasas de defectos ..............: .................................. Estimacin de defectos.................................................................... Actualizacin y ejemplo de la tabla Resumen del Plan del Proyecto ..................................................................................... 15.7 La anotacin de los datos reales ...................................................... Resumen ..................................................................................................... Ejercicio 15................................................................................................. Referencia ...................................................................................................
201
201 203 204 204 205 207 212 214 215 215
16
16.1 16.2 16.3 16.4 16.5 16.6
21 7
217 218 219 219 221 223 225 229 230 231 232 232
$7
Defectos de diseo
17.1 La naturaleza de los defectos de diseo .......................................... 17.2 Identificacin de los defectos de diseo.......................................... 17.3 Qu es disear? .............................................................................. 17.4 El proceso de diseo ....................................................................... 17.5 Las causas de los defectos del diseo ............................................. 17.6 El impacto de los defectos de diseo .............................................. 17.7 Representacin del diseo ............................................................... Resumen ..................................................................................................... Ejercicio 17................................................................................................. Referencias .................................................................................................
233
233 235 235 236 237 238 239 244 245 246
Xlll
18
247
247 248 249 251 251 254 256 257 258 258 259 259
19
261
261 262 263 264 265 267 273 275 276 277
20
279
279 280 282 282 283 284
285
293
Nosotros utilizamos un borrador de este libro para ensear los principios de los procesos en el primer curso del programa de Informtica, en la Universidad Aeronutica de Embry-Riddle. El libro proporciona un subconjunto de los elementos y actividades del Proceso Software Personal (PSP)SM,acrnimo de Personal Software Process, que un estudiante de primer ao puede fcilmente asimilar junto con los temas ms tradicionales del primer ao de programacin. Este libro tambin proporciona la motivacin y una estructura para introducir a los estudiantes en prcticas personales disciplinadas. Hemos disfrutado utilizando este libro y comprobado cmo ayuda a nuestros estudiantes, para llegar a ser profesionales competentes del software. Durante aos, hemos estado intentando proporcionar a nuestros estudiantes experiencias reales de ingeniera del software. Hemos tenido un xito moderado con la introduccin de la teora y prctica de la ingeniera del software al principio del currculum, y aadiendo proyectos en equipo en cursos superiores. Desafortunadamente, hemos encontrado que cuando los estudiantes trabajan en estos proyectos, no entienden la gestin del tiempo, la planificacin y la gestin de la calidad. La industria encontr que la capacidad de los equipos de ingeniera para desarrollar productos software de calidad de una forma eficiente y eficaz, dependa en gran parte de la capacidad individual de los ingenieros. Reflexionando sobre ello, los problemas de los estudiantes con la gestin del tiempo y de la calidad no nos sorprendieron ya que no se les haba dado cursos sobre cmo planificar y gestionar su trabajo. Decidimos intentar introducir los conceptos sobre procesos al comienzo del plan de estudios universitarios.
SM Personal Software Process y PSP son marcas registradas de la Universidad de Camegie Mellon.
XVI
Observamos que los estudiantes de primer curso podan aprender mejor y beneficiarse ms directamente de las prcticas de gestin del tiempo, por ello comenzamos introduciendo del Captulo 1 al Captulo 10 de este libro asignaturas del CS1. Aunque todos los estudiantes que accedieron a nuestros cursos del CS 1 tenan alguna experiencia en programacin, no estaban an preparados para un proceso de desarrollo de software formalmente definido. Necesitaban enfrentarse antes a los problemas de desarrollo de software para que pudieran comprender los papeles y prcticas de los ingenieros de software. Despus de finalizar el CS1 y completar su primer semestre, los estudiantes estaban preparados para desarrollar programas de una forma ms disciplinada. Entonces introdujimos el proceso PSP en el CS22, utilizando el material de los Captulos 11 al 20. Aqu, el estudiante planific cada uno de sus proyectos de programacin. Siguiendo las prcticas definidas en el PSP, utilizaron sus propios datos histricos para estimar el tamao, el esfuerzo y la calidad (estimacin de defectos). Tambin reunieron y registraron los datos reales de cada proyecto en una tabla resumen. Despus de un ao de experiencia, hemos encontrado que el enfoque de introducir las actividades de los procesos en los primeros cursos de CS, permite trabajar a los estudiantes. Con permite trabajar queremos decir que los estudiantes pueden aprender cmo utilizar los procesos tratados en este libro. Con el tiempo ven el valor de registrar los datos de esfuerzo, tamao y calidad, y pueden utilizar estos datos en la planificacin de proyectos y analizar su efectividad personal. La recogida de datos de su propio trabajo les da unas bases cuantitativas para la estimacin. Regularmente realizan revisiones estructuradas y aprenden las fases de desarrollo definidas en su trabajo (por ejemplo, planificacin, diseo, codificacin, compilacin, pruebas y postmortem). Tambin observamos que el retraso en la introduccin del PSP para otro semestre ( o ao) llevara consigo que los alumnos adquiriesen prcticas de programacin descuidadas e indisciplinadas bien arraigadas y seran ms resistentes u1 cambio. El PSP ha ayudado a los estudiantes a entender la importancia de un enfoque disciplinado al desarrollo del software. Tambin proporciona un fundamento ms riguroso para la posterior introduccin de cuestiones ms avanzadas de tipo individual y de equipo. La mayor parte de los datos de los estudiantes son exactos, pero hay que ser cuidadoso al analizar y rechazar los datos sospechosos. Desafortunadamente, los estudiantes no
Asignatura de programacin del primer semestre del primer curso en los currcula USA (N. del T.). Asignatura de programacin del segundo semestre del primer curso en los currcula USA (N. del T.).
XVll
mejoraron en la planificacin de su trabajo. Muchos aplazaron sus ejercicios hasta que no tuviesen los datos adecuados: problema perpetuo en los inicios de los programadores.
No fue sorprendente descubrir que el xito de la tcnica del PSP dependa en gran medida de nuestra capacidad para motivar a los estudiantes a aprender y practicar estos conceptos. Utilizamos las ideas y argumentos de este libro para animar a tener una visin positiva de los mtodos del proceso. Observamos, que facilitando la retroalimentacin en la clasificacin y anlisis de los datos, se estimulaba a los estudiantes a interesarse en mayor medida por sus datos personales. Tambin fue til invitar a los profesionales de la industria a discutir en clase sus experiencias en los procesos.
Hubo algunos problemas al comenzar la enseanza en los nuevos cursos. Inicialmente, no tenamos suficientemente integradas las materias del PSP con el resto de materias de CS I y CS2. Los estudiantes tuvieron problemas al relacionar las actividades de gestin del tiempo con sus trabajos de programacin. Nosotros tambin fallamos en proporcionarle suficiente retroalimentacin en los datos acumulados de las clases. Un efecto interesante y beneficioso del PSP fue la gran cantidad de datos suministrados al profesor. En el CS 1 hacemos resmenes semanales de actividades sobre como los estudiantes gastan su tiempo en el curso. En el CS2 hacemos un resumen del PSP sobre cada proyecto de programacin y obtenemos datos de tamao, esfuerzo y defectos. A menudo estos datos provocan discusiones sobre los mtodos enseados en el curso y cmo afectan a la productividad del programador y a la calidad del programa. El PSP proporciona una base cuantitativa para el anlisis y discusin de dichas cuestiones. Continuamos enseando el PSP a los estudiantes del primer ao de nuestro programa. Tambin requerimos a los estudiantes que han completado el CSl y el CS2 a que utilicen el PSP en los cursos de algoritmos y estructuras de datos que siguen al CS2. Creemos que estarn mejor preparados para trabajar en equipos de proyectos complejos en su futuro profesional. Tambin pretendemos orientar a los estudiantes a extender y mejorar el PSP en cursos posteriores. Hemos encontrado este libro t i l para introducir a nuestros estudiantes en la disciplina del software profesional y esperamos que otros estudiantes y profesores que utilicen este libro tengan experiencias similares a la nuestra. Thomas B. Hilburn, Aboalfazl Salimi, Massood Towhidnejad Universidud Aeronuticu de Enzbry-Riddle
Despus de acabar el curso del PSP en el primer ao, los profesores de la facultad de la Universidad Aeronutica de Embry-Riddle nos preguntaron si nos gustara colaborar en la redaccin del prlogo del libro de texto. Nosotros aceptamos. Puesto que no sabamos cmo escribir un prlogo, nos sugirieron que sencillamente respondisemos a algunas preguntas. He aqu las preguntas y las respuestas:
1. Qu tipo de tareas hicisteis en el curso del PSP?
Registramos todo el tiempo que dedicbamos a los ejercicios de programacin y a los proyectos. Haba mucha documentacin. Tambin registramos el tamao del programa y los defectos cometidos, y utilizamos los datos recogidos para estimar el tiempo, el tamao y los defectos de futuros proyectos.
2. Cmo hicisteis el trabajo? Cmo adaptasteis este material a los materiales de los otros cursos?
Lo adaptamos bien al trabajo del curso, y disponiendo de una estimacin nos ayud a coger confianza en lo que estbamos haciendo.
Al principio, parece que el trabajo del PSP es un obstculo a los otros trabajos del curso, pero una vez que llegas al final del curso, te das cuenta de que estas actividades realmente te ayudan a completar tu trabajo. Al avanzar el curso te preguntas: "por qu estoy haciendo esto?', pero ms tarde comienzas a ver que disponer de una estimacin de lo que ests haciendo te ayuda realmente a completar el programa.
Es muy importante no amaar los datos (tiempos) porque entonces no te sern tan tiles. 3. Qu aprendisteis?
Adems de lo que ya hemos dicho, aprendes cmo puedes utilizar tu tiempo ms eficientemente y a trabajar antes de utilizar el computador. Terminas haciendo mucho trabajo sobre papel antes de utilizar el ordenador. Aprendes sobre tus errores y sobre los de otras personas (por medio de ejemplos y discusiones). Tambin te ayuda a organizar tu programacin (puesto que haces el trabajo en papel antes de utilizar el computador). El PSP tambin se puede utilizar en otras actividades (no solamente en el desarrollo del software), aunque es necesario modificar las tablas.
4. Qu recomendarais a otros estudiantes que van a utilizar el PSP en el futuro?
Hacerlo bien. No amaar los datos. Seguir las instrucciones. Intentar entender el marco de referencia y sus conceptos. No permitir que el papel les coma, los liquidar. Ben Bishop, Andrew Henderson, Michael Patrick Universidad Aeronutica de Embry-Riddle
Prlogo
Si ests estudiando para ser un ingeniero de software, este libro est diseado para ti. Describe los mtodos que muchos ingenieros de software experimentados utilizan para hacer un trabajo competente, y proporciona ejercicios para ayudarte a aprender estos mtodos. Cada captulo describe un tema sencillo que ser practicado cuando hagas los ejercicios. Los ejemplos de cada ejercicio te ayudarn a comprobar tu trabajo.
XXll
PRLOGO
ingenieros tienen una gran variedad de habilidades y talentos. Para tener una carrera satisfactoria y til, necesitas conocer tus destrezas y habilidades, y sacar partido de tus talentos en el trabajo que haces. El PSP te ayudar a hacer esto.
XXM
en una clase o con un grupo de colaboradores con quien puedas intercambiar experiencias y compartir ideas. En cualquier caso, planifica dedicar entre una o dos horas cada semana a estudiar el libro de texto, registrar y analizar tus datos del PSP, y adaptar los mtodos a tu trabajo. Aunque el tiempo que necesitas para aprender el PSP depender de tus hbitos actuales y de tus prcticas, una vez que hayas terminado esta materia, tendrs una base slida para continuar desarrollndote profesionalmente. Observa, sin embargo, que la clave para aprender el PSP es examinar y pensar sobre los datos de tu trabajo y lo que estos datos te indican sobre tu rendimiento personal.
Tal y como se organizan las asignaturas en la Universidad espaola, el autor se refiere a una asignatura anual, organizada en dos cuatrimestres, en vez de dos semestres (N. del T.). El PSP y el curso del PSP estn descritos con ms detalle en mi libro de texto A Discipline f o r Software Engineering (Reading, MA: Addison-Wesley, 1995). El libro de texto lleva materiales que incluyen una gua para el profesor y un disquete con transparencias para clase, as como ejercicios.
'
xxtv
PRLOGO
Conforme los estudiantes son conducidos a travs del material de este libro y completan sus ejercicios, aprendern a controlar y monitorizar su trabajo, gestionar su tiempo y hacer planes. En el segundo semestre, aprendern sobre la calidad de los programas, las formas de hacer revisiones y a utilizar varias medidas de calidad y mtodos de gestin. Aprendern sobre los defectos, sus causas y la responsabilidad personal del ingeniero en la calidad de los productos que hacen. Al final del segundo semestre del curso, los estudiantes habrn aprendido los principios bsicos del PSP. A partir de estos principios bsicos y aumentando la experiencia con estos mtodos, se debera requerir a los estudiantes que en cursos posteriores continuasen utilizando el PSP.
xxv
AGRADECIMIENTOS
Al escribir este libro estoy especialmente agradecido a la Facultad de Informtica de la Universidad Aeronutica de Embry-Riddle. Ellos me animaron a desarrollar este libro y me revisaron amablemente el manuscrito. Puesto que haban impartido varios cursos y utilizado ellos mismos los mtodos del PSP, hicieron muchas sugerencias tiles. Por su apoyo y nimo, les doy particularmente las gracias a los profesores Tom Hilburn, Iraj Hirmanpour, Aboalfazl Salimi, Davie Srachet, y Massood Towhidnejad. Tambin doy las gracias a sus tres estudiantes, Ben Bishop, Guillermo Jos Hernndez y Richard Rickert, por compartir sus datos del curso y las experiencias de clase conmigo. Adems, agradezco a Ben Bishop, Andrew Henderson y Michael Patrick su amable descripcin de sus experiencias con este material en el prlogo de los estudiantes. Varios amigos y compaeros del SE1 y de otros centros han revisado amablemente el manuscrito y me han indicado sugerencias y comentarios tiles. Estoy agradecido a Steve Burke, Howie Dow, John Eikenberry, Andy Huber, Julia Mullaney, Glenn Rosander, Marie Silverthorn, y Bob Stoddard. Mi secretaria Marlene MacDonald ha sido de gran ayuda en la lectura y comentario de las partes de este manuscrito, y en la distribucin y revisin del mismo. Doy las gracias a Peter Gordon, Helen Goldstein, y a la direccin de Addison-Wesley por su apoyo en la impresin de este libro. Finalmente, he sido bendecido por una esposa maravillosa. Brbara me ha proporcionado ayuda y estmulo como en los otros libros. Como en las otras obras, ha ledo el manuscrito final antes de enviarlo a su publicacin. A pesar de toda su ayuda y apoyo, estoy seguro de que ni Brbara ni mis muchos colaboradores habrn encontrado todas mis equivocaciones y errores. Los errores que permanecen son completamente mos.
Watts S. Humphrey
Surusota, Florida
Adems de describir el trabajo del ingeniero de software y algunas de sus actividades principales, este captulo tambin da una visin de la estrategia de este libro para ayudarte a desarrollar y mejorar tu formacin en ingeniera del software. El captulo termina con un ejercicio que consiste en especificar las tareas ms importantes que realizars a lo largo del tiempo que trabajes con este libro.
1.1
1. Planificar su trabajo. 2 Hacer su trabajo de acuerdo con el plan. . 3. Esforzarse en producir productos de mxima calidad.
El principal objetivo de este libro es mostrarte cmo hacerlo.
1.2
1.3
El PSP tambin es efectivo en la industria del software. En un caso, antes de aprender el PSP, un grupo de ingenieros necesit, en promedio, unas cinco veces ms de lo que haban estimado para desarrollar tres componentes de un sistema software. Despus del entrenamiento con el PSP, los mismos ingenieros terminaron los seis siguientes componentes del mismo producto en un 10,4%menos del tiempo que haban planificado. Cuando midieron los defectos encontrados por los clientes, la calidad de los componentes terminados despus del curso del PSP fue cinco veces mejor que la calidad de los primeros componentes programados. Cada captulo de este libro, introduce un mtodo del PSP que t deberas aplicar posteriormente en tu trabajo. Utilizndolo, vers cmo funciona el mtodo y adquieres prctica en su aplicacin. Supone un considerable esfuerzo y perseverancia aplicar el mtodo del PSP de una forma consistente, pero esa, es la nica forma de aprenderlo. Las clases del curso y el libro de texto son importantes, pero el principal medio de aprendizaje son los datos que renas en tu propio trabajo conforme completas cada ejercicio del PSP. Es importante tener estos datos para que puedas ver posteriormente cmo has mejorado tu rendimiento con el PSP.
1.4
ingenieros sin entrenamiento en el PSP deben aprender las habilidades que necesitan en el trabajo. Esto no solo es costoso y consume tiempo, sino que aumenta el riesgo.
1.5
1.6
que haca eran: cargar, posicionarme, localizar, apuntar y disparar. El objetivo del instructor era descubrir qu pasos eran la fuente de mi problema. l rpidamente se centr en el objetivo y sugiri que yo tena que hacer cambios. Finalmente, y ms importante, vino el cambio mismo. El proceso de mejora es difcil porque las personas son reacias a intentar cosas nuevas. Sus hbitos parecen tan naturales que pueden pensar que el cambio no les ayudar. Yo siempre haba sido diestro y nunca pens disparar con la izquierda. Una vez que hice el cambio sugerido, mis puntuaciones mejoraron. Definir medidas no es siempre fcil, pero al menos no es imposible. Este libro define varias medidas para el proceso software. Una vez que has definido las medidas para tu trabajo, debes reunir y analizar los datos. Si necesitas mejorar, a continuacin analizas el proceso para ver dnde tienes que hacer cambios. Finalmente, para mejorar, debes cambiar lo que haces normalmente. Si no hubiese cambiado mi proceso, poda haber estado intentndolo durante aos sin mejorar como tirador. Las medidas, por si solas no producirn mejora aunque se repitan frecuentemente una y otra vez. Si continas trabajando como siempre lo has hecho, continuars produciendo los mismos resultados de siempre.
1.7
EL PROCESO DE MEJORA
Los pasos necesarios para cambiar la forma de tu trabajo son los mismos que los pasos que segu para aprender a disparar. No son complicados. El proceso de mejora se muestra en la Figura 1.1. Definir el objetivo de calidad. Obviamente, mi objetivo era darle a la diana el mayor nmero de veces posible, el 100% era el objetivo final. Medir la calidad del producto. El instructor y yo podamos ver que mis puntuaciones eran malas y algo haba que hacer. Entender el proceso. El instructor observ qu haca yo para ver qu es lo que deba de cambiar. Ajustar el proceso. l sugiri que tena que disparar con la mano izquierda. Utilizar el proceso ajustado. A continuacin, dispar varias veces, pero esta vez con la izquierda. Medir los resultados. Contamos el nmero de aciertos y fallos.
Ajustar
Comparamos los resultados con el objetivo. A partir de esos datos, pudimos ver que mis puntuaciones mejoraron bastante. Realimentar y mejorar continuamente. Puesto que aprender a disparar un fusil era sencillo, el proceso de mejora continua no fue necesario. Con procesos ms complejos, generalmente se requieren varios ciclos. Con un proceso sofisticado como el desarrollo del software, los ciclos de mejora no deberan terminar nunca.
1.8
en algn orden. Esto es un poco como ensear a alguien a aprender a nadar. Puedes hablar sobre la respiracin, los movimientos de piernas, la flotacin y los movimientos de brazos como actividades individuales, pero tienes que hacerlas todas a la vez para nadar. Generalmente ensears primero la respiracin, pero el orden en el cual expliques el resto de cosas no lo hace muy diferente. Debes, sin embargo, cubrir todos los aspectos. En cualquier caso, hasta que no los hagas todos juntos, no puedes nadar. Con este libro, somos ms afortunados. Muchos de estos mtodos pueden ser utilizados independientemente y te ayudarn de alguna forma. Dichos mtodos, sin embargo, se refuerzan unos a otros. Por lo tanto, hasta que no los utilices todos, no conseguirs un beneficio global del proceso disciplinado de la ingeniera del software. De la misma forma que debes primero aprender a respirar en el agua antes de poder nadar, en la ingeniera del software disciplinada debes comenzar por reunir datos. El objetivo de este libro es introducirte en los pasos del proceso de mejora que se muestran en la Figura 1.1. Puesto que el orden no es crtico, he decidido presentar este material en dos partes. Los 10 primeros captulos del libro tratan de la planificacin y gestin del tiempo: procesos de planificacin. Los 10 ltimos captulos tratan de la calidad del producto: proceso de gestin de defectos. Es importante tratar primero el proceso de planificacin porque proporciona una base slida para el proceso de gestin de defectos.
RESUMEN
Los ingenieros del software deberan planificar su trabajo, y actuar de acuerdo con dicho plan. El resultado sern productos de alta calidad ajustados a un presupuesto y unos plazos. El Proceso Software Personal (PSP) es un marco de trabajo diseado para ensear a los ingenieros del software a hacer mejor su trabajo. Muestra cmo estimar y planificar,tu trabajo, cmo controlar tu rendimiento frente a esos planes y cmo mejorar la calidad de los programas que produces.
Los mtodos de calidad lleva tiempo aprenderlos y practicarlos, pero te ayudarn durante tu carrera como ingeniero. Para mejorar consistentemente la calidad de tu trabajo, debes establecer objetivos, medir la calidad del producto, entender el proceso, cambiar y reutilizar el proceso, medir y analizar los resultados y finalmente realimentar y mejorar continuamente.
La estrategia de este libro es mostrarte cmo organizar y planificar tu trabajo, y cmo gestionar la calidad de los programas que produces. El primer paso para entender tu proceso es identificar las tareas que haces, estimar cunto tiempo necesitar cada tarea, y medir el tiempo gastado.
EJERCICIO 1
El primer paso para entender tu proceso es identificar las tareas que haces. Por ejemplo, como estudiante, asistirs a clase, escribirs programas, leers libros de texto y hars varios trabajos en casa. En algn momento, necesitars estudiar para los exmenes. Parte del trabajo de casa consistir en escribir programas. Una forma de describir estas tareas podra ser la que se muestra en la Tabla 1.1. Aqu, el Estudiante X espera dedicar unos 1200 minutos a sus tareas semanales y otros 300 minutos una vez al semestre a estudiar exmenes. Esto da un total de 20 horas cada semana y otras 5 horas para estudiar los exmenes.
Tarea
Asistir a clase Leer libros de texto Trabajo en casa Escribir programas Preparar exmenes Revisar apuntes
Frecuencia
L, M,V Semanal Semanal Semanal Una vez al semestre Durante el trabajo de casa, estudiar
Tiempo (minutos)
180semana 100semana 420semana 420semana 300lsemestre Incluido en otros tiempos
En este ejercicio, debes definir tus principales actividades para este curso y escribirlas en un formato como el indicado en la Tabla 1.1. Despus de hacer esta lista, estima la frecuencia de dichas tareas y cunto tiempo le dedicars a cada una. Para todas las tareas semanales, estima el tiempo que utilizars cada semana, y para las tareas mensuales o semestrales, estima los tiempos mensuales o semestrales. Este ejercicio no requiere que midas esos tiempos. Una estimacin es suficiente. Haz y guarda una copia de esta lista antes de hacer tu trabajo de casa. Asegrate de poner tu nombre y la fecha.
REFERENCIA
[Leveson] Leveson, Nancy G. Safeware, System Safety and Computers. Reading, MA: Addison-Wesley, 1995.
CAPITULO 2
Este captulo muestra cmo gestionar tu tiempo y por qu es importante hacerlo. Tambin describe cmo y por qu utilizar un cuaderno de ingeniera. Como ejercicio del captulo hars un cuaderno de notas de ingeniera para utilizarlo en tu trabajo.
2.1
10
dicamos a cosas que parecen que transcurren rpidamente, porque nos agrada hacer dichas cosas. Por el contrario, en las actividades lentas, aburridas o difciles parece que se dedica ms tiempo del que realmente se consume. Por lo tanto, para saber cmo utilizar tu tiempo, necesitas tener registros exactos del mismo.
Para comprobar la exactitud de tus estimaciones de tiempo y planes, debes documentarlas y posteriormente compararlas con la que realmente haces. Mientras esto no es un problema serio en las universidades, es de importancia crtica para el trabajo de los ingenieros. La planificacin es una habilidad que pocas personas han aprendido. Hay, sin embargo, mtodos de planificacin conocidos que se pueden aprender y practicar. El primer paso para aprender a hacer buenos planes, es hacer planes. As que, escribe tu plan para que posteriormente tengas algo con lo que puedas comparar tus datos actuales. Para hacer ms precisos tus planes, determina las equivocaciones de los planes anteriores, y qu podras haber hecho para mejoral: Cuando hagas el trabajo planificado, registra el tiempo que utilizas. Esos datos del tiempo sern tiles si se anotan con un poco de detalle. Por ejemplo, cuando ests haciendo el trabajo del curso, registra por separado el tiempo que dedicas a asistir a clase, leer libros de texto, escribir programas y estudiar para los exmenes. Cuando codifiques grandes programas, de igual forma encontrars til registrar los tiempos para las distintas partes del trabajo: diseo del programa, escritura del cdigo, compilacin y pruebas. Aunque dicho grado de detalle no es necesario para programas muy cortos, puede ser til cuando trabajes en proyectos que necesiten varias horas o ms.
Cuando tengas la copia documentada de tu plan y hayas registrado a qu has dedicado tu tiempo, puedes comparar fcilmente los resultados reales con el plan original. Vers donde estaba equivocado el plan y como tu proceso de planificacin puede ser mejorado. La clave para planificar con exactitud es hacer planes consistentes y compararlos con los resultados reales posteriores. Entonces vers como puedes hacer planes mejores.
Para gestionar tu tiempo, planijica tu tiempo y sigue el plan. Determinar qu podras hacer para producir mejores planes es la parte ms fcil. Llevarlo a cabo es lo realmente difcil. El mundo est lleno de resoluciones que nunca se cumplen, como seguir una dieta o dejar de fumar.
Al principio, cumplir un plan es probablemente difcil. Hay muchas razones posibles, pero la ms comn es que el plan no era muy bueno. Hasta que no intentes seguirlo, probablemente no sabrs porque. Trabajando con el plan, consigues el primero de dos beneficios: saber dnde estaba equivocado el plan, lo cual te ayudar a mejorarlo en el prximo proyecto. El segundo beneficio de trabajar con el plan es que hars el trabajo de la forma que lo has planificado. Puede que esto no parezca muy importan-
11
te, pero lo es. Muchos de los problemas en la ingeniera del software son causados por atajos irreflexivos, descuidos y distracciones en los detalles. En muchos casos, los propios mtodos eran conocidos y especificados pero no se seguan. Aprender a establecer planes tiles es importante, pero aprender a seguir dichos planes es absolutamente crucial. Otro beneficio ms sutil de trabajar de acuerdo a un plan es que cambias tu comportamiento actual. Con un plan, es menos probable que derroches tiempo en decidir qu hars despus. El plan tambin te ayuda a centrarte en lo que ests haciendo. Es menos probable que te distraigas y es ms fcil ser eficiente.
2.2
12
2.3
EL CUADERNO DE INGENIERIA
En este curso, utilizars un cuaderno de ingeniera para controlar el tiempo. Lo utilizars tambin para otras cosas, tales como, guardar los ejercicios, controlar compromisos, tomar notas de clase y como un cuaderno de trabajo para anotar ideas de diseo y clculos. Como un profesional del software, le dars mltiples usos al cuaderno de ingeniera tales como: registrar los tiempos, guardar los clculos y tomar notas de diseo. Podrs utilizarlo como una evidencia de lo que haces en la prctica de la ingeniera, evidencia importante para la defensa de tu empresa, si es que tienes que defender la responsabilidad legal de un producto. Cuando las partes perjudicadas demandan a la compaa, su principal objetivo es demostrar que los suministradores fueron negligentes. Para la compaa, la mejor defensa es la evidencia de que los ingenieros siguieron las practicas de ingeniera. Por esta razn tener un cuaderno de ingeniera es un buen hbito. Una utilizacin adicional del cuaderno de ingeniera es la proteccin de los activos intelectuales de los empleados, por ejemplo, registrando ideas que se puedan patentar. Una vez, en una reunin de diseo, entre mis colegas y yo ideamos algo que se poda considerar como una idea a patentar. Escribimos la idea en mi cuaderno de ingeniera y todos firmamos cada pgina. El asesor de patentes nos dijo que esto podra ser til para establecer la fecha del invento. La compaa tambin nos dio a cada uno de nosotros un premio en metlico. Aunque probablemente estas ideas no te interesen como estudiante, este curso trata sobre cmo aprender los mtodos y establecer los hbitos que necesitars en la prctica como ingeniero. Por ello, deberas disponer a partir de ahora de tu propio cuaderno de ingeniera y crearte el hbito de utilizarlo.
2.4
13
Jane Doe
id@d b.xvz.edu
Fecha de apertura
9/9/96
Fecha de cierre
numeracin de los cuadernos es conveniente para almacenarlos en orden cronolgico. Tambin, etiqueta cada cuaderno con tu nombre y nmero de telfono o direccin de correo electrnico. Escribe la fecha de inicio de introduccin de datos en el cuaderno, y cuando lo hayas terminado escribe la fecha del ltimo registro. Dentro del cuaderno, numera cada pgina, utiliza las dos primeras pginas para una breve tabla de contenidos. En los contenidos, escribe cualquier referencia especial para que puedas encontrarla posteriormente, por ejemplo: ejercicios del curso. Esto te evitar que tengas que buscar por to-
14
do el cuaderno. No es necesario registrar los contenidos por pginas si no esperas referenciarlos en el futuro.
2.5
Tema
Ejercicios IP Notas IK temas 1,2,3,4 Notas de diseo, primer programa Llamadas telefnicas, etc. Notas iP (cont.), tema 4, Ejercicios IP (continuacin)
Fechas
9-1619 9-1319 11 19 11 19 13-19 23-19
8 9
10
l1
15
cripcin del tema. Por ejemplo, el estudiante registra en la pgina 3 todos los ejercicios de la asignatura de IP (Introduccin a la Programacin) para dos semanas. Los contenidos tambin muestran que los ejercicios se continuarn registrando en la pgina 11. Un ejemplo de la pgina 3 del cuaderno se muestra en la Tabla 2.3. Los contenidos tambin muestran que entre el 9/9 y el 13/9, el estudiante tom notas de clase en las pginas 4, 5 , 6 y 7. Despus, continu
Tabla 2 3 Ejemplo de una pgina del cuaderno de ingeniera. .
Fecha
919
Ejercicio IF: entrega 1619 Hacer un cuaderno de ingeniera Referencia, pgina 206 del libro de t e x t o Leer el texto de programacin, captulo 1
11 19
I
1319
Ejercicio IF: entrega 23/9 Leer el texto de programacin del captulo 2 Revisar 1 5 ejercicios del captulo 2 y preparar para el examen 0
1619
I I
registros de tiempos
l l
Utilizar la tabia de registros de tiempos Poner las pginas de registro al final del cuaderno de ingeniera Ver los ejemplos del captulo 3 del libro de texto
(105
16
tomando notas en la pgina 10. Siempre que tengas que saltar algunas pginas debido a otras anotaciones, es una buena idea escribir en la parte inferior de la pgina dnde contina ese tema. Vase, por ejemplo, la ltima lnea de la Tabla 2.3.
Para gestionar tu tiempo efectivamente, necesitas planificar tu tiempo y seguir el plan. Para hacer planes realistas, primero tendrs que controlar la forma de utilizar el tiempo. Debes documentar tus planes y compararlos con lo que haces realmente. Para mejorar la precisin de tu planificacin, determina los errores de los planes anteriores y qu podras hacer para mejorar el plan. El primer paso para la planificacin y gestin del tiempo es entender cmo utilizas tu tiempo realmente. Para hacer esto, necesitas clasificar tus actividades en categoras principales, entonces, de una forma normalizada, registra el tiempo dedicado a cada actividad. Para guardar estos datos en un lugar adecuado, utiliza el libro de ingeniera. En este curso utilizars el libro de ingeniera para registrar los ejercicios, tomar notas y tambin como libro de trabajo para el diseo de ideas y la realizacin de clculos.
EJERCICIO 2
Prepara un cuaderno de ingeniera para el trabajo que tengas que hacer en este curso. La portada debera incluir los puntos descritos en la Seccin 2.4 y su tabla de contenidos debera incluir al menos una entrada para los ejercicios del curso o los compromisos de trabajo para la semana actual. Muestra el cuaderno al profesor en la siguiente clase. Despus, el profesor podr ocasionalmente pedirte el cuaderno de ingeniera para revisarlo. Observa que esto es un ejercicio opcional. No necesitas hacerlo a menos que te lo pida el profesor.
CAPITULO 3
Este captulo describe un procedimiento y una forma de controlar y registrar la manera de gastar tu tiempo. Tambin se dan ejemplos de los tipos de registros de tiempos a guardar. En el ejercicio hars y utilizars una tabla de registro de tiempos.
3.1
18
cribir un nuevo libro. A esta velocidad, yo podra acabar el manuscrito el siguiente mes de enero. Despus de estar trabajando en el nuevo libro durantes un mes, encontr que el trabajo era mucho ms difcil de lo que haba previsto. Revisando mis datos, encontr que para cada captulo le estaba dedicando ms tiempo que el que haba planificado. Y en vez de 20 horas por semana, le estaba dedicando realmente ms de 30 horas. Aunque el trabajo era mayor de lo esperado, mis registros de tiempos me permitan hacer una estimacin de que podra terminar el manuscrito cuatro meses despus de lo que haba planificado inicialmente. Y fue cuando realmente acab. Aunque no esperes escribir muchos libros, encontrars mucho ms fcil controlar la cantidad de tiempo que dedicas a cualquier proyecto que incrementar tu productividad. Cuando las personas dicen que trabajan de firme, quieren decir que estn trabajando muchas horas. Si no sabes cmo utilizas realmente tu tiempo, no sers capaz de gestionar la forma de utilizarlo.
3.2
19
En otras palabras, utiliza los mtodos descritos aqu. As, despus de haber intentado utilizar estos mtodos en este curso, tienes libertad para cambiarlos o disear algo completamente nuevo. No importa el formulario que utilices, pero, si quieres gestionar tu tiempo debes controlarlo continuamente.
3.3
\g
E s
30 a 25 20
15
10
5
n
20
3.4
21
haciendo actividades durante varios das, anot sus otras actividades para el curso de IP en la tabla de registro de tiempos.
Tabla 3.1 Cuaderno de registro de tiempos.
Estudiante Profesor Fecha Class
22
Registrar el tiempo de esta forma significa que hay que medirlo. Si no tienes un reloj, sera deseable conseguir uno.
3.5
23
duracin de las interrupciones era uno de los beneficios ms importantes del control de su tiempo.
Tabla 3.2 Ejemplo del cuaderno de registro de tiempos.
E~~~~~~~~~ Estudiante Y
Profesor
Sr.
Fecha
Ciass
"'
999 'f6
1219 1319
1419
904
1Ot6t12
14 1
9 0 950 :0
1:16 11:59 5t3t22
50 38 134
24 '
3.6
25
bas la tarea. Las instrucciones para rellenar el Cuaderno de Registros de Tiempos estn repetidas en la Tabla 3.3 para facilitar la tarea de controlarlas antes de empezar a utilizarlas y vuelve a comprobarlas despus, para estar seguro de que ests registrando los tiempos de forma adecuada.
37 .
26
Mtodo
Cabecera
Tiempo interrupcin Registra el tiempo de interrupcin de la tarea y la causa de la interrupcin. Ejemplo ATiempo Ejemplo Actividad Ejemplo Comentarios 5 + 3 + 22, descanso, telfono, charla. Anota el tiempo que dedicas a la tarea, menos el tiempo de interrupcin. Desde las 9:15 a las 11:59, menos 30 minutos o 134 minutos. Anota el nombre de la tarea o actividad que estas realizando. Exmenes. Anota cualquier comentario pertinente que posteriormente te permita recordar cualquier circunstancia inusual observada con relacin a la actividad. Preparar exmenes. Cuando una tarea se termina, rellena este campo. A las 7:45 del 919, acabaste de leer uno o ms captulos, rellena este campo.
-
EjempIo
C (Completada)
Ejemplo U (Unidades) Ejemplo Importante
Anota el nmero de las unidades de trabajo acabadas. Desde las 6:25 a las 7:45 del 9/9 leste 2 captulos, escribe un 2. Registra todos los tiempos de este curso. Si olvidas registrar un tiempo, anota la mejor estimacin. Si olvidas el Cuaderno de Registros de Tiempos, anota estos tiempos y cpialos en tu tabla tan pronto como puedas.
27
Cuando ocasionalmente olvides registrar la hora de comienzo, la hora de$n o la duracin de la interrupcin, haz una estimacin tan pronto como lo recuerdes. Esto no ser tan riguroso como registrar la hora exacta, pero es lo mejor que puedes hacer. Ser lo ms parecido al tiempo real. Puedes utilizar un cronmetro para controlar las interrupciones. Puede parecer excesivamente preciso, pero es ms sencillo registrar el tiempo de inicio y de finalizacin de cada interrupcin. Resume tu tiempo puntualmente. Utilizars el Resumen Semanal de Actividades para resumir semanalmente tu tiempo en este curso. Cmo y por qu haces esto se discute en el Captulo 4.
Otra aproximacin es registrar los datos de tiempos en un computador. He intentado esto y he observado que lleva ms tiempo y era menos adecuado que tomar notas en el papel. Los ordenadores podran ser tiles para este propsito, pero sera necesario una aplicacin adecuada. Pero hasta que se desarrolle dicha aplicacin, puedes elegir entre escribirla tu mismo, utilizar un sistema manual de registro de tiempos o no controlar tu tiempo.
RESUMEN
Este captulo describe cmo controlar tu tiempo. Controla el tiempo en minutos utilizando el Cuaderno de Registro de Tiempos, que deberas guardar al final de tu cuaderno de notas de ingeniera. Lleva contigo el cuaderno cuando hagas las tareas de este curso. Si olvidas el cuaderno, registra el tiempo de la tarea en una hoja aparte y cpiala en el cuaderno tan pronto como puedas. Considera la utilizacin de un cronmetro para controlar las interrupciones.
EJERCICIO 3
Utiliza el Cuaderno de Registro de Tiempos para controlar el tiempo que dedicas a las distintas actividades de este curso. Como parte de este ejercicio, examina la lista de actividades que pusiste en el Ejercicio 1 y ajstalas si es necesario. Entrega la prxima semana una copia de tu registro de tiempos. Ser obligatorio entregar una copia del Cuaderno de Registro de Tiempos cada semana desde este momento hasta el final del curso.
CAPITULO 4
Este captulo describe la planificacin de perodos y de productos, y muestra cmo relacionarlos con tu trabajo personal. Aprenders a rellenar un Resumen Semanal de Actividades para los datos del Cuaderno de Registro de Tiempos, que lleves anotados hasta ahora en el curso.
4.1
30
lectura, por ejemplo una hora a la semana. El plan del producto para esta tarea tendra el objetivo de leer los 20 captulos del libro en 20 horas. El plan del perodo sera la forma de repartir el tiempo de lectura en incrementos semanales de una hora.
Gestin Corporativa
Dividendos/ intereses
1 del lenodo
Productos Planes de
Precios y Previsiones
31
Cuando sepan cunto dinero van a tener en el futuro, la gestin corporativa puede decidir que fondos va a proporcionar a ingeniera para el desano110 y fabricacin de futuros productos, completando de esta forma el ciclo.
32
Registro de Tiempos introducido en el Captulo 3. Despus de reunir los datos de tiempo durante una o dos semanas, empezars a ver cmo empleas el tiempo. Puesto que los registros de tiempos son muy detallados para el propsito de la planificacin, necesitas resumir los datos de una forma ms til. El Resumen Semanal de Actividades de la Tabla 4.1 muestra los formatos de tiempo que son ms adecuados para la planificacin del perodo. En las lneas 1 a la 10 del Resumen Semanal de Actividades, registras el tiempo que dedicas a cada actividad principal durante cada da de la ltima semana. En la parte inferior derecha, en las lneas 13 a la 16, estn la media, el mximo y el mnimo tiempo que dedicas a cada tarea durante las semanas anteriores del semestre. De las lneas 18 a la 21 se
Tabla 4.1 Resumen semanal de actividades.
Nombre
1
2 3 4
Fecha
5
6
7
8 9 10
11 Tiempos y Medias del Perodo
13 14 15
16
33
muestran el total, la media, mximo y mnimo del tiempo que dedicas a cada trabajo definido para todo el semestre, incluyendo la ltima semana. Cuando desees hacer un plan del perodo para la prxima semana, comienza con el ltimo Resumen Semanal de Actividades. Basndonos en los tiempos previos dedicados a cada tarea, puedes juzgar cunto tiempo dedicars a estas tareas la prxima semana. La forma ms sencilla de hacer dicho plan, sera asumir que dedicars en el futuro la misma cantidad de tiempo que el tiempo medio dedicado en el pasado. Una aproximacin ms sofisticada debera considerar el trabajo a realizar en la prxima semana y juzgar dnde ubicarte entre los tiempos mximo y mnimos de las semanas anteriores. Esto dar como resultado un plan ms exacto. Las siguientes secciones describen cmo rellenar el Resumen Semanal de Actividades.
4.3
3. Escribe la fecha en la columna Fecha, anotando el domingo como primer da de la semana (fila 3).
4. Para cada da, suma todos los minutos para cada actividad de los registros de tiempos y anota el resultado en la columna correspondiente. Por ejemplo, en la Tabla 4.2 la primera tarea es Clase. En el Cuaderno de Registro de Tiempos de la Tabla 4.3, la Estudiante Y dedic 50 minutos, desde las 9:00 a las 9:50 A.M. del 9/9, a asistir a clase. As, puso en la Tabla 4.2 un valor de 50 en la fila 4 en la columna Clase para el da 9/9. El valor total de 96 minutos para Codificar Programas se obtiene a partir de los valores 38 y 58 minutos. Por ello, puso en la Tabla 4.2 el valor 96 en la fila 4 columna Codificar Programas.
5. Despus de completar todas las casillas para cada da, se obtiene el total para cada da en la columna Total. Por ejemplo, los totales de la fila 4 de la Tabla 4.2 son 50 + 96 + 80 = 226.
34
Fecha
9/16/96
Med. Mx.
16 Mn.
17
18 Total 19 Med. 20 21
150 150
150
771
771
T71
Mx. Mn.
150
71 7
8. A continuacin, se obtiene el total de los tiempos de las actividades que aparecen en la fila 10. En este caso, el total es 150 + 341 + 134 + 146 = 771.
9. Por ltimo, suma los totales diarios para comprobar que obtienes el mismo resultado. En este caso tenemos: 226 + 62 + 147 + 114 + 88 + 134 = 771, as no hay error. Si dichos nmeros difieren, deberas de volver a calcular el total de todos los das y de todas las tareas para localizar el error.
35
10. El Resumen de Tiempos de la semana actual se completa tal y como se explic en la Seccin 4.2.
Una buena forma de minimizar los errores es hacer la suma de las columnas dos veces, de arriba abajo y de abajo a arriba, para asegurarte que obtienes el mismo total. Otra forma de minimizar los errores de clculo podra ser utilizar la hoja de calculo EXCEL, proporcionada como parte del material de apoyo disponible para este libro'.
4.4
1. Anota el total de semanas transcurridas. Comprueba la fila 11 del resumen semanal de actividades de semanas anteriores para ver cuntas semanas se tuvieron en cuenta. Puesto que la Tabla 4.2 tiene un 1 en la lnea 11, escribe 1 + 1 = 2 en el nmero de semanas de la Tabla 4.4. 2. En las filas 13-16 de la tabla de la semana actual (Tabla 4.4), copia todas las entradas de las filas 18-21 de la tabla de la semana anterior (Tabla 4.2).
3. Suma los tiempos dedicados a cada tarea en la semana actual. En cada columna de la fila 18 de la Tabla 4.4 anota el resultado de sumar las filas 13 y 10. Para la primera columna, Clase, dicho resultado es 150 + 150 = 300. Para la segunda columna, Codificar Programas, obtenemos 339 + 341 = 680. Haz lo mismo para el resto de columnas. Cada columna de la fila 18 muestra ahora el tiempo total dedicado a cada tarea en las dos primeras semanas de este semestre.
4. Calcula el tiempo medio dedicado semanalmente a cada tarea durante este semestre. En la fila 19 de la Tabla 4.4, divide el valor de cada columna de la fila 18 por el nmero de semanas. El primer
Las descripciones del material de apoyo y las instrucciones para conseguirlo aparecen en la ltima pgina del libro.
'
36
999 ''6
c51
37
11 12
13 Total
14
Med.
15 Mx.
16 Mn.
150 150
150
150
18
19
20
21
valor medio es de 300/2=150 y el segundo es 680/2=340. Repite estos clculos para el resto de columnas.
5. Para encontrar el mayor tiempo dedicado a una tarea durante una semana, calcula el tiempo mximo. Calcula el valor Mximo en la fila 20, comparando cada columna de la fila 15 con la misma columna de la fila 10. Anota el valor mayor en la fila 20. Para la columna leer Textos, el valor Mximo anterior era 146 (vase fila 15) y el valor para la semana actual es de 224 (vase fila 10). Puesto que el valor mayor es 224, antalo en la fila 20.
6. Para saber el menor tiempo que has dedicado a una tarea durante una semana, calcula el tiempo mnimo. Para calcular el valor
38
Mnimo de la columna 21, compara cada columna de la fila 16 con la misma columna de la fila 10. Anota el valor ms pequeo en la fila 21. Para la columna Leer Texto, el valor anterior Mnimo era 146 (vase fila 16) y el valor para la semana actual es 224 (vase fila 10). Puesto que 146 es menor, antalo en la fila 21. La fila 21 muestra los tiempos mnimos dedicados cada semana a cada actividad. Observa que ignoras los valores nulos en el clculo de los tiempos mnimos.
7 Observa que, excepto para la primera semana, el Tiempo Total . Mximo y Mnimo sern diferentes.
La columna Preparar Exmenes proporciona un ejemplo de por qu deberas ignorar los valores nulos en el clculo de los tiempos mnimos. Puesto que no se dedic tiempo a esta actividad en esta semana, el tiempo medio tiene un valor de 67 minutos. As, la Estudiante Y dedic 134 minutos una semana y cero la siguiente, dando un valor medio 67 minutos. El valor Mximo se calcula como hemos visto antes, pero el valor Mnimo cero no es til. La razn es que para la actividad de Preparar Exmenes ya sabes que no le dedicars tiempo durante muchas semanas del semestre. As el valor cero para el Mnimo no aade nueva informacin. Puede ser interesante, sin embargo, saber que cuando estudiaste para los exmenes, el tiempo mnimo que dedicaste fue de 134 minutos. Puesto que solamente quieres saber la cantidad mnima de tiempo dedicado cuando hiciste esta tarea, sustituye el valor Mnimo en la fila 16 por un valor mayor de cero en la fila 10.
Las orientaciones para completar el Resumen Semanal de Actividades aparecen en las Tablas 4.5 y 4.6.
Los datos en el Resumen Semanal de Actividades te ayudarn a entender cmo gastas tu tiempo. Con esta informacin, por ejemplo, podras estimar que una gran tarea probablemente se realizar en el tiempo mximo y una tarea sencilla se realizar en el tiempo mnimo. Puedes utilizar estos datos para planificar las semanas subsiguientes. La planificacin se discute en los captulos siguientes.
39
Tabla 4.5 Instrucciones resumen semanal de actividades (1) Resumen semanal del tiempo.
Propsito
Esta tabla se utiliza para controlar y analizar el tiempo gastado durante este curso. Estos datos se obtienen del Cuaderno de Registro de Tiempos. Resume los datos del Cuaderno de Registro de Tiempos al final de cada semana. Si la clasificacin de las tareas no es adecuada, cmbialas. Si no tienes suficientes columnas para todas las tareas, utiliza copias de la tabla. Introduce los siguientes datos: Tu nombre. La fecha actual. Anota los nombres de las principales tareas a las que dedicars tu tiempo durante este curso. Clases, Codificar Programas, Revisar exmenes, Leer libros, etc. Con D (Domingo), anota la fecha para ese da. 819 Para cada da de la semana, determina el tiempo total dedicado a cada tarea descrita en el Cuaderno de Registro de Tiempos. Anota este nmero en la columna correspondiente para ese da. Para el lunes, 919, los tiempos de Codificar Programas del Cuaderno de Registro de Tiempos eran 38 y 58 minutos. Anota la suma (96 minutos) en la fila 4 del lunes 919. Anota en la fila 10 el total para cada tarea durante una semana completa. 96+62+69+114=341 en la fila 10 columna Codificar Programas. Para cada fila, anota el total de los tiempos de las tareas para un da dado, columna de la derecha. Si tienes varias tablas, anota el total de todas las tablas en la columna situada ms a la derecha (en la primera tabla). 50+96+80=226 para el Total del Lunes 919 Calcula el total de los tiempos dedicados durante una semana y antalos en la columna y fila de Total para esa semana.
226+62+147+114+88+134=771 es el total semanal. __ __ -~ 150+341+134+146=771 total de las tareas (fila 10). Puesto que es igual al total de la columna de la derecha no hay error.
Mtodo
Cabecera
Ejemplo
--
,
r
__ Totales
__ Comprobacin Final
Ejemplo
Aunque al principio aprenders mucho del Resumen Semanal de Actividades, pronto suministrar poca informacin cada semana. Cuando llegues a este punto, prepara un Resumen Semanal de Actividades una vez
40
Tabla 4.6 Instrucciones resumen semanal de actividades (2) Resumen de medias, mximos y mnimos.
Propsito Esta tabla se utiliza para controlar y analizar el tiempo dedicado a este curso. Estos datos se obtienen del Cuaderno de Registro de Tiempos. Estas instrucciones son una continuacin de las vistas en las Instrucciones Resumen Semanal de Actividades (1). Pasa la cabecera y el resto de informacin consulta las instrucciones de la Tabla 4.5. Este es el nmero de semanas incluidas en el resumen de datos. Consulta el Nmero de Semanas en la fila 11 para ver cuantas semanas previas se han acumulado. Suma uno a dicho nmero, y anota el total. Para las filas 13 a 16, copia, columna a columna, los datos de las filas 18 a 21 de los resmenes de semanas anteriores. Incluye las filas de Total, Media, Mx. y Mn. para cada columna, incluyendo la columna total. Para calcular los valores de la fila 18, suma las cantidades de las filas 10 y 13. Haz esto para cada columna de esta tabla. En la Tabla 4.4, el valor de la columna Codificar Programas para la fila 18 se calcula as, 339+341=680. El valor medio se calcula dividiendo los valores de la fila 18 en cada columna por el nmero de semanas de la fila 11. En la Tabla 4.4, el valor medio de Codificar Programas es 680/2=340. Los valores de la fila 20 se obtienen comparando los valores de la fila 15 con los de la fila 10. Anota el valor mayor de los dos nmeros. Haz esto para cada columna, incluyendo la columna Total. En la Tabla 4.4 y para Codificar Programas, el valor Mximo era 341 y el valor para esta semana es 339, por lo que el valor Mximo sigue siendo 341. En la Tabla 4.4 para Leer Libros, el valor Mximo era 146 y el valor para esta semana es 224, por lo que el nuevo valor mximo es 224.
Mtodo
Total Tiempos Actuales (fila 18) Ejemplo Media Tiempos Actuales (fila 19) Ejemplo Mximo Tiempo Actual (fila 20) Ejemplo
Otro Ejemplo
Los valores de la fila 21 se obtienen comparando los valores de las filas 16 y 10. Anota el valor ms pequeo superior a cero. Haz esto para cada columna, incluyendo la columna Total.
En la Tabla 4.4 y para la actividad Codificar Programas, el valor Mnimo era 341 y el valor para la fila 1O es 339, el nuevo valor Mnimo sigue siendo 339. En la Tabla 4.4 y para la actividad Leer Libros, el valor Mnimo era 146 y el valor para la fila 10 es 224, el nuevo valor Mnimo sigue siendo 146. En la Tabla 4.4 y para la actividad Preparar Exmenes, el valor Mnimo era 134 y el valor para la fila 10 es O, el nuevo valor Mnimo sigue siendo 134.
Otro Ejemplo
Un ejemplo ms
41
al mes o comprueba que la distribucin actual de tiempos es la adecuada. Tambin, una vez que hayas reunido los datos de proyectos en el Captulo 5 y posteriores, sabrs cunto tiempo dedicas a los proyectos y podrs reunirlos en el Resumen Semanal de Actividades cuando lo necesites. En la prctica he pasado a utilizar un Resumen Mensual de Actividades para controlar el tiempo que he dedicado a mis dos principales actividades: escribir libros y realizar otros proyectos. Puesto que escribo libros en mi tiempo particular y hago proyectos en mi tiempo en la empresa, es importante saber cunto tiempo particular y de proyectos puedo esperar tener disponible durante cualquier semana o mes. Esto me ayuda a hacer los planes con precisin y cumplir compromisos. Para este propsito, una revisin mensual es suficiente. Sigo encontrando til resumir mi tiempo cada mes.
RESUMEN
Este captulo muestra como la planificacin de perodos y de productos estn relacionados y describe la planificacin del perodo. El primer paso en la planificacin del perodo es entender tus datos de tiempos. Comienza con datos de tiempos bsicos a partir del Cuaderno de Registro de Tiempos y haz un Resumen Semanal de Actividades para cada semana. El Resumen Semanal de Actividades proporciona un registro del tiempo dedicado a cada actividad y el tiempo medio, mximo y mnimo dedicado a cada actividad durante un semestre. Finalmente, puedes dejar de resumir los tiempos semanales y hacer un resumen cuando tu distribucin de tiempos cambie o consideres interesante resumir mensualmente tus tiempos.
EJERCICIO 4
Completa y entrega el Resumen Semanal de Actividades para las dos semanas anteriores. Utiliza los registros diarios de tiempos para rellenar esta tabla. Entrega una copia de las pginas de tiempos registrados que no hayas entregado todava.
CAPITULO 5
Este captulo describe cmo utilizar los datos de los registros de tiempos para hacer planes del producto. La nueva tabla, el Cuaderno de Trabajos se introduce para ayudar a registrar los datos histricos del producto. Tambin se muestra un ejemplo de cmo rellenar la tabla. En cuanto al ejercicio, consistir en rellenar el Cuaderno de Trabajos con las tareas que hayas hecho hasta ahora en el curso.
5.1
44
El acto de hacer planes tiene un efecto sorprendente: este grupo de desarrollo nunca haba entregado anteriormente un producto a tiempo. Con sus nuevos planes, no se equivocaron en una fecha durante los dos aos y medio siguientes. Desde entonces, han estado planificando su trabajo. La planificacin es una parte crtica del trabajo del ingeniero del software, y por lo tanto para ser un ingeniero del software, tienes que saber cmo hacerla. La clave est en la prctica, para adquirirla, comienza haciendo planes ya y contina hacindolos en todos tus proyectos futuros.
5.2
45
5.3
5.4
46
5.5
LA PLANIFICACIN DE PEQUEOSTRABAJOS
Es importante hacer un plan que se adecue a la magnitud y complejidad del trabajo a realizar. Tendra poco sentido, por ejemplo, hacer un plan sofisticado para una tarea que necesitara una o dos horas. A la inversa, con una tarea que necesitase varias semanas, un plan ms elaborado est justificado.
El plan del producto ms bsico consistir nicamente en estimar el tiempo necesario para hacer una tarea o trabajo. Una vez que puedas estimar con precisin el tiempo para hacer el trabajo, todas las otras cuestiones de planificacin se pueden hacer de una forma bastante fcil. Reuniendo datos sobre la duracin de varias tareas realizadas anteriormente, puedes predecir para unas tareas de duracin similar, cunto tiempo necesitarn en el futuro. Esta aproximacin se puede aplicar a casi cualquier tarea relacionada con un producto que necesite de unas pocas horas a unos pocos das para su realizacin. Por ejemplo, si planificas leer un captulo de un libro, sera til saber cunto tiempo necesitaste en leer los captulos anteriores. Con los datos de los tiempos de lectura medio, mximo y mnimo, puedes predecir mejor tu tiempo de lectura para un nuevo captulo.
5.6
ALGUNAS DEFINICIONES
Antes de continuar, necesitamos definir algunos trminos: Un producto es algo que produces para un compaero, un empresario o un cliente. Un proyecto normalmente produce un producto. Una tarea se define como un elemento de trabajo. Un proceso se define como la forma de hacer proyectos. El Captulo 11 trata de una forma ms detallada los procesos.
Los planes describen la forma en que un proyecto concreto va a ser hecho: cmo, cundo y qu coste tendr. Tambin puedes planificar tareas individuales.
Un trabajo es algo que haces, tanto un proyecto como una tarea.
5.7
EL CUADERNO DE TRABAJOS
El Cuaderno de Trabajos que se muestra en la Tabla 5.1 se dise para registrar los datos de tiempos estimados y reales. Obsrvese que este cuaderno es un documento de planificacin del producto, ya que trata datos
47
del producto. A la inversa, el Cuaderno de Registro de Tiempos y el Resumen Semanal de Actividades contienen datos de planificacin de perodos. Las entradas en el Cuaderno de Trabajos se hacen como se muestra en la Tabla 5.2. Este ejemplo utiliza datos del Cuaderno de Registro de Tiempos de la EstudianteY de la Tabla 5.3. Las instrucciones del Cuaderno de Trabajos se muestran en la Tabla 5.4. Obsrvese que en el Cuaderno, la Estudiante Y controla dos actividades generales: asistir a clases y preparar exmenes. Tambin controla dos actividades importantes: codificar programas y leer captulos del libro. Las casillas en la Tabla 5.2 se completan de la siguiente manera:
1. Trabajo
Cuando ests planificando una actividad, asgnale un nmero de trabajo comenzando por 1. Escribe la fecha de comienzo del trabajo. Escribe el tipo de tarea, tal como leer un libro, codificar un programa o preparar un informe. Calcula el tiempo que crees que gastars en hacer esa tarea y antalo en la columna de Tiempo Estimado. Para hacer esta estimacin, examina los datos de proyectos similares anteriores y utilzalos. Obsrvese que para la estimacin del programa 6 (trabajo 1 O), la Estudiante Y utiliz el tiempo medio de los programas 1-5. Encontr un valor de 105,s minutos observando las Velocidades Hasta la Fecha de programas anteriores (trabajo 8). Para las unidades elementales de trabajo, escribe un 1 en la columna de Unidades Estimadas. En el prximo captulo se introducen medidas de tamao ms refinadas. Al terminar el trabajo, anota el tiempo que le has dedicado. Para el trabajo 10, este tiempo fue de 151 minutos.
2. Fecha
3. Proceso
4. Tiempo estimado
5 . Unidades estimadas
6. Tiempo real
48
7.Unidades reales
Cuando termines el trabajo, registra las unidades reales. Aqu, debera ser una por cada trabajo. En el captulo siguiente, se utiliza una medida del tamao para las unidades de trabajo. La velocidad real es el Tiempo Real dividido por las Unidades Reales. Para el programa 6 (trabajo 10) la Velocidad Real es 151/1 = 1.51 minutos por programa. Al acabar el trabajo, calcula y anota el Tiempo Hasta la Fecha para todas las tareas realizadas hasta la fecha para el mismo proceso. Por ejemplo, con 151 minutos para el Tiempo Real para el programa 6 y un Tiempo Hasta la Fecha para los programas 15 de 529 minutos (vase trabajo S), el Tiempo Hasta la Fecha para el programa 6 es 151 + 529 = 680 minutos. Anota las Unidades Hasta la Fecha para todas las tareas de cada tipo que hayas finalizado. Con el programa 6, aade las Unidades Reales para este trabajo a las Unidades Hasta la Fecha para los trabajos ms recientes de este tipo (de nuevo, el trabajo 8): 5 + 1 = 6.
8. Velocidad real
11. Velocidad Hasta la Fecha La Velocidad Hasta la Fecha es el Tiempo Hasta la Fecha dividido por las Unidades Hasta la Fecha, es decir 680/6 = 1 13,3 minutos por programa. Este es el tiempo medio dedicado a hacer un trabajo de este tipo.
Para encontrar la velocidad mxima para cualquier tarea, compara la Velocidad Real de los trabajos ms recientes con el Mximo Hasta la Fecha de los trabajos previos del mismo tipo y anota el valor. Para el programa 6, el Mximo Hasta la Fecha para el programa 5 (trabajo 8) es 158 minutos por unidad, que es mayor que la Velocidad Real de 151 minutos
49
por unidad para el programa 6, por lo tanto escribe 158 para el programa 6 en el Mximo Hasta la Fecha.
El valor Mnimo Hasta la Fecha es la velocidad mnima para cualquier tarea de un tipo dado. Para determinar este valor, compara la Velocidad Real del trabajo con el Mnimo Hasta la Fecha de los trabajos ms recientes de este tipo y escribe el valor menor. Para el programa 6, por ejemplo, la Velocidad Real de 151 minutos por unidad es mayor que los 69 minutos por unidad para el Mnimo Hasta la Fecha del programa 5 (trabajo 8), por lo que el programa 6 mantiene el valor de 69 en el Mnimo Hasta la Fecha.
Con estos datos puedes consultar la velocidad media para cualquier tarea dada, as como las velocidades mxima y mnima. La ventaja principal del Cuaderno de Trabajos es que proporciona una forma concisa de registrar y acceder a una gran cantidad de datos histricos de proyectos. Como vers, es la clave para hacer estimaciones exactas. Las estimaciones exactas, son a su vez la clave para hacer buenas planificaciones.
5.8
50
Descripcin: DescriDcin:
Ten en cuenta las cantidades, sin embargo, si t crees que una estimacin ms grande o ms pequea es ms precisa, utiliza tu experiencia.
51
Estimado
Real
Hasta la Fecha
10
11
1919
12
1 Cod. 1106 1 1 1 151 1 1 1 151 20/91 Texto] 59 1 1 1 40 1 1 1 40 Descripcin: Leer el Captulo 6 del libro de texto 2 1 1 Texto 1 56 1 19 1 1
Descriocin: Escribir el proarama 6
8 -
1600
1
[
1337
1 113,3 1 1 562 1
150
18 1
69
28
Para encontrar rpidamente todas las entradas en el Cuaderno de Registro de Tiempos para un nmero de trabajo dado, es til aadir el n-
52
Fecha
Clase
Profesor
ComienFecha zo
919
5r.
9/9/96 IP
Fin
Tiempode interrupci6n
c u
~
Clase Eiercicio 1
11
51+16+6 5
50 7 1 77 50 40 74 33
Clase
9 1 0
Clase
11 1 0 12
Clase Texto Cap. 5, descanso Ejercicio 6 Ciase Texto Cap.6, descanso Ejercicio 6 Texto Cap. 7
x 1
mero de trabajo en la columna Actividad del Cuaderno de Registro de Tiempos, tal como se muestra en la Tabla 5.3. En efecto, encontrars ms
53
Mtodo
Cabecera
Tiempo Estimado
Unidades Estimadas Tiempo Real Unidades Reales Velocidad Real Tiempo hasta la fecha
54
adecuado dejar todos los tipos de actividades y referenciarlas por sus nmeros. Seguiremos esta prctica en los ejemplos restantes de este libro. Despus de aprender a utilizar el Cuaderno de Trabajos, probablemente encontrars ms adecuado utilizar una hoja de clculo para hacer los clculos. Un ejemplo de hoja de clculo de este tipo se incluye en el material de apoyo de este libro. Las instrucciones para conseguir dicho material se indican en la ltima pgina del libro.
5.9
55
locidades medias anteriores para estimar un nuevo trabajo. Mientras hagas esto con coherencia y tus trabajos sean razonablemente similares, pronto hars estimaciones equilibradas. La ventaja de hacer estimaciones equilibradas es que, en promedio, tus trabajos durarn aproximadamente lo que hayas estimado. Es decir, cuando un trabajo se realice en ms tiempo, se compensar con otro que necesite menos tiempo. Cuando ests estimando grandes trabajos como agrupaciones de muchos trabajos pequeos, es ms probable que consigas una aproximacin razonable al plan global.
RESUMEN
Los planes del producto te ayudan a resumir y gestionar datos de tiempos para los productos que planificas hacer: codificar un programa, redactar informes, leer captulos de libros y estudiar para los exmenes. El Cuaderno de Trabajos es una herramienta para controlar el tiempo dedicado a cada tarea. Los clculos del Cuaderno de Trabajos utilizan datos de tiempos del Cuaderno de Registro de Tiempos.
Cuando lo completes, el Cuaderno de Trabajos te proporciona los tiempos medio, mximo y mnimo que dedicas a terminar cada uno de tus proyectos hasta ese momento. Puedes utilizar esta informacin para planificar el trabajo de la prxima semana o para hacer planes ms sofisticados que se requieran en captulos posteriores.
EJERCICIO 5
Completa y entrega el Cuaderno de Trabajos para el trabajo que hayas hecho hasta ahora en el curso. Donde hayas estimado datos antalos, de lo contrario, deja el espacio de estimacin en blanco. Utiliza los cuadernos diarios de tiempos para completar estas tablas. Contina hasta completar los datos en el Cuaderno de Trabajos para cada proyecto. Haz una estimacin del tiempo y de las unidades antes de iniciar un trabajo, registra los datos reales y los datos Hasta la Fecha cuando hayas finalizado.
CAPITULO 6
Hasta ahora hemos considerado grandes unidades de trabajo, como programas o captulos de un libro. Para hacer planes del producto, necesitas utilizar medidas ms precisas. Este captulo describe cmo medir y estimar el tamao del producto. En el ejercicio del captulo, medirs el tamao de los trabajos que has hecho en los ejercicios anteriores de este libro y calculars tu productividad para ese trabajo.
6.1
58
EL TAMAODEL PRODUCTO
La razn principal para reunir datos de trabajo en este curso, es para saber qu tiempo dedicas a las distintas tareas que haces. Si, por ejemplo, juzgas que una nueva tarea es parecida a dos tareas realizadas anteriormente, y cuya duracin fue de 3 y 4,2 horas respectivamente, probablemente deducirs que la nueva tarea se realizar en un tiempo medio de 3,6 horas. Esta estimacin burda, probablemente ser mejor que una estimacin hecha sin ningn dato histrico.
6.2
6.3
59
1
1
1
Captulo
1
1
1
Tiempo de lectura
1
l
Pginas
1
-
Minutosipgina
1
I
l
3
4
28 10 1
'2
1 6
l I
2,33 7,30
~ ~~
5 6
Totales Medias
71
40 337
17
12
4,10 3.33
77
12,03 4,309
5,7 61
fciles de leer que otros. Esto significa que t deberas considerar el tipo de trabajo y no solo su tamao. Tambin, hay una cuestin expuesta anteriormente. Supongamos, por ejemplo, que ests preparndote para un examen. Los tiempos para releer los captulos estudiados anteriormente posiblemente sern inferiores a los tiempos iniciales de lectura. De forma similar, para releer un documento que has escrito, los tiempos de lectura podran variar significativamente, dependiendo de la atencin que se preste. Para una redaccin inicial del borrador de un documento, puedes dedicarle de 15 a 20 minutos. Una hojeada rpida al documento completo, sin embargo, necesitara un minuto por pgina o menos. Cuestiones similares se presentan en la planificacin del desarrollo de programas. Las productividades para diferentes clases de trabajo, tales como la reutilizacin de programas desarrollados previamente, la modificacin de un programa existente o el desarrollo de nuevos programas, sern bastante diferentes. Para tratar estas cuestiones, deberas guardar de forma separada los registros de tamao y tiempo para las distintas clases de trabajo que haces.
6.4
EL TAMAO DE UN PROGRAMA
Cuando ests estimando el tiempo requerido para codificar un programa, basa las estimaciones en los tiempos que anteriormente has dedicado a codificar programas parecidos. Como se muestra en la Tabla 6.2, los tiempos de la Estudiante Y para codificar programas oscilan en un rango de 69 a 158 minutos. Aunque este es un rango algo superior al doble, este aumentar en el futuro, cuando la Estudiante Y codifique programas ms
60
grandes. De nuevo, es una buena idea basar las estimaciones de tiempo en el tamao del programa. La medida que utilizamos para el tamao del programa, es la lnea de texto del programa fuente. As, si el programa tiene 16 lneas, el programa tiene 16 lneas de cdigo (LOC, acrnimo de Lines Of Code). Al contar las LOC, se asume que no se cuentan las lneas en blanco o las lneas de comentarios. Aunque podras escoger cualquier estndar coherente, en este libro contaremos las lneas de cdigo sin contar las lneas en blanco o las lneas de comentarios. As, el siguiente fragmento de programa en Ada. tiene 5 LOC.
>= 100) t h e n
De forma similar, si escribes ese mismo fragmento de programa sin comentarios y en un formato ms comprimido, podras tener 3 LOC:
Ejemplo 2
If (X-Media
>= 100) t h e n
61
Aunque son programas idnticos y sus tiempos de desarrollo podran ser los mismos, sus tamaos son diferentes con este mtodo. Mientras mantengas la coherencia en la forma de codificar programas, estas variaciones de contabilizar no son importantes. Para asegurar que los tamaos contados sean coherentes, te sugiero que adoptes una forma normalizada para codificar los programas. Aunque sigas el formato propuesto por tu profesor, personalmente prefiero el formato ms abierto que se muestra en el Ejemplo 1. La medida de las LOC es aplicable a muchos lenguajes de programacin. Por ejemplo, el mismo fragmento del programa en C++, sera el siguiente:
Ejemplo 3
/ / comentario que describe la funcin del programa
Cuando escribas de esta forma, este fragmento de cdigo de C++ tendr 4 LOC. El siguiente fragmento de cdigo C++ , ligeramente superior tiene 12 LOC:
Ejemplo 4
while (n>0)
1
push(n); cout << "Introducir un entero positivo. \ n " ; cout << "Introducir 0 para terminar. \ n " ; cin >> n:
1
/ / Sacar de la pila
Utilizando la tcnica de las LOC para medir, los tamaos de los seis programas se muestran en la Tabla 6.2. El rango de minutos por lnea de cdigo (LOC) vara desde 6,27 del programa 2 a 9,3 para el programa 4.
62
EL TAMAODEL PRODUCTO
Puesto que tus tiempos en minutos por LOC cambiarn bastante con la experiencia, deberas revisar la media de minutos por LOC y basar las estimaciones en las medias ms recientes de los ltimos 5- 1 O programas.
6.5
'
6.6
Para una discusin completa de las medidas y estimaciones del tainaio, vanse los Captulos 4 y 5 de mi libro A Discipline for Sojhvare Enginnering (Reading, MA: Addison-Wesley, 1995).
'
63
Para codificar programas, sin embargo, no es posible una contabilizacin de los mismos hasta que no los has desarrollado. Para estimar el tiempo de codificar un programa, tienes que estimar en primer lugar cuntas LOC requerir y a partir de ah, el nmero de minutos por LOC que probablemente necesitars para desarrollarlo. Puedes entonces calcular el tiempo total estimado. Aunque hay varios mtodos para estimar los tamaos de los programas antes de desarrollarlos, todos los mtodos de estimacin de tamao implican mucho juicio. Primero, examina los requisitos para los programas a desarrollar. Despus, clasifica los tamaos relativos de los nuevos programas entre los programas que has escrito ya. Finalmente, basndote en tu experiencia de dnde ubicas el nuevo programa dentro del histrico de rangos de tamaos, estima sus LOC. Un ejemplo de este procedimiento se muestra en la Tabla 6.3. Es una lista de programas desarrollados anteriormente por la Estudiante Y, clasificados por tamaos. La lista muestra el tamao del programa en LOC, el tiempo de desarrollo en minutos, las velocidades en minutos/LOC y una breve descripcin de la funcin del programa. Examinando dichos datos en tus programas, y considerando que sabes bastante sobre el programa que vas a codificar, puedes juzgar dnde se ubicar este programa en la lista de tamaos. Esto te ayudar a estimar el rango de tamao del nuevo programa. Basndote en los datos histricos de minutos por LOC, puedes estimar el tiempo para desarrollar el nuevo programa. Por ejemplo, supongamos que la Estudiante Y planific codificar un nuevo programa con un bucle while algo complicado. De la Tabla 6.3, estimara que el tamao es superior a las 14 LOC del programa 5 y probablemente menor a las 20 LOC del programa 1. A partir de lo anterior puede calcular la media de estos valores extremos, (14+20)/2=17 LOC.
Tabla 6.3 Rangos de tamaos de programas de la Estudiante Y
Estudiante Estudiante Y Profesor sr. Fecha Clase
30/09/96
IP
64
6.7
65
Estimado
~~
Commentarios:
tamao mnimo y uno mximo, a partir de ah obtuvo el tamao medio para cada funcin. Mientras utilizase los tamaos medios en sus estimaciones, el ejercicio de pensar en los tamaos mximo y mnimo le ayudaba a evitar hacer estimaciones que son o muy grandes o muy pequeas. Aunque este no es un mtodo infalible de estimacin de tamaos, es mucho mejor que estar adivinando. Conforme codifiques ms programas, podrs aadirlo a la lista de rutinas. El aumento del nmero de datos histricos te ayudar a hacer progresivamente mejores programas.
No hay mtodos que garanticen una buena estimacin del tamao. La estimacin del tamao es una habilidad. La clave para hacer buenas estimaciones de tamao, es tener una cantidad sustancial de datos histricos, hacer muchas estimaciones de tamao y comparar con regularidad tus resultados con las estimaciones.
66
EL TAMAODEL PRODUCTO
Tabla 6.5 Estimacin del tamao del programa de la Estudiante Y.
Estudiante Estudiante Y' ' Profesor 5r. Z Fecha Clase
7/10/96
IP
Comentarios: Este proqrama tiene una sentencia case sencilla, un bucle y un clculo. Asumo que, como mximo, el tamao se obtendr sumando estos tamaos tpicos, 11+14+20=45 LOC. Para el valor mnimo, asumo que estas funciones podran combinarse ms efectivamente que cuando estn como elementos separados. E s t o nos da 22 LOC como ei valor mnimo. 34 LOC es el punto medio entre 105 dos valores anteriores.
se muestra en las Tablas 6.6 y 6.7. Estos ejemplos utilizan los datos de tamao de las Tablas 6.1 y 6.2. Aqu, en vez de anotar que uno o dos captulos o programas fueron terminados, se ponen sus tamaos en la columna de unidades. Como se muestra en la Tabla 6.6, la Estudiante Y complet un programa de 20 LOC el 10/9, por ello puso un 20 en la columna U (unidades). El lU9, ley el Captulo 3, puesto que dedic 28 minutos a leer las 12 pginas, puso un 12 en la columna de unidades de la Tabla 6.6 y 28 en la columna de ATiempo. Puesto que tendrs datos de tamao en el Cuaderno de Trabajos, puede parecer redundante ponerlos tambin en el Cuaderno de Registro de Tiempos. Si tu experiencia es como la ma, con frecuencia completars el Cuaderno de Trabajos una o dos veces por semana. Entonces tendrs que buscar por datos de tamao. En el momento que hagas el trabajo, sin em-
67
Fecha Clase
999 '/6
IP
ComienFecha zo Fin
liempode interrupcin
c u
1 1
919
1
9 0 9:50 :0
] 50 11 I 0 12 0
50 Clase 30 1 1
I x 12c
bargo, no te llevar mucho tiempo escribir los datos de tamao en el Cuaderno de Registro de Tiempos.
68
EL TAMAODEL PRODUCTO
Fecha:
9/9/96
Hasta la Fecha
69
En la Tabla 6.7, la Estudiante Y utiliz estos datos de tamao para calcular velocidades del producto. Hizo esto utilizando las instrucciones del Cuaderno de Trabajos dadas en la Tabla 6.8. Por ejemplo, para el Trabajo 1 no hizo estimacin de tamao, dejando el espacio de Unidades Estimadas en blanco. El Tiempo Real permaneci en 158 minutos, pero las Unidades Reales son 20 LOC. Esto significa que las Unidades Hasta la Fecha son tambin 20 LOC y la velocidad Hasta la Fecha es 158/20=7,90 minutos por LOC. Puesto que este es el primer programa, los valores Mximo y Mnimo tambin son 7,90. Para el segundo programa, Trabajo 3, la Estudiante Y de nuevo no hizo estimaciones, dej en blanco las Unidades Estimadas. El Tiempo Real para el programa 2 fue de 69 minutos y las Unidades Reales para el programa 2 fueron de 11 LOC. Esto da ahora para el Tiempo Hasta la Fecha un valor de 227 minutos y 20+11=31 LOC para las Unidades Hasta la Fecha. La Estudiante Y obtuvo este valor buscando en las Unidades Hasta la Fecha la tarea de este tipo (Trabajo 1) ms recientemente realizada, cuyo valor era 20 LOC y se lo aadi a las 11 LOC de las Unidades Reales. Ahora, con 31 LOC Hasta la Fecha y 227 de Tiempo Hasta la Fecha, el valor de la velocidad Hasta la Fecha es de 227/31 = 7,32 minutos por LOC. La velocidad Mxima para el Trabajo 1 era 7,90, que es mayor que los 6,27 minutos por LOC para el Trabajo 3, por lo que la velocidad Mxima permanece en 7,90. La velocidad Mnima para el Trabajo 1 tambin era de 7,90, pero aqu, el valor de 6,27 minutos por LOC para el Trabajo 3 es menor que 7,90, por lo que el Mnimo es sustituido por 6,27, la velocidad del nuevo trabajo. Sigue este mismo procedimiento para cada uno de los programas, hasta que hayas puesto todos los datos del Nmero de Trabajo para los programas codificados hasta la fecha. En el futuro, podras estimar y escribir el valor de LOC para cada nuevo programa antes de escribirlo. Aunque esto lleva asociado un poco de trabajo, el procedimiento descrito en las Secciones 6.6 y 6.7 es relativamente fcil de seguir mientras tienes datos histricos. Para la lectura de textos, el procedimiento es idntico, excepto que para determinar las Unidades Estimadas, debes contar el nmero de pginas que vas a leer del libro. Utilizando estos datos, puedes ver cuanto tiempo has dedicado a codificar programas y a leer captulos del libro. Podras de igual forma incluir otras tareas, para las cuales t tengas medidas de tamao y tiempos.
RESUMEN
Este captulo introduce las medidas de tamao del producto y muestra cmo encajan en el proceso de planificacin del producto.
70
Mtodo Cabecera
Tiempo Estimado
Divide el tiempo Hasta la Fecha por las Unidades Hasta la Fecha para obtener los minutos por unidad para todos los trabajos terminados hasta la fecha. Escribe la velocidad mxima para todos los trabajos de cada tipo que hayan acabado. Escribe la velocidad mnima para todos los trabajos de cada tipo que hayan acabado. Escribe una descripcin del trabajo que se ha hecho. S suficientemente claro para que el contenido del trabajo pueda ser fcilmente identificado.
71
Las medidas de tamao se introducen para ayudar a estimar el tamao del producto. El captulo describe como determinar el tamao de un programa en lneas de cdigo (LOC). Otras medidas de tamao, como los mens, los ficheros, las pantallas y las pginas de informes, son frecuentemente necesarias para proyectos de software a escala industrial. El primer paso para planificar un producto es estimar su tamao. Para hacer una estimacin exacta del tamao, utiliza datos histricos. Es til dividir los datos histricos del tamao en categoras funcionales. Puedes estimar cuntas lneas de cada categora necesitars en el nuevo programa. Conforme acumules datos histricos, probablemente hars estimaciones ms exactas. El Cuaderno de Trabajos proporciona una forma adecuada para registrar grandes volmenes de datos histricos de tamao y velocidad.
EJERCICIO 6
Revisa las tareas finalizadas en los ejercicios hechos hasta la fecha y cuenta sus tamaos en LOC y pginas. Presenta estos datos en el formato de la Tabla 6.1 para los ejercicios de los captulos y en el de la Tabla 6.3 para los programas. Tambin, entrega actualizados, el Resumen Semanal de Actividades y el Cuaderno de Trabajos, con los datos de velocidades expresadas en minutos por LOC y minutos por pgina. Si no tienes copias de todos los programas acabados, incluye datos de al menos los 3 ltimos. Tambin, presenta una copia de algunas pginas del Cuaderno de Registro de Tiempos, del Cuaderno de Trabajo y del Resumen Semanal de Actividades que no hayas entregado anteriormente. A partir de ahora, presenta en donde proceda, todos los cuadernos y resmenes con tasas en minutos por LOC y minutos por pgina.
CAPITULO 7
Este captulo describe las estimaciones de tiempo y muestra cmo usarlas. Explica cmo hacer una estimacin de tiempo y sugiere algunas tcnicas para satisfacerlo. El ejercicio del captulo consistir en hacer una estimacin de tiempo.
7.1
74
7.2
7.3
7.4
75
Esta es una decisin muy personal que debes equilibrar entre el trabajo acadmico, las tareas, el descanso y la vida social. Algunos de estos componentes son cuestiones personales que implican complejas elecciones, particularmente si tienes un trabajo y responsabilidades familiares.
7.5
1
1 1 1
Actividad
Asistir a clase
Escribir programas Leer Texto Preparar exmenes Otros
1
I I I
Minutos estimados
150
1
I I I
Minutos reales
1
l l l
~
360
100
120
30
Total
00 4
La Tabla 7.2 es una copia del Resumen Semanal de Actividades de la Estudiante Y de la Tabla 4.4. Observando la lnea 19, puedes comparar la estimacin de tiempo en la Tabla 7.1 con la forma de utilizarlo realmente. Esto nos conduce a las siguientes conclusiones: El tiempo total de la Estudiante Y en este curso tiene una media de 742 minutos por semana hasta la fecha. Es decir 12,37 horas. Con la nueva estimacin, ella planifica dedicarle 840 minutos, o sea 14 horas por semana, lo que supone un tiempo adicional de 1,5 horas. Este es un cambio demasiado grande ya que puede tener problemas para encontrar este tiempo adicional cada semana. La Estudiante Y est estimando la misma cantidad de tiempo para asistir a clase, tal y como vena hacindolo hasta la fecha, es un plan razonable. Planifica dedicar 20 minutos ms de tiempo cada semana a codificar programas. Esto, probablemente, tambin es razonable.
76
Fecha
23/9/96
4 5 6 7 J 8 V
9 S
77
77
4 0 33 14 6
33
50
7 4
10 Totales
10 5
339
24 2
73 1
Planifica dedicarle, aproximadamente, el mismo tiempo que el empleado hasta ahora para leer libros. Esto parece razonable. Los grandes incrementos estn en las categoras de preparar exmenes y Otros. Estas dos suman un total de 150 minutos por semana, o 2,5 horas. Este gran cambio, probablemente, no es realista. Aunque, puede tener sentido para la Estudiante Y, aumentar su tiempo total a un valor prximo al mximo de los 771 minutos dedicados hasta ahora, esperar hacer mucho ms podra no ser realista. La clave para gestionar el tiempo es reequilibrar gradualmente la forma de utilizarlo. As, no puedes esperar dedicar ms tiempo a algunas tareas en el futuro, a menos que identifiques otras reas que puedas acortar, sino esto es ilusorio. Un paso importante es asegurarte que utilizas tu tiempo con ms
77
efectividad. A menudo, las personas gastan mucho tiempo decidiendo qu van a hacer prximamente. Estableciendo planes personales y estimando el tiempo, podrn srrber qu hacer a continuacin. Asombrosamente, esto mejorar de inmediato su eficiencia en el trabajo. Puedes necesitar ms tiempo para hacer todas las cosas que deseas hacer. De nuevo, sin embargo, necesitas ser realista. Normalmente, puedes encontrar algn tiempo extra en una situacin de crisis, pero no quieras vivir perpetuamente en crisis. As, dedica cantidades razonables de tiempo al cuidado de tu salud, a la familia, a los amigos, a las aficiones y a las comidas. Aunque podrs ser capaz de hacer algunos ajustes en estas reas, deberas hacerlo de forma gradual. Te sugiero que establezcas un ritmo sostenido de trabajo que puedas llevar de forma continua durante el curso acadmico. Puedes ser capaz de recortar profundamente una o ms reas en una crisis, pero no puedes hacerlo durante mucho tiempo. Si debes dedicar ms tiempo a alguna actividad, necesitas tomar este tiempo de otra parte. Entonces haz tu estimacin de tiempo de acuerdo con esto.
7.6
El problema es que el da solamente tiene 24 horas y no hay nada que puedas hacer para aumentarlas. Si necesitas dedicar ms tiempo a alguna actividad, dcbcs tomar ese tiempo de otras actividades. As, hasta que no sepas cuanto tiempo dedicas a cada categora de actividades, ser difcil hacer ajustes realistas.
7.7
78
generalmente, declaraciones de lo que quieres hacer. La gestin del tiempo real, requiere tomar decisiones minuto a minuto. As, para hacer realmente lo que quieres hacer, necesitas ser muy concreto. Probablemente habrs observado que es fcil gestionar la cantidad de tiempo que dedicas a asistir a clase. La razn es que las clases ocurren a intervalos regulares. Cuando las personas tienen unas rutinas especficas que seguir, generalmente las pueden hacer. Muchas de las cosas que hacemos, son en respuesta a algunas reglas que alguien ha establecido. Para una efectiva gestin del tiempo, tambin necesitas reglas, pero ahora, debes fijarlas t mismo. En efecto, la gestin del tiempo estimado es: el conjunto de reglas que tienes establecidas para gestionar tu propio tiempo. Para proporcionar una gua til en tu comportamiento diario, necesitars una estimacin diaria del tiempo. Tus estimaciones para los distintos das y semanas, probablemente diferirn. As, ser necesario un formato como el de la Tabla 7.3. Ahora puedes ver, por qu la estimacin de la Tabla 7.1 no era muy til. Por ejemplo, tendra poco sentido dedicar un tiempo semanal a preparar exmenes. No querrs esperar hasta el ltimo da antes del examen, ni querrs prepararlo por adelantado, para olvidar los temas el da del examen. Tambin, la categora de Otros en la Tabla 7.1 era una asignacin para actividades no planificadas. Aunque, es una buena idea hacer alguna asignacin para cuestiones imprevistas, obviamente, no hay forma de hacer planes detallados por sorpresa. Una forma de gestionar las contingencias imprevistas, es asignar un poco ms de tiempo de la media histrica
Tabla 7 3 Estimacin semanal de actividades. .
Nombre Estimacidn !Semana #1 Fecha
79
Estimacin Semana #3
a cada actividad. Poner excedentes, te permitir gestionar errores ocasionales de planificacin y eventos imprevistos. Una estimacin de tiempo ms realista para la Estudiante Y se puede ver en la Tabla 7.4.
7.8
80
riable: actividades que haces cuando puedes encontrar tiempo. Hay, sin embargo, dos tipos de actividades variables: las exigidas y las discrecionales. Las actividades exigidas incluyen tareas como, hacer en casa los trabajos asignados en clase, leer un libro o preparar los exmenes. Aunque son exigidas, son variables, porque las haces si encuentras tiempo, y dedicas a las mismas, cantidades variables de tiempo cada semana. Las actividades discrecionales son todas las otras cosas que haces: comer, dormir, vida social, hacer deporte, ver deporte en la televisin y otros entretenimientos. Cuando haces una estimacin global de tiempo, es til determinar de forma exacta cunto tiempo has dedicado a cada categora. Programar los
Tabla 7.4 Ejemplo de estimacin semanal de actividades.
hombre Estudiante Y Estimacin Semana #1
I I
Fecha
Estimacin para una semana normal
23/9/96
t
Tarea
Clase
Codificar
Prog.
Fecha
Mi
50
I J I I s I
Totale
150
1 1
10 2
120
360
200
7O 1
V S Totales
50
120
170 150
820
150 150
240
430
81
tiempos fijos no es problema, el problema ms comn es, asignar el tiempo variable. Por ejemplo, si no tienes suficiente tiempo para hacer los trabajos asignados cuando debas, el nico sitio para obtener tiempo adicional es de tus actividades discrecionales. Esto sugiere que eches un vistazo a los tiempos fijos, exigidos y discrecionales para ver donde puedes hacer los ajustes. Una herramienta para examinar la distribucin personal del tiempo es el resumen global de tiempos que se muestra en la Tabla 7.5. Para completar dicha tabla, tendrs que registrar, aproximadamente, cuanto tiempo dedicas normalmente a cada actividad. Aunque, podras utilizar el Cuaderno de Registro de Tiempos, no se necesitar, en una primera aproximacin este grado de detalle. Para empezar, es adecuado anotar al final de cada da, a qu has dedicado tu tiempo en cada categora. As te aseguras que los tiempos de cada da suman 24 horas y el tiempo total de la semana suma 168 horas o sea 10.080 minutos, tus totales probablemente estarn bien. Si no eres capaz de hacer un resumen adecuado de esta forma, entonces puedes utilizar el Cuaderno de Registro de Tiempos. Con un resumen total como el que se muestra en la Tabla 7.5, tienes los datos bsicos para decidir de donde coger el tiempo adicional que necesitas. De nuevo, sin embargo, necesitas ser realista. Reducir las horas de sueo o de comer, por ejemplo, puede daar tu salud y disminuir la eficiencia del trabajo. Saltarse comidas y trasnochar puede ser una forma de solucionar problemas a corto plazo, pero generalmente, no es una buena idea planificar importantes reducciones en estas reas. Siendo realista, surge otro aspecto: tu buena voluntad para trabajar realmente en el plan establecido. Una planificacin sin tiempo para la vida social, la relajacin o los ejercicios fsicos, puede llegar a resultar un fastidio. Aunque puedas reducir el tiempo dedicado al relax y a la diver-
82
~~~h~
23/9/96
Actividad
Fija
Infonk
Fsica
Matem.
Otros
Total
sin, es necesaria una cierta cantidad de ocio. Es fcil llegar a estar cansado y depresivo cuando te concentras exclusivamente en el trabajo. As como rendirse a unas patatas fritas, al chocolate o a un helado, puede causarte que frustres una dieta, esto te podra conducir a rebelarte contra la idea global de la gestin del tiempo. Aunque es importante estimar y revisar el tiempo, asegrate de que tu estimacin es algo que ests dispuesto a llevarlo a cabo con buena voluntad. Conforme vayas controlando el tiempo, compara el tiempo real dedicado frente al tiempo estimado. Si puedes gestionar el tiempo consistentemente, de acuerdo a tu estimacin, no necesitas hacer muchos cambios. Sin embargo, lo ms probable es que tu plan inicial necesite ajustes. No te sientas mal si tienes que cambiar las estimaciones bsicas. Puesto que las actividades cambiarn de semana en semana, necesitars hacer revisiones ocasionalmente. Recuerda, sin embargo, anotar las nuevas estimaciones.
7.9
83
de cada categora. Si quieres utilizar dos perodos de tiempo para una categora en un da, utiliza dos columnas o haz ms grande los espacios de este formulario. El formato no es lo importante, cntrate, ms bien, en establecer un conjunto de reglas explcito y claro.
Tabla 7.6 Ejemplo de estimacin y gestin semanal del tiempo.
Nombre
Estudiante Y Estimacin para una semana normal
Fecha
23/9/96
Estimacin Semana #1
Tu capacidad para trabajar de acuerdo al tiempo estimado depender en gran parte de la disciplina personal, pero tambin depender del nmero y prioridad de las cosas que ests intentando hacer. Los asuntos inesperados, son cosas naturales y normales de la vida, especialmente en la ingeniera del software. Los problemas alterarn tus planes peridicamente y tendrs que hacer ajustes. Por ejemplo, para cumplir una fecha importante, puedes tener que trabajar hasta muy avanzada la noche o aplazar las actividades planificadas de tipo familiar, ocio o social. Puedes encontrar, que la primera vez que utilizas la estimacin de tiempo, no es muy til. Esto es normal, no renuncies al proceso de estimar el tiempo porque no funcione la primera vez. En su lugar, piensa qu es lo que ha sucedido. Fue algn suceso inusual, que probablemente no volver a suceder ? o fue el tiempo inesperadamente gastado en alguna actividad normal? Si fue una emergencia verdadera, no tendrs necesidad de hacer cambios radicales en la estimacin. Intenta utilizarlo otra sema-
84
na, y vuelve a examinar de nuevo los resultados. Si, por el contrario, la estimacin fue alterada por algn suceso normal, considera ajustar la estimacin para adelantarte a dichos sucesos en el futuro.
7.1O
Para gestionar diariamente tu tiempo, necesitas llevar las estimaciones de la gestin del tiempo contigo en todo momento. Una buena idea para hacer esto, es llevarlos en tu cuaderno de ingeniera. Insrtalos con un clip en la parte delantera o trasera del cuaderno de ingeniera, o grpalos. Cuando actualices el presupuesto, toma el ms reciente y guarda las copias antiguas. Comprueba las versiones anteriores antes de hacer un cambio, pues te ayudarn a evitar hacer correcciones. Para compensar haber sobreestimado una tarea estimada, por ejemplo, probablemente la subestimars la prxima vez. Si examinas las estimaciones anteriores, te mostrarn la tendencia y te ayudarn a escoger un valor medio ms documentado. Una regla para sobrevivir en la ingeniera del software es: no tires los planes, datos o programas viejos. Asombrosamente, los necesitars despus.
85
7.11
RESUMEN
Para gestionar bien tu tiempo analiza tus propios datos histricos de tiempos. Establece una estimacin para utilizar el tiempo y registra tu tiempo real frente al estimado. Para hacer una estimacin de tiempo decide cmo quieres utilizar el tiempo. Haz una programacin que refleje tu eleccin y que muestre los tiempos cada da; puedes necesitar diferentes estimaciones para distintas semanas. Las reglas bsicas para estimar el tiempo pueden ser tiles: identifica tus compromisos fijos y variables. Divide tu tiempo variable en tareas que son exigidas y aquellas que son discrecionales. Analiza como divides ahora tu tiempo en estas categoras. Recuerda que tu tiempo total es fijo: si necesitas ms tiempo para algunas actividades, debes dedicar menos tiempo a otras. Finalmente, revisa el rendimiento frente al tiempo estimado: contina reuniendo datos de tiempos. Revisa el tiempo estimado frente a tu experiencia real. Revisa la estimacin basndote en tus necesidades y experiencias. Haz los cambios de forma gradual. Cuando cambies tu estimacin de tiempo, guarda las versiones anteriores.
86
EJERCICIO 7
Utilizando los datos de la forma que tienes de gastar el tiempo, establece una estimacin de tu tiempo para semanas normales y para alguna especial que prevs durante el resto del semestre. Para los casos donde tu estimacin difiera sustancialmente de los tiempos medios, explica brevemente porque haces las distintas elecciones. Utiliza los formatos de estimacin mostrados en las Tablas 7.4 y 7.6. Entrega varias copias de estas estimaciones con el trabajo asignado para casa. Observa que la estimacin de tiempo es un ejercicio opcional que no necesitas completar a no ser que te lo pida tu profesor. Entrega las copias de las pginas del Cuaderno de Registro de Tiempos y del Resumen Semanal de Actividades que no hayas entregado todava.
CAPITULO 8
Este captulo se centra en los compromisos, discute qu son, por qu son importantes y cmo se gestionan. En el ejercicio revisars y anotars tus compromisos.
8.1
DEFINICIN DE COMPROMISO
Estar comprometido, es un estado mental. Por cualquier razn, te has comprometido a hacer algo, y sientes que deberas hacerlo. Un compromiso, sin embargo, es algo ms que hacer lo que desees hacer, hay algo que alguien espera que hagas. En efecto, esta es la cuestin clave en los compromisos: quin es la persona con la que te has comprometido? En sentido legal o contractual, ests comprometido con alguien: tu profesor, tu director, tu jefe. Ms importantes, sin embargo, son los compromisos ntimos que haces contigo mismo. El principal problema con muchas programaciones y planes de software, es que la direccin las ve como compromisos contractuales, pero los ingenieros del software no las ven como compromisos personales. La diferencia, como veremos, est en gran parte, en cmo se hacen los com-
88
promisos. En este captulo, aprenderemos cmo hacer compromisos contractuales que sean tambin compromisos personales. Con un compromiso contractual, dos o ms personas deben ponerse de acuerdo antes sobre la accin a realizar, esto es un compromiso. Por ejemplo, el Sr. A y la Sra. B llegan al acuerdo de que el Sr. A proporcionar algn producto o realizar alguna tarea para la Sra. B. Un ejemplo, es tu compromiso con tu profesor de hacer el ejercicio asignado para este curso. Otro ejemplo, podra ser tu contrato de escribir un programa para un cliente. Cuando el Sr. A se compromete, se pone de acuerdo con la Sra. B, para realizar una tarea especfica en un tiempo determinado y por una recompensa o compensacin. Esto indica que hay dos elementos adicionales en los compromisos. Adems de comprometerte en la tarea, las partes tambin se ponen de acuerdo sobre el tiempo en que va a ser hecha y en el pago u otra retribucin que recibir el Sr. A. Un ejemplo podra ser la obligacin del cliente de pagarte por el desarrollo e instalacin de algn software. Una caracterstica de los compromisos personales es que son voluntarios. Supongamos, por ejemplo, que tu cliente necesita el programa antes
y te dice que lo acabes dos semanas antes de lo inicialmente establecido. l, nunca pregunt si podas realizar la proeza, y t, por tu parte, no te comprometiste. Vosotros comentis la nueva fecha. Aunque pudieses comprometerte con la nueva fecha, probablemente no querrs sentirte personalmente comprometido a hacerlo.
Para estar verdaderamente comprometido, debes de considerar atentamente las alternativas y decidir que esto es algo que t puedes hacer y hars. Cuando te ordenan que debes hacer algo, no se tratar de un compromiso personal. En efecto, cuando a las personas se les ordena hacer cosas, a menudo, se sienten amenazadas y enfadadas. Se resisten a la persona que dicta las ordenes y puede que quieran responder contra ellos. Una forma de respuesta, naturalmente, sera no hacer la accin demandada. Dicha reaccin en los negocios puede parecer infantil, pero muchas personas responden inconscientemente de esta forma. El verdadero acuerdo es la caracterstica ms importante de un compromiso personal. Las partes deben ponerse de acuerdo sobre qu hacer, cuando se terminar y qu es lo que se dar a cambio. Un verdadero compromiso, es tanto personal como contractual y requiere un acuerdo voluntario y explicito entre dos o ms partes sobre: Qu se har. Los criterios para determinar que est hecho. Quin lo har.
89
8.2
Analiza el trabajo antes de aceptar el compromiso. Ambas partes deben establecer el compromiso de buena fe. T ests personalmente comprometido y realmente pretendes hacer el trabajo y la otra parte est dispuesta a proporcionarte la adecuada remuneracin a cambio. La cuestin, sin embargo, es el grado en que podis asegurar que podis cumplir el compromiso. Por ejemplo, has examinado el trabajo con suficiente detalle para saber que lo puedes hacer? De forma similar, la otra parte tiene la capacidad de remunerarte? Con frecuencia, los compromisos software estn basados en algo ms que esperanzas. Cuando ambas partes pretenden verdaderamente llevarlo a cabo, con buenas intenciones no se proporciona una base razonable para un buen acuerdo. Apoyar el compromiso con un plan. Para un trabajo de cualquier tamao, la forma de hacerse responsable de un compromiso, es hacer en primer lugar un plan para el trabajo. La planificacin implica algn esfuerzo, pero no es necesario que sea muy grande. En efecto, si has tenido experiencia en hacer planes formales, puedes normalmente completarlos rpidamente. Documentar el compromiso. Aunque esto puede parecer obvio, no lo es. Hay un malentendido comn de que las personas honestas solo necesitarn unas pocas palabras y un apretn de manos. Pero las palabras, a menudo, son mal interpretadas. Despus de que dos personas se comprometen oralmente, tienen, a menudo, problemas de comprometerse por escrito. Esto significa que sus compromisos originales eran superficiales e irreales. El segundo problema tiene que ver sobre qu harn las dos partes si surgen problemas. Esta, en efecto, es la principal razn de muchos contratos. No necesitas un contrato cuando las cosas funcionan de acuerdo con lo planificado, lo necesitas cuando hay problemas.
Si eres incapaz de cumplir el compromiso, dselo inmediatamente a la otra parte e intenta minimizar el impacto sobre esa persona. Cuando hayas aprendido a gestionar tus compromisos, casi siempre los cumplirs. Desdichadamente, aun con los mejores planes, el trabajo ocasional-
90
8.3
EJEMPLO DE UN COMPROMISO
La Estudiante Y se ha comprometido a hacer 10 horas de trabajo a tiempo parcial cada semana en la Oficina de Administracin de la Universidad. Los pasos necesarios para establecer adecuadamente el compromiso para este caso, se muestran a continuacin.
1. La Estudiante Y se rene con el jefe de la Oficina de Administracin, que le explica el trabajo que deber hacer. Esta es la fase de requisitos del proceso de compromiso, en la cual la Estudiante Y se entera de qu clase de trabajo se espera que haga. Para un trabajo de oficina, el producto de esta fase debera ser una lista de tareas a realizar, posiblemente una descripcin del trabajo.
2. La Estudiante Y analiza las tareas y concluye que est dispuesta a hacer ese trabajo y es capaz de llevarlo a cabo.
Respondida la primera cuestin: puedo hacer el trabajo?, la siguiente cuestin es: puedo hacerlo en el tiempo y con los recursos requeridos? Para responder a esta cuestin, la Estudiante Y hace lo siguiente:
3. Examina sus compromisos personales de tiempo y concluye que puede encontrar 10 horas (o sea 600 minutos) durante cada semana para hacer el trabajo. Como puedes observar, comparando la Tabla 8.1 con la Tabla 7.5, obtiene este tiempo, reduciendo su tiempo total de descanso en 600 minutos.
4. Revisa sus propios compromisos, mostrados en la Tabla 8.2, y concluye que la franja horaria que necesita para el trabajo, de 4:OO a 6:OO de la tarde de lunes a viernes, est disponible.
5. Ahora que est segura de que puede hacer el trabajo, discute, la
cantidad de dinero a percibir y la fecha de incorporacin al trabajo, con el jefe de la Oficina de Administracin.
6. Con todas estas cuestiones establecidas, la Estudiante Y y el jefe se comprometen en todas las cuestiones discutidas y el supervisor se compromete a proporcionarle una carta que resuma los puntos clave.
Este es un compromiso responsable. La Estudiante Y se tom su tiempo para entender el trabajo y su capacidad para hacerlo. Se asegur que poda hacer el trabajo y que tendra el tiempo disponible. Tambin se lleg a un acuerdo con el jefe sobre la cantidad de dinero a percibir y otras condiciones del trabajo.
91
Fecha Clase
3019196
IP
UN EJEMPLO EN LA INDUSTRIA
A un ingeniero de una de las principales compaas de automviles, le asignaron un trabajo de software urgente. Antes, la direccin le haba dado simplemente la fecha junto con el trabajo asignado. Pero puesto que el ingeniero y su equipo haban terminado el curso de PSP, pidi tiempo para echarle un vistazo al problema y volver a la maana siguiente con un plan. El ingeniero estim el tamao del trabajo y utiliz sus datos del PSP para determinar cunto tiempo le llevara el trabajo. Volvi a hablar con su director y le explic el plan y por qu crea que era realista. Su director estuvo de acuerdo y el ingeniero acab el trabajo en el perodo que se haba comprometido. Antes, las programaciones impuestas por el departamento de gestin raramente eran satisfechas. Aunque muchos de ellos no eran realistas, el problema principal fue la falta de compromiso personal por parte de los ingenieros. Jugando un papel activo en hacer un compromiso mutuo con la direccin, este ingeniero fue capaz de establecer una programacin razonable. En el proceso, el tambin se comprometi personalmente.
92
Fecha
Compromisos fijos de tiempo
3019196
Presupuesto Semana #1
t
Tarea Fecha
D
Inform.
I
Fsica
I
Matem.
I
Ingls
I
Trabajo
I I I
I
Total
L
M
M
J
V S
Totales
9:oo950
1o:oo1050
400600
220
150
150
100
100
600
10 10
8.5
93
La forma de manejar los errores ocasionales de fecha de entrega o compromisos no cumplidos es importante. Los problemas de los compromisos son siempre desagradables. Probablemente te sentirs mal cuando hayas planificado mal, y la persona con la que te has comprometido se podra sentir engaada o timada. Podra haber consecuencias financieras y la bsqueda de algn culpable. Las cosas desagradables empeoran con el tiempo. Retrasar la notificacin con la esperanza de que las cosas mejorarn, normalmente hace que empeoren. Es mejor enfrentarse a lo desagradable tan pronto como entiendas el problema.
Una advertencia importante: no abandones sin intentar seriamente cumplir el compromiso. Lo has discutido con un experto independiente para ver si hay una forma mejor? Podras aadir recursos para acelerar el trabajo? Hay formas ms inteligentes de hacer el diseo? Examina atentamente las alternativas y entonces, si no hay otra forma, enfrntate al problema sin dilacin. Los compromisos incumplidos generalmente conducen a molestias e insatisfacciones. Esto es porque, a menudo, la gente retrasa enfrentarse a dichos problemas hasta el ltimo momento posible; como los avestruces, estn aplazando lo desagradable con la esperanza de que los problemas desaparezcan de algn modo. Desafortunadamente, meter la cabeza bajo el ala, siempre aumenta la desorganizacin, reduce las opciones de los clientes y maximiza los resultados desagradables.
8.6
94
8.7
95
que te insistan en que t trabajes con programaciones que no sean razonables. El activo ms importante que puede tener un ingeniero del software es su reputacin para cumplir los compromisos. Para que las personas confen en tu palabra, necesitas exponer tu plan de trabajo y entonces hacer lo que dices. Un propsito importante de este libro es proporcionarte herramientas que te ayuden a hacer compromisos reales que puedas cumplir de forma consecuente.
8.8
Fecha Clase
3019196
IP
1 1
Asistir a clase
IProfesor
1 1
1.5
6,O
4,O
1 1
19 1
1 Aprobar 1 Aprobar
Aprobar Paga
Profesor Admisin
10,o
Ejercicio trimestral
Profesor
24
11 19
Aprobar
Para gestionar los compromisos en ingeniera del software, es importante recordar varios hechos de la vida del negocio del software. Si te ests retrasando, tu planificacin continuar retrasndose a no ser que hagas algo diferente. Intentarlo ms duramente no ayudar. Recuerda, que ya estuviste intentndolo con bastante esfuerzo.
96
Si no sabes exactamente dnde ests en el proyecto y cunto trabajo te queda, sin lugar a dudas ests en un problema. Cuando debas tener buena suerte para cumplir un compromiso, no la tendrs. Cuando tus estimaciones son errneas, casi siempre son muy bajas. Casi todos los cambios implican ms trabajo. Es importante trabajar enrgicamente para cumplir los compromisos, pero si no puedes terminar el trabajo con unas pocas horas de esfuerzo extra, enfrntate al problema ahora y trtalo con responsabilidad.
RESUMEN
Este captulo ha definido el compromiso. Ha explicado por qu es importante cumplir los compromisos y cmo gestionarlos. Dos o ms partes se comprometen a alguna tarea, cuando estn de acuerdo sobre lo que es esa tarea, quin la har, cundo se har y qu se pagar a cambio. Los compromisos que se hacen de forma adecuada, es razonable que se cumplan. Estn respaldados por un plan, y tanto el plan como el compromiso estn documentados. Deberas gestionar los compromisos para evitar desbordamientos. Si ests desbordado, te equivocars en establecer algunos compromisos y ganars la reputacin de ser una persona que no es de fiar. No cumpliendo los compromisos puedes daar tu carrera, afectar a tus calificaciones y a tu habilidad para conseguir y mantener un trabajo.
Los pasos para gestionar los compromisos son: (1) hacer una lista de tus compromisos actuales, (2) incluir que es lo que hay que hacer y cuando, e (3) incluir una estimacin de cuanto trabajo te supondr cada compromiso.
Recuerda los siguientes hechos en la vida del ingeniero del software: continuars retrasndote a menos que hagas algo diferente. Intentarlo ms duramente no ayudar. Necesitas conocer con precisin dnde ests y qu trabajo te queda por hacer. No puedes contar con la buena suerte para salir de un apuro. Cuando tus estimaciones estn equivocadas, sern casi siempre muy bajas. Casi todos los cambios implican ms trabajo.
EJERCICIO 8
H z una lista de tus compromisos. Incluye un breve resumen sobre en qu a consiste el compromiso, quin est comprometido, cundo se debe cum-
97
plir, cunto tiempo esperas dedicarle para cumplirlo, y qu esperas obtener a cambio. Utiliza un formato como el que se muestra en la Tabla 8.3. Entrega una copia de esta lista junto con tu trabajo de casa. Observa que la lista de compromisos es un ejercicio opcional que no necesitas completar a no ser que te lo pida tu profesor. Entrega las copias de las pginas del cuaderno de registro de tiempos, del cuaderno de trabajos y del resumen semanal de actividades que no hayas entregado todava.
CAPITULO 9
Este captulo muestra cmo desarrollar y utilizar las programaciones' para controlar el progreso del proyecto. Aprenders a utilizar los puntos de control para controlar el progreso real frente a lo programado; en el ejercicio del captulo, identificars y describirs varios puntos de control para controlar el progreso sobre un proyecto de programacin.
9.1
No se debe confundir el sentido del trmino programacin como elaboracin de un programa de actividades con su sentido como actividad de desarrollo de programas software. Del contexto queda claro que nos referimos a la elaboracin de un programa de actividades (N. del T.).
'
100
de trabajo, o cuando existen restricciones sobre las programaciones, se necesita una gestin del tiempo ms sofisticada. Debes alternar las tareas, haciendo una durante algn tiempo y pasndote entonces a la siguiente. Supongamos, por ejemplo, que tienes que entregar un programa en tres semanas y un trabajo trimestral que completar en 4 semanas. Supn que prevs que vas a necesitar unas cinco horas para escribir el programa, pero el trabajo debe hacerse en un sistema particular disponible solamente una hora al da. Supn tambin, que el trabajo trimestral requiere alguna bsqueda bibliogrfica y que debes entregar un esbozo en una semana. Esperas que el trabajo trimestral te suponga unas 10 horas de trabajo total. Puesto que planificas dedicar 5 horas a la semana a ambos ejercicios, esperas terminarlos en unas tres semanas. Siguiendo la estrategia de terminar una tarea antes de comenzar la siguiente, comienzas el trabajo trimestral primero, puesto que el resumen lo debes entregar en una semana. Como esperabas, haces la bsqueda, realizas el esbozo y acabas el resumen en una semana. Entonces, comienzas a programar. Despus de trabajar un poco, sin embargo, encuentras que el programa te supondr alrededor de 10 horas de trabajo en vez de las 5 estimadas. Desafortunadamente, ni con un intenso esfuerzo, puedes tener el ordenador el tiempo suficiente para acabar el programa en el tiempo previsto. Supn, sin embargo, que has hecho algn trabajo inicial de ambos ejercicios durante la primera semana. Entonces veras que el programa era ms largo de lo que esperabas y tendras tres semanas para encontrar el tiempo necesario extra de ordenador. Conforme trabajes en proyectos cada vez ms grandes, ser cada vez ms importante cuidar la programacin de tu tiempo. Un ingeniero del software tpico puede tener varios mdulos que comprobar para el desarrollo de un proyecto, mientras est trabajando simultneamente en un informe tcnico sobre la documentacin de un producto. Pueden surgir cuestiones sobre un programa desarrollado previamente, necesitando reuniones tcnicas y de revisin del proyecto. Los ingenieros de algn modo pueden encajar muchas de dichas tareas en sus programaciones diarias sin olvidar o menospreciar cualquiera de ellas. Tambin pueden, a menudo, coordinar su trabajo con muchas otras personas. Es necesario hacer juegos malabares para no tirar ninguna bola, por ello el ingeniero necesita tener una programacin personal.
EL DIAGRAMA DE GANTT
Una programacin es una lista ordenada por tiempos de eventos planificados, generalmente presenta un formato como el que se muestra en la
101
Figura 9.1. Dicha figura se denomina Diagrama de Gantt y tiene los siguientes elementos clave: En la parte superior del diagrama estn las fechas. Dependiendo del grado de detalle deseado, la lnea de tiempos, se puede dividir en das, semanas, meses o aos. Tambin puede estar en horas si lo deseas. La columna que est ms a la izquierda contiene un nmero de identificacin (ID) para cada tarea. En la segunda columna de la izquierda estn los nombres de las tareas a realizar. Estn normalmente enumeradas en el orden en el cual esperas hacerlas. En el cuerpo del diagrama, las barras muestran las fechas previstas de comienzo y fin para cada tarea. En la parte inferior izquierda, est el nombre del proyecto, el autor de la programacin y la fecha en que se hizo la programacin. Varios puntos de control se muestran mediante pequeos valos (IDs 2,5,7,9 y 14). Los puntos de control se discutirn posteriormente en este captulo. Como puedes observar, el diagrama de Gantt es una forma til de presentar el flujo general de las tareas de un proyecto. Dichos diagramas son particularmente tiles para coordinar mltiples actividades. Como se explica ms adelante, el diagrama de Gantt tambin proporciona una forma til de seguir el progreso del proyecto frente al plan y la programacin.
3. Identifica las interdependencias entre las tareas. Qu informacin necesita cada persona antes, para ser capaz de realizar el trabajo y de quin le tiene que llegar esa informacin?
103
4. Documenta cada una de estas interdependencias. 5. Revisa la programacin propuesta y las interdependencias con todas las personas implicadas, asegrate de que no hay conflictos, desacuerdos o malentendidos.
6. Revisa la programacin para asegurarte de que cubre todas las tareas necesarias para completar todo el trabajo.
Aunque, necesitars ms pasos para elaborar programaciones en grandes proyectos de software, estos principios bsicos te ayudarn a hacer planes para tu trabajo personal o para proyectos con equipos pequeos que impliquen a tus compaeros de clase o colegas.
9.4
PUNTOSDECONTROL
En la planificacin de cualquier proyecto, por pequeo que sea, es importante dividir el trabajo en varias partes que puedan ser estimadas y planificadas. Cada una de estas partes se puede tratar como un elemento de la programacin. Es decir, cuando se completa cada parte, se ha realizado un determinado grado de progreso. Estos puntos de la programacin que son medibles se llaman puntos de control o hitos. Los hitos son una parte importante de la planificacin y gestin de proyectos. Un hito es un punto que, objetivamente, se puede identificar en un proyecto. Un ejemplo, sera la terminacin de alguna actividad especfica del proyecto o una accin importante. Cuando un plan incluye varios hitos, cada uno con una fecha de terminacin planificada, puedes ver fcilmente si ests dentro de lo programado o ests retrasndote. Para ser tiles, los hitos deben ser claros y no ambiguos. Es decir, un punto de control debe ser una accin especfica que se hace o no se hace. Algunos ejemplos de puntos de control concretos son: Has terminado y entregado un trabajo trimestral. Has elaborado y documentado el plan para escribir un programa, utilizando un formato normalizado de planificacin. Has revisado el plan de desarrollo con tu profesor y has hecho las modificaciones sugeridas. Has completado y documentado un diseo de un programa, utilizando un formato de diseo especificado. Has implementado, compilado y corregido un programa hasta que se compila sin errores. Hay muchos ejemplos de puntos de control concretos que son adecuados para los propsitos de la planificacin. El requisito clave, es que la terminacin de cada punto de control se pueda verificar objetivamente.
104
Las informaciones generales que no conducen a un criterio verificable no pueden utilizarse como puntos de control.
Puntos de control no adecuados son:
Has hecho un plan para escribir un programa. Has diseado un programa. Se ha completado el 90% de la codificacin. Aunque algunas de estas sentencias podran refinarse posteriormente, para conducir a un criterio de un punto de control directo y no ambiguo, tal y como estn escritas son muy generales. Para la sentencia, has hecho un plan para escribir un programa, jcmo podras saber si el plan contiene la informacin necesaria? Aunque pudieras encontrar un plan, el punto de control por s mismo no te dice lo que quieres saber. Si no utilizas un marco de trabajo que defina la planificacin, el plan puede estar o no completo. La segunda sentencia, has diseado un programa, jsabes lo que constituye el diseo completo? Casi cualquier cosa se puede considerar como diseo, desde un sencillo diagrama de flujo hasta una descripcin detallada. Si se aade a dicha sentencia que el diseo ha de ser documentado en un formato especificado, esto s podra ser un punto de control adecuado. Fred Brooks describi la sentencia La codificacin se ha completado hasta un 90%, como ejemplo de un informe vago y engaoso sobre el estado de un proyecto tpico de muchos proyectos software [Brooks]. Si alguien te dice que un proyecto va bien, porque la codificacin est casi hecha, es un signo seguro de que hay problemas. Si la persona te dice que ha completado, revisado, compilado y corregido el cdigo de 7 de los 9 nuevos mdulos y ha comenzado a trabajar en el octavo, puedes estar tranquilo de que esa persona sabe de lo que est hablando.
105
tas condiciones, la gestin de proyectos reduce el tiempo de gestin. Conforme vayas dedicando las horas necesarias, irs aproximando el trabajo a lo programado. Deberas, permitir siempre un tiempo reducido de seguridad para cada tarea, para el caso de que te lleve ms tiempo de lo esperado. Para las tareas que tengan una duracin de varias semanas, establece al menos un punto de control por cada semana, si solamente esperas dedicarle aproximadamente una media hora semanal a la tarea. Este punto es necesario para recordarte que hagas el trabajo que est planificado. Sin dichos recordatorios, es fcil olvidarse de estas pequeas tareas. Si realmente no puedes definir un punto de control para cada uno de estos perodos de media hora, lo mejor que puedes hacer es gestionar la cantidad de tiempo que t decidas. Hasta que realmente completes un determinado punto de control, solo puedes estimar el progreso de forma general. Los grandes proyectos, a menudo, suponen varias semanas o meses, e implican a varios ingenieros del software. Puesto que las tareas en el proyecto son interdependientes y el proyecto tiene dependencias con otros proyectos, no puedes acabar tus tareas hasta que los otros ingenieros completen las suyas. Es importante para cada ingeniero en un proyecto, tener varios puntos de control intermedios, para que todos puedan saber el estado de todos los trabajos. Si algunos ingenieros tienen problemas, otros pueden ayudarles o adaptar su trabajo para prevenir retrasos en el proyecto global.
9.5
106
Otra razn para controlar los planes, es para ser capaz de actuar a tiempo frente al problema. Con un efectivo seguimiento del proyecto, reconocers los problemas muy pronto, vers cmo corregirlos y, a menudo, sers capaz de recuperar el proyecto. En efecto, un buen sistema de seguimiento puede ayudarte a anticiparte a los problemas antes de que se vuelvan lo bastante serios como para amenazar el xito del proyecto.
UN EJEMPLO
Un diagrama de Gantt se puede utilizar tanto para representar la programacin del proyecto como para informar dcl progreso frente a lo programado. En la Figura 9.2, por ejemplo, el Ingeniero X informa sobre el estado del proyecto el 13 de diciembre. Observa lo siguiente: La fecha actual se indica por medio de una lnea vertical doble en el da 13/12. Las actividades acabadas se indican por medio de una lnea horizontal sobre el bloque de la tarea. Por ejemplo, los requisitos (ID 1) se han acabado. Las actividades parcialmente acabadas se indican con una lnea horizontal parcial sobre el bloque de la tarea. Por ejemplo, el diseo (ID 6) debera haber sido acabado el 12/12, pero muestra solamente una terminacin del 80%. Hasta acabarlo, naturalmente, este 80% puede ser solamente una estimacin. Las actividades del proyecto que llevan ventaja sobre lo programado se indican con una lnea de progreso que se extiende ms all de la fecha de evaluacin. Por ejemplo, el Ingeniero X comenz la codificacin y las pruebas antes (IDs 8 y 10). Los puntos de control acabados se marcan con una flecha en la fecha real de su realizacin (IDs 2 y 5). Con esta actualizacin puedes ver que el Ingeniero X va un poco retrasado en el diseo con respecto a lo programado, pero va un poco adelantado con la codificacin y pruebas. El hito Diseo acabado an no se ha alcanzado, por lo que el proyecto se puede considerar que lleva retraso.
108
Asegrate de que los puntos de seguimiento estn definidos con claridad y estn por escrito. No cambies la programacin hasta que hagas un nuevo plan. Cuando informes de la situacin real frente al plan, no cambies el plan. Si deseas mostrar una nueva estimacin de fechas de finalizacin, deja la programacin original en el mismo lugar y anota las nuevas fechas con lneas de puntos. Guarda copias de la programacin original y de todas las actualizaciones. La clave consiste en recordar que ests comparando la situacin real frente a la programacin original que no has cambiado. Dicha programacin era el plan que ests midiendo frente al trabajo realizado. Si alteras el plan original, no tendrs nada frente a lo que medir. Esto es por lo que, cuando ests controlando el estado del proyecto, es una buena idea comprobar la fecha inicial de la programacin. Si dicha fecha est muy prxima a la fecha de revisin, entonces la actualizacin no proporciona una medida til del progreso del proyecto. Pide una programacin original.
9.6
1o9
Captulo
Minutos
!Semana
Prlogo
1 Borrador 1 1 Editar 1
Reescribir
207
000
1 1 3,010 1 0,420 1
3,2431 3,243 1,3671 4,610 3,619 12,0391 1,3671 13,4061
1 2 2 3 3 4 4 4
1 1 1
1 1 1
1 1 2
1 1 1
1
760
000
2 2
2
1 Editar 1 1 Reescribir 1
Captulo 2 Borrador
760 207
000
1
1
1
1 1
1 1
1 1
Captulo3
1 1 1
1 Reescribir 1 Borrador 1
Editar Editar Borrador Editar Reescribir
760 207
3,619 29,631
7 7
0
3 3 3
000
Captulo4
1 1
1 1
207
000
1 0 1 0 1 0 11
1 3,619 1 1
1 1
1
1 1 1 1
1 1
4 4
1 1
1 1
3,010 1,367
Editar
000
Captulo 6
1 Reescribir 1 1 Borrador 1
Editar
760 207
12 12
1 4
1,367
000
207
000
Captulo 7
1 Borrador 1 1 Editar 1
Reescribir
1 5 1 6 17
3,010 69,9921 3,619 73,611 1,367 74,970 3,010 70,700 3,619 02,407 1,367 03,774 3,010 07,505 3,619 91,203 1,367 92,570 1 0O 3,619 1 0 , 1
1 1
1,367
17
1 0
1 Editar 1 1 Reescribir 1
Captulo 9
1 Borrador 1
1 1 1 1 Reescribir 1 Borrador 1
Editar Editar
1 0
19 19
20 20
Captulo 1 0
Total
1
1
21
I
1
20.990
100,o
110
Antes que rehacer el plan, decid revisar mi trabajo de unas semanas, para ver si poda hacer una nueva programacin ms reducida. Tambin decid, que en vez de completar cada captulo, uno tras otro, yo escribira y corregira los borradores, y que algn editor asociado los revisara antes de la redaccin final. Esta aproximacin tendra la ventaja de informarme sobre las crticas del trabajo, y probablemente redundara en un mejor producto final. La desventaja era que no podra completar la revisin de cualquier captulo hasta muy tarde. Entonces, jcmo podra decir si estaba actuando sobre lo programado? La respuesta a este problema es algo llamado valor conseguido. Bsicamente, examin el plan y asign un valor a cada tarea basndome en la cantidad de tiempo que esperaba dedicarle, de acuerdo con lo planificado. Hice esto calculando para cada tarea el porcentaje correspondiente del total de los 20.998 minutos planificados para esta parte del proyecto. As, la tarea planificada de 68 1 minutos tendra un valor ganado de 100*68U20.998 = 3,243%. Para conseguir la programacin acelerada, tena que alcanzar el valor del 100% el da 10 de agosto, o la semana 17, en vez de la semana 2 1. Despus de las cuatro primeras semanas de trabajo, pude ver que completara los 10 primeros captulos a tiempo (vanse la Tabla 9.2 y la Figura 9.3). Aqu, calcul el valor estimado, anotando lo que haba ganado de valor durante cuatro semanas (37,037), o 9,259 cada semana. A
lo0
r
c c ,
,
/
/ /
. .. . .. .
Estimacin
10
13
16
19
Nmero de semana
111
Valor Ganado
Valor Estimado
I I
1 0
11
I I
47,223 52,400 57,306 57,386 64,815 66,182 69,992 74,978 82,407 87,585 96,380
I I
I I
I I
l2 1 3
1 4
1 5
1 6
1 7 1 8 1 9
20
2 1
100,o
esta velocidad, poda esperar conseguir los valores que se muestran en la columna de Valores Estimados de la Tabla 9.2. Aqu, aparece que alcanzara el 100% la semana 1 1 , o sea mucho antes de la semana 17 que era la semana obligada. El caso es que, utilizando el valor ganado, poda hacer el trabajo en un orden diferente al planificado originalmente y todava controlar el progreso frente al plan. Aunque poda haber rehecho el plan, habra sido mucho trabajo y habra retrasado el proyecto. Puesto que haba aadido la tarea de revisin, la terminacin llevaba un poco ms que lo planificado y realmente acab el manuscrito en la semana 15, a tiempo para el prximo semestre. Aunque no se requiere utilizar ms adelante en este libro, el seguimiento del valor ganado lo encontrars una tcnica muy til para poste-
112
riores gestiones de programaciones en grandes proyectos. El valor conseguido se discute ms a fondo en el captulo 6 del libro general del PSP [Humphrey].
RESUMEN
Este captulo cubre la programacin y los puntos de control, explicando porqu las programaciones son necesarias y cmo utilizar los diagramas de Gantt para hacer programaciones. Los puntos de control son una parte importante de la planificacin y gestin de un proyecto: un punto de control identifica la terminacin de un determinado evento del proyecto, se debe de especificar y establecer el criterio de terminacin. Tendrs al menos un punto de control cada 5 o 10 horas de trabajo, y al menos uno o dos puntos de control para cada proyecto semanal. Los puntos de control te ayudan a ver dnde se encuentra el proyecto y a tomar acciones correctivas cuando el proyecto se est retrasando. El valor ganado te ayuda a controlar con precisin el estado del proyecto y estimar exactamente cundo acabara.
EJERCICIO 9
Define tres o ms puntos de control para el trabajo de codificar un programa de tamao reducido. Entrega un breve informe describiendo cada punto de control y como estos puntos te podran indicar cunto se ha avanzado. Observa que el ejercicio del punto de control es opcional y que no lo necesitas hacer a no ser que te lo pida tu profesor. Entrega las copias de las paginas del Cuaderno de Registro de Tiempos, del Cuaderno de Trabajos y del Resumen Semanal de Actividades que no hayas entregado todava.
REFERENCIAS
[Brooks] Brooks, Frederick P. The Mythical Man-Month, Essays un Software Engineering, Anniversary Edition. Reading, MA: AddisonWesley, 1995. [Humphrey] Humphrey, W.S. A Discipline f o r Software Engineering. Reading, MA: Addison-Wesley, 1995.
CAPITULO 10
/ plan de/proyecto
Este captulo extiende la discusin de la planificacin del producto, para incluir estimaciones de tiempo. Se introduce la tabla del Resumen del Plan del Proyecto para registrar, lo estimado y lo real, del tamao del programa y el tiempo de desarrollo. Como ejercicio, elaborars un plan del proyecto para el siguiente programa que desarrolles.
10.1
114
del tamao del producto y el tiempo que estimas en hacer el trabajo. Despus de acabar el trabajo, tambin escribirs los datos reales de tama-' o y tiempo. Una vez que has hecho una estimacin de tiempo, escribe la fecha de finalizacin del trabajo, y as, puedes comparar lo estimado con la fecha real de realizacin del mismo. Analizar dichas comparaciones, te ayudar a hacer mejores estimaciones para las tareas futuras. Si por ejemplo, tus estimaciones normalmente son muy bajas, puedes ajustarlas al alza, o a la inversa, si las estimaciones son muy altas, puedes ajustarlas a la baja. Ten cuidado al hacer estos ajustes, aunque sean fciles de corregir.
Plan
Real
115
Fecha
Programa # Lenguaje
Real
Profesor
Plan Resumen MinutosiLOC LOCiHora DefectosIKLOC Rendimiento VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Plan Tiempo por Fase (min.) Planificacin Disetio Codificacin Revisin del cdigo Compilacn Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Plan Real Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Plan Actual Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas rota1
Hasta la Fecha
Real
Hasta la Fecha
% Hasta la Fecha
DefJHora
DefAora
parte de Real. En los ejercicios del captulo, te pedirn que presentes una tabla rellena del Resumen del Plan del Proyecto por cada programa que termines a partir de ahora. Guarda copias de estas tablas para que tengas datos de tu trabajo, y puedas utilizarlos en futuros ejercicios. El siguiente apartado explica como rellenar la tabla del Resumen del Plan del Proyecto.
116
10.3
EL RESUMEN
La seccin Resumen contiene los datos de la velocidad utilizados para hacer el plan. Tambin, proporciona un lugar para registrar la velocidad real despus de acabar el trabajo. La primera entrada en la seccin Resumen es MinutosLOC (minutos por lneas de cdigo). Bajo la columna Plan, escribe la velocidad planificada en MinutosLOC. Como se muestra en el ejemplo de la Tabla 10.3, el Estudiante X utiliza los datos histricos de
Tabla 10.3 Ejemplo del resumen del plan del proyecto.
Estudiante Programa Profesor
sr. Z
Estudiante X
//10/96
6
Ada
Resumen Minutos/LOC LOClHora DefeCiMLOC Rendimiento VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin DiseAo Wikaci6n Reviskh del cdigo Compilacin Pruebas Postmorfen Total Tiempo Mximo Tiempo Mnimo Deiectosintroducidos Planificacidn Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Deiectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
~
Plan
7,82 7,67
Real
7,21 8,32
Hasta la Fecha
26 36
18
1 9
Plan
Real
Hasta la Fecha
% Hasta la Fecha
203 282
1Al
137
Plan
Actual
Dei.lHora
Plan
Actual
Def.lHora
117
sus programas anteriores o del Cuaderno de Trabajos para tomar la velocidad de 7,82 MinutosLOC para este programa. Naturalmente, si no tienes datos histricos, tendrs que inventrtelos.
A no ser que tengas una buena razn para hacerlo de otra manera, utiliza tus datos histricos de velocidad media de los ltimos programas registrados en el Cuaderno de Trabajos. Puedes tener necesidad de utilizar un valor diferente, si un nuevo programa es difcil y necesita ms tiempo de la media. O puedes necesitar utilizar un valor diferente para el caso inverso, si un nuevo programa es parecido a otro que has escrito recientemente pero que probablemente necesite menos esfuerzo. Comprobando los valores de tiempo medio, mximo y mnimo para los trabajos de codificacin ms recientes, puedes seleccionar un valor adecuado para un nuevo programa.
La siguiente entrada en la seccin Resumen es LOC/Hora (lneas de cdigo por hora). De nuevo, escribe el valor planificado antes de comenzar el trabajo y el valor real despus de terminarlo. El valor de LOC/Hora se calcula a partir de los MinutosLOC, dividiendo 60 por el valor de MinutosLOC. En el ejemplo de la Tabla 10.3, el Estudiante X planific una velocidad de 7,82 MinutosLOC, por lo que el valor de LOCmora planificado es 60/7,82 = 7,67. El valor de la velocidad de LOC/Hora lo utilizan normalmente los ingenieros para analizar la productividad del desarrollo.
10.4
EL TAMAODEL PROGRAMA
La seccin Tamao del Programa (LOC) de la tabla Resumen del Plan del Proyecto, contiene los datos estimados y reales de los tamaos de los programas y de los rangos de dichos tamaos. Utilizando los mtodos descritos en el Captulo 6, estima el tamao total de un programa que planificas desarrollar y escrbelo en la columna Plan de la fila Total Nuevo & Cambiado. Para completar el Resumen del Plan del Proyecto para el programa 8, el Estudiante X hizo una estimacin del tamao, tal y como se muestra en la tabla 10.4. La razn de que la casilla del tamao est etiquetada como Total Nuevo & Cambiado, es porque deberas registrar solamente los nmeros de LOC que escribas realmente. Despus de escribir unos pocos programas, comenzars a utilizar la librera de rutinas para hacer funciones estndar, o desarrollar un nuevo programa aadiendo o modificando uno hecho previamente. Para ahorrar tiempo de desarrollo, puedes copiar partes de programas hechos anteriormente. Puedes, por ejemplo, decidir reutilizar una funcin en un programa que ya tengas escrita. Antes que escribir todo de nuevo, sencillamente copia ese cdigo y reutilzalo en el nuevo programa.
118
Fecha Clase
7/10/96 IP
Programa
LOC
Sentencia case sencilla Sentencia case media Bucles Bucle while sencillo Repetir-hasta medio
1 Sentencia casegrande 1
I
12
1
I
17
1
I
24
1 Bucle oeaueo
I I 1 3 1
4 1 5
I
Calc. Clculo grande
LE&
Texto
-+-t
5
1 8
Estimado
26
36
Comentarios: Este programa tiene una sentencia case bastante grande para seleccionar entre un
nmero de condiciones de texto, su tamao podra 5er un poco mayor que la del proqrama 4. Se necesita un bucle sencillo para iterar la5 condiciones de la sentencia case para cada cadena que entra, tambin se necesita un sencillo analizador de cadenas de texto para formatear el texto y obtener el resultado final. Supn que 105 tamaos mximo para las funciones del bucle y del texto son similares a 105 de proqramas anteriores, y el de la sentencia ca5e es alqo mayor. Asume tambin que el tamao mnimo e5 la mitad del tamao mximo.
Ninguna de las lneas de cdigo desarrolladas anteriormente son contabilizadas cuando estimas el tamao del nuevo programa. La razn es que t quieres controlar las LOC que realmente escribes. Ya que estas 1neas son las que consumen la mayor parte del tiempo y con ellas se calcula la velocidad de productividad en MinutosLOC. Esta fila, en el Resumen del Plan del Proyecto, se denomina Total Nuevo & Cambiado, porque este es el nico tipo de cdigo a contabilizar, tanto las LOC nuevas escritas como cualquiera de las anteriores que se hayan cambiado. Entonces, para estimar cuanto tiempo necesitars para desarrollar un programa nuevo, multiplica los MinutosLOC planificados por las LOC Nuevas & Cambiadas planificadas. Por ejemplo, si copias 25 LOC de un programa anterior y desarrollas 30 LOC de cdigo nuevo, solamente tendrs 30 LOC Nuevas & Cambiadas.
119
Por otra parte, si copias 25 LOC de un programa anterior y modificas 7 de esas LOC, seran 37 las LOC Nuevas y Cambiadas: 7 LOC del cdigo cambiado y 30 LOC de cdigo nuevo.
La razn de contabilizar solamente las LOC Nuevas & Cambiadas de esta forma es que, la cantidad de cdigo que utilizas de las libreras y de programas anteriormente desarrollados variar mucho. Tambin, el tiempo, expresado en minutosLOC, para incluir cdigo, es generalmente inferior al que se requiere normalmente para desarrollar cdigo nuevo o modificar el existente. As, si ignoras las LOC reutilizadas y copiadas, generalmente ignorars una parte relativamente pequea del trabajo total y tus estimaciones probablemente sern bastante exactas. Aunque la forma de contabilizar el cdigo modificado y reutilizado puede ser muy compleja, por ahora incluirs todas las LOC nuevas y cambiadas en las estimaciones de tamao, pero no el cdigo reutilizado sin modificar. Ignora cualquier LOC tomada de varios sistemas de librera o de programas previamente desarrollados. Pero si el tiempo dedicado en la reutilizacin de programas previamente desarrollados parece mucho para ignorarlo, consulta un tratamiento ms detallado de este tema en los Captulos 4 y 5 del libro general del PSP [Humphrey 951.
TAMAOMXIMO Y MlNlMO
Los valores de tamao mximo y mnimo en la seccin Tamao del Programa (LOC) se obtienen a partir de un tamao estimado, que se hace de la forma que se describi en el Captulo 6. En el ejemplo de la Tabla 10.4, el Estudiante X utiliz la suma de los tamaos de los programas 1 y 5 como los tamaos mximos para dos de las funciones y seleccion un valor algo mayor del programa 4 para la otra funcin. Para calcular el mnimo, asumi que las nuevas funciones combinadas deberan ser la mitad del tamao total mximo. Entonces, selecciona el tamao ms probable como el valor medio entre esos nmeros. As, tom 36 como el tamao mximo y 18 LOC como el mnimo, y 26 LOC como el tamao ms probable. Los valores de tamao mximo y mnimo son tiles para considerar el rango de tiempo probable para estimar un desarrollo. Por ejemplo, si ests particularmente interesado en completar un programa nuevo en una fecha acordada, considera el tamao mximo como una indicacin de cmo de grande podra ser el programa. Si has estimado que el tamao probable para el nuevo programa era de 26 LOC y el tamao mximo de 36 LOC, puedes permitirte alguna libertad en la codificacin, en caso de que el programa se aproxime hacia el valor mximo. El valor del tamao mnimo se obtiene como se describe en el Captulo 6. La razn principal para calcular este nmero es animarte a pensar sobre el rango de tamao de un programa planificado. Generalmente,
120
basa los planes y los compromisos en los valores de tamao mximo y mnimo. Observa tambin, que los valores mximo y mnimo estn basados nicamente en los rangos de tamao estimado. No se deducen estadsticamente y no se pueden tomar para proporcionarte lmites estadsticos. Hasta que no tengas una cantidad sustancial de datos, solamente utiliza las estimaciones de tamao mximo y mnimo como gua de planificacin general. Cuando tengas ms datos, considera utilizar los clculos de prediccin de intervalos dados en el Captulo 5 y en el Apndice A del libro general del PSP [Humphrey 951.
10.5
EL TIEMPO EN FASES
La siguiente seccin de la Tabla 10.3 del Resumen del Plan del Proyecto se denomina Tiempo en Fase, ya que posteriormente se utiliza para los datos de las fases del proceso de desarrollo del software. Hasta el prximo captulo, sin embargo, utiliza solamente el tiempo total de desarrollo del programa.
Para calcular el tiempo total planificado para el desarrollo de un nuevo programa, estima el tamao del programa en LOC y entonces multiplcalo por los Minutos/LOC planificados de la parte superior de la tabla. Esto te da una estimacin de los minutos totales para desarrollar el programa. Estos valores tambin se muestran en el ejemplo de la Tabla 10.3. El tiempo total planificado se obtiene multiplicando los MinutosLOC planificados por las LOC Nuevas & Cambiadas planificadas: 7,82*26=203,32, o 203 minutos. Tambin calcula los tiempos mximo y mnimo y escrbelos en la columna de Plan. Obtn estos valores multiplicando los tamaos mximo y mnimo por los Minutos/LOC para calcular los tiempos mximo y mnimo respectivamente. Para el mnimo tenemos 7,82* 18=140,76 y para el mximo, 7,82*36=28 1,52. Observa que t tambin podras obtener los valores mximo/mximo y mnimo/mnimo multiplicando las LOC mximas y mnimas por las velocidades mxima y mnima del Cuaderno de Trabajos. Puesto que estos valores, generalmente, proporcionan lmites amplios para utilizarlos de gua, nosotros no los utilizaremos en el Resumen del Plan del Proyecto. Pero pueden dar alguna idea de los mejores y peores tiempos de desarrollo que puedes esperar. Completa y escribe estos datos del Plan en el Resumen del Plan del Proyecto antes de desarrollar el programa y entonces completa los datos Reales cuando acabes el programa. Conforme hagas el trabajo, revisa el tiempo y cuando acabes escribe el total en la fila de Total bajo la colum-
121
na Real. Tambin, cuenta las LOC Nuevas & Cambiadas en el programa terminado y calcula los MinutosLOC y las LOChora reales. Para revisar la forma de rellenar totalmente el Resumen del Plan del Proyecto consulta las instrucciones en la Tabla 10.5.
Tabla 10.5 Instrucciones del resumen del plan del proyecto.
~ ~
Propsito
~.
Esta tabla trata los datos estimados y reales de los proyectos de una forma cmoda y fcilmente recuperable.
_~
.~..~____ _ ~ . . _ _ _ _ _ _ _ _ .
~~
Cabecera
.
~~
____~Resumen MinutosiLOC
Introduce los siguientes datos: Tu nombre y fecha de hoy. Nombre y nmero de programa. Nombre del profesor. El lenguaje que utilizars para escribir el programa.
~
~~~
Antes de iniciar el desarrollo: Escribe los Minutos/LOC planificados para este proyecto. Despus del desarrollo: Divide el tiempo total de desarrollo por el tamao real del programa para obtener los Minutos/LOC reales. Por ejemplo, si el proyecto se hizo en 137 minutos e hiciste 19 LOC, los MinutosiLOC seran 13719 = 7,21. Antes de iniciar el desarrollo: Calcula las LOC por hora planificada para este programa dividiendo 60 por los Minutos/LOC de la casilla de Plan. Despus del desarrollo: Para LOC/Hora Real divide 60 por los Minutos/LOC Reales. Para los 7,21 Minutos/LOC Reales, tenemps 60/7,21 = 8,32 LOClHora Reales
~~~~~~ ~~~
LOC/Hora
~- _____
~~ ~
~~~~
~-
-~
~~
-~
Tamao Programa Antes de iniciar el desarrollo: Escribe bajo la columna plan el valor estimado de Total Nuevas (LOC) & Cambiadas, Mximo y Mnimo. Despus del desarrollo: Cuenta y escribe las LOC Nuevas & Cambiadas Reales.
~~
.~
.. ..
~~
Para el tiempo total de desarrollo, multiplica el valor de Total Nueva & Cambiada LOC por los Minutos/LOC. Por ejemplo, con 7,82 MinutoslLOC y Total Nueva & Cambiada LOC de 26 LOC, Total = 26*7,82 = 203 minutos. Para el tiempo Mximo, multiplica el tamao Mximo por los Minutos/LOC. Por ejemplo, con 7,82 Minutos/LOC y un tamao Mximo de 36 LOC, Tiempo Mximo = 36*7,82 = 282 minutos. Para el tiempo Mnimo, multiplica el tamao Mnimo por los Minutos/LOC. Por ejemplo, con 7,82 Minutos/LOC y un tamao Mnimo de 18 LOC, Tiempo Mnimo = 18*7,82 = 141 minutos. Una vez acabado el trabajo, escribe el tiempo de desarrollo real en minutos. Obtn estos datos del Cuaderno de Tiempos.
Real
122
10.6
Este captulo muestra como hacer planes de proyectos. Describe el proceso de planificacin del producto, define los datos que necesitas y las tablas, y muestra un ejemplo completo de un plan de proyecto. Documentar los planes del proyecto te permite comparar el tiempo y el tamao estimados con el de desarrollo real y aprenders a hacer mejores planes. Para hacer buenos planes, necesitas una estimacin de la cantidad de trabajo a realizar comparndola con trabajos anteriores, datos histricos de tareas similares que hayas hecho, y una tabla para registrar el plan. Para obtener los datos para hacer planes, mide los tamaos de los productos acabados, estima el tamao del siguiente trabajo, estima la velocidad de desarrollo para este trabajo, calcula el tiempo que te supondr el nuevo trabajo, y determina sus rangos probables de tamao y tiempo de desarrollo.
EJERCICIO 10
Haz un plan para codificar el prximo programa. Basa este plan en tus datos histricos y utiliza la Tabla 10.2 de planificacin. En el futuro, haz y entrega un plan para cada ejercicio de codificacin. En este plan, registra la estimacin inicial antes de comenzar el desarrollo y escribe los tiempos y tamaos reales cuando hayas acabado el trabajo. Tambin, entrega
123
una copia de la estimacin del tamao del programa, para ello utiliza la Tabla 10.4. Entrega una copia de los Cuadernos de Tiempos, del Cuaderno de Trabajos y del Resumen Semanal de Actividades que no hayas entregado todava. A partir de ahora y hasta el final del semestre, entrega estas tablas rellenas para cada programa que desarrolles durante este curso.
REFERENCIAS
[Humphrey 891 Humphrey, W.S. Munuging the Software Process. Reading, MA: Addison-Wesley, 1989. [Humphrey 951 Humphrey, W.S. A Discipline for Software Engineering. Reading, MA: Addison-Wesley, 1995.
CAPITULO 11
/ proceso de desarrollo
del soffware
Seguir un proceso sistemtico, te ayudar a planificar y gestionar tu trabajo ms efectivamente. En este captulo se explica cmo utilizar un proceso para desarrollar software. Como ejercicio, hars un plan y codificars un programa, utilizando el proceso descrito en este captulo.
11.1
126
minar la fase. Los pasos del proceso definen las tareas y cmo se hacen. El diseo y gestin de procesos son importantes en ingeniera del software, porque la calidad del proceso del ingeniero, determina en gran parte, la calidad y productividad de su trabajo. El objetivo del proceso personal definido en este libro es ayudarte a ser ms efectivo como ingeniero del software. El proceso utilizado en este curso se denomina Proceso Software Personal (PSP). El PSP es un marco de trabajo que ayuda a los ingenieros del software a medir y mejorar su forma de trabajar. Estos dos objetivos son los que te ayudan a desarrollar programas y a mostrarte, como utilizando los procesos, puedes mejorar tu forma de trabajar. Posteriormente, cuando desarrolles programas ms grandes y complejos, puedes extender el PSP para ayudarte con ese trabajo. Este libro no describe cmo definir y extender los procesos. Todo esto se cubre en el texto general del PSP [Humphrey 951.
11.2
ALGUNAS DEFINICIONES
Para discutir los procesos, utilizamos los trminos definidos en el Captulo 5 y algunos pocos ms: Un producto es algo que produces para un colaborador, un empresario o un cliente. Un proyecto normalmente produce un producto. Una tarea se define como un elemento de trabajo. Un proceso define la forma de hacer proyectos.
Los procesos tienen varias fases o pasos, como la planificacin, el desarrollo y las pruebas.
Una fase de un proceso puede estar compuesta de mltjples tareas o actividades, como pruebas de integracin, pruebas del producto y pruebas del sistema. Obsrvese que un proceso puede tener solamente una o muchas fases, y una fase puede tener solamente una o muchas tareas o actividades.
Los planes describen la forma en que un proyecto concreto va a ser hecho: cmo, cundo y qu coste tendr. Tambin puedes planificar tareas individuales.
Un trabajo es algo que haces, tanto un proyecto como una tarea. Cuando un proceso est totalmente descrito, se denomina proceso definido. Los procesos definidos estn compuestos normalmente de guiones, ta-
127
blas, plantillas y estndares. Un guin del proceso es una conjunto de pasos escritos, que los usuarios o agentes del proceso siguen cuando utilizan el proceso. Distintas tablas, tales como registros y resmenes, se utilizan para registrar y almacenar los datos del proyecto. En el resto de captulos del libro, utilizars el PSP. Los elementos del PSP se muestran en la Figura 11.1. Observa que, aunque esta figura muestre tanto los tiempos como los cuadernos de los defectos, no comenzars a reunir datos de defectos hasta el Captulo 12.
Requisitos
I
Planificar Pruebas
Datos de defectos y tiempos
Producto acabado
11.3
Planificacin. Primero obtn los requisitos del proyecto y completa las partes no sombreadas del Plan en la tabla Resumen del Plan del Proyecto. Finalmente, escribe el tiempo dedicado a hacer esta planificacin en el Cuaderno de Registro de Tiempos.
128
Planificacin
Diseo
Codificacin
Compilacin
Pruebas
PostmorIem
Criterios de salida
Diseo. Disea el programa. Aunque el diseo necesario no se haga, piensa toda la lgica del programa antes de comenzar a escribir el cdigo. Guarda el diseo en un diagrama de flujo, seudocdigo o en cualquier formato que especifique tu profesor. Al final de la fase de diseo, anota el tiempo de diseo en el Cuaderno de Registro de Tiempos. El proceso de
129
diseo y las distintas clases de representacin del mismo se discutirn posteriormente en el Captulo 17.
Codificacin. Implementa el diseo codificndolo en el lenguaje de programacin seleccionado. Utiliza un formato de codificacin consistente y sigue los estndares de codificacin que especifique tu profesor. Al final de la fase de codificacin, anota el tiempo de codificacin en el Cuaderno de Registro de Tiempos. Compilacin. Compila el programa y corrige todos los defectos que encuentres. Contina compilando y corrigiendo los defectos hasta que compiles el programa sin ningn mensaje de error. Todo el tiempo dedicado a esta fase se contabiliza como tiempo de compilacin, aunque corrijas el cdigo o cambies el diseo. Al final de la fase de compilacin, anota el tiempo de compilacin en el Cuaderno de Registro de Tiempos. Pruebas. Haz bastantes pruebas para asegurarte que los programas cumplen todos los requisitos y superan un conjunto adecuado de pruebas sin error. Todo el tiempo que dediques a esta fase se contabiliza como tiempo de prueba, incluyendo la correccin del cdigo, el cambio de diseo y la re-compilacin. Al final de esta fase, anota el tiempo de pruebas en el Cuaderno de Registro de Tiempos. Postmortem. Completa los datos reales en la tabla Resumen del Plan del Proyecto, tal y como se describe en el resto de este captulo. Puesto que has registrado el tiempo postmortem antes de que hayas acabado la fase postmortem, completa el trabajo como puedas y entonces dedica unos pocos minutos para hacer los clculos finales y escribirlos en el tiempo postmortem estimado. Utiliza este tiempo postmortem estimado para calcular el tiempo de desarrollo total y el resto de clculos.
11.4
130
11.5
Real
Hasta la fecha
Real
Hasta la Fecha
% Hasta la Fecha
Real
Def.iHora
Real
Def./Hora
131
Tabla 11.3 Instrucciones del resumen del plan del proyecto del PSP.
Propsito Cabecera Esta tabla trata los datos estimados y reales de los proyectos de una forma cmoda y fcilmente recuperable.
Minutos/LOC
Introduce los siguientes datos: Tu nombre y fecha de hoy. Nombre y nmero de programa. Nombre del profesor. El lenguaje que utilizars para escribir el programa.
Antes de iniciar el desarrollo Escribe los Minutos/LOC planificados para este proyecto. Utiliza la velocidad Hasta la Fecha de un programa reciente del Cuaderno de Trabajos o del Resumen del Plan del Proyecto. Despus del desarrollo Divide el tiempo total de desarrollo por el tamao real del programa para obtener los Minutos/LOC reales. Por ejemplo, si el proyecto se realizo en 196 minutos e hiciste 29 LOC, los Minutos/LOC seran 196/29 = 6,76. Antes de iniciar el desarrollo: Calcula las LOC por hora planificada para este programa dividiendo 60 por los Minutos/LOC de la casilla de Plan. Despus del desarrollo Para LOC/Hora Real divide 60 por Minutos/LOC Reales. Para los 6,76 MinutosiLOC Reales, tenemos 60/6,76 = 8,238 LOC/Hora Reales
LOC/Hora
Tamao Programa Antes de iniciar el desarrollo Escribe bajo la columna plan, el valor estimado de Total (LOC) Nuevas & Cambiadas, Mximo y Mnimo. Despus del desarrollo: Cuenta y escribe las LOC Nuevas & Cambiadas Reales. Para la columna Hasta la Fecha, aade LOC Reales Nuevas & Cambiadas a las LOC Hasta la Fecha Nuevas & Cambiadas de programas anteriores. Tiempo por fase Plan
Para el tiempo total de desarrollo, multiplica el valor de las LOC Total Nuevas & Cambiadas por los Minutos/LOC. Para el tiempo Mximo, multiplica el tamao Mximo por los Minutos/LOC. Para el tiempo Mnimo, multiplica el tamao Mnimo por los Minutos/LOC. Del Resumen del Plan del Proyecto de un programa reciente, busca los valores de % Hasta la Fecha para cada fase. Utilizando el % Hasta la Fecha de programas anteriores calcula el tiempo planificado para cada fase. Una vez acabado el trabajo, anota el tiempo real en minutos que has gastado en cada fase del desarrollo. Obtn estos datos del Cuaderno de Tiempos.
Real
Hasta la fecha
Para cada fase, escribe la suma del tiempo real y el tiempo Hasta la Fecha de los programas ms recientes. la Fecha y lo divides por el total del tiempo Hasta la Fecha.
% hasta la fecha Para cada fase, escribe 100 multiplicado por el tiempo Hasta
132
no se utilizarn hasta captulos posteriores. Para identificar los cambios de una versin del proceso a la siguiente, los aadidos se muestran en negnta. Comparando la Tabla 10.2 y la 11.2, puedes observar que varias secciones que antes estaban sombreadas ahora se utilizan. Por ejemplo, bajo la columna Tiempo por Fase, las filas de Planificacin, Diseo, Codificacin, Compilacin, Pruebas y Postmortem se incluyen ahora en la Tabla. Tambin, se utilizan las columnas Hasta la Fecha y % Hasta la Fecha. Para indicar que estas columnas se aaden de nuevo a la tabla, las cabeceras de la nueva columna y fila aparecen en negrita. La seccin de Tiempo por Fase de la nueva tabla del Resumen del Plan Proyecto, tiene una fila por cada fase del proceso. Esta fila tiene los tiempos planificados y reales para cada fase del proceso. Durante la fase de planificacin, escribe los datos bajo la columna Plan. Durante la fase Postmortem, escribe los datos bajo la columna Real. Cuando anotes el tiempo en el Cuaderno de Registro de Tiempos, escribe en la seccin de comentarios la fase del proceso donde ests. Entonces, durante la fase postmortem, escribe estos tiempos en la columna Real de la seccin Tiempo en Fase para cada fase. Antes de iniciar un proyecto, completa la parte de Plan de la tabla Resumen del Plan Proyecto, tal y como se indica en el Captulo 10. Ahora, la nica diferencia es que t necesitas estimar el tiempo que vas a dedicar a cada fase. Esto se hace asignando a c.ada fase un porcentaje del tiempo de desarrollo total, basndote en la utilizacin del tiempo en proyectos anteriores. La primera vez que utilices esta versin del PSP, no tendrs datos reales para hacer esto, entonces, tendrs que inventrtelos. Para proyectos sucesivos, sin embargo, puedes utilizar los datos de proyectos anteriores para estimar el tiempo para cada fase del nuevo proyecto. Esta es la razn de por qu aparecen los valores de % Hasta la Fecha en la tabla Resumen del Plan del Proyecto. Las columnas de Hasta la Fecha y % Hasta la Fecha de la tabla Resumen del Plan del Proyecto, proporcionan una forma sencilla de calcular la distribucin de los porcentajes del tiempo de desarrollo para las fases del proceso. La columna Hasta la Fecha contiene el total de todos los tiempos dedicados en cada fase para todos los programas acabados. La columna de % Hasta la Fecha tiene el porcentaje de los tiempos de la columna Hasta la Fecha. El ejemplo de la Seccin l l .7 muestra cmo calcular las entradas de Hasta la Fecha y % Hasta la Fecha.
'
11.6
UN EJEMPLO DE PLANIFICACIN
La Tabla 11.4 muestra como el Estudiante X ha completado parte del plan de la tabla Resumen del Plan del Proyecto para el programa 9. Utiliz los
133
Fecha
Programa#
21/10/96
9
Ada
Lenguaje
Plan
7,21
Resumen MinutosiLOC LOClHora DefectosiKl OC Rendimiento VIF Tamaio Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
Real
8.32
Hasta la fecha
23
15
Plan
Real
Hasta la Fecha
% Hasta la Fecha
74
25 52 1 0 166 224 108
Plan
Real
DefJHora
Plan
Real
DefJHora
datos del Resumen del Plan del Proyecto del programa 8 de la Tabla 11.5. Los datos del plan de la Tabla 11.4 se obtienen de la siguiente forma: Minutos/LOC. En la planificacin del programa 9, busca los Minutos/LOC Reales para el programa anterior, el programa 8 de la Tabla 1 1.5, y localiza la velocidad de 7,21 MinutosLOC.
A no ser que tengas una buena razn para hacer otra cosa, utiliza estas velocidades reales anteriores en la planificacin de los nuevos proyec-
134
Fecha Programa#
7/10/96
0
__
Real
Lenguaje
721 0,32
Ad a
Resumen Plan 7,02 Minutos/LOC 7,67 LOClHora DefectosIKiOC Rendimiento VIF Tamao Programa (LOC): 26 Total Nuevo & Cambiado 36 Tamao Mximo 18 Tamao Mnimo Tiempo por Fase (min.) Plan Planificacin 1 0 Diseo 19 10 1 Codificacin Revisin del cdigo 12 Compilacin 29 Pruebas 1 5 Postmorten 203 Total _no Tiempo Mximo 1Al Tiempo Mnimo Defectos introducidos Plan Real Planificacin DiSeAo Codificacin Revisin del cdigo compilacin PnrebeS rota/ Defectos eliminados Plan Real Planiffcacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas rota1
Hasta la iecha
721 0,32
19
1 9
Real
4
Hasta la Fecha
% Hasta la Fecha
O
6 1
2 1 43 0 137
4 0 6 1 2 1 43
0
23 O
44,6 153
31,4
137
5,8 100,O
DefJHora
Def.IHora
tos. En el futuro, mejor que utilizar la velocidad real de los programas anteriores, utilizars las velocidades media de todos los programas desarrollados hasta la fecha. Cuando se incluyan las velocidades Hasta la Fecha en el PSP en el Captulo 12, podrs utilizar estos datos. LOC/Hora. El Estudiante X calcul el valor de LOC/Hora, as: 60/7,2 1=8,32. Tamao del programa. De igual forma que en el Captulo 6, el Estudiante X estim las LOC Total Nuevas & Cambiadas del pro-
135
grama y las LOC Mx. y Mn. En el ejemplo de la Tabla 11,4, estos tamaos son 23, 31 y 15 LOC respectivamente. Tiempo por Fasefloral. Utilizando el tamao estimado de 23 LOC y la velocidad de 7,21 minutosLOC, el tiempo de desarrollo es 7,21*23 = 166 minutos. Tiempo Mximo. El tiempo mximo se obtiene multiplicando el valor de los MinutosLOC por el tamao mximo, 7,21 * 31 = 224 minutos. Tiempo Minimo. El tiempo mnimo se obtiene multiplicando el valor de los MinutosLOC por el tamao mnimo, 7,21 * 15 = 108 minutos. Con un tiempo total de desarrollo estimado de 166 minutos, utiliza los datos de % Hasta la Fecha de la Tabla 11.5 para estimar los tiempos de las fases para desarrollar el programa 9. El Estudiante X hizo estos clculos de la siguiente forma:
Plan$cacin. El tiempo de planificacin estimado es 2,9* 166/100 = 4,81, o aproximadamente 5 minutos. Diseo. El tiempo de diseo planificado es 0*166/100 = O. Codificacin. El tiempo de codificacin planificado es 44,6*166/100 = 74,04, o 74 minutos. Compilacin. El tiempo de compilacin planificado es 15,3*166/100 = 25,40, o 25 minutos. Pruebas. El tiempo de pruebas planificado es 31,4*166/100 = 52,12, o 52 minutos. Posrmorrem. El tiempo postmortem planificado es 5,8* 166/100 = 9,63, o 10 minutos.
Recuerda que del primer programa desarrollado con el PSP, no tendrs datos anteriores para utilizarlos como gua. Puesto que el Estudiante X no tena datos anteriores cuando estaba planificando el programa 8, se los invent. Como puedes observar, comparando los tiempos planificados y reales de la Tabla 11.5, su distribucin real de tiempo era bastante distinta a sus suposiciones. Unos pocos datos pueden provocar una gran diferencia en la planificacin. Para el programa 9, el plan del Estudiante X est mucho ms prximo a sus datos reales.
11.7
136
Tabla Resumen del Plan del Proyecto de la Tabla 11.6. Despus, localiz los tiempos reales para cada fase en el Cuaderno de Registro de Tiempos y los anot en la tabla Resumen del Plan del Proyecto. Esta vez, ambas estimaciones de tamao y tiempo eran razonablemente ms prximas al resultado real. El Estudiante X le dedic algo ms de lo esperado para el desarrollo del programa, su velocidad LOC/Horas real estaba muy prxima a sus velocidades histricas. Tambin, la distribucin de tiempos no se alej mucho del plan. Para completar la columna Hasta la Fecha de la Tabla 11.6, el Estudiante X sum los tiempos reales de esta tabla a los tiempos Hasta la Fecha del programa 8 de la Tabla 11.5. Tambin, calcul los porcentajes Hasta la Fecha de la Tabla 11.6, dividiendo los valores de Hasta la Fecha en cada fase por el tiempo Total Hasta la Fecha de 333 minutos y multiplicarlos por 100. Los clculos para estos valores fueron los siguientes: LOC Total Nuevas & Cambiadas LOC Hasta la Fecha Nuevas y Cambiadas = 19 + 29 = 48. Tiempo de planificacin Hasta Planificacin la Fecha = 4 + 11 = 15. % Hasta la Fecha, planificado = 100" 15/333 = 4 3 Diseo Tiempo de diseo Hasta la Fecha = O + 12 = 12. % Hasta la Fecha, diseo = 100*12/333 = 3,6. Tiempo de codificacin Hasta la Codificacin Fecha = 61 + 85 = 146. % Hasta la Fecha, codificacin = 100*146/333 = 43,9 Compilacin Tiempo de compilacin Hasta la Fecha = 21 + 28 = 49. % Hasta la Fecha, compilacin = 100*49/333 = 14,7. Tiempo de pruebas Hasta la FePruebas cha = 43 + 49 = 92. % Hasta la Fecha, pruebas = 100*92/333 = 27,6. Tiempo postmortem Hasta la Postmortem Fecha = 8 + 11 = 19. % Hasta la Fecha, postmortem = 100*19/333 = 5,7. Tiempo total de desarrollo HasTotal ta la Fecha = 137 + 196 = 333.
137
Fecha
21/10/96
Programa
Profesor
5 %
Programa#
9
Ada
Z
Plan
7,21 0,32
Lenguaje
Resumen MinutosiLOC LOCiHora DefectosIKLOC Rendimiento VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
Real
6,76 0,00
Hasta la fecha
23 3 1 1 5
29
48
Plan
5 O 74
Real
11
Hasta la Fecha
12 05 20 49 11 196
15 12 146
49 92 1 9 333
Plan
Real
DefJHora
Plan
Real
DefJHora
Con los datos del programa 9, el Estudiante X puede estimar los tiempos que va a dedicar en cada fase de su prximo proyecto. Para ser ms prctico, sin embargo, deberas utilizar la media de los tiempos de los distintos proyectos. Las columnas Hasta la Fecha y % Hasta la Fecha realizan estos clculos. En el programa 8 de la Tabla 11.5, la columna Hasta la Fecha contiene los tiempos reales que el Estudiante X ha dedicado al proyecto. Cuando desarroll el programa 9, sin embargo, aadi los tiempos reales de los programas 8 y 9 para obtener los nuevos valores
138
Hasta la Fecha. El nuevo valor de % Hasta la Fecha nos da la distribucin de tiempos medios de los programas 8 y 9. De forma similar, cuando se complete el Resumen del Plan del Proyecto para el programa 10, tendrs la distribucin de tiempos medios para los programas 8, 9 y 10 y as sucesivamente. De un proyecto a otro, los tiempos de desarrollo total variarn. Sin embargo, la distribucin del tiempo entre las fases, ser ms estable. Esto, naturalmente, depende de la calidad de tus procesos. Por ejemplo, cuando dedicas mucho tiempo a compilar y probar, los tiempos de planificacin de las distintas fases sern menos exactos debido a la gran cantidad de tiempo impredecible que se dedica a resolver os defectos. Cuando se obtienen los tiempos medios de los distintos programas, sin embargo, la cantidad media de tiempo dedicado a la compilacin y a las pruebas no cambiar mucho. Es decir, no cambiar mientras no cambies el proceso. Cuando al principio utilices el PSP, probablemente dedicars de 1/3 a 1/2 de tu tiempo a encontrar y corregir los defectos durante la fase de compilacin y pruebas. Conforme utilices los mtodos del PSP en los siguientes captulos, reducirs el nmero de defectos encontrados en la compilacin y pruebas, y as reducirs los tiempos de compilacin y pruebas. Esto ahorrar tiempo de desarrollo, mejorar la estimacin y permitir planes ms exactos y programas mejor hechos.
RESUMEN
Este captulo define un proceso, describe el proceso bsico del PSP y muestra como un proceso definido, puede ayudar a mejorar tus planes. La tabla del Resumen del Plan del Proyecto aumenta para incluir los tiempos de las fases del proyecto y calcular el tiempo Hasta la Fecha y el porcentaje del tiempo de desarrollo dedicado a cada fase. Haciendo planes de proyectos, querrs estimar el tiempo que vas a dedicar a cada fase. Te basars en experiencias anteriores, utilizando para ello los valores de % Hasta la Fecha de los programas anteriores. Utilizando el PSP, hars un Resumen del Plan del Proyecto para cada proyecto, completa las partes del Plan antes de comenzar a trabajar, escribe los datos Reales cuando acabes y completa los apartados de Hasta la Fecha y % Hasta la Fecha.
EJERCICIO 11
Utilizando la tabla del Resumen del Plan del Proyecto mostrada en la Tabla 11.2, haz un plan para codificar tu prximo programa. Primero, estima el tamao del programa, tal y como se describe en el Captulo 6. Para
139
este primer programa con el PSP, estima la distribucin del tiempo en las distintas fases. En adelante, utiliza para hacer estimaciones, las cifras de % Hasta la Fecha de la tabla del Resumen del Plan del Proyecto del programa ms recientemente desarrollado. Anota la estimacin antes de hacer el trabajo y cuando lo acabes, escribe los tiempos y tamaos reales de las distintas fases. Tambin, entrega una copia de los Cuadernos de Registro de Tiempos, del Cuaderno de Trabajos y del Resumen Semanal de Actividades que no hayas entregado todava.
REFERENCIA
[Humphrey 951 Humphrey, W.S. A Discipline for Software Engineering. Reading, MA: Addison-Wesley, 1995.
CAPITULO 12
En este captulo se introduce el tema de los defectos del software (vase la Seccin 12.4 para saber por qu no le llamamos bugs). Los defectos pueden causar serios problemas a los usuarios de los productos software, y pueden ser caros de encontrar y corregir. Puesto que los defectos son causados por los errores de los desarrolladores, los ingenieros necesitan entender los defectos que introducen para aprender a gestionarlos. El primer paso para la gestin de defectos, es reunir los datos de los defectos que has introducido en tu programa. Con estos datos, puedes mejorar la forma de encontrarlos y corregirlos. Como ejercicio del captulo, reunirs y resumirs los datos de los defectos que hay en tus programas. Hasta ahora, en este libro, solamente hemos hablado de mtodos para gestionar el coste y las programaciones. Esta, es la mitad de la historia. Comenzando con este captulo, estudiaremos la necesidad de entregar productos software de calidad. Primero, necesitaremos una definicin de calidad.
12.1
142
DEFECTOS
que tengan significado para los usuarios del producto. As, un producto que proporciona las prestaciones que son ms importantes para los usuarios, es un producto de calidad. Las necesidades de los usuarios, a menudo, se expresan en los documentos de requisitos. Debido a su importancia, el desarrollo, clarificacin y refinamiento de los requisitos es un objetivo por si mismo. Por lo tanto, nosotros no vamos a tratar los requisitos en este libro. Es importante recordar, sin embargo, que hasta que no tengas claro los requisitos, no puedes desarrollar un programa de calidad. Aunque puedes comenzar con requisitos poco claros, debes entenderlos antes de poder acabar. La calidad del software es un tema tan enorme, que en este libro se tratar de forma parcial. El libro, sin embargo, proporciona las habilidades y prcticas que necesitars para entender los defectos que introduces, y esto te dotar, de un mecanismo eficiente para que encuentres y corrijas muchos de tus defectos. Tambin te proporcionar los datos para ayudar a prevenir estos defectos en el futuro. Finalmente, una vez que puedas gestionar los defectos eficientemente, puedes dedicar ms atencin a aquellos aspectos de la calidad que afectan a la utilidad y valor de los programas que desarrolles.
12.2
DEFECTOS Y CALIDAD
Recuerda, del Captulo 1, que el trabajo de un ingeniero del software es entregar productos de calidad con unos costes y programaciones planificadas. Recuerda tambin, que los productos software deben satisfacer tanto las necesidades funcionales de los usuarios como hacer de una forma segura y consistente el trabajo de los mismos. La realizacin del trabajo es un aspecto clave. Aunque las funciones del software son muy importantes para los usuarios de los programas, estas funciones no sern tiles a menos que el software funcione. Para que el software funcione, debes eliminar sus defectos. As, aunque hay muchos aspectos relacionados con la calidad del software, el primer aspecto de la calidad est relacionado necesariamente con sus defectos. Esto no significa que los defectos son el nico aspecto o que son lo ms importante, pero debes tratar con muchos de los defectos antes de poder satisfacer cualquiera de los otros objetivos del programa. Despus de conseguir que los programas funcionen, si tienes unos pocos defectos, no funcionarn en grandes sistemas, no se utilizarn, y no se tendr en cuenta sus otras cualidades. La causa de que los defectos sean tan importantes, es porque las personas cometen muchos errores. En efecto, los programadores experimentados normalmente cometen un error por cada 7 a 10 lneas de cdigo que desarrollan. Aunque generalmente encuentran y corrigen muchos de esos defectos cuando compilan y prueban sus programas, a
143
menudo, muchos de los defectos permanecen en el producto acabado. Entonces, tu primera prioridad es entender los defectos que introduces y prevenirlos como puedas. Para hacer esto, necesitas dominar el lenguaje de programacin que utilices, entender a fondo los sistemas que soportan el desarrollo y haber dominado los tipos de aplicaciones que desarrollars. Estos y otros pasos ms son necesarios para reducir el nmero de defectos que introduces.
12.3
Es importante separar la cuestin de encontrar o identificar los defectos de la determinacin de sus causas. La simple contabilizacin y registro de los defectos en los productos software no es la especificacin de las causas ni la asignacin de culpas. Los defectos cometidos, sin embargo, tienen sus causas. Puedes haber cometido un error al escribir el nombre de un parmetro, omitido un signo de puntuacin o llamado incorrectamente un procedimiento. Todos estos errores causan defectos. Todos los defectos, por consiguiente, provienen de errores humanos y muchos de los que los ingenieros del software cometen, causan defectos en los programas.
144
DEFECTOS
Los errores son cosas incorrectas que cometen las personas y, sin tener en cuenta cundo y quin los comete, los defectos son elementos defectuosos de los programas. As, las personas cometen errores o equivocaciones mientras que los programas tienen defectos. Cuando los ingenieros cometen errores que conducen a defectos, nosotros nos referimos a esto como la introduccin de defectos. Esto significa que para reducir el nmero de defectos que introduces en tus productos, debes cambiar la forma de hacer las cosas. Para eliminar los defectos en tus productos, sin embargo, sencillamente tienes que encontrarlos. La eliminacin de defectos es, por lo tanto, un proceso ms sencillo que la prevencin de defectos. La prevencin de defectos es un aspecto importante y prioritario que requiere un estudio comprensivo de todo el proceso de desarrollo del software [Humphrey 891. El resto de este libro nos centraremos en la eliminacin de defectos.
A no ser que los ingenieros encuentren y corrijan los defectos que introducen, estos defectos llegarn al final a los productos acabados. El problema es que lleva mucho tiempo y dinero encontrar y corregir los defectos del software. Para producir pocos defectos, debes aprender de los defectos que has introducido, identificar los errores que los causan y aprender cmo evitar repetir el mismo error en el futuro. Puesto que los productos defectuosos pueden ser caros de probar, difcil de corregir y posiblemente peligrosos de utilizar, es importante que aprendas a minimizar el nmero de defectos que dejas en tus productos. Este libro muestra cmo hacer esto.
Los defectos deberan ser importantes para cada ingeniero del software no slo porque afectan a los usuarios, sino tambin porque ms de la mitad del esfuerzo de las organizaciones de software est dedicado a encontrar y corregir los defectos. Puesto que el tiempo de pruebas es difcil de predecir, los defectos son, a menudo, la causa principal de los problemas de costes y programaciones.
12.4
145
gramador te dijese que ha probado a fondo un programa y que ha dejado solamente unas pocas bombas de efecto retardado? Utilizando trminos diferentes, tu actitud cambia completamente. Los defectos son ms parecidos a las bombas de efecto retardado que a los bugs. Aunque todos no tendrn un impacto explosivo, alguno si podra tenerlo. Cuando los programas se utilizan mucho y de manera distinta a la que sus diseadores haban previsto, los errores triviales pueden tener consecuencias imprevisibles. Cuanto ms ampliamente se utilizan los sistemas software, ms se incrementan las nuevas necesidades a satisfacer, los problemas latentes podrn aparecer y un defecto aparentemente trivial puede ser verdaderamente destructivo. En este momento, aquellos lectores que han codificado varios programas, probablemente movern sus cabezas y pensarn que estoy exagerando el caso. En cierto sentido, lo estoy haciendo. La gran mayora de defectos triviales tienen consecuencias triviales. Desafortunadamente, sin embargo, un pequeo porcentaje de errores aparentemente tontos pueden causar serios problemas. Por ejemplo, un simple error de inicializacin caus el desbordamiento de un buffer. Esto origin que un sistema de control de ferrocarril perdiese datos. Entonces, cuando hubo una interrupcin, el sistema no pudo restablecerse rpidamente y todos los trenes en varios miles de millas de trayectoria tuvieron que parar durante varias horas, mientras los datos necesarios se volvieron a introducir. Algn porcentaje de defectos en un programa, probablemente tendr consecuencias impredecibles. Si supisemos por adelantado cules son dichos errores, entonces los podramos arreglar y no preocuparnos del resto. Desafortunadamente, no hay forma de hacer esto y cualquier defecto que se ha dejado pasar, puede potencialmente tener serias consecuencias. Aunque es verdad que muchos programas no se utilizan en aplicaciones donde el fallo es ms que una molestia, el nmero est creciendo. As, aunque los defectos puede que no sean ahora una cuestin importante para ti, pronto lo podrn ser. Es importante que aprendas a gestionar los defectos ahora para que ests preparado cuando verdaderamente necesites hacer programas de gran calidad. El ingeniero del software que escribe un programa, est ms capacitado para encontrar y corregir sus defectos. Es importante que los ingenieros del software asuman la responsabilidad personal con respecto a la calidad de los programas que hacen. Aprender a codificar programas libres de defectos es, sin embargo, un enorme reto. Esto no es algo que cualquiera pueda hacer rpidamente o fcilmente. Requiere informacin, una tcnica efectiva y habilidad. Utilizando los mtodos descritos en este libro, puedes desarrollar y perfeccionar tu capacidad para hacer programas de gran calidad. Despus de todo, si no te esfuerzas en hacer un trabajo sin defectos, probablemente nunca lo conseguirs.
146
DEFECTOS
12.5
TIPOS DE DEFECTOS
Para analizar los defectos, es til dividirlos en categoras. Este libro clasifica los defectos en 10 tipos generales. Clasificando los defectos en unos pocos tipos, puedes ver rpidamente qu categoras causan mayor problema y as, te puedes centrar en su prevencin y eliminacin. Esto, naturalmente, es la clave de la gestin de defectos. Cntrate en unos pocos tipos de defectos que son los ms problemticos. Una vez que estos tipos estn bajo control, identifica el conjunto siguiente y trabaja sobre ellos, y as indefinidamente. Los tipos de defectos utilizados en este libro se muestran en la Tabla 12.1. Esta lista procede del trabajo de Chillarege y sus colegas en el centro de investigacin de IBM [Chillarege]. Estudi los defectos en una amplia variedad de productos IBM e identific sus categoras principales. Estos mismos tipos se han utilizado en el PSP [Humphrey 951. En la Tabla 12.1, las categoras de defectos se refieren a clases genricas de problemas. Por ejemplo, los defectos de sintaxis del tipo 20 se refieren a todos aquellos elementos que no coinciden con la especificacin del lenguaje de programacin. Por ejemplo, omitir un punto y coma, escribir incorrectamente la sentencia i f , errores de ortografa o declaracioTabla 12.1 Tipos de defectos estndar.
Tipos de defectos
Nmero del tb0 10 20
1
1 1 1
I
DescriDcin
Documentacin Sintaxis
30 40
1 Construir, paquetes 1 gestin del cambio, libreras, cn o 1 Asignacin Interfaz declaracin, nombres duplicados, mbito, lmites llamadas a procedimientos y referencias, E/S, formatos de usuario
50
60
70
1 Chequeo
Datos Funcin
1 I
80 90
1O0
1 Sistema
Entorno
147
nes inadecuadas. Un defecto de sintaxis del tipo 20 es cualquier defecto que da lugar a un programa sintcticamente incorrecto, sin tener en cuenta como se originaron los defectos o se encontraron. Otra categora de defecto podra ser la del tipo 80 (el tipo funcin). Un ejemplo aqu sera el bucie do-while con una incorreccin lgica en la condicin while. La clasificacin de la Tabla 12.1, est ordenada por el grado de sofisticacin general de la probable causa del defecto. Por ejemplo, los defectos de los tipos 10,20 y 30 resultan de un simple descuido o error. Los defectos de los tipos 80,90 y 100, sin embargo, normalmente implican un diseo ms sofisticado o cuestiones del sistema. Antes de refinar cada una de estas 10 categoras de defectos del PSP en subcategoras, espera hasta que hayas reunido los datos de defectos de un nmero de programas. Entonces puedes ver, dnde un mayor detalle te ayudara y qu informacin especfica adicional sera necesaria. Por ejemplo, podras dividir los defectos de sintaxis del tipo 20 en los subtipos 21 para los puntos y comas, el 22 para otros errores de puntuacin, el 23 para los problemas de expresiones booleanas, el 24 para formatos de instrucciones incorrectas y as sucesivamente. Antes de definir nuevas subcategoras para cada tipo de defecto, espera hasta que hayas reunido los datos de al menos 100 o ms defectos. An as, probablemente encontrars que estos tipos de datos de defectos iniciales son adecuados.
12.6
148
DEFECTOS
escapado a todos tus esfuerzos de eliminacin de defectos. Conforme mejore tu proceso personal, los defectos que se escapan sern la ltima fuente principal de datos para tu mejora personal.
12.7
1. Cuando comiences a desarrollar un programa, coge varias pginas del Cuaderno de Registro de Defectos y rellena los datos de la cabecera de la primera pgina. Despus de utilizar todos los espacios en la primera pgina, completa la cabecera antes de comenzar la segunda pgina. 2. Cuando encuentres un defecto por primera vez, anota su nmero en el cuaderno, pero no introduzcas el resto de datos hasta que hayas corregido el defecto. Cuando el Estudiante X intent compilar el programa 10, el compilador mostr ms de una docena de mensajes de error. Aunque al principio no saba qu problema tena, al menos saba que era un error. Anot la fecha y puso un 1 en la casilla Nmero de la primera lnea del cuaderno de defectos. Esto fue para el primer defecto del programa 1 O. Estos nmeros te ayudarn posteriormente a analizar los datos de los defectos. En programas ms grandes, los nmeros de defecto se utilizan para controlar los problemas con correcciones incorrectas y ayudar a la prevencin de defectos.
3. Utiliza una lnea separada para cada defecto. No agrupes mltiples defectos idnticos en la misma lnea.
4. Escribe la fecha de localizacin del defecto. Si encuentras varios
defectos el mismo da, es aceptable dejar las siguientes casillas de la fecha en blanco, hasta la primera anotacin del da siguiente. En la Tabla 12.4, el Estudiante X encontr todos los defectos el da 28 de octubre, por lo que no necesit volver a anotar la fecha, pues supuso que se repeta hasta que no la cambiase.
149
50 60 70 80
Nmero
Tipo
Introducido
Eliminado
Descripcin: Fecha
nnnnnan
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Descripcin : Fecha
nnnnnun
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Descripcin: Fecha
I
Nmero
I
Tipo
Introducido
Eliminado
Descripcin: Fecha
nnunun
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Tiempo de correccin
Defecto corregido
Descripcin: Fecha
nnnnnnn
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Descripcin: Fecha
nunnnnu
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Descripcin: Fecha
nnnnnnn
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Descripcin:
nnuunnn
150
DEFECTOS
Mtodo
Cabecera
Introduce los siguientes datos: Tu nombre. Fecha actual. Nombre del profesor. Nmero de programa.
Fecha Nmero
Nmero de cada defecto. Para cada programa, utiliza una numeracin secuencia, comenzando por el 1 (o 001, etc.). Anota el tipo de defecto, segn la lista de tipos de defectos de la Tabla 12.1 (tambin resumida en la parte superior izquierda del cuaderno de defectos). Utiliza tu criterio para seleccionar que tipo aplicar. Anota la fase en la que se introdujo el defecto. Utiliza tu criterio. Anota la fecha en la que se elimin el defecto. Generalmente, sta sera la fase durante la cual encontraste y corregiste el defecto. Estima o mide el tiempo necesario para encontrar y corregir el defecto. Puedes utilizar un cronmetro si lo deseas. Puedes ignorar esta casilla la primera vez. Si introduces este defecto mientras ests arreglando otro, anota el nmero del defecto incorrectamente corregido. Si no puedes identificar el nmero de defecto, anota una X en la casilla de Defecto corregido. Escribe una breve descripcin del defecto. Haz la descripcin lo suficientemente clara para que recuerdes posteriormente, el error que caus el defecto y por qu lo hiciste.
Tipo
Introducido Eliminado
Descripcin
5. Despus de corregir el defecto, anota el tipo de defecto. Aunque puedas confundirte sobre qu tipo es el adecuado, utiliza tu mejor criterio. No dediques mucho tiempo preocupndote sobre qu tipo de defecto es el ms preciso. Sin embargo, intenta ser razonablemente coherente. Sobre el defecto 1 en la Tabla 12.4, por ejemplo, el Estudiante X encontr que el problema era un punto
151
sr. Z
Nmero Tipo Introducido Eliminado
[ 8 1 1 T] 210
Descripcin: omitido:
raGq
Tipo
-
pG@q 1 -
Fecha
Nmero
Introducido
-
Eliminado
-
[ Descripcin: omitido:
Tiempo de correccin j
Defecto corregido ~
Fecha
Nmero
Tipo
Introducido
Eliminado
1-1
1 1 3TI
Defecto corregido
7 1
Defecto corregido
Descripcin: defecto en la parte derecha del operador binario, debe t r a t a r s e ei entero como float Fecha Nmero Tipo Tiempo de correccin
~
Fecha Nmero
~
Tipo
m
Introducido Eliminado
Descripcin: error en la parte derecha, la constante debera ser 0.0 v no O Tiempo de correccin Defecto corregido
1 1 15
Fecha Nmero Tipo
rzmzzq
Introducido Eliminado
7
Defecto corregido
Descripcin: error en la parte derecha, tenas que t r a t a r el entero como f l o a t Tiempo de correccin
6
Nmero
r~ m i ~compilac.1
Tipo Introducido Eliminado
1
I
7
.
m
Defecto corregido
Descripcin: el exponent e debe ser un entero. investigu v utilic la lib reria matematica para sart. '
la intearal no se clculo correctamentn
Fecha
1 1 TI 7
Fecha Nmero Tipo
1codificac.l
r
Eliminado
Tiempo de correccin
1m 1
Introducido
l a l
sustraccin
r n
Icodificac.1-
Tiempo de correccin
Defecto corregido
Descripcin: el bucle no termin con un exponente neaativo. olvid camb iar el siano en la
152
DEFECTOS
y coma olvidado. Una vez resuelto el problema, anot el nmero 20 para el defecto 1 en la casilla de Tipo.
6. Anota la fase del proceso en la que introdujiste el defecto. Aunque esto pueda no estar siempre claro, no debera ser un problema para programas pequeos. Utiliza tu mejor criterio y no te preocupes mucho tiempo de este tema. En el ejemplo, el Estudiante X estaba convencido de que haba cometido el error del punto y coma cuando estaba codificando el programa, por eso puso la palabra codi$car en la casilla de Introducido.
8. Para el tiempo de correccin del defecto, estima el tiempo en que te diste cuenta y comenzaste a trabajar sobre el defecto hasta que lo acabaste de corregir y chequear. Cuando comenz a corregir el defecto 1, el Estudiante X anot la hora de su reloj. Una vez que haba arreglado el problema y comprobado para asegurarse de que estaba correctamente corregido, de nuevo comprob su reloj y vio que solamente le haba dedicado un minuto. Generalmente, para defectos de compilacin, el tiempo de correccin ser solamente de un minuto aproximadamente. Para los defectos encontrados en las pruebas, sin embargo, la correccin puede llevar mucho ms tiempo. Podras utilizar un reloj o un cronmetro para medir el tiempo de correccin, pero para correcciones pequeas, tu criterio ser adecuado. 9. La casilla de Defectos Corregidos es para los defectos introducidos mientras corriges otros defectos. Aunque esto ser importante ms adelante, ignralo por ahora. 10. Escribe una breve descripcin del defecto en la seccin de descripcin. Haz esto tan breve y sencillo como sea posible, pero describe el defecto claramente. Por ejemplo, simplemente anota un ; para designar un punto y coma omitido. Para un defecto lgico ms sofisticado, escribe varias lneas, escribe en las siguientes lneas del cuaderno de defectos si es necesario. Para el defecto 1, el Estudiante X simplemente anot omitido ;. Para muchos de los defectos de la Tabla 12.4, tuvo que poner una descripcin ms detallada. Puesto que estas descripciones son nicamente para tu uso, no es necesario escribir ms de lo preciso para que puedas recordar el problema.
153
A menudo, las personas se confunden sobre los tipos de defectos y piensan que deberan tener un tipo especial para interpretaciones errneas y confusiones. Por ejemplo, si no entendiste los requisitos o no estabas familiarizado con el entorno de desarrollo, probablemente cometiste muchos errores. Esta cuestin es importante, pero est relacionada con las cuusus del defecto. Por lo que al tipo de defecto se refiere, hay solamente dos cuestiones. Haba algo errneo en el producto? y si es as, cul era el tipo de defecto del producto? As, aunque entender la causa es necesario para prevenir los defectos, el tipo de defecto solamente describe lo que estaba incorrecto en el producto.
12.8
154
DEFECTOS
el primero, decides codificar el segundo, antes de comenzar la compilacin del primero. A mitad de codificar el segundo procedimiento, te das cuenta de que has dado un nombre equivocado a un parmetro en el primer procedimiento. Esto es un defecto, porque aunque ests en la fase de codificacin, en ese momento habas terminado la codificacin del primer procedimiento. Observa que en este libro no se te exige contabilizar los defectos encontrados durante las fases de diseo y codificacin. Inicialmente, es importante concentrarte sobre aquellos defectos encontrados durante la compilacin y pruebas. Una vez que ests acostumbrado a reunir datos de defectos, sabrs mejor por qu son necesarios dichos datos. Entonces puedes querer aprender ms sobre los errores que cometes y corriges durante las fases de codificacin y diseo. Puesto que probablemente cometers muchos errores mientras diseas y codificas, estas son las fases donde debes tratar de entender las causas de los defectos y ver cmo prevenirlos. Por el momento, sin embargo, comienza con aquellos defectos que encuentres en la compilacin y en las pruebas.
12.9
155
Paru ahorrar dinero. Los defectos son caros. Despus de una prueba, los costes de encontrar y corregir los defectos aumentan en un factor de 10 para cada subsiguiente fase de pruebas o de mantenimiento. Paru hacer tu trabajo de una forma responsable. Los defectos son introducidos por los ingenieros y es su responsabilidad encontrarlos y corregirlos.
12.10
A continuacin, contabiliza los defectos eliminados en cada fase. El Estudiante X contabiliz 6 defectos eliminados en la fase de compilacin y dos en la de pruebas, por lo que anot un 6 y un 2 en las dos filas de la seccin de eliminados. De nuevo, obtendremos un total de 8. Con el PSP, probablemente comenzars encontrando la mayor parte de los defectos durante la fase de compilacin. Las pruebas, sin embargo, necesitan ms tiempo, puesto que es ms difcil encontrar y corregir defectos en dicha fase.
Despus de anotar el nmero de defectos introducidos y eliminados, completa las columnas de Hasta la Fecha y % Hasta la Fecha de la misma forma que rellenaste las mismas columnas con los datos de tiempos (vase la Seccin 11.7 del Captulo 11). No necesitars los datos de defectos
156
DEFECTOS
~~~
Planificacin
Obtn una descripcin de las funciones del programa. Estima las LOC Mx., Mn. y total requeridas. Determina los Minutos/LOC. Calcula los tiempos de desarrollo Mx., Mn., y total. Anota los datos del plan en la tabla Resumen del Plan del Proyecto. Anota el tiempo de planificacin en el Cuaderno de Registro de Tiempos. Disea el programa. Anota el diseo en el formato especificado. Anota el tiempo de diseo en el Cuaderno de Registro de Tiempos. lmplementa el diseo. Utiliza un formato estndar para introducir el cdigo. Anota el tiempo de codificacin en el Cuaderno de Registro de Tiempos. Compila el programa. Corrige y anota todos los defectos encontrados. Anota el tiempo de compilacin en el Cuaderno de Registro de Tiempos. Prueba el programa. Corrige y anota todos los defectos encontrados. Anota el tiempo de pruebas en el Cuaderno de Registro de Tiempos. Completa la tabla de Resumen del Plan del Proyecto con los datos de tiempo, tamao y defectos reales. Anota el tiempo postmortem en el Cuaderno de Registro de Tiempos. Programa probado a fondo. Diseo adecuadamente documentado. Listado completo del programa. Resumen del Plan del Proyecto completado. Cuadernos de Tiempos y defectos completados.
Diseo
Codificacin
Compilacin
Pruebas
Postmortem
Criterios de salida
Hasta la Fecha y % Hasta la Fecha hasta el Captulo 15, que ser cuando comenzars a estimar el nmero de defectos introducidos y eliminados. Con los datos del % Hasta la Fecha, es sorprendente la precisin con que los ingenieros pueden estimar el nmero de defectos que introducen y eliminan. Las personas son animales de costumbres y nuestras costum-
157
Plan
Real
Hasta la Fecha
% Hasta la Fecha
Plan
Real
DefJHora
Plan
Real
Def.lHora
bres gobiernan nuestros errores. Mientras no cambiemos estos hbitos, continuaremos cometiendo errores similares. As, a no ser que hagas un gran cambio, tal como utilizar un proceso diferente, trabajar en aplicaciones ms complejas o modificar el entorno de desarrollo, probablemente introducirs aproximadamente el mismo nmero de defectos en el prximo programa de la misma forma que lo hiciste la ltima vez. El resto del Resumen del Plan del Proyecto se completa de la misma forma como hemos visto anteriormente. Hay, sin embargo, unas pocas
158
DEFECTOS
Tabla 12.7 Instrucciones del resumen del plan del proyecto del PSP.
Propsito Cabecera Esta tabla trata los datos estimados y reales de los proyectos de una forma cmoda y fcilmente recuperable. ~ _ _ Introduce los siguientes datos: Tu nombre y fecha de hoy. Nombre y nmero de programa. Nombre del profesor. El lenguaje que utilizars para escribir el programa. Antes de iniciar el desarrollo. Escribe los Minutos/LOC planificados para este proyecto. Utiliza la velocidad Hasta la Fecha de un programa reciente del Cuaderno de Trabajos o del Resumen del Plan del Proyecto. Despus del desarrollo: Divide el tiempo total de desarrollo por el tamao real del programa para obtener los MinutoslLOC reales y los Minutos/LOC Hasta la Fecha. Por ejemplo, si el proyecto se hizo en 196 minutos e hiciste 29 LOC, los Minutos/LOC seran 196/29 = 6,76. Antes de iniciar el desarrollo: Calcula las LOC por hora planificada para este programa dividiendo 60 por los Minutos/LOC de la casilla de Plan. Despus del desarrollo: Para LOC/Hora Real y Hasta la Fecha divide 60 por Minutos/LOC Reales y Hasta la Fecha. Para los 6,76 Minutos/LOC Reales, tenemos 60/6,76 = 8,88 LOClHora Reales.
~~
MinutosLOC
LOC/Hora
Tamao Programa Antes de iniciar el desarrollo: (LOC) Escribe bajo la columna plan, el valor estimado de Total Nuevas & Cambiadas, Mximo y Mnimo. Despus del desarrollo: Cuenta y escribe las LOC Nuevas & Cambiadas Reales. Para la columna Hasta la Fecha, aade LOC reales Nuevas & Cambiadas a las LOC Hasta la Fecha Nuevas & Cambiadas de programas anteriores. Tiempo por fase Plan
Para el tiempo total de desarrollo, multiplica el valor de las LOC Total Nuevas & Cambiadas por Minutos/LOC. Para el tiempo Mximo, multiplica el tamao Mximo por los Minutos/LOC. Para el tiempo Mnimo, multiplica el tamao Mnimo por los MinutodLOC. Del Resumen del Plan del Proyecto de un programa reciente, busca los valores de % Hasta la Fecha para cada fase. Utilizando el Hasta la Fecha de programas anteriores calcula el tiempo planificado para cada fase. Una vez acabado el trabajo, anota el tiempo real en minutos que has gastado en cada fase del desarrollo. Obtn estos datos del Cuaderno de Tiempos.
( Contina)
Real
159
Tabla 12.7 Instrucciones del resumen del plan del proyecto del PSP. (Continuacin)
Hasta la Fecha Para cada fase, escribe la suma del tiempo real y el tiempo Hasta la Fecha de los programas ms recientes.
Hasta la Fecha Para cada fase, escribe 1O0 multiplicado por el tiempo Hasta la Fecha y lo divides por el total del tiempo Hasta la Fecha. Defectos reales introducidos Hasta la Fecha Despus del desarrollo, localiza y anota el nmero real de defectos introducidos en cada fase. Para cada fase, escribe la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes.
~
% Hasta la Fecha Para cada fase, multiplica por 100 los Defectos Hasta la
Fecha para esa fase y divdelos por el total de defectos Hasta la Fecha.
~~
Despus del desarrollo, localiza y anota el nmero real de defectos eliminados en cada fase. Para cada fase, escribe la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes. Fecha para esa fase y divdelos por el total de defectos Hasta la Fecha.
% Hasta la Fecha Para cada fase, multiplica por 100 los Defectos Hasta la
consideraciones a tener en cuenta: primero, el dato Hasta la Fecha en Minutos/LOC se obtiene del cociente entre el tiempo total de desarrollo Hasta la Fecha y las LOC Nuevas & Cambiadas Hasta la Fecha; tenemos, 682/105=6,50 Minutos/LOC. Segundo, las LOC/Hora se calculan dividiendo 60 por los Minutos/LOC hasta la Fecha, tenemos 60/6,50=9,23 LOC/Hora. Observa que con estas velocidades de Hasta la Fecha, no necesitas controlar las Unidades y Medias del Cuaderno de Trabajos de los programas desarrollados. Este cuaderno es una referencia muy adecuada para la informacin del proyecto, sin embargo, te sugiero que contines revisando los Cuadernos de Trabajo del programa. Si tus experiencias son como las mas, rpidamente acumulars una gran cantidad de datos. Yo he controlado hasta ahora unos 200 trabajos, y he almacenado mis datos de proyectos por nmero de trabajo. As, encuentro que el Cuaderno de Trabajos es la forma ms adecuada para identificar datos histricos o encontrar datos de un proyecto particular.
RESUMEN
La calidad del software consiste en satisfacer las necesidades de los usuarios haciendo el trabajo de los mismos de una forma fiable y consistente. Esto requiere que el software que hagas tenga pocos defectos.
160
DEFECTOS
Tabla 12.8 Ejemplo del resumen del plan del proyecto del PSP.
Estudiante
Programa
Estudiante X- -
Fecha
28/10/96
1 0
Ada
Programa#
Sr. Z
Profesor
Lenguaje
Resumen MinutosiLOC LOClHora Defectos/KLoc Rendimiento VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
Plan
Real
6,76 8,88
6,12 9 8 , 0
4 4 58
3 0
57
15 0
Plan
Real
1 0
1 3 11 10 3
Hasta la Fecha 33
% Hasta la Fecha
43 12 6 2 1 73 32 39 4
55
30 0
4,8 81 . 452
Plan
70 15 6 5 1 682
Def.lHora
2 6
2 6
25,O 75,O
8
Plan Actual
100,o
Def.lHora
6 2
0
6 2
0
75,O 25,O
100,o
Un defecto del software es algo en el producto que est incorrecto. Los defectos son causados por errores humanos. Puesto que los defectos son costosos de encontrar y corregir, es muy eficiente que los ingenieros encuentren y corrijan inmediatamente los defectos introducidos. El primer paso en la gestin de defectos es entenderlos. Para esto, el programador necesita reunir datos de defectos, analizar estos datos y determinar la mejor forma de prevenir, localizar y corregir dichos defectos.
161
El Estndar de Tipos de Defectos es un estndar simplificado utilizado en este libro para ayudarte a identificar tus categoras de defectos ms importantes. Despus de que tengas algunos datos de defectos, puedes desear extender estas categoras. Utiliza el Cuaderno de Defectos para reunir los datos de los defectos. Registra cada defecto utilizando una casilla del cuaderno para cada defecto. Para cada programa, resume estos datos en la tabla del Plan del Proyecto.
EJERCICIO 12
Utiliza el Cuaderno de Registro de Defectos para registrar cada defecto que encuentres en los programas que escribas. Identifica el programa donde encontraste los defectos, anota cada defecto como un registro separado y describe detalladamente cada defecto. Resume los datos de defectos en el Resumen del Plan del Proyecto para cada programa. Tambin, entrega una copia del Cuaderno de Tiempos, del Cuaderno de Trabajos y del Resumen Semanal de Actividades que no hayas entregado todava, y entrega una planificacin y un Cuaderno de Registro de Defectos para cada nuevo programa que desarrolles.
REFERENCIAS
[Chillarege] Chillarege, Ram, Inderpal S. Bhandari, Jarir K. Chaar, Michael J. Halliday, Diane S. Moebus, Bonnie K. Ray, and Man-Yuen Wong. Orthogonal Defect Classification-A Concept for In-Process Measurements. IEEE Transactions on Software Engineering, vol., 18, no. 1 1, Nov 1992, pp. 943-956. [Humphrey 891 Humphrey, W.S. Managing the Software Process. Reading, MA: Addison-Wesley, 1989. [Humphrey 951 Humphrey, W.S. A Discipline for Software Engineering. Reading, MA: Addison-Wesley, 1995.
CAPITULO 13
Encontrar defectos
Hay varias formas de encontrar defectos. Este captulo resume brevemente las principales alternativas y muestra cmo un mtodo particular, la revisin de cdigo, puede ayudar a mejorar la productividad y calidad de tu trabajo. En el ejercicio, hars revisiones de cdigo para los siguientes programas que escribas.
13.1
13.2
164
ENCONTRAR DEFECTOS
110. Despus de que hayas aprendido el PSP, encontrars que eliminar los defectos al principio, te ahorrar tiempo y hars mejores productos. Por ejemplo, si pudieras encontrar y corregir un defecto de diseo antes de hacer el cdigo, no gastaras tiempo implementando un diseo incorrecto. De forma similar, cuando corriges defectos de codificacin antes de compilar y hacer las pruebas, ahorras tiempo que tendras que dedicar a encontrar y corregir estos defectos durante la fase de compilacin y pruebas. Este captulo muestra cmo encontrar los defectos y proporciona datos que puedes utilizar para evaluar la efectividad de estos mtodos de eliminacin de defectos. Hay varias formas de encontrar los defectos en un programa. En esencia, todos estos mtodos implican los siguientes pasos:
2 Deducir de estos sntomas la localizacin del defecto. . 3. Entender lo que es errneo en el programa.
4. Decidir cmo corregir el defecto. 5. Hacer la correccin.
13.3
165
pueden generar cdigo de programas fuente defectuosos. Aunque muchos de estos defectos que pasan inadvertidos provienen de diseos inadecuados, algunos podran ser simples errores sintcticos. Puede parecer improbable que un compilador pudiese pasar por alto errores sintcticos, pero mis datos de varios miles de defectos de C++ muestran que esto sucedi en el 9,4% de los errores sintcticos que comet. As como un corrector ortogrfico no puede detectar todos los errores ortogrficos, el compilador no detectar todos los defectos sintcticos. Una segunda forma de encontrar defectos, es por medio de las pruebas. Aunque hay muchas clases de pruebas, todas requieren que los examinadores proporcionen datos de prueba y condiciones de prueba (algunas veces llamadas casos de prueba o escenarios de prueba). La calidad de las pruebas est gobernada por el grado en que estos escenarios cubren todas las funciones importantes del programa. El examinador, entonces, ejecuta estos casos de prueba para ver si el programa proporciona los resultados adecuados. Esto implica otra responsabilidad del examinador: comprender que los resultados de estas pruebas deberan parecerse si el programa trabajase correctamente. Aunque las pruebas pueden utilizarse para comprobar casi cualquier funcin del programa, tienen varias desventajas. Primero, como con los compiladores, las pruebas solo suponen el primer paso de correccin de defectos. Es decir, an tienes que moverte desde los sntomas a los problemas antes de comenzar a trabajar en la correccin. Otro problema, es que cada prueba verifica solamente un conjunto de condiciones del programa. Es decir, si el programa multiplica dos nmeros, x e y, y lo pruebas con x=l 1 e y=18, sabras solamente que funciona para esos valores. No sabras, por ejemplo, cmo trabaja el programa con nmeros negativos, o con el cero, o con nmeros positivos o negativos muy grandes en el sistema numrico, o con cualquier otro par de nmeros. Para comprobar todas estas posibilidades tendras que hacer muchas pruebas. Puesto que cada programa sencillo implica muchas combinaciones posibles de datos y condiciones operativas, unas pruebas globales consumen tiempo. En efecto, para cualquier programa sencillo, una prueba global es prcticamente imposible. La tercera forma de encontrar los defectos, es la ms comn de todas. Consiste en entregar programas defectuosos y esperar que los usuarios identifiquen e informen de los defectos. Esta es la estrategia ms costosa. Por ejemplo, durante un ao, IBM gast unos 250 millones de dlares en reparar y reinstalar correcciones de los 13.000 defectos detectados por los clientes. Esto supone unos 20.000 dlares por defecto. Por ltimo, indicar que la forma ms efectiva de encontrar y corregir defectos es revisar personalmente el cdigo fuente del programa. Aunque esto puede parecer una forma difcil de limpiar un programa de-
166
ENCONTRAR DEFECTOS
13.4
167
guientes captulos discuten las medidas y las tcnicas que te ayudarn a mejorar la forma de hacer las revisiones de cdigo y te proporcionan datos para demostrar su efectividad.
13.5
13.6
168
ENCONTRAR DEFECTOS
uno o ms de estos mdulos. Despus de disear el mdulo, implementarlo y compilarlo, los ingenieros hacen una prueba inicial o prueba de unidad. Despus de estas pruebas de unidad privadas, se combinan los mdulos en un gran componente y se hacen pruebas de integracin. Se realizan varios niveles de pruebas de componentes antes de que se combinen los componentes en productos para hacer las pruebas del producto. Finalmente, se ensamblan los productos en los sistemas para hacer las pruebas del sistema. Aunque el tipo, duracin y complejidad de las pruebas de integracin, de componentes, de producto y del sistema variar con el tamao y complejidad del sistema, se utiliza el mismo proceso general para casi todos los productos software a gran escala. El coste medio de encontrar y corregir un defecto crece unas 10 veces en cada paso del proceso de desarrollo. Aunque el tiempo de corregir los defectos vara enormemente, estos valores medios muestran, a pesar de todo, los tipos de defectos. Algunos defectos triviales de sintaxis, como un punto y coma mal colocado o errores tipogrficos en los nombres pueden pasar la fase de compilacin, siendo muy difcil encontrarlos en la fase de pruebas. En la revisin de cdigo encontrars y corregirs los defectos en una media de l a 2 minutos. En las pruebas de unidad iniciales, sin embargo, los tiempos para corregir los defectos tendrn un valor medio de entre 10 y 20 minutos o ms. Estos datos corresponden, en su mayor parte, a correcciones que necesitan entre l y 2 minutos, y existen unas pocas que necesiten varios minutos o varias horas. El tiempo de encontrar los defectos en las pruebas de integracin, de componentes o del sistema, tambin variar con el tamao y la complejidad del sistema. Muchas veces se requiere encontrar y corregir defectos en sistemas grandes y muy complejos. En las pruebas de integracin, por ejemplo, cada defecto puede costar una hora o ms, y en las pruebas del sistema cada defecto puede costar entre 10 a 40 o ms horas de ingeniero. Una vez que los productos son entregados a los clientes, el coste de encontrar y corregir los defectos puede ser mucho mayor, dependiendo de la clase de productos y de los tipos y nmero de clientes. Mis datos personales de los tiempos de encontrar y corregir los defectos en C++ se muestran en la Figura 13.1. El siguiente ejemplo 'muestra el coste de esperar hasta que las pruebas eliminen todos los defectos del programa. Una empresa pequea de software comercial desarroll un programa con varios componentes. Las pruebas de integracin realizadas por los ingenieros que estaban entrenados en el PSP duraron un par de semanas. Un componente, sin embargo, se desarroll por un grupo que no haba recibido formacin en el PSP y las pruebas de integracin se realizaron en varias semanas. El tiempo de las pruebas para encontrar y corregir los defectos fue de 300 horas. Puesto que las pruebas necesitaron mucho ms tiempo que el planificado, la entrega al cliente se hizo dos meses ms tarde.
169
120
0NombreTipo
2
4-
100
80
.* U
60
O C
8
-0 u
o a
:
c;
40
20
O R
C T U Revisin, Compilacin, Pruebas, Utilizacin
El desarrollo de un sistema aeroespacial, necesit una media de 40 horas de ingeniero para encontrar y corregir cada defecto en las pruebas del sistema de un sistema de navegacin area. En Digital Equiment Corporation, para un sistema, el tiempo mnimo para encontrar y corregir cada defecto informado por el cliente fue de 88 horas de ingeniero. Adems del coste, una razn de igual importancia para encontrar los defectos al-principio, es que la compilacin, depuracin y las pruebas tienen una efectividad reducida. Los compiladores son las herramientas ms rpidas que tenemos para detectar defectos, pero solamente encuentran alrededor del 90% de los defectos de sintaxis y muy pocos defectos lgicos. La prueba de unidad es normalmente la prueba ms efectiva, pero encuentra la mitad de los defectos del programa. Despus de la prueba de unidad, la efectividad de las pruebas disminuye, con las pruebas del sistema, normalmente se encuentran entre un 30% y un 40% de los defectos del producto. As, si quieres producir un producto de alta calidad, tendrs que producir un programa sin defectos al principio o esperar dedicarle mucho tiempo en las pruebas.
13.7
170
ENCONTRAR DEFECTOS
ces el nmero de defectos que encuentran en la compilacin y en las pruebas. Lo consiguen, siguiendo los pasos esbozados en este y en los siguientes captulos. El trabajo de revisar el cdigo es tan adecuado que despus de utilizarlo durante este curso y ver sus buenos resultados, probablemente hars de las revisiones una parte normal de tu proceso personal. El primer paso para hacer las revisiones, es entender la clase de defectos que puedes introducir. Esta es la razn principal de reunir datos de defectos. El tipo de defectos en tu prximo programa, sern muy parecidos a los encontrados en programas anteriores. Esto ser cierto mientras contines desarrollando software de la misma forma. Por otra parte, conforme vayas adquiriendo ms habilidades y experiencia, o si cambias de proceso, el nmero y tipo de defectos cambiar. Puesto que las clases de defectos que introduces podran ser diferentes a las introducidas por otra persona, tu estrategia de revisin debera basarse en tu perfil de defectos personales. Al igual que un mecangrafo habilidoso comete pocos errores de mecanografa, un ingeniero del software experimentado cometer pocos errores de programacin. Mejorars de forma natural conforme tengas ms prctica, pero hay algn punto a partir del cual la mejora es ms difcil. Entonces, debes estudiar los defectos. Esto te ayudar a saber cmo mejorar la forma de encontrarlos y corregirlos.
Los objetivos de la revisin de cdigo son encontrar el mayor nmero de defectos lo ms pronto posible en el proceso software. T tambin quieres encontrar cada defecto en el menor tiempo posible. Un guin para hacer una revisin de cdigo se muestra en la Tabla 13.1. Aunque, este resumen es autoexplicativo, es importante que cuando revises el cdigo tengas en cuenta lo siguiente:
Hacer la revisin antes de la primera compilacin. Hacer la revisin en un listado impreso del cdigo fuente. Registrar cada defecto encontrado en el Cuaderno de Registro de Defectos. Durante la revisin, comprueba los tipos de defectos que hayas previamente encontrado en compilaciones y en pruebas. Un mtodo ordenado para hacer esto se describe en el Captulo 14.
13.8
1. Dedicars casi el mismo tiempo a hacer una revisin completa de cdigo si la haces antes o despus de la compilacin.
171
Procedimiento Primero escribe el cdigo fuente del programa completo. de revisin Antes de compilar o probar el programa, imprime un listado del cdigo fuente. A continuacin, haz la revisin del cdigo. Durante la revisin del cdigo, chequea cuidadosamente cada lnea del cdigo fuente para encontrar y corregir tantos defectos como puedas. Corregir los defectos Revisar el mbito Revisar la lgica del programa Comprobar los nombres y los tipos Comprobar todas las variables Comprobar la sintaxis del programa Criterios de salida Corregir todos los defectos encontrados. Comprobar las correcciones para asegurar que son correctas. Anotar los defectos en el Cuaderno de Registro de Defectos. Verifica que el diseo del programa satisface todas las funciones descritas en la especificacin. Verifica que el cdigo fuente implementa todo el diseo. Verifica que el diseo lgico es correcto. Verifica que el programa implementa correctamente el diseo lgico.
~~
Verifica que todos los nombres y tipos son correctamente declarados y utilizados. Chequea la correcta declaracin de los tipos de dato integer, long integer y float. Asegrate que cada variable est inicializada. Chequea los problemas de desbordamiento, underflow y fuera de rango. Verifica que el cdigo fuente cumple todas las especificaciones del lenguaje. Al finalizar debes tener: El cdigo fuente terminado y corregido. El Cuaderno de Registro deTiempos completo. El Cuaderno de Registro de Defectos completo.
2. Revisar primero te ahorrar mucho tiempo de compilacin. Antes de hacer una revisin de cdigo, los ingenieros normalmente dedican entre el 12% y el 15% de su tiempo de desarrollo a la compilacin. Una vez que aprenden a hacer la revisin de cdigo, sus tiempos de compilacin caen hasta un 3% o menos.
3. Una vez que los ingenieros han compilado sus programas, normalmente sus revisiones no son tan completas.
172
ENCONTRAR DEFECTOS
4. La compilacin es igualmente efectiva antes o despus de la revisin de cdigo. 5. La experiencia indica que cuando los programas tienen muchos defectos durante la compilacin, generalmente tienen muchos defectos en las pruebas.
El argumento para revisar antes de compilar es sencillo: hazlo de esta forma y lo vers. Si, an despus de este curso, quisieras intentar compilar antes de hacer la revisin, entonces escribe unos pocos programas de cada forma y compara su rendimiento. Entonces, utiliza los mtodos descritos en los Captulos 18 y 19, evala los datos del proceso y del producto para ver qu aproximacin es ms efectiva. Un punto importante es no seguir tu intuicin o hacer lo que todo el mundo hace. Rene los datos de tu propio trabajo y toma una decisin lgica basada en estos hechos.
13.9
..
40
3s
.
so
I
173
30
2 2
a
Y
25
20 -
1s
'O
S'.. O' O
I
1O0
1so
200
Defectos de Compilacin
O l i
SO
I O0 Defectos de Compilacin
1so
200
se haba opuesto firmemente a hacer una revisin de cdigo, encontr cerca de 200 defectos durante la compilacin. Como se muestra en la Figura 13.2, sus pruebas tenan muchos ms defectos que la de los otros componentes. Lo que es interesante, es que, este mismo componente tambin tena ms defectos en las pruebas de integracin y en las del sistema. Aunque el cliente haba hecho solamente unas breves pruebas de aceptacin del total de componentes, el mismo componente volva a tener ms defectos. Finalmente, este componente defectuoso necesit el doble de
174
ENCONTRAR DEFECTOS
tiempo de lo planificado para desarrollarlo. Los otros componentes fueron entregados en el momento planificado o antes, mientras que aquel componente se entreg cinco semanas despus. El trabajo cuidadoso se amortiza. Cuando los ingenieros sienten personalmente la responsabilidad de la calidad de sus programas, ellos no dependern de los compiladores o de otras herramientas para encontrar sus defectos. Cuando te comprometes a hacer un producto de calidad, tu compromiso aparecer en el nmero de defectos que encuentras en la compilacin, en las pruebas y en la calidad de tus programas acabados.
13.1O
13.11
175
Planificacin
Diseo
Codificacin
Revisin de cdigo
Compilacin
Pruebas
Postmortem
Criterios de salida
176
ENCONTRAR DEFECTOS
Fecha
Programa # Lenguaje Hasta la Fecha
Plan
Real
Hasta la Fecha
% Hasta la Fecha
_-
plan
Real
DefJHora
plen
Real
et.Mora
Para ejercicios muy pequeos de clase, las inspecciones generalmente no estn justificadas, pero para grandes proyectos o cualquier programa industrial, las inspecciones deberan hacerse siempre. La estrategia ptima, es hacer una revisin de cdigo personal antes de compilar, y compilar despus el programa. A continuacin, antes de cualquier prueba, haz una inspeccin. Aunque este libro no discute posteriormente las inspecciones, hay varias referencias tiles sobre este asunto [Fagan, Gilb, Hymphrey 891.
177
Tabla 13.4 Instrucciones del resumen del plan del proyecto del PSP.
Propsito Cabecera Esta tabla trata los datos estimados y reales de los proyectos de una forma cmoda y fcilmente recuperable. Introduce los siguientes datos: Tu nombre y fecha de hoy. Nombre y nmero de programa. Nombre del profesor. * El lenguaje que utilizars para escribir el programa.
-MinutosiLOC
Antes de iniciar el desarrollo: Escribe los Minutos/LOC planificados para este proyecto. Utiliza la velocidad Hasta la Fecha de un programa reciente del Cuaderno de Trabajos o del Resumen del Plan del Proyecto. Despus del desarrollo: Divide el tiempo total de desarrollo por el tamao real del programa para obtener los Minutos/LOC reales y los Minutos/LOC Hasta la Fecha. Por ejemplo, si el proyecto se hizo en 196 minutos e hiciste 29 LOC, los Minutos/LOC seran 196/29= 6,76. Antes de iniciar el desarrollo: Calcula las LOC por hora planificada para este programa dividiendo 60 por los Minutos/LOC de la casilla de Plan. Despus del desarrollo: Para LOC/Hora Real y Hasta la Fecha divide 60 por Minutos/LOC Reales y Hasta la Fecha. Para los 6,76 Minutos/LOC Reales, tenemos 60/6,76 = 8,88 LOC/Hora Reales.
LOC/Hora
Tamao Programa Antes de iniciar el desarrollo: (LOC) Escribe bajo la columna plan, el valor estimado de Total Nuevas & Cambiadas, Mximo y Mnimo. Despus del desarrollo: Cuenta y anota las LOC Nuevas & Cambiadas Reales. Para la columna Hasta la Fecha, aade LOC reales Nuevas & Cambiadas a las LOC Hasta la Fecha Nuevas & Cambiadas de programas anteriores. Tiempo por fase Plan
Para el tiempo total de desarrollo, multiplica el valor de las LOC Total Nuevas & Cambiadas por Minutos/LOC. Para el tiempo Mximo, multiplica el tamao Mximo por los Minutos/LOC. Para el tiempo Mnimo, multiplica el tamao Mnimo por los Minutos/LOC. Del Resumen del Plan del Proyecto de un programa reciente, busca los valores de % Hasta la Fecha para cada fase. Utilizando el Yo Hasta la Fecha de programas anteriores calcula el tiempo planificado para cada fase. Una vez acabado el trabajo, anota el tiempo real en minutos que has gastado en cada fase del desarrollo. Obten estos datos d:~l7uaderno de Registro de Tiempos. (Contina)
Real
178
ENCONTRAR DEFECTOS
Tabla 13.4 Instrucciones del resumen del plan del proyecto del PSP. (Continuacin)
~ ~
Hasta la Fecha
Para cada fase, anota la suma del tiempo real y el tiempo Hasta la Fecha de los programas ms recientes.
lo divides por el total del tiempo Hasta la Fecha.
Yo Hasta la Fecha Para cada fase, multiplica por 1O0 el tiempo Hasta la Fecha y
Defectos Introducidos Despus del desarrollo, localiza y anota el nmero real de defectos introducidos en cada fase. Reales Hasta la Fecha Para cada fase, anota la suma de los defectos reales y los Hasta la Fecha de los programas ms recientes.
Yo Hasta la Fecha Para cada fase, multiplica por 1O0 los Defectos Hasta la Fecha para esa fase y divdelos por el total de defectos Hasta la Fecha.
~-
Defectos Eliminados Despus del desarrollo, localiza y anota el nmero real de defectos eliminados en cada fase. Reales Hasta la Fecha Para cada fase, escribe la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes. para esa fase y divdelos por el total de defectos Hasta la Fecha.
Yo Hasta la Fecha Para cada fase, multiplica por 100 los Defectos Hasta la Fecha
2-1 o
I
33
0,26
20
1
2-4
3,05 8
0,6 0,25
0,7
RESUMEN
Este captulo describe cmo y porqu encontrar defectos al principio del desarrollo. El factor ms importante en la calidad de un programa es el compromiso personal del ingeniero con la calidad. Con este compromiso, los ingenieros eliminan los defectos al principio, antes de compilar o probar sus programas.
179
Fecha
Programa#
Lenguaje
Plan
6,50 9,23
4/12/96
11
Ada
Resumen Minutos/LOC LOC/Hora DefectosKLOC Rendimiento VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
Real
5,00 10,20
53
-7-
40
153
35 Plan
17 20 156
O
Real
1 5 20 132 36 7 30 26 202
Hasta la Fecha
40 03 440 36
77 203 77 964
0,o
21,l
0.0 1O0,O
Plan
Real
1
ef/Hara
21,4 70,6
Pian
Real
Lh?f.Mom
2 1 6
3 0 3
1 4
El principal mtodo para eliminar defectos introducidos con el PSP es la revisin de cdigo personal. Aqu, primero imprimes un listado del programa y lo revisas lnea por lnea para arreglar tantos defectos como puedas encontrar. Para ser ms eficiente, mira aquellos tipos de defectos que te hayan aparecido en tus errores de compilacin y en las pruebas de programas anteriores. Puesto que las personas tienden a repetir los mismos errores, tus datos de los defectos te ayudarn a encontrar todos o muchos de los defectos de los programas, antes de que los compiles y les hagas pruebas.
180
ENCONTRAR DEFECTOS
La experiencia ha mostrado que cuando los ingenieros revisan a fondo sus cdigos antes de la primera compilacin, reducen el tiempo de compilacin en un 10% del tiempo de desarrollo y el tiempo de pruebas, an ms. Aunque una revisin a fondo del cdigo lleva su tiempo, dichas revisiones reducirn el tiempo total al menos, tanto el tiempo como el empleado en las revisiones y se producirn productos de mejor calidad.
EJERCICIO 13
Para el prximo programa, revisa el cdigo fuente antes de compilarlo y probarlo. Sigue el guin de revisin de cdigo mostrado en la Tabla 13.1. Registra todos los defectos encontrados en el Cuaderno de Registro de Defectos y anota los datos del proyecto en la tabla del Resumen del Plan del Proyecto. Entrega copias del Cuaderno de Registro de Tiempos y de las hojas del Resumen Semanal de Actividades que no hayas entregado previamente. Tambin, entrega copias completas del Resumen del Plan del Proyecto y del Cuaderno de Registro de Defectos para cada programa que desarrolles. Incluye los tiempos de desarrollo planificados y reales y los defectos reales introducidos y eliminados.
REFERENCIAS
[Ackerman] Ackerman, Frank A., Lynne S. Buchwald, and Frank H. Lewski. Software Inspections: An Effecttive Verification Process. IEEE Software, May 1989, pp. 3 1-36. [Fagan] Fagan, Michael. Design and Code Inspections to Reduce Errors in Program Development. IBM Systems Journal, vol. 15, no. 3, 1976. [Gilb 931 Gilb, Tom, and Dorothy Graham. Software Znspectiun. Edited by Susannah Finzi, Reading, MA: Addison-Wesley, 1993. [Humphrey 891 Humphrey, W.S. Managing ?he Software Process. Reading, MA: Addison-Wesley, 1989. [ONeill] ONeill, Don. Comunicacin personal. [Ragland] Ragland, Bryce. Inspections Are Needed Now More Than Ever. Juurnal of Defense Software Enginneering, 38. Software Technology Support Center, U.S. Departament of Defense, Nov. 1992. [Russell] Russell, Gien W. Experience with Inspections in UltralargeScale Development. IEEE Sqftwure, Jan. 199 1, pp. 25-3 1.
181
[Shooman] Shooman, M. L., and M. 1. Bolsky. Types, Distribution, and Test and Correction Times for Programming Errors. Proceedings of the 1975 Conference on Reliable Sofmare. Catalog no. 75 CHO 940-7CST, IEEE, New York: p. 347. [vanGenuchten] vanGenuchten, Michael. Comunicacin personal. [Weller] Weller, E. E, Lessons Learned from Two Years of Inspection Data. IEEE Software, Sept. 1993, pp. 38-45.
CAPITULO
14
La clave para realizar una revisin de cdigo efectiva es tener un procedimiento de revisin eficiente. Este captulo describe las listas de comprobacin para la revisin de cdigo, y explica cmo pueden ayudarte, para que de una forma rpida y eficiente, encuentres los defectos en tus programas y hagas una lista de comprobacin para tu uso personal. Como ejercicio, disears una lista de comprobacin para los defectos que normalmente introduzcas y la utilizars en la revisin de tus programas.
14.1
184
atrs utilizada por la NASA antes de cada lanzamiento espacial. Este procedimiento se realiza durante varios das y sigue cientos de pasos. Es tan complejo, que se utilizan computadoras para controlar el progreso de la cuenta atrs. Cuando es esencial encontrar y corregir cada defecto en un programa, debes seguir un procedimiento preciso. Una lista de comprobacin te puede ayudar a asegurarte de que se sigue el procedimiento. En este captulo, trataremos una clase muy especial de lista de comprobacin: una diseada para ayudarte a encontrar los defectos cuando hagas una revisin de cdigo de un programa que has escrito. Vers cmo construyes una lista de comprobacin para la revisin de cdigo, que se adapta para encontrar los defectos que te han causado anteriormente muchos problemas. Las listas de comprobacin tambin pueden ser una fuente de ideas. Cuando sigues una lista de comprobacin personal, sabes cmo revisar tu cdigo. Si utilizas la lista correctamente, tambin sabes cuantos defectos encuentras en cada paso de dicha lista. Comparar tu lista de comprobacin con las de otros ingenieros, te puede sugerir aproximaciones tiles para la revisin. La lista de comprobacin encapsula la experiencia personal. Utilizndola con regularidad y mejorndola, mejorars en la deteccin de los defectos de tus programas. La lista de comprobacin tambin te ayudar a encontrar estos defectos en menos tiempo.
14.2
185
Cuando completes cada paso de la revisin, anota el nmero de defectosque has encontrado de cada tipo en la casilla de la derecha. Si no hay ninguno, anota un control en la casilla de la derecha. Completala lista de comprobacin para un programa, clase, objeto, o mtodo antes de comenzar a revisar la siguiente. Verifica que todaslas funciones del diseoestn programadas. Verificaque los includes estn completos Comprobar la inicializacin parmetros y variables: de * Al inicio del programa. * Al comenzar cada bucle. En la entrada a un procedimiento o funcin.
Llamadas
Nombres
--
--
Comprobar los formatosde las llamadas a las funciones: Punteros. Parmetros. Utilizacin de ' & '
Comprobar la ortografa de los nombres y su utilizacin: Es Consistente? * Est dentro del mbito declarado? Todas las estructuras/clasesutilizan la referencia '.'? Comprobar que todas las cadenas de caracteres: Estn identificadas por punteros. Terminan en NULL. Comprobar los punteros: * Estn inicializados a NULL. * Solamente se eliminan despus de new. Siempre se eliminan despus de utilizarlos.
Formato de salida
( ) Parejas
- Es
Comprobar el formato de salida: Esadecuado el salto de lnea? * adecuado el espaciado? Asegurarse que los corchetes ( ) son los adecuados y estn balanceados. Verificar la utilizacin correcta de ==, =, ||, etc. Comprobar que cada funcin lgica tiene ().
--9
Comprobar cada lnea de cdigo: Sintaxis de las instrucciones. Signos de puntuacin adecuados. Asegurar que cada programa se adapta a los estndares de codificacin.
Apertura y Verifica que todos los ficheros son: cierre de ficheros Declarados de forma adecuada. Abiertos. Cerrados. Global Totales Hacer una revisin global al programa para comprobar los resultados del sistema y problemas inesperados.
186
Llamadas
--
Nombres
--
Formato de salida
( ) Parejas
Comprobar el formato de salida: Esadecuado el salto de lnea? Es adecuado el espaciado? Asegurarse que los corchetes ( ) son los adecuados y estn balanceados. Verificar la utilizacincorrecta de todas las operaciones lgicas Comprobar que cada funcin lgica tiene ( ) . Comprobar cada lnea de cdigo: * Sintaxis de las instrucciones. Puntuacin adecuada. Asegurar que cada programa se adapta a los estndares de codificacin.
Verifica que todos los ficheros son: Declarados de forma adecuada. Abiertos. Cerrados.
Global Totales
Hacer una revisin global al programa para comprobai los resultados del sistema y problemas inesperados.
187
Tambin considera comprobar el cdigo frente a estndares de codificacin, para asegurarte que no has omitido comentarios clave, utilizado un formato inadecuado u omitido informacin importante del proceso o del producto. Aunque los estndares de codificacin pueden parecer que no tienen importancia, pueden ser de gran ayuda para trabajos posteriores, tales como la correccin de un programa, la mejora o la reutilizacin. Puesto que estas son las actividades principales para muchas organizaciones de software, deberas adquirir el hbito de seguir estndares de codificacin (vase la seccin 14.7). El principal peligro con las listas de comprobacin es que generalmente encuentras lo que buscas. Aunque esto es til, el problema es que, si solamente haces las pruebas de la lista de comprobacin, solamente encontrars lo que est en dicha lista. A menudo, sin embargo, los problemas serios aparecen de forma inesperada, tales como interacciones globales entre programas, cuestiones de coordinacin imprevistas, problemas complejos de utilizacin de memoria o condiciones de funcionamiento inusuales. Por ello es una buena idea hacer al menos una revisin general del programa para buscar lo inesperado. Cuando lo hagas, intenta mirarlo desde la perspectiva del sistema o del usuario.
14.3
1. Revisa todo el programa para cada apartado de la lista de comprobacin. Con la lista de la Tabla 14.1, por ejemplo, revisa en primer lugar todo el programa, para asegurarte de que se ha implementado todo el diseo. Durante esta revisin, si observas otros defectos, corrgelos Tu intencin, sin embargo, es comprobar todo el programa frente al diseo. A continuacin, revisa el siguiente apartado de la lista de comprobacin y as sucesivamente.
188
des volver atrs y ver cuntos defectos has encontrado en cada paso de la revisin.
3. Despus de completar cada comprobacin, si no has encontrado defectos, se escribe una x en la primera casilla no utilizada de la columna # .
4. Cuando revises un programa con varias funciones, objetos o procedimientos, es una buena idea revisar cada entidad por separado. Es decir, revisa el procedimiento y escribe una x o el nmero de defectos en la primera columna de la derecha #. Para el segundo procedimiento, se hace lo mismo y se anota el resultado de la revisin en la segunda columna #. Contina as hasta que hayas revisado todas las funciones, objetos o procedimientos. 5. Como se ha observado anteriormente, siempre es una buena idea hacer un examen final global de todo el programa para buscar lo inesperado, nuevas clases de problemas, o problemas del sistema o del usuario.
El proceso general a seguir con una lista de comprobacin para la revisin de cdigo se muestra actualizado en el guin para la revisin de cdigo de la Tabla 14.3. En la Tabla 14.4, se muestra actualizado el guin del Proceso del PSP. Estos guiones tienen solamente un par de cambios con respecto al ltimo captulo, para incluir la lista de comprobacin y la exigencia de que se complete cuando hagas la revisin.
14.4
1. Hacer una lista clasificada numricamente con los defectos en cada fase del proceso software. Vase, por ejemplo, los datos del Estudiante X en la Tabla 14.5. En la parte inferior de la tabla p o demos ver los defectos encontrados por fase para cada programa.
189
Mtodo
Procedimiento Primero escribe el cdigo fuente del programa completo. Antes de compilar o probar el programa, imprime un listado del de revisin cdigo fuente. A continuacin, haz la revisin del cdigo. Durante la revisin delcdigo, comprueba cuidadosamente cada lnea del cdigo fuente para encontrar y corregir tantos defectos como puedas. Corregir los defectos Revisar el mbito Revisar la lgica del programa Comprobar los nombres y los tipos Comprobar todas las variables Comprobar la sintaxis del programa Revisar el programa Criterios de salida Corregir todos los defectos encontrados. Comprobar las correcciones para asegurarte que son correctas. Anotar los defectos en el Cuaderno de Registro de Defectos. Verifica que el diseo del programa satisface todas las funciones descritas en la especificacin. Verifica que el cdigo fuente implementa todo el diseo. Verifica que el diseo lgico es correcto. Verifica que el programa implementa correctamente el diseo lgico. Verifica que todos los nombres y tipos son correctamente declarados y utilizados. Comprueba la correcta declaracin de los tipos de dato integer, long integer y float Asegrate que cada variable est inicializada. Comprueba los problemas de desbordamiento, underflow y fuera de rango. Verifica que el cdigo fuente cumple todas las especificaciones del lenguaje. Haz una revisin global del programa para comprobar cuestiones del sistema y problemas inesperados. Al finalizar debes tener: El cdigo fuente terminado y corregido. El Cuaderno de Registro de Tiempos completo. El Cuaderno de Registro de Defectos completo.
190
Guiarte en el desarrollo de pequeos programas. La descripcin del problema. Tabla Resumen del Plan del Proyecto PSP. Una copia de la lista de comprobacin para la revisin de cdigo. Datos de tamaos y tiempos reales de programas anteriores. Cuaderno de Registro de Tiempos. Cuaderno de Reaistro de Defectos. Obtn una descripcin de las funciones del programa. Estima las LOC Mx., Mn., total requeridas. Determina los Minutos/LOC Calcula los tiempos de desarrollo Mx., Mn., y total. Escribe los datos del plan en la tabla Resumen del Plan del Proyecto. Anota el tiempo de planificacin en el Cuaderno de Registro de Tiempos. Disea el programa. Anota el diseo en el formato especificado. Anota el tiempo de diseo en el Cuaderno de Registro de Tiempos. lmplementa el diseo. Utiliza un formato estndarpara introducir el cdigo. Anota el tiempo de codificacin en el Cuaderno de Registro de Tiempos. Revisar completamente el cdigo fuente. Seguir el guin de revisin de cdigo y de la lista de comprobacin. Corregir y registrar todos los defectos encontrados. Registrar el tiempo de revisin en el Cuaderno de Registro de Tiempos. Compila el programa. Corrige y anota todos los errores encontrados. Anota el tiempo de compilacin en el Cuaderno de Registro de Tiempos. Prueba el programa. Corrige y anota todos los errores encontrados. Anota el tiempo de pruebas en el Cuaderno de Registro de Tiempos. Completa la tabla Resumen del Plan del Proyecto con los datos de tiempo, tamao y defectos reales. Revisa los datos de defectos y actualiza la lista de comprobacin para la revisin de cdigo. Anota el tiempo postmortemen el Cuaderno de Registro de Tiempos. Programa probado a fondo. Diseo adecuadamente documentado. Lista de comprobacin para la revisin de cdigo completa. Listado completo del programa. Resumen del Plan del Proyecto completo. Cuadernos de Registro de tiempos y defectos completos.
l
1
Planificacin
Diseo
Codificacin
Revisin de cdigo
Compilacin
Pruebas
Postmortem
Criterios de salida
191
Introducido Codificar
8
2
3
Eliminado
Omitido
Otros
Revisar
4
1
20 30 40
50
4
4
60 70
80 90 10 0 Total
1 6
1 0
1 5
Programa
10 11 12
2 1 1
1-
6 2 2
3 4
As, podemos hacer una comprobacin fcil de todos los defectos contabilizados.
2. Clasifica los tipos de defectos en orden descendiente del nmero de defectos encontrados en las fases de compilacin y pruebas. Un ejemplo de esta clasificacin se muestra en la Tabla 14.6.
3. Para los tipos con el mayor nmero de defectos, examina el Cuaderno de Registro de Defectos y averigua los errores especficos que causan estos tipos. En la Tabla 14.6, tenemos: el tipo 80, defectos de funcin, el tipo 20 defectos sintcticos y el tipo 40 defectos de asignacin.
4. Para los defectos que resultan de los problemas ms importantes, idea los pasos necesarios en la revisin de cdigo para encontrarlos. Supongamos que para el tipo 20 defectos de sintaxis, el Estudiante X encontr que su problema ms frecuente era olvidar o colocar mal el punto y coma. Entonces decidi aadir una prueba que le recordase examinar cada lnea del programa fuente para comprobar especficamente el punto y coma. 5. Registrar las comprobaciones ideadas en la Lista de Comprobacin para la Revisin de Cdigo para asegurarte que haces estos pasos. Por ejemplo, el Estudiante X pudo aadir el siguiente apartado punto y coma en la lista de comprobacin: revisar cada lnea del programa fuente para verificar que los punto y coma son utilizados de forma correcta.
192
6. Despus de utilizar la nueva lista de comprobacin, examina los datos de los defectos de la misma forma.
8. Si la lista de comprobacin no fue efectiva para encontrar algunos tipos de defectos, cmbiala para detectar mejor estos defectos e intntalo de nuevo. En este caso, si el Estudiante X encontr que escriba con frecuencia dos puntos en vez de un punto y coma, pudo aadir una nota para comprobar cada punto y coma, y asegurarse de que no fue errneamente escrito como dos puntos. Esta actualizacin de la lista de comprobacin se muestra en la Tabla 14.7.
9. Al desarrollar o actualizar la lista de comprobacin, agrupa las pruebas parecidas y no las dupliques. Si una prueba no funciona bien, sustityela en vez de aadir una nueva prueba para la misma cosa. En el ejemplo de la Tabla 14.7, el Estudiante X incluy las comprobaciones del punto y coma con otras comprobaciones de signos de puntuacin.
10. Despus de desarrollar cada programa, examina los datos de defectos y la lista de comprobacin para identificar los cambios o adiciones tiles.
11. Es una buena idea considerar qu pasos podran prevenir estos defectos en el futuro. Como por ejemplo, la actualizacin de los estndares de codificacin o aadir un paso al proceso de diseo.
En las Tablas 14.5 y 14.6, el Estudiante X mostr todos los defectos que haba introducido y eliminado desde que comenz a reunir datos de defectos. Aunque incluy solamente 20 defectos, esos fueron todos los
193
Llamadas
Nombres
* Est dentro del mbito declarado? 0 Todaslas estructuras y paquetes utilizan la referencia '.'?
Cadenas
lnicializadoa NULL. Solamentese eliminan despus de new. Siempre se eliminan despus de utilizarlos.
Formato de salida
() Parejas
Asegurarse que los corchetes ( ) son las adecuados y estn balanceados. Verificar la utilizacin correcta de todos los operadores lgicos. Comprobar que cada funcin lgica tiene (). Comprobar cada lnea de cdigo: Sintaxis de la instruccin. Utilizacinadecuada de los puntos y comas. comprobar que los puntos y comas no se escriben como dos puntos. Otros signos de puntuacin.
Estndares
Abiertos. Cerrados.
194
datos que tena. En la Tabla 14.5, puso primero los totales de los programas que haba obtenido de los Resmenes del Plan del Proyecto y despus obtuvo del Cuaderno de Registro de Defectos informacin del tipo. En la Tabla 14.6, clasific la Tabla 14.5 en orden decreciente al nmero de defectos que aparecen en la columna que est ms a la derecha de la tabla. En la parte alta de la lista aparece el mayor nmero de defectos omitidos y a continuacin el segundo tipo de defecto y as sucesivamente. Este tipo de clasificacin se denomina distribucin de Pareto. Estas distribuciones ordenan las entradas en un orden de prioridad, determinado por los datos. Obsrvese tambin, que puesto que el Estudiante X no hizo una revisin de cdigo para el programa 10, contabiliz todos los defectos encontrados en la compilacin y pruebas como defectos omitidos en la revisin de cdigo.
14.5
195
50 60 70 80
lntelfaz Comprobacin
Datos
9 0 Sistema
10 0 Entorno
Funcin
Nmero
Tipo
Introducido
Eliminado
11/1
Descripcin: Fecha
1
omitir:
rzGgz-l
Eliminado
Nmero
Tipo
Introducido
lempo de correccin
Defecto corregido
) (codificac.1-1-
7
Tiempo de correccin Defecto corregido
Descripcin: Fecha
Nmero
Tipo
Introducido
Eliminado
( 2 0 1
; introducido como:
[m piTgizq
Introducido Eliminado
rTz-lr-7
Descripcin: Fecha
Nmero
Tipo
1-1
Descripcin: Fecha
( 1 4
Y (codificac./ ]
Tipo Introducido
Lcompilac.1
m
lempo de correccin
Tiempo de correccin
Defecto corregido
Nmero
Eliminado
Defecto corregido
~
Descripcin: Fecha
Nmero
Tipo
Introducido
Eliminado
[mm
Tipo Introducido
m
Tiempo de correccin
Tiempo de correccin
Defecto corregido
Descripcin: bucle while no tiene un valor negativo para X-axis Fecha Nmero Eliminado Defecto corregido
Descripcin: Fecha
nnnnnnn
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Descripcin:
nnnnnun
196
Estudiante X debera examinar el cuaderno de registro de defectos para el programa 12 en la Tabla 14.8 para ver si tiene que cambiar la lista de comprobacin con objeto de mejorar la localizacin de defectos que ha omitido. Esta comprobacin le convenci para aadir la referencia del punto y coma en la lista de comprobacin de la Tabla 14.7. Te sugiero que renas datos de ms de 20 defectos antes de actualizar la lista de comprobacin, no obstante, revisa los datos de defectos durante cada fase postmortem del programa. Cuando hayas visto los mismos defectos varias veces en la fase de compilacin y en la de pruebas, considera la actualizacin de la lista de comprobacin para tratar ese problema especfico. Reduce peridicamente la lista de comprobacin. Dicha lista, por su naturaleza, crece con el tiempo. El poder de una lista de comprobacin, sin embargo, es que centre la atencin. Cuando crece mucho, se pierde la concrecin. Es importante revisar peridicamente los datos de defectos y eliminar las entradas de la lista de comprobacin que no encuentren problemas. Puedes agrupar estas entradas eliminadas en una categora de miscelnea para considerarlas cuando examines las otras entradas.
El mtodo de la lista de comprobacin personal reconoce que cada ingeniero es diferente y que las prcticas que unos ingenieros utilizan pueden no ser necesariamente efectivas para otros. Disea tu propia lista de comprobacin y examnala peridicamente para hacerla ms efectiva. Conforme contines omitiendo defectos en las revisiones de cdigo, contina buscando formas de mejorar la lista de comprobacin. Recuerda, sin embargo, que las mejoras llegarn lentamente. Al principio, tu habilidad para encontrar defectos mejorar con cada revisin. Despus, la mejora ser ms difcil. Rene y analiza los datos de defectos y piensa qu podras hacer para prevenir o mejorar la localizacin de defectos omitidos. Conforme vayas haciendo esto, continuars mejorando las revisiones que hagas. Tambin continuars mejorando la calidad de los programas que hagas.
14.6
ESTNDARES DE CODIFICACIN
Una razn de por qu las listas de comprobacin son efectivas es que proporcionan un estndar frente al cual se pueden revisar los programas. El principal estndar de revisin de cdigo son las especificaciones sintcticas del lenguaje de programacin, pero estas no especifican estilos o formatos de codificacin. Por esto, necesitas un estndar de codificacin. Un estndar es una base para la comparacin oficialmente aceptada. Un estndar de codificacin define un conjunto de prcticas de codificacin aceptadas, las cuales pueden servir como un modelo para tu trabajo. Este estndar deberas utilizarlo como una gua cuando escribas cdigo
197
fuente. Dichos estndares, normalmente especificarn la forma en la que el cdigo fuente es formateado, qu sentencias van en lneas de texto separadas, y cmo se sangran las sentencias. Se definen prcticas para escribir comentarios, incluyendo cundo son necesarios los comentarios explicativos. Normalmente, el nombre del ingeniero, la fecha de trabajo, el nombre del programa, el nombre del proyecto y la versin se ponen en una cabecera de comentarios en la parte superior del listado del programa. Un ejemplo del estndar de codificacin utilizado con el lenguaje C++ se muestra en la Tabla 14.9. Los estndares de codificacin tambin pueden ser tiles para prevenir defectos. Aqu, por ejemplo, puedes utilizar ciertas prcticas para evitar, sentencias como go- t o , tener mltiples salidas en los procedimientos o utilizar rutinas recursivas. Algunas prcticas tambin son generalmente muy tiles, tales como inicializar siempre las variables a la entrada al bucle o cuando las declares. Las prcticas de poner nombres inadecuados pueden ser la principal fuente de error. Se deben utilizar nombres que claramente se relacionen con las funciones de las variables, y los nombres deberan ser lo bastante diferentes para que no se confundiesen fcilmente. Dos nombres que se confunden y son propensos a error seran XY34B y XY35C. Una eleccin ms adecuada sera AZIM34 y ACTUALIZA-AZIM.
Si tu profesor ha establecido un estndar de codificacin, consigue una copia y utilzala. Te ayudar a hacer programas ms legibles y fcilmente comprensibles. La legibilidad del cdigo tambin ayuda en las pruebas y en la depuracin de los programas, y ayudar a cualquiera que quiera utilizar o modificar tus programas.
RESUMEN
Este captulo introduce las listas de comprobacin para la revisin de cdigo y describe cmo puedes desarrollarlas y utilizarlas. Una lista de comprobacin contiene una serie de pasos que t quieres seguir de forma rigurosa. Cuando utilizas una lista de comprobacin desarrollada a partir de tus propios defectos, hars revisiones ms eficientes. La lista de comprobacin no solamente ayuda a encontrar ms defectos, tambin ayuda a encontrarlos ms rpidamente. Para construir una lista de comprobacin para la revisin de cdigo, adptala al lenguaje que utilices, disala a partir de tus propios defectos y ajstala a tus habilidades y experiencia cambiante. Algunas orientaciones para utilizar la lista de comprobacin son: haz las revisiones paso a paso, completa cada programa o procedimiento antes de iniciar el siguiente, examina cada apartado de la lista de comprobacin cuando lo completes. Cuando encuentres defectos, anota el
198
/ Programa e j e r c i c i o : e l nmero de programa */ Nombre: t u nombre */ Fecha: f e c h a de i n i c i o de */ d e s a r r o l l o d e l programa * / Descripcin: una b r e v e d e s c r i p c i n d e * / l a f u n c i n d e l programa * / ................................................ /
................................................
/* /* /* /* /* /*
.................................................
/ * L i s t a d o de c o n t e n i d o s : Instrucciones a r e u t i l i z a r /* Includes /* /* D e c l a r a c i o n e s de c l a s e s : /* CData /* ASet / * Cdigo f u e n t e en c : \ c l a s e s \ C D a t a . c p p : /* CData /* CData() /* EmPtY ( 1
*/ */ */ */ */ */ */ */ */ */ ................................................ /
Instrucciones de reutilizacin
Describe cmo se utiliza el programa. Proporciona el formato de declaracin, valores de los parmetros y tipos, y lmites de los parmetros. Proporciona avisos para valores no vlidos, condiciones de desbordamiento u otras condiciones que podran, en potencia, dar lugar a operaciones inadecuadas.
Ejemplo
................................................
/ * I n s t r u c c i o n e s de r e u t i l i z a c i n /* i n t P r i n t L i n e (char *linea-de-caracteres) /* P r o p s i t o : i m p r i m i r cadena de c a r a c t e r e s , linea-de-caracteres, o i m p r i m i r una /*
Identificadores
Utiliza nombres descriptivos para todas las variables, nombres de funciones, constantes y otros identificadores. Evita abreviaturas o variables de una sola letra. i n t numero-de-estudiantes; f l o a t x4, j , f t a v e ; /*Est bien*/ /*Est mal*/ (Contina)
Ejemplo de identificador
199
*/ */ */ */
Las secciones principales del programa deberan ser precedidas por un bloque de comentarios que describan el procesamiento que se realizar en la seccin siguiente.
................................................
/ * E s t a seccin d e l programa examinar l o s / * contenidos d e l array "notas" y c a l c u l a r / * l a n o t a media de l a c l a s e
/ */ */ */ ................................................ /
~ ~~
Escribe programas con suficientes espacios en blanco para facilitar la lectura. Separa cada bloque con al menos un espacio. Sangra cada nivel de corchete con respeto al anterior. La apertura y cierre de corchetes deberan hacerse uno por lnea estar alineados unos con respecto a otros. w h i l e (distancia- que- falta > umbral)
{
Ejemplo de sangrado
1
1
Maysculas Todos los defines se escriben en maysculas. Todos los otros identificadores y palabras reservadas en minscula. En los mensajes de usuario pueden ir mezcladas las maysculas y minsculas, para que la presentacin sea ms clara. # d e f i n e NUMERO-ESTUDIANTES-PORDEFECTO 15 i n t tamao-clase= NUMERO-ESTUDIANTES-POR_DEFECTO;
Ejemplos de maysculas
nmero encontrado en cada apartado de la lista de comprobacin. Cuando lo hagas, completa las columnas Hasta la Fecha y % Hasta la Fecha. Despus de acabar cada programa, revisa los datos y la lista de comprobacin para ver cmo la puedes mejorar.
200
EJERCICIO 14
Haz una lista de comprobacin para encontrar los defectos que causan la mayor parte de problemas durante la compilacin y las pruebas. Restringe esta lista de comprobacin inicial a unos pocos tipos de defectos y utilzala en tu prximo programa. Entrega una lista de comprobacin acabada, junto con el programa y completa el Resumen del Plan del Proyecto. Entrega una copia de los datos de los defectos utilizados para hacer la lista de comprobacin. Para analizar los defectos, utiliza un formato similar al mostrado en la Tabla 14.6. Entrega copias del Cuaderno de Registro de Tiempos y de las hojas del Resumen Semanal de Actividades que no hayas entregado previamente. Tambin, entrega copias completas del Resumen del Plan del Proyecto, del Cuaderno de Registro de Defectos y de la Lista de Comprobacin para la Revisin de Cdigo para cada programa que desarrolles. Incluye los tiempos de desarrollo planificados y reales y los defectos reales introducidos y eliminados.
CAPITULO 15
La previsin de defectos
Este captulo discute las formas de analizar y utilizar tus datos de defectos para ayudarte a mejorar tanto la precisin de la planificacin como la calidad del producto. Tambin, se muestran ejemplos tiles de cmo analizar estos datos de defectos. Como ejercicio, preparars un breve resumen de los datos de defectos para los programas que hayas desarrollado hasta la fecha en este curso. La razn principal para utilizar los datos de defectos, es para determinar cmo mejorar la prevencin o localizacin de defectos que hayas introducido. En los ltimos captulos, introducimos medidas que ayudan a controlar la calidad de tu trabaja Esto te ayudar a que de una forma ms consistente produzcas programas de alta calidad.
15.1
EL PORCENTAJE DE DEFECTOS
El porcentaje de defectos introducidos por los ingenieros del software experimentados, oscila normalmente en un rango de entre 50 a 250 defectos/KLOC. La Figura 15.1 muestra los defectos/KLOC que un grupo de 38 ingenieros introdujo en un ejercicio de codificacin pequeo. Esto fue antes de que ellos comenzasen a medir, revisar y controlar el nmero de defectos que introducan. Esta figura muestra el porcentaje de defectos introducidos por estos ingenieros antes de que fuesen entrenados en el PSP.
202
LA PREVISI~NDE DEFECTOS
450 400 -
I
I I
350 -
x $
u
300250 I I
22 2 0 0 -
E;
150 -
loa50 -
I I
m
I
- -- - I -
m '
I I I
Obsrvese tambin que la Figura 15.1 muestra la densidad de defectos en funcin de los aos de experiencia del ingeniero en escribir programas. Algunos de los ingenieros menos experimentados tenan un nmero ms elevado de defectos que los otros, sin embargo para estos pocos ingenieros, los aos de experiencia tenan poca influencia en el nmero de defectos. Esto implica que hay algunas prcticas de calidad, que muchos ingenieros aprenden con la experiencia. Algunos adquiran la experiencia ms rpidamente que otros. Entonces, a partir de un grado de experiencia similar, los defectos dependen en gran parte de la disciplina personaI, La Figura 15.2 muestra los datos de los mismos 38 ingenieros despus de haber completado un curso del PSP [Humphrey 951. En este pnto, haban revisado sus defectos para un total de 10 programas pequeos, y haban hecho dos estudios de los tipos, distribuciones y tiempos de corregir sus defectos. Como resultado, comprendieron el nmero y tipos de defectos que normalmente introducan y cunto tiempo le dedicaban a corregirlos. Esto les ayuda a valorar la importancia de las prcticas personales disciplinadas, y les motiv a ser ms cuidadosos en el diseo y codificacin de sus programas. Como resultado, tambin redujeron su porcentaje de introduccin de defectos. Los datos de las Figuras 15.1 y 15.2 sugieren que la disciplina personal, asociada con la revisin de defectos y su anlisis, es mucho ms efectiva que los aos de experiencia para la reduccin del nmero de defectos introducidos. Otro mensaje de las Figuras 15.1 y 15.2 es que los ingenieros del software introducen muchos defectos. Con pocas excepcioncs, la tasa de introduccin de defectos por grupos de software est alrededor de los 100 defectos/KLOC o ms. Incluso los ingenieros que han aprendido a ges-
203
10
15
20
25
30
tionar los defectos, introducen una media de unos 50 defectos/KLOC. Es decir 1 defecto por cada 20 LOC. Aunque esto no pueda parecer una gran cantidad, seran 50 defectos en un programa de 1.000 LOC, 500 en uno de 10.000 LOC y 50.000 en uno de 1 .OOO.OOO LOC. Todos estos defectos se deben localizar y corregir antes de que puedas estar seguro de que el programa funcionar adecuadamente,Bepitiendo una cuestin clave, puesto que la introduccin de defectodes una co'msecuencia natural del ser humano, todos los ingenieros del software introdhcen defectos. Todos los ingenieros deberan por lo tanto comprender el nmero y tipo de defecto que introducen.
15.2
204
LA PREVISIN DE DEFECTOS
so con los datos histricos, puedes determinar la posible calidad del programa a desarrollar. Puedes decidir si son necesarios pasos adicionales para la eliminacin de los defectos.
Todas estas medidas y planes no te ayudarn mucho, a menos que ests personalmente comprometido a hacer programas libres de defectos. Aunque es costoso producir programas de alta calidad y rara vez sers capaz de hacerlo al primer intento, con mucha prctica, hars cada vez ms programas libres de defectos. Esto es importante, puesto que algn da probablemente trabajars en un proyecto, donde es esencial el trabajo libre de defectos. Te sugiero que consideres cada programa que desarrollas como una prctica para ese da.
15.3
DENSIDAD DE DEFECTOS
La unidad de medida de defectos utilizada en el PSP es la de defectos por miles de lneas de cdigo (KLOC). Esto se denomina densidad de defectos (Dd) y se mide en unidades de defectos/KLOC. Aqu, la K hace referencia a 1.OOO. Para calcular el total de defectos/KLOC encontrados en un programa, haz lo siguiente:
1. Suma el total de nmero de defectos (D) encontrados en todas las fases del proceso. 2. Cuenta el nmero (N) de lneas de cdigo nuevas o cambiadas en un programa.
3. Calcula la densidad de defectos por KLOC como Dd= I.OOO*D/N.
Por ejemplo, si un programa de 96 LOC tena un total de 14 defectos, entonces la densidad de defectos sera 1.OOO* 14/96=145,83 defectos/KLOC. En el clculo de las densidades de defectos, es importante utilizar medidas de tamao correctas. Tal y como se describi en el Captulo 6, este libro cuenta el tamao del programa por el nmero de LOC nuevas y cambiadas. Es decir, si utilizas una rutina de librera o copias una parte de un programa, esto no se contabiliza como LOC. Sin embargo, contabiliza como LOC nueva, cualquier LOC modificada de los programas que habas copiado.
15.4
205
Primera, con la experiencia, tus habilidades mejorarn. Cuando comienzas a programar, te enfrentas a muchos problemas que no te habas encontrado anteriormente. No puedes estar seguro de cmo trabaja alguna funcin o procedimiento, puedes confundirte con algn elemento del lenguaje, o puedes encontrar nuevos aspectos del entorno o del compilador. Estos problemas darn lugar a que tus tiempos de desarrollo y el porcentaje de introduccin de defectos flucte. Con la experiencia, superars de forma gradual estos problemas iniciales y cometers pocos errores. Esto reducir tanto el nmero total de defectos como la variacin de estos nmeros. La reduccin inicial en el nmero de defectos ser como resultado de la mayor experiencia y de tu mejor desenvoltura con el lenguaje. Ms all de esta mejora inicial, sin embargo, necesitars reunir y analizar los datos de los defectos para continuar mejorando. La segunda razn para la fluctuacin en la tasa de defectos, es que tu proceso no es estable. Es decir, conforme aprendas a escribir programas, tambin aprenders nuevos mtodos y procedimientos. Tus prcticas de trabajo evolucionarn. Esto causar fluctuaciones en el tiempo que necesitas para hacer las distintas tareas de codificacin y en el nmero de los defectos introducidos. Finalmente, los mismos defectos son una fuente de fluctuacin. A mayor nmero de defectos introducidos, ser necesario ms tiempo para repararlos. Puesto que los ingenieros normalmente introducen de 6 a 8 defectos por hora durante la codificacin de un programa, cada hora dedicada a la correccin de defectos aumentar la probabilidad de introducir ms defectos. Puesto que el tiempo de correccin de defectos es generalmente variable. un proceso que introduce muchos defectos es intrnsecamente impredecible. Conforme vayas mejorando los procesos, sin embargo, te estabilizars y esta estabilidad mejorar la precisin de tus previsiones de defectos. Si dedicas una cantidad de tiempo suficiente a las revisiones de cdigo, tus procesos tendern a estabilizarse a un modelo fijo. Una vez que tus procesos sean razonablemente estables, sern ms predecibles. As, revisando el nmero de defectodKLOC introducidos y eliminados en los ltimos programas, puedes estimar con precisin el nmero de defectos que probablemente introducirs y eliminars en el futuro.
15.5
ESTIMACIN DE DEFECTOS
Cuando ests planificando un nuevo programa, estima primero el nmero de LOC nuevas y cambiadas que probablemente tendr el programa. A continuacin, calcula el valor medio de los defectos/KLOC de los programas que hayas desarrollado anteriormente. Con estos datos, ahora, puedes calcular el nmero de defectos/KLOC esperados en el nuevo programa:
206
LA PREVISIN DE DEFECTOS
= Nplan* DHasia
la Fecha
'
NHasta la Fechai
Nmero de programa
1
Defectos (D)
LOC (N)
6
11
37
62
4 9
2
3 4
7
9
5
53
28
229
5
Total Hasta la Fecha
38
207
proporcionan los datos histricos necesarios para estimar los defectos. En la Seccin 15.7 se muestra un ejemplo de estos clculos con la actualizacin del Resumen del Plan del Proyecto.
15.6
2. Despus, observ la tabla Resumen del Plan del Proyecto del programa 12 para encontrar los minutosLOC Hasta la Fecha. Como se observa, este valor era 5,92 (b) minutosLOC. Utiliz dicho valor como velocidad de planificacin para el programa 13. 3. Con el total estimado de 58 LOC (a), el tiempo total estimado del proyecto es: 58*5,92 = 343,36 o 343 minutos (c). 4. Entonces el Estudiante X calcul los tiempos de desarrollo mximo y mnimo, multiplicando los tamaos mximo y mnimo (a) por 5,92 para obtener 426 y 243 (d) minutos, respectivamente. 5. Para el tiempo por fase, tom los % Hasta la Fecha del resumen (e) del programa 12 y los multiplic por el tiempo total estimado de 343 minutos (c), y dividi el resultado por 100. Esto dio los tiempos para cada fase, tal y como se muestra en (f).Por comodidad, redonde los minutos a un valor entero. 6. Para el total de defectos introducidos y eliminados, el Estudiante X encontr el valor de 94,79 (8) defectos/KLOC Hasta la Fecha en la Tabla 15.6 del Resumen del Plan del Proyecto para el programa 12. Como se ve abajo, este valor se calcul a partir de LOC Hasta la Fecha (h) y los defectos Hasta la Fecha (i).
208
LA PREVISIN DE DEFECTOS
Guiarte en el desarrollo de pequeos programas. La descripcin del problema. Tabla Resumen del Plan del Proyecto PSP. Una copia de la lista de comprobacin para la revisin de cdigo. Datos de tamaos y tiempos reales de programas anteriores. Cuaderno de Registro de Tiempos. Cuaderno de Registro de Defectos. Obtn una descripcin de las funciones del programa. Estima las LOC Mx., Mn., total requeridas. Determina los Minutos/LOC. Calcula los tiempos de desarrollo Mx., Mn., y total.
Planificacin
Codificacin
Revisin de cdigo
~~~
Compilacin
Pruebas
Postmortem
Criterios de salida
209
Fecha
Programa #
Profesor Resumen MinutosiLOC LOClHora DefectosiKLOC Rendimienfo VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Plan Real
Lenguaje
Hasta la Fecha
Plan
Real
Hasta la Fecha
% Hasta la Fecha
Plan
Real
DefJHora
Plan
Real
DefJHora
8. Basndose en los valores de % Hasta la Fecha para los defectos introducidos y eliminados del programa 12 (k), calcul la estimacin del nmero de defectos a ser introducidos y eliminados por fase (1).
210
LA PREVISIN DE DEFECTOS
Tabla 15.4 Instrucciones del resumen del plan del proyecto del PSP.
Propsito Cabecera Esta tabla trata los datos estimados y reales de los proyectos de una forma cmoda y fcilmente recuperable. Introduce los siguientes datos: Tu nombre y fecha de hoy. Nombre y nmero de programa. Nombre del profesor. El lenguaje que utilizars para escribir el programa. Antes de iniciar el desarrollo: Escribe los MinutoslLOC planificados para este proyecto. Utiliza la velocidad Hasta la Fecha de un programa reciente del Cuaderno de Trabajos o del Resumen del Plan del Proyecto. Despus del desarrollo: Divide el tiempo total de desarrollo por el tamao real del programa para obtener los Minutos/LOC reales y los MinutosLOC Hasta la Fecha. Por ejemplo, si el proyecto se hizo en 196 minutos e hiciste 29 LOC, los Minutos/LOC seran 196/29= 6,76.
Minutos/LOC
LOC/Hora
Antes de iniciar el desarrollo: Calcula las LOC por hora planificada para este programa dividiendo 60 por los MinutosLOC de la casilla de Flan. Despus del desarrollo: Para LOC/Hora Real y Hasta la Fecha divide 60 por Minutos/LOC Reales y Hasta la Fecha. Para los 6,76 MinutosiLOC Reales, tenemos 60/6,76 = 8,88 LOC/Hora Reales.
~~
DefectodKLOC
Antes de desarrollar: Encuentra los defectodKL0C Hasta la Fecha del programa ms reciente. Utiliza dicho valor como los defectos/KLOC planificados. Despus del desarrollo: Calcula los valores de defectos/KLOC reales y Hasta la Fecha para este programa. Para el valor real, multiplica el total de defectos reales por 1.000y divdelo por las LOC Total Nuevas & Cambiadas Reales. Para el valor Hasta la Fecha haz unos clculos similares. Con 1 defectos Hasta la fecha y 153 LOC Total Nuevas & 7 Cambiadas, los defectos/KLOC Hasta la Fecha =
1.000*17/153= 1,ll. 11
Tamao Programa Antes de iniciar el desarrollo: (LOC) Escribe bajo la columna plan, el valor estimado de LOC Total Nuevas & Cambiadas, Mximo y Mnimo. Despus del desarrollo: Cuenta y anota las LOC Nuevas & Cambiadas Reales. Para la columna Hasta la Fecha, aade LOC reales Nuevas & Cambiadas a las LOC Hasta la Fecha Nuevas & Cambiadas de programas anteriores.
( Contina)
211
Tabla 15.4 Instrucciones del resumen del plan del proyecto del PSP.
(Continuacin)
Tiempo por fase Plan Para el tiempo total de desarrollo, multiplica el valor de LOC . Total Nuevas 8 Cambiadas por los Minutos/LOC. Para el tiempo Mximo, multiplica el tamao Mximo por los Minutos/LOC. Para el tiempo Mnimo, multiplica el tamao Mnimo por los Minutos/LOC. Del Resumen del Plan del Proyecto de un programa reciente, busca los valores de Yo Hasta la Fecha para cada fase. Utilizando el Yo Hasta la Fecha de programas anteriores calcula el tiempo planificado para cada fase. Una vez acabado el trabajo, anota el tiempo real en minutos que has gastado en cada fase del desarrollo. Obtn estos datos del Cuaderno de Registro de Tiempos. Para cada fase, escribe la suma del tiempo real y el tiempo Hasta la Fecha de los programas ms recientes. Fecha y lo divides por el total del tiempo Hasta la Fecha.
~
Real
Hasta la Fecha
% Hasta la Fecha Para cada fase, escribe 1O0 multiplicado por el tiempo Hasta la
.. . _
Antes del desarrollo, estima el nmero total de defectos a introducir en el programa. El valor es: defectos/KLOCplanificados multiplicado por las LOC Total Nuevas & Cambiadas planificadas para este programa y dividido por 7.000. Por ejemplo, con un valor de defectos/KLOCplanificado de 75,9 y un valor de LOC Nuevas & Cambiadas planificadas de 75, el total de Defectos Planificados = 75,9*75/1.000=5,69, redondeado a 6. Antes de desarrollar, estima los defectos introducidos por fase utilizando el total de defectos estimados y el % Hasta la Fecha de defectos introducidos de programas anteriores. Despus del desarrollo, localiza y anota el nmero real de defectos introducidos en cada fase. Para cada fase, escribe la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes.
% Hasta la Fecha Para cada fase, multiplica por 1O0 los defectos Hasta la Fecha para esa fase y divdelos por el total de defectos Hasta la Fecha.
En la fila de total, escribe el total de defectos estimados. Utilizando los valores de % Hasta la Fecha de los programas ms recientes, calcula los defectos eliminados planificados para cada fase. Despus del desarrollo, localiza y anota el nmero real de defectos eliminados en cada fase. Para cada fase, escribe la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes.
~
% Hasta la Fecha Para cada fase, multiplica por 1O0 los defectos Hasta la Fecha
212
LA PREVISIN DE DEFECTOS
Tabla 15.5 Ejemplo de resumen del plan del proyecto del PSP.
Estudiante Programa Profesor
5r. Z
Estudiante X
Fecha Programa#
10/11/96 1 3
Ada
Lenguaje Plan
b
i
Resumen Minutos/LOC LOClHora DefectoslKLOC Rendimienfo VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin I Diseo Codificacin I Revisin del cdigo Compilacin Pruebas Total i Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo l Compilacin I I Pruebas Total i
Real
592 10,14 94,79
P
q r
Hasta la Fecha
4.07 12,32 1064
x
y
a
a
50
72
47
250
4 1
Plan
f f
Real
1 0
m
Hasta la Fecha
c s
% Hasta la Fecha
u
f
f
f f f
C
35 149 20 24
64
m
m m m m m m
d d
22 24 93 37 4 8 4 1 229
s
c
s s
s s
6,O
10,2 43,l 7,5 62 16,2 10,8 100
u
u
u
u u
Plan
1
5 n
Real
t
Dei./Hora
16,O 84,O
25
100,O
Plan
Real
Def./Hora
3 1
6
n
n
3 2 5
t t
t
0 12 5 25
u u
u
15.7
213
Fecha Programa#
11/11/96 12
Profesor
5r. Z
Lenguaje
Plan
6,30 9,52
Ada
Resumen MinutoslLOC LOClHora DefectoslKLOC Rendimienfo VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Minimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
Real
4,93 1,7 21
b 9
Hasta la Fecha
5.92 10,14 94,79
5 1 65 37
58
211
Plan
1 6 27 146
Real
1 s 8
Hasta la Fecha
66
44s
104 s 38 s
11 s
127
544 74
e e
e
12
26 68 26 321 4O 1 233
e e
e
80
232 19 1 1250
29 s 42 s 286 s
Plan
Real
1 t
DefJHora
20,O 80,O
20
100,o
Plan
Real
DefJHora
20
100,o
1. Anot los valores reales del Tiempo por Fase (m), del Cuaderno de Registro de Tiempo.
2. Anot los valores reales de los defectos Introducidos y Eliminados (n), del Cuaderno de Registro de Defectos.
3. Contabiliz 47 LOC Nuevas & Cambiadas en el programa y las anot bajo la columna Real (o).
214
LA PREVISIN DE DEFECTOS
4. Con estos datos, calcul los MinutosLOC reales a partir de los minutos totales, 229 (m), dividido por las 47 (o) LOC Nuevas & Cambiadas, obteniendo 229/47 = 4,87(p).
5. Calcul las LOC/Hora reales a partir de los minutos/LOC reales (p) de esta forma: 60/4,87 = 12,32 (9).
6. Calcul los defectos/KLOC reales a partir del total de defectos reales (n) y de las LOC (o) reales, 1.000*5/47=106,4(r).
7 A continuacin, calcul los valores Hasta la Fecha para el Tiempo . por Fase, sumando los tiempos en las fases para este proyecto a
los tiempos Hasta la Fecha para los proyectos anteriores (s).
8. Tambin calcul los valores para los defectos introducidos y eliminados Hasta la Fecha, sumando los defectos reales en cada fase a los valores de los defectos Hasta la Fecha de proyectos anteriores (t).
9. Los valores de % Hasta la Fecha se calcularon tambin, como se ve en (u).
10. A continuacin, calcul el valor Hasta la Fecha para los Minutos/LOC, dividiendo el tiempo Total Hasta la Fecha, 1.479 minutos (s) por el valor de LOC Total Nuevas & Cambiadas, 258(w). Obteniendo 1.479/258 = 5,73 (x).
11. Utilizando el valor 5,73(x), calcul el valor Hasta la Fecha de LOC/Hora, 60/5,73=10,47 (y).
12. Finalmente, calcul los defectos/KLOC Hasta la Fecha, multiplicando 1.000 por los defectos totales introducidos Hasta la Fecha (t) y dividiendo el resultado por las LOC Totales Nuevas & Cambiadas Hasta la Fecha (w), obtenindose 1.000*25/258= 96,90 (z).
Obsrvese que las columnas Hasta la Fecha y % Hasta la Fecha muestran el tiempo total y la distribucin de defectos. Con ms experiencia, puedes encontrar que tu productividad y el grado de defectos cambia tan significativamente que los datos de los programas iniciales no sirven de gua til para las planificaciones actuales. En esta situacin, puedes desear recalcular todos los valores de Hasta la Fecha y % Hasta la Fecha sin los valores de los primeros programas.
RESUMEN
En este captulo, utilizas los datos de los defectos para estimar el nmero de defectos que introducirs y eliminars en cada fase de un nuevo programa. Conforme aprendas a hacer las previsiones de los defectos,
215
tambin aprenders a hacer mejores planes de desarrollo y un mejor control del nmero de defectos que introduces y eliminas. Para hacer una proyeccin de defectos, necesitas los datos de los defectos y del tamao de los programas anteriores, y un tamao estimado para el nuevo programa. Para calcular el nmero de defectos esperados, supn que los defectos/KLOC para este programa sern iguales a la media de los programas que hayas desarrollado previamente. Tambin asume que el porcentaje de introduccin y eliminacin de defectos ser similar. Utiliza los valores de los defectosKLOC y % Hasta la Fecha del nmero de defectos del programa anterior, para hacer los clculos de planificacin. Se hace una actualizacin del Resumen del Plan del Proyecto para incorporar la estimacin de defectos. Haz el plan de valores durante la fase de planificacin para cada proyecto de codificacin. Calcula los valores de defectos/KLOC Planificados, Reales y Hasta la Fecha durante la fase postmortem de cada nuevo programa y utiliza estos datos para planificar el siguiente proyecto.
EJERCICIO 15
Para el siguiente programa que escribas, determina el porcentaje de defectos/KLOC y la estimacin de defectos introducidos y eliminados por fase. Anota estos datos en el Resumen del Plan del Proyecto de la Tabla 15.3. Entrega copias del Cuaderno de Registro de Tiempo y de las hojas del Resumen Semanal de Actividades que no hayas entregado previamente. Tambin, entrega copias completas del Resumen del Plan del Proyecto, del Cuaderno de Registro de Defectos y de la Lista de Comprobacin para la Revisin de Cdigo para cada programa que desarrolles. Incluye los valores planificados y reales de los tiempos de desarrollo y de los defectos introducidos y eliminados.
REFERENCIA
[Humphrey 951 Humphrey, W.S. A Discipline for Sofhare Engineering. Reading, MA: Addison-Wesley, 1995.
CAPITULO 16
Este captulo trata sobre el ahorro que supone eliminar los defectos. Eliminar los defectos es una cuestin econmica, ya que muchas decisiones sobre la eliminacin de defectos tienen que ver con el equilibrio entre coste, planificacin y calidad. Aunque la calidad del producto debe tener siempre una alta prioridad, muchos proyectos estn limitados por la planificacin y los costes. As, el coste relativo de la eliminacin de defectos durante el desarrollo, el impacto de los defectos que quedan sobre el cliente y el coste resultante del soporte al cliente, son cuestiones importantes en el desarrollo del software. En el ejercicio de este captulo, analizars las tasa de defectos introducidos y eliminados en los programas que has desarrollado hasta ahora en este curso.
16.1
218
tos programas funcionen con pruebas bsicas. Una vez que el programa funciona, los programadores, de una forma progresiva los prueban e integran con otros programas hasta formar un gran sistema. El proceso de integracin y pruebas esta orientado a encontrar y eliminar los defectos. Cuando el producto final se entrega, a menudo su calidad es tan escasa que los ingenieros deben dedicar muchos meses a corregir los defectos que encuentran los clientes. Esto era una prctica comn hace 30 aos y lo es hoy en da tambin. Hay mejores formas de desarrollar software. El problema bsico es que cuando los ingenieros software escriben primero sus programas, normalmente pasan muy rpidamente por el diseo y la codificacin, para obtener sus programas en las fases de compilacin y pruebas. Un principio del trabajo de calidad, es obtener el producto correcto a la primera. Si se aprende lo anterior, no ser necesario eliminar estos defectos en las fases de compilacin y pruebas, y tanto t como tu organizacin no necesitaris dedicar tiempo a encontrar y corregir defectos. Un ejemplo de algunos ingenieros de Motorola muestra la importancia de lo anteriormente dicho. Su software se utilizaba para poner en funcionamiento una fbrica de productos avanzados. Si el producto o el proceso de produccin lo cambiaban, los ingenieros tenan que cambiar el software. Para encontrar los defectos en cada nueva versin del software, la lnea de produccin tena que parar, para hacer las pruebas. Despus de cada prueba, la lnea de produccin era interrumpida peridicamente por los defectos del software que haban quedado ocultos. En la primera actualizacin de software, despus de que los ingenieros hicieran la formacin del PSP, hubo solamente un defecto en las pruebas y ninguno en los siguientes meses de produccin. Esto no solo ahorr tiempo de pruebas, sino tambin redujo las interrupciones durante la fabricacin. Como resultado, se obtuvo que la planta de fabricacin poda producir ms productos, y la compaa poda obtener ms ingresos.
16.2
219
Para entender y controlar los costes de los defectos, es fundamental medir la efectividad de la eliminacin de defectos. Una de dichas medidas, es el nmero de defectos eliminados en una hora. Otra medida til es el rendimiento en la eliminacin de defectos. El rendimiento mide la tasa de los defectos encontrados con un mtodo de eliminacin. As, si un producto contena 100 defectos antes de hacer las pruebas, y se encontraron 45 defectos durante la realizacin de las pruebas, el rendimiento de dichas pruebas sera del 45%. Cuando sabes el rendimiento y la tasa de eliminacin para cada mtodo de eliminacin de defectos, puedes decidir mejor cmo encontrar y corregir los defectos. El rendimiento y las medidas de eliminacin de defectos se discuten en este captulo, y en los siguientes captulos se muestra cmo se utilizan estas medidas.
16.3
16.4
220
encuentran de 6 a 12 defectos por hora durante la revisin personal del cdigo. La Figura 16.1 muestra la tasa de introduccin de defectos para una clase de 14 ingenieros y la Figura 16.2 muestra la tasa de eliminacin de defectos. Antes de comenzar a escribir el programa 1, vase la parte izquierda de la grfica, los estudiantes no hacan revisiones de cdigo o seguimiento de las tasas de introduccin y eliminacin de defectos. Del programa 1 al programa 10, estos ingenieros aprendieron a calcular las tasas de introduccin y eliminacin de defectos, y fueron adquiriendo habilidad en los mtodos de eliminacin de defectos del PSP. Hay varios puntos interesantes en los datos de las Figuras 16.1 y 16.2. Primero, las tasas mostradas en dichas figuras, son los valores medios para los 14 ingenieros. Estos valores parecen razonablemente normales. La tasas individuales de los ingenieros son ms variables. Sus tasas personales, probablemente tendrn grandes variaciones de un programa al siguiente. Pero utilizando el PSP para controlar su trabajo, mejorarn inmediatamente. Los defectos eliminados por hora en las pruebas oscilan de forma consistente entre 2 y 4. Tasas similares se encontraron con estudiantes inexpertos y con ingenieros muy experimentados. La revisin de cdigo es una habilidad. Con la prctica, muchos ingenieros pueden alcanzar tasas de eliminacin de defectos de entre 8 a 10 defectos por hora. La clave est en utilizar los mtodos descritos en los Captulos 13 y 14.
Codificacin
10
O' 1
10
Nmero de Programa
221
+Compilacin
o
1 2
10
Nmero de Programa
La gestin de defectos es un poco como trepar por una escalera que baja. Cuando diseas y codificas, introduces defectos. Conforme encuentras y eliminas estos defectos, dedicars ms tiempo a redisear y a codificar. Durante este tiempo, tambin introducirs ms defectos. Para ganar esta carrera, necesitas reducir la tasa de introduccin de defectos y aumentar la tasa de eliminacin. Para hacer esto, debes calcular y controlar las tasas de introduccin y eliminacin de defectos. Los datos reunidos con el PSP son todos necesarios para calcular las tasas de introduccin y eliminacin de defectos personales.
16.5
222
10.000 LOC
Con PSP
Sin PSP
Con PSP
Defectos
Defectos Totales Encontrados en la revisin de cdigo Defectos que quedan
5 0 0 5 0
25
100 .0
50 0 30 0 20 0
1 5
1 0
O
100 .0
1 1 1
Encontrados en la compilacin
Encontradosenlapruebasdeunidad
Defectos que queda
1 1
1
25
2 0 5
1 1
1
5
4
1
1 1
50 0 40 0
1 1
10 0
80
11001
2 0
1 1 1
Tiempo (horas)
Tiempo de revisin de cdigo Tiempo de compilacin
0 2
25
05
O
4 0
5 0 1 0
Tiempo de pruebas de unidad Tiempo personal de eliminacin de defectos Tiempo de integracin y pruebas del sistema
1 0
1 2
2
5
200
240
40
~~~ ~
10 0 20 0
100 .0
1 2
120 .4
300
defectos esperados. Es decir, un total de 12 horas dedicadas a la eliminacin de defectos. Despus de aprender del PSP, solamente introduciras alrededor de 50 defectos por KLOC (25 defectos). Con las revisiones de cdigo, encontraras entre el 60 y el 70% de estos defectos antes de la primera compilacin. De esta forma, la compilacin supone unos 30 minutos y quedan de 4 a S defectos que se han de encontrar en las pruebas de unidad. Las pruebas suponen alrededor de unas 2 horas. Suponiendo que dedicas unas 2,5 horas a la revisin de cdigo, el tiempo total para la eliminacin de los defectos sera de unas 5 horas. Esto supone un ahorro de 7 horas. Aunque no pueda parecer mucho esfuerzo, reducir el tiempo de eliminacin de defectos en 7 horas para un trabajo de varios das, considera cmo se multiplican estos nmeros. Si en vez de un programa de SO0 LOC, desarrollsemos uno de 10.000 LOC, comenzaras con 1000 defectos. Con un entrenamiento en el PSP, seran solo 500 defectos. Si dedicas SO horas a la revisin de cdigo, reduciras el tiempo de compilacin de 40 a 1O horas y el tiempo de pruebas de unidad de 200 a 40 horas. Las 140 horas que ahorras son equivalentes a varias semanas de trabajo.
223
De mayor significado, es el coste de los defectos que t no encontraste en tu proceso. En el caso de las 500 LOC, los defectos eran unos pocos. Con el Componente ms grande, alrededor de unos 100 defectos ocultos se encontraran en las pruebas y muchos ms por el usuario. Encontrar esos 100 defectos llevara normalmente unas 1000 horas. Con el proceso del PSP, solamente se dejaran unos 20 defectos que se encontraran ms tarde en las pruebas, reduciendo el tiempo de las pruebas en unas 800 horas. Para ver lo que esto puede significar en la prctica, supn que t y otros cuatro ingenieros desarrollis un producto software de 50.000 LOC. Puedes planificar que cada uno desarrolla un componente de 10.000 LOC y posteriormente se integra y prueba el sistema completo. Basndonos en los datos tpicos de un ingeniero, t y tus compaeros probablemente introduciris unos 100 defectos/KLOC en el programa. Esto significa que habr que encontrar y corregir 5000 defectos. Utilizando tasas normales, unos 2500 de estos defectos se encontrarn durante la fase de compilacin y otros 2000 en las pruebas de unidad personales. Esto nos deja unos 500 defectos a detectar en la integracin y pruebas del sistema. Asumiendo que tu producto era ms sencillo que el NT de Microsoft, puedes encontrar estos defectos a un coste medio de solo unas 10 horas. Eliminar estos defectos le supondra a tu equipo de cinco personas unas 5000 horas. Si el equipo no hace ms de 40 horas semanales, esto sera un trabajo de 6 meses. Si hubieses revisado personalmente todo tu trabajo y dejas que el equipo inspeccione tus programas, podras ahorrarte al menos cinco meses de pruebas. Para un proyecto de dos aos, esta diferencia en el tiempo de pruebas podra ser la diferencia entre entregar a tiempo el producto o sufrir un serio retraso.
16.6
EL CLCULO DE LOS DEFECTOSlHORA EN EL RESUMEN DEL PLAN DEL PROYECTO DEL PSP
La Tabla 16.2 muestra cmo se calculan las tasas de eliminacin de defectos Hasta la Fecha en la tabla Resumen del Plan del Proyecto. Para cualquier fase, comienza con el nmero de defectos introducidos Hasta la Fecha en esa fase y el nmero de minutos dedicados Hasta la Fecha en dicha fase. A continuacin calcula los defectodhora introducidos Hasta la Fecha de esta forma: O*(defectos introducidos Hasta la Fecha en una fase)/(minutos dedicados Hasta la Fecha en esa fase). Los defectos eliminados por hora se calculan as: 60*(defectos eliminados Hasta la Fecha en una fase)/(minutos dedicados Hasta la Fecha en esa fase). En el ejemplo de la Tabla 16.2, estos clculos se muestran en la columna de la derecha de las secciones de Defectos introducidos y Defectos eliminados. Estos clculos se hacen como se muestra a continuacin.
224
Estudiante x
2/19 81/6 1 4
Ada
Resumen MinutosiLOC LOClHora DefectosiKLOC Rendimiento VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmorten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
335
2 3
32
Hasta la Fecha 10 2
% Hasta la Fecha
24 62 4 1 384 407
781
8 39 4 6 350
10 0 29 7 206 13 07
65 1, 06 4, 3l 7,9 5,5 12 5
1 1 2
100,o
Plan
Actual
1
4
1
Def.iHora
1. . 1 61 80,7
15 .4 , 18 ,9
6 Plan
5 Actual
DeliHora
3
1
1 2 1 3 6 3 1
38,7 4, 19 1, 94 100,o
225
Aunque podras calcular las tasas de introduccin de defectos para las otras fases, estas dos fases que hemos visto son las ms importantes. Para la tasa de eliminacin de defectos tenemos: Defectos eliminados Hasta la Fecha en la fase de revisin de cdigo
= 60*(defectos eliminados hasta la Fecha en la revisin de cdi-
= 4,97
= 7,80
nutos dedicados Hasta la Fecha a las pruebas) = 60*6/279 = 1,29 Aunque estos clculos se realizan solamente para los valores de Hasta la Fecha, podras calcular, si lo deseas, los defectos por hora para los datos planificados y reales. Observa que estos valores cambiarn conforme cambies tu proceso. Tambin, el nmero de defectos es un poco inferior al que debera ser, puesto que no se registraron los datos de defectos de los primeros programas. Las instrucciones para actualizar el Resumen del Plan del Proyecto se muestran en la Tabla 16.3.
16.7
226
Tabla 16.3 Instrucciones del resumen del plan del proyecto del PSP
Propsito Cabecera Esta tabla trata los datos estimados y reales de los proyectos de una forma cmoda y fcilmente recuperable. Introduce los siguientes datos: Tu nombre y fecha de hoy. Nombre y nmero de programa. Nombre del profesor. El lenguaje que utilizars para escribir el programa.
Minutos/LOC
Antes de iniciar el desarrollo: Escribe los Minutos/LOC planificados para este proyecto. Utiliza la velocidad Hasta la Fecha de un programa reciente del Cuaderno de Registro de Trabajos o del Resumen del Plan del Proyecto. Despus del desarrollo: Divide el tiempo total de desarrollo por el tamao real del programa para obtener los MinutosiLOC reales y los Minutos/LOC Hasta la Fecha. Por ejemplo, si el proyecto se hizo en 196 minutos e hiciste 29 LOC, los Minutos/LOC seran 196/29= 6,76.
LOCiHora
Antes de iniciar el desarrollo: Calcula las LOC por hora planificada para este programa dividiendo 60 por los Minutos/LOC de la casilla de Plan. Despus del desarrollo: Para LOC/Hora Real y Hasta la Fecha divide 60 por Minutos/LOC Reales y Hasta la Fecha. Para los 6,76 Minutos/LOC Reales, tenemos 60/6,76 = 8,88 LOC/Hora Reales. Antes de desarrollar: * Encuentra los defectos/KLOC Hasta la Fecha del programa ms reciente. Utiliza dicho valor como los defectos/KLOC planificados. Despus del desarrollo: Calcula los valores de defectos/KLOC reales y Hasta la Fecha para este programa. Para el valor real, multiplica el total de defectos reales por 1000 y divdelo por las LOC Reales Total Nuevas & Cambiadas. Para el valor Hasta la Fecha haz unos clculos similares. * Con 17 defectos Hasta la fecha y 153 LOC Total Nuevas & Cambiadas, los defectos/KLOC Hasta la Fecha = 1000*17/153=111,11
Defectos/KLOC
Rendimiento
Calcula el rendimiento planificado, real y Hasta la Fecha. Rendimiento = 100* (defectos eliminados antes de compilar) / (defectos introducidos antes de compilar), as6 con 5 defectos introducidos y 4 localizados, el rendimiento = 100*45=80,0%
(Contina)
227
Tabla 16.3 Instrucciones del resumen del plan del proyecto del PCP.
(Continuacin)
Tamao Programa Antes de iniciar el desarrollo. WC) Escribe bajo la columna plan, el valor estimado de LOC Total Nuevas & Cambiadas, Mximo y Mnimo. Despus del desarrollo: Cuenta y escribe las LOC Nuevas & Cambiadas Reales. Para la columna Hasta la Fecha, aade LOC Reales Nuevas & Cambiadas a las LOC Hasta la Fecha Nuevas & Cambiadas de programas anteriores. ___ _ _ ~ Tiempo por Fase Para el tiempo total de desarrollo , multiplica el valor de las LOC Plan Total Nueva & Cambiada por los Minutos/LOC. Para el tiempo Mximo, multiplica el tamao Mximo por los Minutos/LOC. Para el tiempo Mnimo, multiplica el tamao Mnimo por los Minutos/LOC. Del Resumen del Plan del Proyecto de un programa reciente, busca los valores de % Hasta la Fecha para cada fase. Utilizando el % Hasta la Fecha de programas anteriores calcula el tiempo planificado para cada fase.
~
Real
Una vez acabado el trabajo, anota el tiempo real en minutos que has gastado en cada fase del desarrollo. Obtn estos datos del Cuaderno de Registro de Tiempos. Para cada fase, escribe la suma del tiempo real y el tiempo Hasta la Fecha de los programas ms recientes.
Hasta la Fecha
% Hasta la Fecha Para cada fase, escribe 1O0 multiplicado por el tiempo Hasta la Fecha y lo divides por el total del tiempo Hasta la Fecha.
Antes del desarrollo, estima el nmero total de defectos a introducir en el programa. El valor es: defectos/KLOC planificados multiplicado por las LOC Total Nuevas & Cambiadas planificadas para este programa y divido por 1000. Por ejemplo, con un valor de defectos/KLOC planificado de 75,9 y un valor de LOC Nuevas & Cambiadas planificadas de 75, el total de Defectos Planificados = 75,9*75/1000=5,69, se redondea a 6. Antes de desarrollar, estima los defectos introducidos por fase utilizando el total de defectos estimados y el o/o Hasta la Fecha de defectos introducidos de programas anteriores. Despus del desarrollo, localiza y anota el nmero real de defectos introducidos en cada fase. Para cada fase, escribe la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes. la Fecha para esa fase y divdelos por el total de defectos Hasta la Fecha.
% Hasta la Fecha Para cada fase, multiplica por 1O0 los defectos Hasta
228
Tabla 16.3 Instrucciones del resumen del plan del proyecto del PSP. (Continuacin)
Defectodhora Calcula los defectos introducidos por hora para la fase de diseo y codificacin. Para la fase de diseo, por ejemplo, se multiplica 60 por los defectos de diseo Hasta la Fecha y se divide por el tiempo de diseo Hasta la Fecha = 60*5/195=1,54defectodhora. En la fila de total, escribe el total de defectos estimados. Utiliza los valores de o/o Hasta la Fecha de los programas ms recientes, calcula los defectos eliminados planificados por cada fast Despus del desarrollo, localiza y anota el nmero real de defectos eliminados en cada fase. Para cada fase, escribe la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes. para esa fase y divdelos por el total de defectos Hasta la Fecha. Defectodhora Calcula los defectos eliminados por hora para la revisin de cdigo, compilacin y pruebas. Para las pruebas, por ejemplo, multiplica 60 por los defectos de las pruebas Hasta la Fecha y divdelo por el tiempo de pruebas Hasta la Fecha = 60*6/279=1,29 defectodhora.
Yo Hasta la Fecha Para cada fase, multiplica por 1O0 los defectos Hasta la Fecha
Los clculos para el rendimiento Planificado, Real y Hasta la Fecha se muestran en la seccin resumen en la parte superior de la tabla Resumen del Plan del Proyecto (vase Tabla 16.2). Bajo la columna Planificado, por ejemplo, los valores de rendimiento del proceso se calculan de la siguiente manera:
Los defectos introducidos planificados antes de compilar son 1+5=6. Los defectos eliminados planificados antes de compilar son 2.
El valor planificado de rendimiento del proceso es: Rendimientoplanificado
= 100*(Plan de defectos eliminados antes de compilar)/(Plan de = 100*2/(1 = 100*2/6 = 33,396
229
= 100*(Defectos eliminados Hasta la Fecha antes de compi= 100*12/(5 + 25) = 100*12/30 = 40,0%
Obsrvese que en la Tabla 16.2, se introdujo un defecto durante la compilacin. Puesto que el calculo del rendimiento del proceso concierne a la tasa de defectos eliminados antes de compilar, deberas considerar solamente los defectos introducidos y eliminados antes de la fase de compilacin. Cualquier defecto introducido en la fase de compilacin o pruebas no estaba en el programa durante la revisin del cdigo y no se incluye en los clculos de rendimiento del proceso.
16.8
230
Recuerda que es una insensatez hacer lo mismo una y otra vez y esperar un resultado diferente [Brown]. Si no cambias la lista de comprobacin, pasars por alto los mismos defectos. Contina reuniendo datos de defectos y calculando el rendimiento y las tasas de introduccin y de eliminacin de defectos. Controla estos datos y experimenta con distintas aproximaciones para ver cules te ayudarn a mejorar. Un objetivo de este libro es que seas tan consciente de los costes y consecuencias de los defectos que personalmente llegues a estar comprometido a producir programas de alta calidad. Esto har que se ahorre tiempo. Tal y como se observa en la Figura 16.3, los estudiantes que controlaron y gestionaron su rendimiento y sus tasas de eliminacin de defectos, dedicaron menos tiempo a la compilacin y a las pruebas. Al principio del curso, en los programas 1 y 2, los 14 estudiantes dedicaron alrededor de un 30% de su tiempo a la compilacin y a las pruebas. Pero al finalizar el curso, cuando utilizaron consistentemente el PSP, el tiempo medio de compilacin y pruebas fue un 10% del tiempo de desarrollo.
O'
1
10
Nmero de Programa
16.9
231
1. Registrar todos tus defectos. Estando enterado de los defectos, trabajars ms cuidadosamente y reducirs el nmero de defectos que introduces.
3. Utilizar los mejores mtodos. Puesto que los defectos pueden introducirse en cualquier fase, las mejoras en la forma de desarrollar los requisitos, especificaciones, diseos, casos de pruebas y cdigo fuente ayudarn a reducir los defectos. Muchos cursos de ingeniera del software ensean mtodos tiles para estas actividades. Utilizando el PSP y midiendo tu trabajo con estos mtodos, puedes ver cmo funcionan para ti.
4. Utilizar herramientas mejores. Si una herramienta ahorra tiempo, probablemente reducir el nmero de defectos que se introducen. Cada ao se desarrollan nuevas herramientas de software y los datos del PSP permitirn medirlas y evaluarlas. Puedes ver cul te ayuda y cunto.
RESUMEN
Los defectos son una de las principales causas de los problemas del software. Su correccin supone un coste econmico y un retraso en la planificacin del proyecto. Puesto que los tiempos dedicados a corregir defectos son impredecibles, los defectos tambin reducen la precisin de la planificacin. La gestin de defectos puede, de esta forma, verse como una cuestin econmica. Este captulo explica las consecuencias econmicas de los defectos e introduce medidas para ayudar a gestionar los defectos en los programas que hagas. Hasta los ingenieros experimentados introducen muchos defectos. El coste de encontrarlos aumenta unas 10 veces en cada fase posterior a la compilacin. Las tasas tpicas de eliminacin de defectos muestran que las pruebas son una forma ineficiente de eliminar defectos. En las pruebas de unidad, los ingenieros solamente encuentran de 2 a 4 defectos por hora. En la revisin de cdigo, encuentran y corrigen de 6 a 12 defectos por hora. Los compiladores son muy eficientes para encontrar defectos sintcticos, pero no encontrarn todos los defectos sintcticos de tu programa.
232
El tiempo para encontrar y corregir cada defecto pasado por alto en un proceso personal llevar varias horas entre la integracin, las pruebas del sistema y la utilizacin del producto. Para mejorar tu efectividad en encontrar y corregir defectos, se han introducido dos nuevas medidas: los DefectodHora que miden la eficiencia de la fase para introducir y eliminar los defectos. En el PSP, el rendimiento del proceso mide la tasa de defectos eliminados antes de la primera compilacin. Para ver dnde y cmo mejoras tu proceso, calcula las tasas de introduccin y eliminacin de defectos y el rendimiento del proceso.
EJERCICIO 16
Para cada uno de los programas que has escrito en este curso, encuentra la tasa de defectos introducidos Hasta la Fecha en las fases de diseo y codificacin y la tasa de defectos eliminados Hasta la Fecha para la revisin de cdigo, compilacin y pruebas. Tambin calcula el rendimiento del proceso para cada uno de estos programas. Calcula y entrega estos valores junto con un breve resumen que describa las implicaciones de estos datos para ti. Entrega copias del Cuaderno de Registro de Tiempos y de las hojas del Resumen Semanal de Actividades que no hayas entregado previamente. Tambin, entrega copias completas del Resumen del Plan del Proyecto, del Cuaderno de Registro de Defectos y de la Lista de Comprobacin para la Revisin de Cdigo para cada programa que desarrolles. Incluye los valores Planificados, Reales y Hasta la Fecha de los tiempos de desarrollo, de los defectos introducidos, de los defectos eliminados y del rendimiento.
REFERENCIAS
[Brown] Brown, Rita Mae. Comunicacin privada. [Humphrey 891 Humphrey, W.S. Managing the Software Process. Reading, MA: Addison-Wesley, 1989. [Zachary] Zachary, G. Pascal. Showstopper! New York: The Free Press, 1994.
CAPTULO 17
Defectos de diseo
Este captulo trata sobre los defectos de diseo, el proceso de diseo y las representaciones del diseo. Tambin trata los mtodos para reducir el nmero de defectos de diseo que introduces. La cuestin principal en la gestin de los defectos de diseo es comprender cundo y cmo los introduces. Como ejercicio, analizars los defectos de diseo en tus programas y determinars cundo y por qu se introdujeron.
17.1
234
DEFECTOS DE DISEO
bos casos, la mejora fue algo menor para los defectos introducidos durante el diseo. Obsrvese que los valores de la Tabla 17.1 se refieren a las fases donde los defectos fueron introducidos. Si examinamos los tipos de defectos, la cuestin es diferente. En el PSP, los tipos de defectos estn ordenados por grado de sofisticacin del problema, los tipos del 10 a 20 son los ms sencillos y los tipos del 90 a 100 los ms complejos. Podemos decir que los tipos del 10 al 40 son defectos sencillos o de codificacin, y los tipos del 50 a 100 son defectos ms complejos o de diseo.
Tabla 17.1 Defectos de pruebas introducidos en las fases de diseo y programacion.
Diseo DefectodKLOC
Ejercicio 1 Ejercicio 1 O
Codificacin DefectodKLOC
8,66
5,055
150 ,5 1,14
YoReduccin
41,67Yo
Si clasificamos estos mismos defectos de pruebas por tipos, obtendremos la Tabla 17.2. Aqu, la mayor parte de los defectos de pruebas son del tipo diseo, pero muchos de ellos se introdujeron durante la codificacin. Aunque estos ingenieros haban reducido bastante el nmero de defectos introducidos, cometieron muchos de sus errores de diseo durante
% de defectos
de Diseo
7,22 9,38
~
1,44 3,61
5,05
____
1659
1
50,00%
I
61,54% 56,52%
I
oYo
40,00% 28,57%
1 1 1
1 1 1
I 1 1
I I I
235
la fase de codificacin. Como vimos en el Captulo 16, los mismos ingenieros introdujeron de 5 a 8 defectos por hora durante la codificacin y solamente de l a 3 dcfectos por hora durante el diseo. Esto sugiere que una forma potencialmente efectiva para introducir pocos defectos de diseo sera dejar de hacer el diseo durante la fase de codificacin. En este captulo se trata este problema y cmo abordarlo.
17.2
No hay forma sencilla y objetiva de definir los defectos de diseo. Las dos elecciones son:
Definir todos aquellos defectos introducidos en la fase de diseo como defectos de diseo. Definir aquellos tipos de defectos que implican cuestiones de funciones de codificacin, lgica, rendimiento y sincronizacin como defectos de diseo. En este libro, seguimos la segunda definicin.
17.3
QU ES DISEAR?
Para considerar los defectos de diseo, es importante definir qu entendemos por diseo. Esta cuestin no es fcil. La razn, es que cualquier co-
236
DEFECTOS DE DISEO
sa relacionada con la estructura e implementacin de un programa est relacionada con el diseo. Esto incluye el flujo del programa, la estructura y naturaleza de los elementos del lenguaje, el uso de los smbolos de separacin en el cdigo fuente. Aunque todo lo anterior es parte del diseo, lo es en diferentes grados de detalle. El problema es que el diseo es una cuestin de perspectiva. Puedes disear en detalle o a alto nivel. Cuando desarrollamos programas, hacemos algo de diseo en cada paso. Si se implementan los detalles de una sentencia case o de un bucle, especificamos el diseo detallado. Cuando definimos una estructura de datos o establecemos un mdulo de interfaz, estamos trabajando a alto nivel. La divisin entre diseo y codificacin es un poco arbitraria. Los ingenieros software, normalmente encuentran til dividir sus actividades de acuerdo al nivel de detalle implicado en su trabajo. Esto les ayuda a centrarse sobre las cuestiones adecuadas en el orden correcto. Por ejemplo, los ingenieros cometen pocos errores y son ms eficientes cuando piensan los diseos antes de implementarlos. Esto no significa que hagan todo su trabajo de arriba a bajo. Significa que normalmente comienzan con un concepto de alto nivel antes de entrar profundamente en detalle. El trmino que utilizamos para describir una aproximacin conceptual de alto nivel, es abstraccin. As, cuando hablamos de la abstraccin funcional raz cuadrada, estamos hablando de un procedimiento que calcula la raz cuadrada. En este nivel, no nos preocupamos de los detalles para calcular la raz cuadrada. Siguiendo esta estrategia de abstraccin, los ingenieros pueden hacer diseos completos de alto nivel antes de profundizar en el embrollo de detalles de cmo se construye cada abstraccin o funcin. As, por ejemplo, puedes comenzar a disear un programa sencillo, definiendo cuatro funciones abstractas o procedimientos: Entrada, Fichero, Calcular y Salir. Podras disear la rutina del programa principal utilizando estas abstracciones. Aunque t tambin podras tener definidas las variables principales y los ficheros, es posible completar el diseo de alto nivel del programa utilizando estas abstracciones funcionales. El siguiente paso sera disear cada una de estas abstracciones. En grandes programas, podras tener varios niveles de abstraccin y podras construir una librera de abstracciones previamente desarrolladas para utilizarla en futuros programas.
17.4
EL PROCESO DE DISEO
Haciendo lo que ellos llaman diseo, los ingenieros experimentados, a menudo, se mueven dinmicamente entre niveles de diseo [Curtis]. La
237
razn es que ellos estn tratando con muchas abstracciones funcionales. Antes de que se sientan cmodos utilizando estas abstracciones en un diseo de alto nivel, generalmente necesitan conocer cmo funcionan dichas abstracciones. Si han utilizado anteriormente dichas funciones, pueden diferir la definicin de los detalles. Si no han trabajado nunca con dichas abstracciones, a menudo, se detendrn y completarn su diseo detallado. Pueden escribir y probar un prototipo antes de estar suficientemente satisfechos como para continuar con el diseo de alto nivel. Los diseadores experimentados hacen esto porque han aprendido que las abstracciones aparentemente sencillas, a menudo, tienen sutiles complicaciones. As, cuando utilizan una abstraccin que no saben cmo construir, frecuentemente encuentran que el trabajo es ms difcil de lo esperado. Ocasionalmente, en efecto, cuando los diseos del sistema estn basados en abstracciones aparentemente simples, pero mal definidas, se encuentra que la aproximacin al diseo global no es factible. La nocin de abstraccin es muy til cuando se trata con funciones conocidas y definidas. Cuando utilizas esta aproximacin conceptual para definir lo ms arduo del trabajo de diseo, es fcil no tener problemas. Los ingenieros experimentados son reacios a utilizar cualquier abstraccin en un diseo de alto nivel, a menos que previamente hayan trabajado con funciones similares o tengan una implementacin que sepan cmo funciona. La distincin entre diseo y codificacin es as arbitraria. Esto tambin significa que la especificacin de qu constituye un diseo completo es arbitraria. Por lo tanto, es importante distinguir entre el proceso de diseo y la fase de diseo especfico en el PSP. La fase de diseo comienza cuando realizas el producto que llamas diseo. El proceso de diseo describe las tareas necesarias para elaborar este producto. Hasta cierto punto, estamos definiendo diseo como lo que hacemos en la fase de diseo. Esto, probablemente parece tan til como definir pensamiento como lo que la gente hace cuando piensa. A menudo, es til definir actividades en trminos de los productos que obtienes. Posteriormente en este captulo discutiremos cmo representar el producto del diseo.
17.5
238
DEFECTOS DE DISEO
Una segunda causa sera, conociendo el diseo que haba que hacer, cometes un simple error. Puedes pensar terminar un bucle bajo ciertas condiciones pero olvidas incluir todos los casos. Esto podra ser un descuido o una tontera. Sabas qu hacer y cmo hacerlo, pero cometiste un error tonto. Estos errores son ms comunes cuando tienes prisas o ests cansado. Una tercera causa de los defectos de diseo es una mala comprensin de lo que se quera. Tanto si has interpretado mal el diseo de alto nivel o no has entendido los requisitos. En cualquier caso, se hace un diseo incorrecto. Realmente el diseo era correcto en el sentido que realizaba la funcin que pretendas, pero implementaste la funcin errnea. Otra causa parecida a la ltima es cuando se entiende el diseo local y el del sistema, es decir, se comprende los requisitos pero no se entiende el contexto del sistema. Esto es lo que denomin el problema de interpretacin literal. Por ejemplo, cuando pides a alguien que explique la expresin derramar las judas, obtendrs diferentes respuestas dependiendo a quin preguntes. Alguien que entienda el ingls coloquial tal y como se habla en Estados Unidos la interpretar como decir un secreto, mientras que alguien que est aprendiendo ingls en otro pas puede decir que significa tirar la comida. Este es un problema en el software, porque muchas decisiones de diseo implican detalles que afectan a los usuarios del sistema. Cuando los diseadores no han conocido profundamente el contexto del usuario, es probable que interpreten los requisitos de forma literal, sin entender sus implicaciones desde el punto de vista operativo. Aunque dichos sistemas, normalmente cumplen todos los requisitos establecidos, generalmente son poco prcticos y algunas veces es imposible utilizarlos. Sorprendentemente, los errores de diseo provienen de un exceso de confianza. El ejemplo comn sera una o dos lneas corregidas en un gran programa. Puesto que dichos cambios son pequeos, los ingenieros normalmente piensan que son sencillos y no debe llevar mucho tiempo entender realmente el problema o las implicaciones de la correccin. Aunque estos errores podran ser clasificados en cualquiera de las categoras anteriores, normalmente se ubicaran entre la tercera o cuarta: incomprensin o errores de contexto.
17.6
239
lo que se quera, se comprometieron en una tercera interpretacin. Cuando los ingenieros toman decisiones de diseo sin estar bien informados, a menudo, producen diseos poco prcticos y posiblemente no operativos.
Aunque todas estas causas son reales y contribuyen al nmero total de defectos de diseo, el mayor nmero de defectos proviene de simples descuidos, tonteras y malentendidos. La razn de que estas causas excedan en nmero a todas las dems, es porque, cuando los ingenieros software se enfrentan a un nuevo diseo del problema, normalmente tienen un cuidado especial. Saben que podran fcilmente cometer un error y procuran comprobar su trabajo. Puesto que los ingenieros software cometen muchos errores simples y dichos errores pueden ser complicados de encontrar, estos simples defectos son una de las causas de muchos problemas. Dichos defectos logran pasar los procesos de diseo y pruebas y llegan a los usuarios del sistema. Estos defectos triviales causan muchos de los problemas que los usuarios tienen con los sistemas de software. Resulta que muchos de estos defectos son evitables. El ingeniero saba que esto era lo deseable. El diseo fue adecuadamente concebido, pero pobremente representado. As, cuando lleg el momento de desarrollar el cdigo, el programador no pudo ver lo que se pretenda. Antes que detenerse y buscar al diseador, muchos programadores completan el diseo precipitadamente sobre la marcha. Puesto que estn trabajando en la implementacin, a menudo no entienden todas las implicaciones del diseo. As, es muy probable cometer un error. Aunque el diseador saba lo que quera, el programador no. Tambin puede haber un malentendido cuando ests implementando un diseo ideado por ti mismo. Cuando ests haciendo un diseo, a menudo buscars un punto a partir del cual el resto del diseo parezca obvio. Si tambin ests planificando que hars el cdigo, parece poco razonable documentar esta parte para el diseo. Desdichadamente, ms tarde durante la implementacin, puede que no recuerdes una cosa obvia del diseo y vuelvas a disear otra vez. Puesto que probablemente habrs olvidado el contexto del diseo, debes reconstruir todos los conceptos y condiciones relevantes del diseo. Puesto que este proceso de reconstruccin es propenso a errores, probablemente cometers errores de diseo. La causa del error no fue una pobre implementacin, sino que fue un diseo representado de manera muy pobre.
17.7
240
DEFECTOS DE DISEO
persona que lo implemente. Esta es una cuestin crtica con programas de 10.000 LOC o ms y puede ser un problema con mdulos de programa de 50 a 100 LOC. Representando completamente el diseo cuando lo crees, probablemente ahorrars tiempo. Esto es debido a que puedes producir mucho ms rpidamente a partir de un diseo completo y claro, que a partir de uno vago e incompleto. Puesto que un menor tiempo de codificacin implica pocos defectos de codificacin, con un buen diseo es ms probable que hagas un programa de calidad superior. Hay tres formas comunes de representar los diseos: grficamente, con un seudocdigo o matemticamente. En las siguientes secciones de este captulo discutimos estos mtodos de representacin. Aunque esto es un tema muy extenso y se podra decir mucho sobre el mismo, este breve tratamiento te dar algunas ideas sobre el diseo de mdulos de programas. Tambin proporciona un contexto para pensar sobre el diseo, conforme utilizas el PSP en el futuro. El objetivo aqu, no es ensear mtodos de representacin, sino convencerte de la importancia de hacer un diseo y de representarlo de forma clara. As, cuando te enseen varios mtodos de representacin en cursos o en el trabajo, podrs valorar por qu son importantes y tendrs en cuenta probarlos.
241
Interconexiones
Funcin predefinido
definido
x<o
Rutina-Error
4
x =o
Correccin-Cero
1 Salida-y
sentencia case.Esta eleccin se deja al programador. La caja que contiene, y = f (x , describe un clculo. ) Las dos cajas a izquierda y derecha de la Figura 17.2 representan funciones definidas. A la izquierda tenemos la caja de la funcin, R u t ina-Error, tiene dos barras verticales para representar una funcin predefinida. Esto se refiere a una funcin que ya ha sido implementada y es reutilizada en este programa. La caja de la derecha Correccin-Cero, tiene una lnea horizontal para representar una funcin definida. Esta es una nueva abstraccin funcional que ests definiendo y utilizars en este programa cuando est acabado.
242
DEFECTOS DE DISEO
Aunque las representaciones grficas son fciles de entender, a menudo, son imprecisas o voluminosas. Este no es un problema inherente al mtodo, pero es otro ejemplo de una representacin imprecisa e incompleta. Este problema de precisin puede ser tratado teniendo un diseo escrito completo y utilizando la representacin grfica para ayudar a explicar la lgica del programa. Recuerda, sin embargo, que cuanta ms informacin pongas en el diagrama, mayor desorden habr y ms difcil ser entenderlo. La mejor aproximacin a este problema es utilizar varios niveles de diagrama de flujo, donde cada nivel incluye abstracciones que estn definidas en diagramas de flujo de bajo nivel. Debido a sus ventajas, deberas utilizar una representacin grfica para ilustrar el diseo de cada programa que hagas. A menudo, el proceso de dibujar el diagrama de flujo revelar relaciones que no habas considerado. A pesar de cmo lo hagas, dichos diagramas pueden ahorrar tiempo y reducir la confusin cuando posteriormente implementes, pruebes, corrijas o mejores el programa.
Y =
end.
(x)
Una descripcin de diseo con seudocdigo es una mezcla de lenguaje humano y elementos de codificacin. En vez de utilizar una lgica
243
completa para definir bien las funciones, se utilizan sentencias sencillas. De forma similar, el flujo del programa puede representarse con sentencias condicionales tradicionales, utilizando expresiones escritas que describen la lgica. Aunque no hay un estndar de notacin de seudocdigo ampliamente aceptado, es una buena idea utilizar elementos del lenguaje que sean similares a aquellos que son utilizados en lenguajes de alto nivel. Cuando lo hagas, el seudocdigo parecer familiar en el momento de la implementacin y proporcionar un marco de trabajo para la misma. Debido a que el seudocdigo no requiere los detalles del lenguaje de programacin, es generalmente, ms fcil y rpido para trabajar, que hacer un programa fuente completo. Tambin, puedes documentar un diseo con muchos ms detalles de los que necesites. Esto facilita la captura del diseo cuando desarrollas por primera vez. Esto es cuando entiendes mejor el diseo y puedes registrarlo de una forma ms eficiente. La principal ventaja del seudocdigo es que es tan preciso como t necesites y es fcil de entender. La principal desventaja es que, un diseo en seudocdigo puede ser tan detallado que sea difcil de entender. Por eso, es una buena idea proporcionar tanto el seudocdigo como un diagrama de flujo para cualquier diseo por muy sencillo que sea. Un problema potencial con el seudocdigo es causado por el hecho de que omite mucha puntuacin y estructura, utilizada para definir totalmente el significado de un programa fuente. Es fcil cometer errores con elementos lgicos comunes. Por ejemplo, es una buena idea utilizar la sangra o la puntuacin para conectar cada sentencia else con el i f apropiado, o mostrar la extensin de los bucles o condiciones case. El mbito de las variables y los parmetros tambin puede causar confusin y debera ser cuidadosamente observado donde no es obvio. Un problema comn con el seudocdigo tiene que ver con el nivel de detalle. Muchos ingenieros escribirn una lnea de seudocdigo por cada 3 o 5 lneas de programa fuente acabado. Sin embargo, he visto casos donde los ingenieros han hecho una lnea de seudocdigo por cada lnea de cdigo fuente acabado. Aunque ellos pueden llamar a esto diseo, esto es realmente la implementacin en una forma menos rigurosa. Puesto que el simple acto de copia introduce defectos, diseando con tanto detalle se podra introducir ms defectos que codificando desde el principio. Debido a su flexibilidad, un diseo con seudocdigo puede estar en cualquier nivel de detalle. No hay forma de especificar con precisin qu debe contener un diseo con seudocdigo. Aunque las representaciones con seudocdigo pueden ser muy tiles, estamos an con el problema que tenamos al principio: cmo definir con precisin lo que se entiende por diseo. En efecto, una gran ventaja del seudocdigo es que permite al ingeniero especificar el nivel de detalle del diseo necesario para cada situacin.
244
DEFECTOS DE DISENO
Cuando ests utilizando el seudocdigo, los datos del PSP pueden ayudarte a decidir un nivel adecuado de detalle. Cuando se estn controlando datos de defectos, por ejemplo, si encuentras que ests introduciendo defectos del tipo diseo durante la fase de codificacin, piensa la utilizacin de un diseo ms preciso. A la inversa, si no has tenido problemas de representacin del diseo, puedes intentar utilizar un seudocdigo menos detallado para ver si aumentas la velocidad en tu trabajo de diseo, sin causar errores de diseo en la implementacin.
RESUMEN
La fuente de muchos defectos es la fase de codificacin. Una forma de reducir los defectos de diseo es analizar los tipos de defectos. Defi-
245
nimos los defectos de diseo como los tipos de defectos del PSP del 50 al 100. Si introduces muchos de estos tipos en la fase de codificacin, considera dedicar ms tiempo al diseo. Es importante hacer el diseo lgico y funcional en la fase de diseo y no durante la codificacin. Las representaciones de diseo precisas pueden ahorrar tiempo de implementacin y reducir los defectos de diseo. Una pobre representacin puede causar defectos. Las representaciones grficas son fciles de entender pero pueden ser imprecisas. Las representaciones con seudocdigo pueden estar a varios niveles de detalle y pueden utilizar un lenguaje que es similar al lenguaje de programacin utilizado. Al seleccionar una representacin del diseo, familiarzate con la representacin antes de hacer una evaluacin. Utiliza tus datos del PSP para hacer la evaluacin y tomar la decisin.
EJERCICIO 17
Como ejercicio, revisa los defectos que has encontrado en todos los programas de los que tengas datos de defectos. Utilizando los mtodos mostrados en las Tablas 17.1 y 17.2, muestra cul de estos defectos provienen de una representacin imprecisa del diseo y sugiere los pasos para prevenirlos. Para el trabajo de casa, lista el nmero de defectos de diseo por tipos de problemas y la representacin que podra haberlos previsto. Tambin indica el tiempo total de correccin que esta mejora podra ahorrar. Haz un seudocdigo y un diagrama de flujo para el prximo programa. Entrega los diseos con el programa, y escribe un breve comentario del impacto que estos mtodos de diseo han tenido en el nmero de defectos de diseo introducidos. Muestra los datos que llevan a estas conclusiones. Obsrvese que tanto los anlisis de defectos y los ejercicios de diseo son opcionales y no es necesario terminarlos a no ser que lo pida el profesor. Entrega copias del Cuaderno de Registro de Tiempos y de las hojas del Resumen Semanal de Actividades que no hayas entregado previamente. Tambin, entrega copias completas del Resumen del Plan del Proyecto, del Cuaderno de Registro de Defectos y de la Lista de Comprobacin para la Revisin de Cdigo para cada programa que desarrolles. Incluye los valores planificados, reales y Hasta la Fecha, de los tiempos de desarrollo, los defectos introducidos, los defectos eliminados y el rendimiento.
246
DEFECTOS DE DISEO
REFERENCIAS
[Curtis] Curtis, Bill, Herb Krasner, and Neil Iscoe. A Field Study of the Software Design Process for Large Systems, Communicutions of the ACM, November 1988, vol. 31, no. 1 1 . [Gries] Gries, David. The Science o Progrumming. New York: Springerf Verlag, 1981.
CAPTULO 18
Este captulo discute cmo tu disciplina personal de trabajo afecta a la calidad de los productos que realizas. Ilustra la relacin entre el nmero de defectos que encuentras durante la compilacin y las pruebas, y el nmero de defectos que dejars en tus productos acabados. Describe los pasos que puedes hacer para mejorar la calidad de tus programas. Como ejercicio, examinars la relacin, entre el nmero de defectos de compilacin y el nmero de defectos de pruebas que tienes en los programas que has desarrollado en este curso.
18.1
248
gramas. Pasan deprisa por las etapas de diseo y codificacin, y as pueden empezar las pruebas. Con el PSP, los ingenieros se centran en hacer programas limpios y libres de defectos desde el principio. La razn para esta estrategia, es que una vez que el ingeniero hace un producto poco slido, no hay herramienta que pueda dejarlo libre de defectos. Una forma de demostrarlo, es mostrar los datos que relacionan los defectos encontrados en la compilacin, con los encontrados en las pruebas y los defectos encontrados por los usuarios de los programas. Otra aproximacin, sera que reunieses los datos de tu trabajo y vieses por ti mismo como esta estrategia trabaja para ti. Este captulo se centra en ambas aproximaciones.
LASPRUEBAS
Cuanto ms complejo es el producto, las pruebas consumen ms tiempo y son ms caras. Las pruebas, tambin, son menos efectivas para encontrar los defectos. Es decir, con programas ms grandes y complejos, ser ms costoso encontrar y corregir cada defecto, y los encontrars en una tasa muy baja. Hay varias razones para esto. Primero, los defectos enmascaran o agravan a otros. Es decir, cuando un programa tiene muchos defectos, sus interacciones complican el proceso de identificacin y correccin del mismo. Esto hace que algunos de los defectos sean muy difciles de encontrar y corregir. Un defecto tambin puede enmascarar los sntomas de otros. Puesto que estos defectos enmascarados son difciles de encontrar, aumenta la posibilidad de que su deteccin se escape del todo. Otra razn de la complejidad de las pruebas, es la dificultad de probar, aun en los programas pequeos, el nmero de caminos lgicos de un programa, ya que puede ser muy grande. No es prctico probar todas las combinaciones posibles ni tan siquiera en los programas pequeos. Conforme el programa es ms grande y complejo, es ms difcil hacer una prueba que sea moderadamente global. Considera el caso sencillo de un programa que analiza una cadena de caracteres. Si hay solamente 60 posibles caracteres, una cadena de 10 caracteres tendra 6010posibles combinaciones. Es decir, un 6 seguido de 17 ceros. Si pudieras probar 1 .OOO.OOO de combinaciones en un segundo, necesitaras 20.000 aos para probar todas las posibilidades. As, vemos que no es posible probar todas las combinaciones imaginables. En el anterior ejemplo, muchas de las combinaciones de caracteres seran lgicamente idnticas, pero los encargados de las pruebas del sistema no podran saber cules ignorar, y cules probar. Los diseadores, naturalmente, podran decirles qu combinaciones deberan ignorar. El
249
problema de esta estrategia es que los diseadores cometen errores. Si ellos no lo hicieran, naturalmente que no habra necesidad de probar sus programas. Las pruebas son un gran problema, pues los programas no se comportan de la forma que nosotros pensamos que lo haran. As, con sistemas complejos, cuando unicamente probamos las condiciones que pensamos que son importantes, generalmente pasamos por alto muchos defectos. Si sigues mtodos disciplinados y revisiones cuidadosas, y pruebas tus pequeos mdulos de programa, sers mucho ms efectivo que cualquier grupo encargado de pruebas para encontrar defectos en tus programas. Esto se debe a que t conoces la lgica del programa y qu haras. Tambin comprendes las cosas inusuales y las condiciones singulares, y rpidamente puedes ver qu funcionar y qu no. Si haces todo lo que puedas para asegurar que los mdulos de tu programa no tengan defectos, consigues eliminar en gran parte el coste y el tiempo requerido para anular los defectos posteriormente. Aunque no puedes evitar un error ocasional, puedes al menos asegurarte de que tus productos estn esencialmente libres de errores. Y si t no haces un programa libre de defectos, nadie puede hacerlo por ti.
18.3
Lo contrario de esto es, sin embargo, que cada proceso de eliminacin de defectos tambin pasa por alto una fraccin de los mismos. As, a mayor nmero de defectos en el filtro, mayor es el nmero que probablemente sern pasados por alto. El nmero de defectos que se cogen por medio del filtro es por lo tanto, proporcional al nmero de defectos que entran al filtro. Aunque el grado que esta relacin guarda, vara considerablemente con la calidad y tipo de proceso de eliminacin de defectos, normalmente esta relacin se mantiene. As, a mayor nmero de defectos que entran en la fase de pruebas, compilacin o revisin, mayor ser el nmero con probabilidad de dejarlos en el producto a la salida de dichas fases.
250
La siguiente cuestin, naturalmente, tiene que ver con la calidad de los filtros. Si pudisemos idear filtros con rendimientos de eliminacin de defectos prximos al 100%,nuestro problema de eliminar defectos se resolvera. Desafortunadamente, los datos sobre los rendimientos de compilacin y pruebas no son tranquilizadores. Como se muestra en la Tabla 18.1, las revisiones de cdigo e inspecciones tienen mejores rendimientos, mientras la compilacin, pruebas de unidad y otras formas de pruebas son menos efectivas [Humphrey 891. Estas cifras estn basadas en datos limitados y puede que no se apliquen a tu situacin particular, pero estos son todos los datos que tenemos. La mejor respuesta para ti, naturalmente, sera reunir los datos de rendimiento de tus propios mtodos de eliminacin de defectos y sacar tus propias conclusiones. Es interesante observar que el mtodo de mayor rendimiento de la Tabla 18.1 es para los ingenieros que hacen una revisin de cdigo. El siguiente mayor rendimiento es para las inspecciones, donde varios ingenieros revisan entre s el diseo y el cdigo.
Tabla 18.1 Rendimientos de eliminacin de defectos.
l
Compilacin
Mtodo
Revisin de cdigo Inspeccin de cdigo
40-50
45
1 1
l I
45
8
I l
Los mtodos que tienen los mayores rendimientos son manuales y no implican ninguna herramienta automatizada. La razn de que sean mejores que otros mtodos es que la mente humana es el instrumento de deteccin de defectos ms poderoso que cualquier herramienta software actual. La conclusin lgica de estos datos es que, para hacer programas de alta calidad, debes tener el menor nmero de defectos posible al comenzar las pruebas. Comenzar las pruebas con el menor nmero de defectos, significa salir de la fase de compilacin con el menor nmero de defectos. Finalmente, para salir de la fase de compilacin con el menor nmero de defectos, debes eliminar los defectos antes de comenzar a compilar. Naturalmente, para hacer productos de mxima calidad, deberas medir, analizar y mejorar cada fase de eliminacin de defectos.
251
18.5
rn
rn
W
2
2IE
I -
252
.
I -
rn
rn
.
I
I
rn
I I
6 -
3
3
fi
5 4 -
5
8
0
3 -
.. .
rn rn
I I
rn
2 -
rn
I 0 .
'
Un clculo preciso del rendimiento requiere datos de defectos de todas las subsiguientes fases del proceso. Por ejemplo, si encuentras 5 defectos en una revisin de cdigo, 3 en la compilacin y 2 ms en las pruebas, en la revisin de cdigo habrs encontrado 5 defectos de un total de 10. Esto da un rendimiento de revisin del 50%. Aunque an puede haber defectos en el programa, este es el rendimiento de la revisin en este punto. Como se muestra en la Figura 18.4, cuando encuentres subsiguientes defectos, el rendimiento de todas las fases que pasan por alto esos defectos disminuye. A la salida de la revisin de cdigo, habas encontrado 5 defectos. Puesto que estos son todos los defectos que has podido encontrar, estos son todos los que crees que hay. A la salida de la revisin, creas que el rendimiento de la misma era del 100%.
253
Programa Fuente
Total de defectos 12
Revisin de Cdigo
Quedan 7 defectos
3 defectos encontrados rendimiento de la compilacin = 313 = 100% rendimiento de la revisin = 5/8 = 62,5%
Prueba de unidad
Quedan 2 defectos
P
Quedan O defectos
2 defectos encontrados rendimiento prueba de unidad = 212 = 100% rendimiento de la compilacin = 3/5 = 60% rendimiento de la revisin = 5/10 = 50% 2 defectos encontrados rendimiento prueba de unidad = 2/4 = 50% rendimiento de la compilacin = 317 = 42,9% rendimiento de la revisin = 5/12 = 41,7%
Si en la fase de compilacin encuentras 3 defectos ms, sabemos ahora que en la fase de revisin se encontraron solo 5 defectos de un total de 8. As, el rendimiento de la revisin fue realmente del 62,5% en vez del 100%. El rendimiento aparente del compilador es del 100%. Si en la prueba de unidad encuentras 2 defectos ms, en la revisin se haba encontrado solamente 5 de un total de 10 defectos. As, el rendimiento de la revisin fue realmente del 50%. En este punto el compilador encontr 3 defectos pero pas por alto 2, as el rendimiento en ese punto es del 60%. Puesto que en las pruebas de unidad se supuso que se haban encontrado todos los defectos restantes, el rendimiento aparente es del 100%. Supngase que en la subsiguiente prueba del programa, encuentras 2 defectos ms. Entonces en la revisin se habra encontrado 5 de un total de 12 defectos que tiene el producto. As, el rendimiento de la revisin en este punto sera del 41,7%. De forma similar, el compilador haba encontrado 3 de 7 defectos, por lo que su rendimiento en ese punto sera del 42,9%. Incluso ahora no podras tener la certeza de los valores de rendimiento final. Una vez entregado el producto a los usuarios finales, se podran encontrar an muchos defectos, lo que reducira el rendimiento de todas las fases de eliminacin de defectos.
254
La medida del rendimiento se puede aplicar a cualquier fase del proceso. Cuando se aplica a las pruebas de unidad, por ejemplo, se refiere a la tasa de defectos en el producto que son eliminados durante dichas pruebas. Como se describi en el Captulo 16, el rendimiento del proceso se refiere a la tasa de defectos eliminados antes de la primera compilacin. As, el rendimiento del proceso se calcula de esta forma: Rendimiento del Proceso = 100*(nmero de defectos eliminados antes de la compilacin)/(nmero de defectos introducidos antes de la compilacin).
18.6
50
40
2
5 cr:
30
1,
1 2
O
3
4
5
10
Nmero de programa
255
'E 5
!Y
50 40
a
E
~~~
10 1 O
10
Nmero de programa
90 80 -
:g o
!Y
70
60
50 40 30
10
Nmero de programa
Debido a que durante los aos de utilizacin es posible que no se encuentren todos los defectos, nunca tendrs la certeza. Si el nmero de defectos encontrados disminuye bruscamente con cada eliminacin de defectos, los valores del rendimiento son probablemente bastante precisos. Despus de que hayas reunido datos de defectos, puedes desarrollar medidas de rendimiento para cada fase. Entonces puedes calcular el nmero de defectos que quedan en cualquier producto que desarrolles. Una regla de utilidad emprica es asumir que los defectos que quedan en un producto equivalen al nmero de los mismos encontrados en la 1tima fase de eliminacin. Esto equivale a asumir que el rendimiento de esta ltima fase fue del 50 %. Basndome en mis datos, este rendimiento es un poco bajo para las buenas inspecciones y revisiones de cdigo, bas-
256
tante adecuado para la compilacin y un poco alto para la mayor parte de las fases de pruebas. Considera de nuevo el caso con los 17 defectos encontrados en la revisin de cdigo, 2 en la compilacin y 1 en las pruebas, la estimacin actual del rendimiento de revisin es de 17/(17 + 2 + 1) = 85%. La regla emprica asumira que se encontrar un defecto ms. Esto dara un rendimiento final de 17/(17 + 2 + 1 + 1) = 80,95%. En el otro ejemplo, 17 defectos encontrados en la revisin de cdigo, 15 en la compilacin y 8 en las pruebas. Aqu, el valor del rendimiento actual es de 17/(17 + 15 + 8) = 42,5%. La regla de utilidad emprica sugiere que se encontrarn 8 defectos ms, dando un rendimiento estimado definitivo de revisin de 17/(17 + 15 + 8 + 8) = 35,4%. Con los datos histricos del rendimiento real para cada fase de eliminacin de defectos, podras hacer estimaciones definitivas de rendimiento ms precisas. Hmas esto utilizando el valor del rendimiento conocido para la fase final y calculando el nmero de defectos que probablemente se han pasado por alto. Con bastantes datos de rendimiento, podras calcular rangos estadsticos para el nmero de defectos que quedan. Aunque nunca sabrs realmente los verdaderos valores del rendimiento, estos datos te ayudarn a hacer estimaciones un poco ms aproximadas.
18.7
257
tocar sin cometer errores en las notas. As, cuando se llega a esta situacin, es cuando los msicos comienzan a ser realmente artistas. El trabajo de realizar software de calidad es muy parecido a tocar un instrumento musical. Hasta que t puedas hacer un cdigo que tenga pocos o ningn defecto, no logrars ser un ingeniero software. Mientras dediques la mayor parte de tu tiempo a encontrar y corregir defectos, no estars actuando como un profesional. Con mtodos de calidad disciplinados, sin embargo, hars pequeos programas libres de defectos de una forma coherente. Entonces, podrs centrarte en desafos ms importantes para producir grandes programas de alta calidad. Aunque dominar estas disciplinas requiere tiempo y un esfuerzo constante, vers que mejoras gradualmente. Tu objetivo personal, sin embargo, debe ser alcanzar un rendimiento del 100%. Recuerda que nunca hars grandes programas de calidad hasta que no hagas de forma rutinaria pequeos programas de calidad. Esto requiere disciplina personal y mucha prctica.
18.8
258
PROTOTIPADO
Una vez que has alcanzado de forma consistente un rendimiento del 70%, continuar mejorando ser ms difcil. Aunque ocasionalmente pases por alto uno o dos defectos sintcticos, la mayor parte de los defectos pasados por alto tendrn que ver con el diseo. Encontrars nuevos sistemas o cuestiones de soporte o necesitars utilizar funciones de programas desconocidas. Con grandes programas, las interfaces, el rendimiento, la gestin de memoria y muchos otros aspectos sern muy importantes. Cada vez que hagas algo nuevo probablemente cometers errores. As, para eliminar todos los defectos, deberas intentar escribir prototipos de programas pequeos. Experimenta con cada funcin desconocida o procedimiento antes de utilizarlo en un programa. Prueba nuevas ideas y haz simples prototipos de cualquier estructura o elemento que no hayas utilizado previamente. Esto evitar muchos de los defectos que normalmente se escaparan a tus revisiones personales. Tambin encontrars que ciertos tipos de defectos son ms difciles de localizar o prevenir que otros. Conforme idees formas de encontrar los defectos con ms frecuencia te equivocars, muchos implicarn aplicaciones, soporte de sistemas y cuestiones del entorno de desarrollo. Cada fuente de confusin es una fuente de defectos. La clave est en reconocer la diferencia entre lo que realmente sabes de algo y lo que t crees que sabes. Ocasionalmente cometers un error con algo que realmente conoces, pero muchas veces tus errores implicarn suposiciones que no son completamente correctas. Aprende a reconocer estas suposiciones. Entonces construye un prototipo para probarlas antes de incorporar las suposiciones en el producto.
RESUMEN
Conforme los programas son ms grandes, es ms costoso encontrar y corregir los defectos. El proceso de eliminacin de defectos es tambin menos efectivo. La estrategia para producir grandes programas de gran calidad es, en primer lugar, eliminar todos los defectos de los mdulos que forman estos grandes programas. La eliminacin de defectos es un proceso de filtrado: ve cada fase de eliminacin de defectos como un filtro. Cuantos ms defectos se pongan en el filtro ms se encontrarn. Tambin, cuanto ms defectos se pongan en el filtro, ms se pasarn por alto. El rendimiento de muchas fases de prueba es menor del 50%. As, para obtener un producto de alta calidad al final de una prueba, debes poner un producto de alta calidad al comienzo de la prueba.
259
Un trabajo concienzudo en cada paso de tu proceso ser rentable y ahorrar tiempo. Si haces un programa mal, se encontrarn muchos defectos en la compilacin y en cada subsiguiente fase de pruebas. El rendimiento mide la calidad de la eliminacin de defectos. El rendimiento del proceso se refiere a la tasa de defectos en el producto que son eliminados antes de la primera compilacin. El rendimiento puede medir tambin la tasa de defectos en un producto que son eliminados en la fase de eliminacin de defectos. Tu objetivo sera lograr el 100% de rendimiento del proceso. Recuerda: no sers capaz de hacer grandes programas de mucha calidad hasta que no puedas hacer de forma constante pequeos programas de gran calidad. Esto supone una dedicacin constante a la calidad, disciplina personal y mucha prctica. Para lograr la mxima calidad en un programa, haz pequeos prototipos para probar cada suposicin antes de incorporarla al producto. Aprende a reconocer la diferencia entre lo que crees que sabes y lo que realmente sabes. Cada vez que hagas una suposicin, es probable que introduzcas un defecto.
EJERCICIO 18
Para el ejercicio, muestra la relacin entre los defectos de la fase de compilacin y de pruebas para todos los programas que has escrito en este curso. Mustralos en grficos como los de las Figuras 18.1, 18.2 y 18.3. Calcula el rendimiento del proceso para cada programa, y estima la probabilidad del rendimiento final una vez que todos los defectos que queden en el programa se hayan encontrado. Observa que este anlisis de defectos es un ejercicio opcional y no es necesario terminarlo a no ser que lo pida tu profesor. Entrega copias del Cuaderno de Registro de Tiempos y del Resumen Semanal de Actividades que no hayas entregado previamente. Tambin, entrega acabado el Resumen del Plan de Proyecto del PSP, el Cuaderno de Registro de Defectos y la Lista de Comprobacin para la Revisin de Cdigo para cada programa. Incluye los valores Planificados, Reales y Hasta la Fecha de los tiempos de desarrollo, de los defectos introducidos, de los defectos eliminados y del rendimiento.
REFERENCIA
[Humphrey 891 Humphrey, W.S. Munuging the Software Process. Reading, MA: Addison-Wesley, 1989.
CAPITULO 19
Este captulo describe la calidad del proceso y algunas medidas que puedes utilizar para evaluar la calidad de tu trabajo de desarrollo de software. Tambin muestra como calcular y controlar estas medidas. Como ejercicio, calculars una de estas medidas para los programas que hayas desarrollado en este curso y dibujars una grfica que muestre cmo han cambiado estas medidas.
19.1
262
efectividad del proceso en la bsqueda y correccin de defectos. Ahora, nos centramos en las medidas de calidad del proceso. Es importante recordar que en este libro nos centramos solamente en la calidad desde la perspectiva de la introduccin y eliminacin de defectos. Despus de haber aprendido y practicado los mtodos del PSP descritos en este libro, deberas considerar cmo mejorar el proceso que utilizas en otras reas importantes. Por ejemplo, realmente has entendido los requisitos? Algn paso del proceso que lleva a requisitos equivocados podra incluir desarrollar un primer prototipo, para revisar con tu profesor o cliente. Otro tpico importante tiene que ver con la utilidad o rendimiento de las pruebas, la compatibilidad de estndares, la revisin de interfaces, etc. Para cada una de estas cosas, puedes idear varios pasos para mejorar la calidad del producto. La calidad es un tema importante y hay, potencialmente, muchas acciones tiles del proceso que podras tener en cuenta para ayudarte a asegurar que entregas productos de calidad a tus clientes.
19.2
As, con pocos defectos, llevar mucho tiempo encontrarlos, independientemente de los mtodos que utilices. Esto es cierto para la revisin y las pruebas, pero lo es menos para la compilacin. Aunque hay una leve tendencia descendente para la tasa de eliminacin de defectos en la compilacin, la naturaleza automtica de los compiladores los hace menos sensibles a la densidad de defectos. La tendencia descendente para las revisiones y pruebas puede no ser evidente para secuencias cortas de da-
263
tos, pero la tasa para cualquier mtodo dado, generalmente, disminuir conforme disminuya el nmero de defectos.
As, conforme pongas progresivamente mayor calidad en los programas por medio de sucesivas fases de integracin y pruebas del sistema, sus defectos residuales sern progresivamente ms difciles de encontrar y corregir. Esto sugiere que cuanto ms defectos encuentres, ms importante es encontrarlos y corregirlos.
19.3
264
son de mxima calidad, el resto de pasos sern mucho menos efectivos. Entonces el proceso de desarrollo debe concentrarse en encontrar y corregir los defectos que t y tus compaeros dejan en tus mdulos. Esto tambin significa que el trabajo que los restantes pasos se supone que acabaron, realmente no fue hecho. En vez de asegurar que el sistema realiza adecuadamente las funciones que el usuario pretende, las pruebas del sistema y de integracin se dedicarn principalmente a encontrar y corregir los defectos que quedan en los mdulos. Con mdulos que inicialmente tienen una alta calidad, sin embargo, puedes seguir la estrategia anteriormente mencionada. Entonces tendrs una oportunidad razonable de hacer sistemas de alta calidad. Mejor que derrochar el tiempo intentando encontrar y arreglar los defectos de los mdulos, la prueba de integracin se puede enfocar en probar las interfaces entre los mdulos. La prueba del sistema ahora podra tratar cuestiones crticas del sistema como el rendimiento, la funcionalidad, recuperacin y seguridad. Hasta que los ingenieros no logren de una forma consistente rendimientos personales altos, dichas pruebas no se harn.
19.4
EL COSTE DE LA CALIDAD
Aunque pudieras dedicar cualquier cantidad de tiempo a buscar defectos, nunca estaras seguro de haberlos encontrado todos. As, si tu nico objetivo era hacer programas libres de defectos, podras continuar haciendo revisiones y pruebas indefinidamente. Aunque dejases de hacerlas despus de no haber encontrado defectos por un tiempo, podras aun, no haberlos encontrado todos. Como ingeniero del software, sin embargo, necesitars un equilibrio entre el tiempo dedicado y la calidad de los productos hechos. El Coste de la Calidad (CDC) proporciona una forma de tratar estas cuestiones. El CDC tiene tres elementos principales: costes de los fallos, costes de valoracin y costes de prevencin.
Los costes de los fallos incluyen todos los costes de corregir los defectos del producto. Mientras ests corrigiendo un defecto, ests incurriendo en unos costes de los fallos. De forma similar, mientras ests ejecutando el depurador para detectar la sentencia defectuosa, ests incurriendo en costes de fallos. Cualquier cosa hecha como una parte normal de la reparacin de un defecto se contabiliza como coste de fallos. Esto incluye el volver a disear, a compilar y a probar.
Los costes de valoracin incluyen todo el trabajo de valoracin del producto para ver si tiene defectos, excluyendo el tiempo dedicado a la correccin de defectos. Incluye la revisin de cdigo, el tiempo de compilacin y las pruebas para un programa libre de errores. As, los costes de
265
valoracin no incluyen los costes de reparacin. El coste de valoracin es la tasa pagada para asegurar que el programa est libre de defectos.
Los costes de prevencin son los costes incurridos cuando modificas el proceso para evitar introducir defectos. Incluye, por ejemplo, los anlisis hechos para comprender los defectos. Tambin incluye el trabajo realizado para mejorar los procesos de especificacin de requisitos, diseo e implementacin. El tiempo gastado en el rediseo y pruebas de un nuevo proceso, es tambin un coste de prevencin.
Otra actividad importante para la prevencin de defectos es la construccin de prototipos para probar el diseo o las ideas de implementacin. Cuando ests utilizando una funcin de librera desconocida puedes estar tentado a tan solo usarla. Sabes, sin embargo, que esto conduce a errores de diseo y defectos en el programa. El coste de escribir pequeos prototipos del programa para comprobar cmo trabaja dicha funcin es un coste de prevencin.
19.5
La valoracin CDC es la suma de todo el tiempo de revisin como un porcentaje del tiempo total de desarrollo. Los fallos CDC es la suma de todo el tiempo de compilacin y pruebas como un porcentaje del tiempo total de desarrollo.
Por ejemplo, supongamos que tienes los datos del proceso que se muestran en la Tabla 19.1 Resumen del Plan del Proyecto. Podras calcular la valoracin CDC de la siguiente forma:
266
9/12/96 1 5
Ada
Resumen MinutodLOC LOClHora DefectodKLOC Rendimiento VIF Tamao Programa (LOC): Total Nuevo & Cambiado Tamao Mximo Tamao Mnimo Tiempo por Fase (min.) Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Postmotten Total Tiempo Mximo Tiempo Mnimo Defectos introducidos Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total Defectos eliminados Planificacin Diseo Codificacin Revisin del cdigo Compilacin Pruebas Total
Real
4,60 13,04 52,6 100,0% 133 57
Hasta la Fecha
5,35 11,21 06,7 45,5
04 ,4
392
Plan
1 7
Real
29 16 1 21
1 5
Hasta la Fecha
20 30 19 1 29 5
10
4 1 30 269 340
197
262
Plan
1
4
Actual
Def./Hora
1,29 1,54
23
100,o
5
Plan
34
Actual
ef./Hora
2 2
1
1 5 1 3
6
34
Tiempo total real de desarrollo = 262 minutos. Tiempo real de revisin del cdigo = 29 minutos. Valoracin CDC = 100*29/262 = 11.07%. Los costes de los fallos se obtendran as: Tiempo real de compilacin = 5 minutos. Tiempo real de pruebas = 10 minutos. Fallos CDC = 100*(5+10)/262= 100*15/262 = 5,73%.
267
19.6
268
Tabla 19.2 Instrucciones del resumen del plan del proyecto del PSP.
Propsito Cabecera Esta tabla trata los datos estimados y reales de los proyectos, de una forma cmoda y fcilmente recuperable.
Introduce los siguientes datos: Tu nombre y fecha de hoy. Nombre y nmero de programa. Nombre del profesor. El lenguaje que utilizars para escribir el programa.
Minutos/LOC
Antes de iniciar el desarrollo: Escribe los Minutos/LOC planificados para este proyecto. Utiliza la velocidad Hasta la Fecha de un programa reciente del Cuaderno de Registro de Trabajos o del Resumen del Plan del Proyecto. Despus del desarrollo: Divide el tiempo total de desarrollo por el tamao real del programa para obtener los Minutos/LOC reales y los MinutoslLOC Hasta la Fecha. Por ejemplo, si el proyecto se hizo en 196 minutos e hiciste 29 LOC, los MinutoslLOC seran 196/29 = 6,76.
LOCiHora
Antes de iniciar el desarrollo: Calcula las LOC por hora planificadas para este programa dividiendo 60 por los Minutos/LOC de la casilla de Plan. Despus del desarrollo: Para LOC/Hora Real y Hasta la Fecha divide 60 por los Minutos/LOC Reales y Hasta la Fecha. Para los 6,76 Minutos/LOC Reales, tenemos 60/6,76 = 8,88 LOC/Hora Reales. Antes de desarrollar: Encuentra los defectos/KLOC Hasta la Fecha del programa ms reciente. Utiliza dicho valor como los Defectos/KLOC planificados. Despus del desarrollo: Calcula los valores de defectos/KLOC reales y Hasta la Fecha para este programa. Para el valor real, multiplica el total de defectos reales por 1O00 y divdelo por las LOC Total Nuevas & Cambiadas Reales. Para el valor Hasta la Fecha haz unos clculos similares. Con 17 defectos Hasta la fecha y 153 LOC Total Nuevas & Cambiadas, los Defectos/KLOC Hasta la Fecha = 1000'17/153= 111,11.
Defectos/KLOC
Rendimiento
Calcula el rendimiento planificado, real y Hasta la Fecha. Rendimiento = 1 OO*(nmerode defectos eliminados antes de la compilacin)/(nmerode defectos introducidos antes de la compilacin), as, con 5 defectos introducidos y 4 localizados, el rendimiento = 100*4/5 = 80,0%.
Calcula el valor de V/Fplanificado, real y Hasta la Fecha. Para el valor real, por ejemplo, toma la relacin del tiempo de revisin de cdigo real y divdelo por la suma de los tiempos reales de compilacin y pruebas. Para un tiempo de revisin de 29 minutos, uno de compilacin de 5 minutos y uno de pruebas de 10 minutos, V/F = 29/(5 + 10) = 1,93.
( Contina)
V/F
269
Tabla 19.2 Instrucciones del resumen del plan del proyecto del PSP. (Continuacin)
Tamao Programa Antes de iniciar el desarrollo: WC) Escribe bajo la columna plan, el valor estimado de LOC Total Nuevas & Cambiadas, Mximo y Mnimo. Despus del desarrollo: Cuenta y anota las LOC Nuevas & Cambiadas Reales. * Para la columna Hasta la Fecha, aade LOC Reales Nuevas & Cambiadas a las LOC Hasta la Fecha Nuevas & Cambiadas de programas anteriores. Tiempo por Fase Plan
Para el tiempo total de desarrollo, multiplica el valor de las LOC Total Nuevas & Cambiadas por Minutos/LOC. Para el tiempo Mximo, multiplica el tamao Mximo por los MinutoslLOC. Para el tiempo Mnimo, multiplica el tamao Mnimo por los Minutos/LOC. Del Resumen del Plan del Proyecto de un programa reciente, busca los valores de YoHasta la Fecha para cada fase. Utilizando el % Hasta la Fecha de programas anteriores calcula el tiempo planificado para cada fase. Una vez acabado el trabajo, anota el tiempo real en minutos que has gastado en cada fase del desarrollo. Obtn estos datos del Cuaderno de Registro de Tiempos. Para cada fase, anota la suma del tiempo real y el tiempo Hasta la Fecha de los programas ms recientes. Fecha y lo divides por el total del tiempo Hasta la Fecha.
~
Actual
Hasta la Fecha
Y Hasta la Fecha Para cada fase, anota 1O0 multiplicado por el tiempo Hasta la !
Defectos introducidos Plan
Antes del desarrollo, estima el nmero total de defectos a introducir en el programa. El valor es: defectos/KLOC planificados multiplicado por las LOC Total Nuevas & Cambiadas planificadas para este programa y divido por 1000. Por ejemplo, con un valor de defectos/KLOC planificado de 7 5 9 y un valor de LOC Nuevas & Cambiadas planificadas de 75, el total de Defectos Planificados = 75,9*75/1O00 = 5,69, redondeo a 6. Antes de desarrollar, estima los defectos introducidos por fase utilizando el total de defectos estimados y el % Hasta la Fecha de defectos introducidos de programas anteriores. Despus del desarrollo, localiza y anota el nmero real de defectos introducidos en cada fase. Para cada fase, anota la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes. para esa fase y divdelos por el total de defectos Hasta la Fecha.
Yo Hasta la Fecha ara cada fase, multiplica por 1O0 los defectos Hasta la Fecha
Defectos/hora Calcula los defectos introducidos por hora para la fase de diseo y codificacin. Para la fase de diseo, por ejemplo, se multiplica 60 por los defectos de diseo Hasta la Fecha y se divide por el tiempo de diseo Hasta la Fecha = 60*5/195=1,54 defectos/hora.
270
Tabla 19.2 Instrucciones del resumen del plan del proyecto del PSP. (Continuacin)
Defectos
eliminados Plan
Real Hasta la Fecha En la fila de total, anota el total de defectos estimados. Utiliza los valores de % Hasta la Fecha de los programas mas recientes, calcula los defectos eliminados planificados para cada fase. Despus del desarrollo, localiza y anota el nmero real de defectos eliminados en cada fase. Para cada fase, anota la suma de los defectos reales y los defectos Hasta la Fecha de los programas ms recientes.
% Hasta la Fecha Para cada fase, multiplica por 1O0 los defectos Hasta la Fecha para esa fase y divdelos por el total de defectos Hasta la Fecha.
~~
Defectos/hora
Calcula los defectos eliminados por hora para la revisin de cdigo, compilacin y pruebas. Para las pruebas, por ejemplo, multiplica 60 por los defectos de las pruebas Hasta la Fecha y divdelo por el tiempo de pruebas Hasta la Fecha = 60*6/279 = 1,29 defectodhora.
Relacin ValoraciniFallo
tena ms defectos en cada subsiguiente fase del proceso. Tambin tena ms defectos en el producto entregado al cliente. Para mostrar el impacto de una pronta eliminacin de defectos en el tiempo de desarrollo, la Figura 19.5 muestra las horas de pruebas frente a los valores de V/E Aqu, los dos componentes con valores bajos de V E tuvieron 140 y 245 horas de pruebas, mientras que los otros tuvieron de 10 a 40 horas de pruebas. La Figura 19.6 muestra las horas de pruebas por KLOC. En un proceso de baja calidad, las pruebas consumen de 80 a 100 horas por KLOC; con un proceso de alta calidad, las pruebas suponen sobre unas 20 horas. Esta diferencia de 60 a 80 horas de pruebas por KLOC
271
50
3 .5
2 5
45 40 3530-
z &
8
25 20 15
t; 2
10 5 O O
1
H
I
OS
1,s
30
a
u
$
I
2520 -
8 a 8
15
10 -
01 O
5t
0s
Calidad del proceso ( V E )
1,5
puede ser muy significativa cuando trabajes con productos de 100.000 LOC o ms. El coste aadido de un PSP de poca calidad estara entre 6.000 a 8.000 horas adicionales de pruebas, o de 3 a 4 aos de tiempo de programador derrochados. En productos de varios millones de LOC, que pronto sern comunes, esto podra ser la diferencia entre un producto entregado a tiempo y el fracaso total.
272
90 80 -
:o o r=
*
70 60 -
50 -
40-
v)
30 2010
O
=p
I I I
Defectos compilacin
50
I I
tiempo a la siguiente revisin de cdigo. Puedes aumentar el valor de V/F simplemente dedicando ms tiempo a la revisin de cdigo. Si no encuentras defectos, no mejorar la calidad del programa. Es importante para la productividad utilizar el tiempo de revisin para encontrar defectos. Mientras que tu rendimiento no est en un rango del 80 al 100%,contina aumentando el valor de V/F. No debes hacer esto, solamente dedicando ms tiempo. Revisa los datos de los defectos de tus programas ms recientes e idea formas de encontrar todos los defectos que con ms fre-
273
1O 0
90 80
f
O
50
40
;
10 O
OS
1.5
cuencia pasas por alto. Si no ests seguro de cmo hacerlo, relee el Captulo 14. Despus de determinar cmo encontrar los defectos que pasas por alto con ms frecuencia, introduce los pasos apropiados en las lista de comprobacin para la revisin del cdigo. Por ltimo, sigue estos pasos cuando hagas la revisin de cdigo. Si haces todo esto, dedicars ms tiempo a la revisin, encontrars ms defectos y aumentar el valor de V/F. Posiblemente reduzcas el nmero de defectos que encuentres en la compilacin y en las pruebas. Esto ahorrar mucho tiempo de pruebas, reducir costes de fallos y realizar productos de alta calidad.
19.7
274
50 60 70 80
lnterfaz Comprobacin
Datos
Funcin
5r. Z
Nmero
Tipo
Introducido
Eliminado
r
Fecha
Nmero
T
Tipo
n
Introducido
m
Eliminado
1-
1 1 2
Fecha Nmero TiDo
pazzizq
r n
Eliminado
Tiempo de correccin
Defecto corregido
Descripcin: olvidar en el bucle while un desidual Introducido TiemDo de correccin Defecto corregido
n7
Descripcin: no poner: Fecha Nmero
201
ICRI
1-1
m
Defecto corregido
Tipo
Introducido
Eliminado
Descripcin : Fecha
nnnnnnn
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Tiempo de correccin
Descripcin: Fecha
nnnnnnn
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
Descripcin: Fecha
nnnnnnn
Nmero Tipo Introducido Eliminado Tiempo de correccin Defecto corregido
U
Fecha
I
Nmero
I
Tipo
~
Tiempo de correccin Defecto corregido
nnnnnnn
Descripcin:
275
tate los pasos. Por otra parte, si piensas que estas pruebas son an importantes, combina varias de ellas para poder hacerlas ms rpidamente. Con cada programa, contina controlando los datos de defectos y restituye cualquier paso de la revisin que podra haber detectado defectos pasados por alto posteriormente. Cuando los pasos no son efectivos, no dudes en eliminarlos.
19.8
El siguiente ejemplo utiliza los datos del Resumen del Plan del Proyecto de la Tabla 19.1 y del Cuaderno de Registro de Defectos de la Tabla 19.3. Primero, calcula los valores de R , C , P , R,, C, y P,de la siguiente manera: Para calcular R , calcula primero R, a partir del Cuaderno de Registro de Defectos, como la suma de los tiempos de correccin para los defectos eliminados en la revisin de cdigo: R , = 2 + 8 + 1 = 11.
A continuacin, calcula R, como R - R, = 29 - 11 = 18.
Puesto que no se encontraron defectos durante la compilacin, todo el tiempo de compilacin es tiempo de valoracin. As, c,= 5 y c,= o. Puesto que no se encontraron defectos durante las pruebas, todo el tiempo de pruebas es tiempo de valoracin. As, P, = 10 y P, = O.
276
Ahora, con estos valores, calculamos los costes de valoracin y fallos de la siguiente forma:
Fallos CDC
= 100*(RF+ C,+ P,) / (tiempo total de desarrollo) = 100*(11 + O +O) / 262 = 100*11/262 = 4,20%
Estos valores son algo diferentes a los calculados anteriormente. Se obtiene un valor significativamente ms alto de V/F de 3,O en vez de 1,93. Puesto que los valores de V/F y CDC son ms precisos y bastante sensibles a los tiempos de reparacin de defectos, no deberas utilizar este mtodo a menos que ests midiendo los tiempos de correccin con un cronmetro. Tambin tendrs como objetivo un valor mayor de V/F ya que ahora un valor de V/F de 2,O probablemente presentar muchos defectos en las pruebas.
RESUMEN
El coste de calidad (CDC) mide la calidad de un proceso software en trminos de 3 componentes: costes de valoracin, de fallos y de prevencin. El PSP utiliza clculos simplificados del CDC. El coste de valoracin se calcula dividiendo el tiempo de revisin de cdigo por el tiempo total de desarrollo y multiplicando por 100. Este clculo ignora los tiempos de correccin durante la revisin de cdigo. El coste de los fallos se calcula dividiendo la suma de los tiempos de compilacin y pruebas por el tiempo total de desarrollo y multiplicando por 100. Este clculo ignora los tiempos de compilacin y pruebas libre de defectos. La relacin Valoraciflallos (VE) mide la calidad del proceso. Se calcula dividiendo el valor CDC de la valoracin por el valor del CDC de fallos. La relacin V/F indica la cantidad relativa dedicada a encontrar y corregir defectos antes de la primera compilacin. El valor de V/F tambin indica la probabilidad de encontrar defectos del programa en las pruebas. Valores de V/F menores de 1 generalmente indican que se encontrarn muchos defectos en las pruebas, mientras que valores superiores a 2 indican que se encontrarn pocos defectos en las pruebas. Cuando se encuentran pocos defectos en las pruebas, esto indica generalmente que el programa tiene pocos defectos residuales. Aunque los clculos simplificados de CDC son ahora adecuados, puedes querer utilizar clculos ms precisos de CDC cuando trabajes en grandes proyectos.
277
EJERCICIO 19
Como ejercicio, calcula el valor de VA? para todos los programas que has escrito en este curso. Determina el nmero de defectos/KLOC en las pruebas para dichos programas y muestra el valor de V/F frente a los defectos/KLOC en las pruebas, en un grfico similar al mostrado en la Figura 19.1 Entrega copias del Cuaderno de Registro de Tiempos y del Resumen Semanal de Actividades que no hayas entregado previamente. Tambin, entrega acabado el Resumen del Plan de Proyecto del PSP, el Cuaderno de Registro de Defectos y la Lista de Comprobacin para la Revisin de Cdigo para cada programa. Incluye los valores Planificados, Reales y Hasta la Fecha de los tiempos de desarrollo, de los defectos introducidos, de los defectos eliminados, del rendimiento y de la relacin VE.
CAPITULO 20
El trabajo de calidad es importante para tus jefes, clientes y para ti mismo. Este captulo discute por qu deberas establecer la calidad como tu mxima prioridad personal.
20.1
LA IMPORTANCIA DE LA CALIDAD
Como ingeniero de software, la calidad de los programas que produzcas tendr una importancia crtica para tus jefes y clientes. El software se utiliza en muchas aplicaciones y los defectos del software pueden causar perjuicios econmicos e incluso algn dao fsico. Cuando los programas que escribes son utilizados para trabajos financieros o procesamiento de textos, sus defectos pueden ser molestos y costosos, pero no es probable que nadie sea asesinado o quede mutilado. Cuando tu software forme parte de un sistema de vuelo de aviones, de conduccin de coches, de gestin del trafico areo, de funcionamiento de una fbrica o control de plantas nucleares, tus defectos no podran detectarse y posiblemente tendran consecuencias peligrosas. Ha habido personas que han muerto por defectos del software [Leveson]. Aunque no ha habido muchas fatalidades hasta ahora, sin du-
280
da los nmeros crecern algo. Esto es porque, a pesar de todos los problemas, el software no se desgasta o deteriora. Es idealmente adecuado para aplicaciones crticas que implican seguridad. Por ejemplo, cuando las actuales plantas generadoras de energa nuclear fueron construidas, los instrumentos de control eran electromecnicos. Era la tecnologa ms fiable conocida hasta ese momento. Pasados los aos, sin embargo, esos primeros instrumentos se han deteriorado gradualmente y han sido reemplazados. Hoy, los sistemas de control ms fiables estn informatizados. Mientras la primera generacin de controladores nucleares era sencilla y utilizaba relativamente poco software, los sistemas de control ms sofisticados del futuro implicarn cantidades crecientes de cdigo. Esto significa que la calidad del software ser cada vez ms importante para aquellos que construyan y gestionen plantas generadoras de energa nuclear. Ser tambin importante para cualquiera que viva cerca. La misma tendencia es aplicable a cada campo. Los sistemas de control informatizados son tan verstiles, econmicos y fiables que los veremos en casi todos los aspectos de nuestras vidas. Es importante que todos los ingenieros de software reconozcan que su trabajo podra tener serios impactos sobre la salud, seguridad y el bienestar de muchas personas.
20.2
281
pre prctico. Por lo tanto, para tener sistemas verdaderamente seguros debemos esforzarnos en tener un software libre de defectos. El diseo de grandes sistemas multiusuario en tiempo real puede ser enormemente complejo. A estas complejas cuestiones de diseo se les presta una gran atencin. Aunque las cuestiones difciles de diseo son normalmente estudiadas, revisadas y probadas con gran cuidado, a los problemas de diseo sencillos se les presta menos atencin. Como resultado tenemos que, la causa ms comn de los problemas con grandes sistemas software, son simples descuidos y tonteras. Aunque muchos de estos errores tontos se detectarn en la integracin y pruebas del sistema, algunos seguirn ocultos en el proceso de pruebas y cuando el usuario final utilice el sistema.
El problema es que los ingenieros del software, a menudo, confunden sencillez con facilidad. Consideran que sus constantes errores sencillos sern fciles de localizar. Se sorprenden, al enterarse, de que dichos errores triviales como: la omisin de un signo de puntuacin, la denominacin errnea de un parmetro, establecer una condicin incorrecta o la terminacin errnea de un bucle, podran pasar las pruebas sin ser detectados y causar serios problemas cuando el usuario utilizase la aplicacin. Estos son los tipos de cosas que causan casi todos los problemas, y a las que los suministradores de software dedican millones de dlares a localizar y corregir.
La calidad de los grandes programas depende de la calidad de los pequeos programas que lo forman. As, para producir grandes programas de alta calidad, cada ingeniero del software que desarrolla uno o ms de estos mdulos, debe hacer su trabajo con gran calidad. Esto significa que todos estos ingenieros deben estar personalmente comprometidos con la calidad. Cuando estn comprometidos, controlarn y gestionarn sus defectos con un cuidado tal, que los pocos defectos que tengan sus aplicaciones se encontrarn posteriormente en la integracin, en las pruebas del sistema o por los clientes. Cuando los ingenieros estn personalmente comprometidos con la calidad, estn orgullos de sus logros. Saben cunto cdigo han producido y cuntos defectos han encontrado otros en sus productos. Algunos ingenieros me comentan, cunto tiempo haca que alguien no haba encontrado un defecto en los programas que ellos haban hecho. Cuando los ingenieros del software no estn personalmente comprometidos con la calidad, no le dan importancia a esto. Ellos me dirn que en las pruebas encontrarn muchos de los defectos y que el resto que queda, se encontrarn y corregirn fcilmente. No es sorprendente que, cuando los ingenieros piensan de esta forma es poco probable que hagan productos de calidad.
282
20.3
283
guiente paso ser descender. La prdida de estatus puede dar lugar a una crisis. Algunas personas quedan sumidas en la tristeza cuando pierden por primera vez un puesto de trabajo importante. Es fcil confundir la importancia de un puesto de trabajo con la importancia personal. He conocido a directores que quedaron chafados por una degradacin. Se haban construido una imagen de s mismos como personas importantes. Mientras tenan un gran puesto de trabajo, todo el mundo les trataba como personas importantes. En el momento que perdieron el trabajo, sin embargo, eran como cualquier otra persona. Nadie se preocupaba de lo que decan y si dejaron de tener un tratamiento especial. Haban perdido su lujoso despacho y no tenan secretaria. Esto puede suponer un fuerte shock que lleva a algunas personas a tener una crisis nerviosa, ataques al corazn o crisis familiares. Su recompensa era el estatus y se perdi.
20.5
284
los. Cuando encuentres estos estndares, elvalos y esfurzate otra vez. Desafate a ti mismo a hacer un trabajo superior y te sorprenders de lo que puedes lograr.
REFERENCIA
[Leveson] Leveson, Nancy G. Safeware, System Safety and Computers. Reading, MA: Addison-Wesley, 1995.
A
abstraccin 237, 238 definicin 237 Ackerman, Frank A. 180, 181 actividad 20, 26 clasificacin 74 actividades discrecionales 80 actividades exigidas 80 anotacin de los datos actuales 212, 213, 214 anotaciones reales, en el Cuaderno de Trabajos tarea 49, 53 tiempo 49, 53 unidades 49, 53,70 Ashton Tate 3 asignacin de defectos 146
B
Brooks, Frederick P. 104, 1 12 Brown, Rita Mae 230,232 bugs 144
C
C (completado) 20 en el Cuaderno de Registro de Tiempos 25 C++ Codificacin Estndar 198 C++ Lista de Comprobacin para la Revisin de Cdigo 185
calidad 94, 250 compromiso personal con 163,279 definicin 141 hacer un compromiso con 282 importancia de 4,279 necesidad del trabajo de calidad 217 proceso 261 producto 247 riesgo asociado a la poca calidad 280 vase tambin coste de la calidad Carnegie Mellon University 2 CDC, vase coste de la calidad Chillarege, Ram 146, 161 Codificacin, 129 codificacin, estndares de 196 C++ 198 cdigo revisin de 166, 175, 229 Ada lista de comprobacin 186 antes de la compilacin 170, 171, 172 C++ lista de comprobacin 185 ejemplo de lista de comprobacin 184 guin 171, 189 lista de comprobacin 183 lista de comprobacin personal 193 objetivos 170 por qu la eficiencia 167 utilizacin de las listas de comprobacin para la revisin de cdigo 187 columnas, en el Resumen Semanal de Actividades 39 comentarios 20, 26 compilacin 128, 129 defectos, datos 172 tiempo 230,23 1
286
NDICE ANALTICO
versus defectos post-compilacin 272 versus defectos post-PSP 172 versus defectos postdesarrollo 173 versus defectos prueba de unidad 172 y pruebas, defectos 251,252 compilacin, revisin antes de la 170 compiladores 164 objeto 164 completadas, tareas 24,26 comprobacin de defectos 146 compromiso 87 como contrato 87 definicin 87 ejemplo 90 ejemplo en la industria 91 la gestin de compromisos no conseguidos 92 lista 95 personal 87 responsable 89,90 semanal, ejemplo 90 vase turnbin la gestin de los compromisos verdadero 8 compromisos no conseguidos, gestin 92 confianza 94 construccin, paquetes defectos de 146 contabilizacin de defectos 153 coste de la calidad (CDC) 264 clculo 265 clculo verdadero (CDC) 275 definicin 265 coste de los fallos 264 costes de encontrar y corregir los defectos 167, 168 criterios de entrada, en el Guin del Proceso del PSP 128 criterios de salida, en el Guin del Proceso del PSP 128 Cuaderno de Ingeniera 9, 11, 12 contenidos 15 Cuaderno de Registro 148, 154 cabecera 150 completado 148 de Tiempos 24 defecto corregido 150 descripcin 150 ejemplo 15 1, 195,274 eliminar1 50 formulario 149 instrucciones 150 introducido 150 nmero 150 propsito 150
tiempo de correccin 150 tipo 150 utilizacin 154 diseo 12 ejemplo 14 eliminacin ahorro 221 economa 2 17 eficacia 219 estrategia 263 paradoja 262 problema 2 18, 250 rendimiento 250 tasas, mejora 229 tiempo 2 19 tipo estndar 146 usos de 12 Cuaderno de Trabajos 47, 159 cabecera 53 con datos de tamao 68 ejemplo 5 1 formulario 50 instrucciones 53, 70 medidas de tamao 65 proceso 53 propsito 53 sugerencias 49 Curtis, Bill236, 246
D
defecto encontrado, en el Cuaderno de Registro de Defectos 150 defecto datos 147 anlisis 191 clasificacin 192 ejemplo 206 utilizacin 203 definicin 143 densidad, definicin 204 estimacin 205 introduccin tasas, reduccin 220,230 y eliminacin, ejemplo 222 y eliminacin, experiencia 21 9 tasas 204,205,221 tiempos de correccin 169 defectos 4, 141, 247 compilacin 172 versus postdesarrollo 173 versus defectos post-PSP 173 versus defectos prueba 172,25 1,252.27 1 contabilizacin 153
287
coste de encontrar y corregir 167, 168 datos 172 de datos 146 de documentacin 146 de entorno 146 de funcin 146 diseo, 233 documentacin 146 eliminados, plan, en el Resumen del Plan del Proyecto 2 I 1 entender 147 entorno 146 estimacin 201, 204 formas de encontrar y corregir 164 localizacin 163 localizacin con revisiones 169, 170 funcin 146 importancia de 142 interfaz 146 introducidos, plan, en el Resumen del Plan del Proyecto 2 1 1 gestin 221 pasos para encontrar 163 por hora, clculo 223, 228 por que hay que encontrar pronto 167 prueba 234 sistema 146 tiempo para encontrar 178 versus bugs 144 y calidad 142 DefectodKLOC 201, 204 definicin 204 densidad 204 en el Resumen del Plan del Proyecto 2 1 0 seguimiento 205 versus aos de experiencia 202,203 definiciones abstraccin 236 calidad 141 codificacin estndar 196 coste de la calidad (CDC) 264 coste de los fallos 265 coste de prevencin 265 coste de valoracin 264 defectos 143 densidad de defecto 204 estndar 196 lista de comprobacin 183 proceso 46, 126 producto 46, 126 proyecto 46, 126 relacin valoracin/fallos (V/F) 267 rendimiento 2 19, 25 1 rendimiento del proceso 225 tarea 46, 126 trabajo 47, 126
descripcin en el Cuaderno de Registro de Defectos 150 en el Cuaderno de Trabajos 53 diagrama lgico 241 Digital Equipment Corporation 169 disciplina, definicin 3 diseo 128 defectos 233 causas 237 identificacin 235 impacto de 238 naturaleza de 233 vase tambin defectos definicin 235 proceso 236 representacin 239 representacin grfica 240 representaciones en seudocdigo 242 diseo en seudocdigo ejemplo 242 representacin 242
E
eliminacin, en el Cuaderno de Registro de Defectos 150 Embry-Riddle, Universidad Aeronutica (UAER) 108 errores, definicin 143 estimacin del tamao del programa 62 estimado, tiempo en el Cuaderno de Trabajos 47,53,70 exactitud de las estimaciones 10. 122
F
FAA (Federal Aviation Administration) 2 Fagan, Michael 176, 180 formularios, por qu utilizarlos 18 Fuerzas areas de los EE.UU. 183
G
Gantt, Diagrama 100, 101 ejemplo 102, 106 registro del estado en 107 registro del progreso en 106 gestionar compromisos 87 cmo 95 consecuencias de no 94 importancia de 93 vase tambin compromiso Gilb, Tom 176, 180 Gries, David 244, 246
288
NDlCE ANALTiCO
Hasta la Fecha % Hasta la Fecha vase tambin Resumen del Plan del Proyecto, % Hasta la Fecha ejemplo del clculo 135, 136 en planificacin de defectos 157 ejemplo del clculo 135, 136 mx, en el Cuaderno de Trabajos 47,48,49,
Lista de Comprobacin para la Revisin de Cdigo en Ada 185, 193 LOC nuevas y cambiadas 1 1 6 LOC/Hora, en el Resumen del Plan del Proyecto 116
M
Marina de los Estados Unidos 4 medida definicin 5 proceso de 26 1 mejora 4,s vase tambin mejora del proceso mtodos formales 244 Microsoft NT 219 minutos/LOC 63 en el Resumen del Plan del Proyecto 1 1 6 Motorola 2 1 8
53
mn, en el Cuaderno de Trabajos 47,48,49, 53 tiempo, en el Cuaderno de Trabajos 47,48,
49,53
tiempo, en el Resumen Semanal de Actividades 40 unidades, en el Cuaderno de Trabajos 47,
48,49,53
vase tambin Resumen del Plan del Proyecto, Hasta la Fecha velocidad, en el Cuaderno de Trabajos 47,
N
NASA (National Aeronautics and Space Administration) 184 necesidad del trabajo de calidad 217 nmero de semanas, en el Resumen Semanal de Actividades 40 nmero, en el Cuaderno de Registro de Defectos 150
1
IBM (International Business Machines Corporation) 43,146,238 defectos informados por el cliente 165 importancia de la calidad 4,279 inspecciones 174,176 interfaz, defectos 146 interrupciones, en el Cuaderno de Registro de Tiempos 19,20 gestin 22 tiempo 26 introducido, en el Cuaderno de Registro de Defectos 150
O
ONeill, Don 178,180 objetivos, personales 282
P
Pareto, distribucin 194 planes definicin 47 exactitud 10 planificacin 127, 128 beneficio 1 0 habilidad 10 vase tambin planificacin del perodo, planificacin del producto planificacin del perodo 29 importancia de 3 1 relacin con la planificacin del producto 30 por qu ayuda la lista de comprobacin 183 por qu contabilizar defectos 153, 154 por qu encontrar pronto los defectos 167 postmortem 128,129
L
las recompensas del logro, 283 Leveson, Nancy G. 2, 8,279,284 lneas de cdigo (LOC) 60,62 contabilizacin 60 lista de comprobacin 183 definicin 183 mejora 194 personal 188, 196 por qu ayudan 183 vase tambin Lista de Comprobacin para la Revisin de Cdigo
289
prevencin, costes de 265 priorizar el tiempo 79 vase tambin tiempo Proceso Software Personal (PSP) 2, 3,7, 126, 146, 155, 163,218,222,240,248,257 flujo de 127 rendimiento 263 proceso calidad 26 1 definicin 46, 126 en el Cuaderno de Trabajos 53 Guin 127, 156, 175, 190, 208 criterios de entrada 128 propsito 128 medida 261 pasos para la mejora 5 por qu utilizarlo 125 rendimiento 225 productividad 59 producto calidad 247 definicin 46 planes contenidos 45 definicin 45 por qu son tiles 44 planificacin 29,43, 113 importancia de 3 1 necesidad 43 proceso 57 relacin entre planificacin del periodo 30 tamao 57 utilizacin de tiempos y medias 54 programa funciones 64 tamao 59, 1 17 ejemplo de estimacin 666, 118 , estimacin 62 formulario de estimacin 65 medicin 58 programaciones 99 hacer 101 gestin 99 necesidad 99 pasos para hacer 1O 1, 103 sugerencias de seguimiento 106, 108 prototipado 258 proyecto definicin 46 planes, definicin 1 13 planes, necesidad para 113 Resumen del Plan 114, 115, 130, 157, 174, 176,209,224,266 cabecera 121, 131
defectos eliminados 21 1 defectoshora, clculo 223 defectos introducidos 21 1 defectos/KLOC 210 ejemplo 116, 132, 133, 134, 160, 179, 207, 212 en negrita 133 formulario 114,130 Hasta la Fecha 131 clculo, ejemplo 135, 136 instrucciones 121, 131, 158, 177, 210, 226, 268 LOC/Hora 121, 131 clculo 116 minutosLOC 121, 131 clculo 1 16 propsito 121, 131 rendimiento, clculo 225, 228,229 seccin resumen 116 sombreado 130 tamao programa (LOC) 121, 13 1 tiempo en fase 120, 121, 131 seguimiento 105 seguimiento de problemas 106, 108 prueba 128,129 defectos 234 categoras 234 datos 172 introducida por fases 234 vase tambin defectos, prueba versus VF 270,27 1 horas versus VF 272,273 tiempo 230 pruebas 248 filtro de 249 sistemas complejos 249 PSP, vase Proceso Software Personal puntos de control 99, 104 ejemplos 104 noadecuados 104 sugerencias 104 y fases 129
R
Ragland, Bryce 178, 180 recogida de datos de tiempo, por actividad 74 recompensas del logro 283 registro de tiempo 11 ideas para 25 Relacin Valoracin/Fallos 267 clculo 267, 268 definicin 267 utilizacin 271,272,273
290
NDICE ANALTICO
rendimiento 219, 250,263 beneficios del 100%de rendimiento 256 clculo 225, 25 1, 268 ejemplo 253 estimacin del rendimiento definitivo 254 experiencia 257 frmula 25 1 mejora 254,255 personal 263 valores 253 representacin grfica del diseo 240, 241 respeto 94 reutilizar 117 revisiones en parejas 174 Russell, Glen W. 178, 180
T
tamao 59 estimacin, para programas grandes 64 mximo 53 medicin 58 medidas en el Cuaderno de Trabajos 65 objetivos 62 precauciones sobre 58 otras medidas de tamao 62 vase tambin tamao del producto, tamao del programa tarea definicin 46 en el Resumen Semanal de Actividades 39 tareas, completadas 24,26 tasas de revisin, mejora 273 tiempo medio 38 vase tambin tiempo tiempo variable 79, 80 sugerencias para gestionar 84 tiempo Cuaderno de Registro 17, 20, 29, 8 1 C (completado) 24 cabecera 26 completar 20 con datos pequeos 67 ejemplo 23, 36,52 formulario 2 1 ideas 25 instrucciones 20,26 mantener en el Cuaderno de Ingeniera 25 U (unidades) 24 datos 11 distribucin 74 encontrar ms tiempo 77 estimacin 77 ejemplo 75 gestin 82 hacer 75 gestin 9 elementos de 73 objetivo 85 pasos en 11 regias bsicas para 77 ideas para registrar tu tiempo 25 mximo 37 media 35 mnimo 37,53 perodos 19 por fase, en Resumen del Plan del Proyecto 120, 121, 131 por qu controlar 17 priorizacin 79
S
seguimiento del tiempo 17 semanal ejemplo de compromisos 90 estimacin de la actividad 79 ejemplo 80 Resumen Actividades 29, 31,74 cabecera 39 ejemplo 34,76 formulario 32 instrucciones 39,40 propsito 39 utilizacin 38 resumen del tiempo 82 ejemplo 9 1,92 tiempo programado y estimado, ejemplo 83 totales, en el Resumen Semanal de Actividades 39 Shooman, M. L. 178, 181 smbolos de los diagramas 241 software cronmetro 22,276 estndar, definicin 196 fin, en el Cuaderno de Registro de Tiempos 26 ingeniera calidad, vase calidad hechos de la vida 95 medidas proceso 4 problemas que causa 11 trabajo 1 inicio, en el Cuaderno de Registro de Tiempos 26 proceso de desarrollo 125 sintaxis, defectos 145 sistema, defectos 146
291
registro 18 resumen 33 seguimiento 17 tiempos de correccin 8 1 tiempos incluida la ltima semana, en el Resumen Semanal de Actividades, 40 tiempos y medias del perodo 35 clculo 35 tipo 146 totales, en el Resumen Semanal de Actividades 39 trabajo definicin 46 nmero, en el Cuaderno de Trabajos 53
V
VE, vase Relacin ValoracidFallos valor ganado 108, 110 ejemplo 109, 111 estimacin 110 seguimiento 108 van Genuchten, Michael 178, 181
W
Weller, E. E 178, 181
U
U (unidades) 20, 26
Z
Zachary, G . Pascal219,232
MATERIAL DE APOYO
En la Introduccin al Proceso Software Personal, Watts S. Humphrey proporciona una serie de ejercicios para demostrar el proceso software personal y su utilizacin.
El material de apoyo de la pgina web est disponible para ayudar a los estudiantes y lectores a hacer sus ejercicios, los anlisis requeridos y los informes. El material contiene kits para hacer los ejercicios indicados en el texto, incluyendo copias de las tablas del libro, y hojas de clculo para hacer el anlisis de datos de los ejercicios. Los lectores encontrarn el material como un complemento prctico del libro. Puede obtenerse en la pgina web de la editorial, cuya direccin es:
( 1 ) http://www.librosite.net/humphrey
Ms informacin para obtener una informacin actualizada de este libro, sus apndices y de otros trabajos de inters para profesores de ingeniera del software y profesionales, se puede acceder a la ltima informacin sobre los libros de esta materia de la editorial en la siguiente direccin de Internet (www.pearsoneducacion.com).