PSP0

Las prácticas tradicionales de Desarrollo de Software y al decir tradicionales me refiero a las
costumbres que desde la Universidad/Escuela hemos aceptado como buenas, no nos permiten
establecer la cantidad de esfuerzo que nos lleva terminar completamente una aplicación y determinarlo
en fases tempranas se convierte en un proceso de “juicio de experto” en el cual el cobro y recursos a
usar se determinan a partir de la experiencia o de lo que de manera subjetiva se cree del proyecto a
empezar.
Inicialmente y como línea base para las futuras estimaciones y planes arrancamos con una versión del
PSP conocida como PSP0 (PSP “Cero”)

Estableciendo la línea base
PSP0 tiene como Objetivo:
• Inculcar prácticas disciplinadas, a través de seguir los diferentes scripts del proceso (los que
PSP tiene o los que se generen de manera personal)
• Enseñar el proceso de registro de datos, haciendo uso de la herramienta y de los diferentes
Formularios y estándares.
y se encarga de Medir
• Tiempo invertido en cada fase
• Defectos Inyectados y removidos en cada fase
La mejor forma de aprender es mediante la practica del proceso, por eso trabajaremos bajo un ejercicio
de ejemplo. (seguramente verán que no es un reto técnico muy complejo, pero nos servirá de base para
explicar el proceso)

Planteamiento del Problema
“Usando PSP0 desarrollar una aplicación que permita consultar, actualizar, agregar y
eliminar la información de los clientes almacenados en una base de datos.
Es un requerimiento del programa que la aplicación se realice siguiendo buenas prácticas
de diseño que permitan un fácil mantenimiento.”
Como ven es un requerimiento muy normal en nuestro trabajo, y nos permitirá atacarlo desde diferentes
puntos de vista en cada paso del proceso.

Iniciando…
Recordemos que PSP tiene por definición 3 Fases (Planeación, Desarrollo y PostMorten) y PSP0
expande la Fase de Desarrollo en Diseño Detallado, Codificación, Compilación y Pruebas teniendo
finalmente este gráfico resumen del proceso.

Para desarrollar la aplicación siguiendo el proceso haremos uso del Process Dashboard (Ver Instalación
y Uso básico) Iniciemos.

Creación proceso.
1. Iniciemos el Process Dashboard y seleccionando C > Jerarquía

2. Vamos al menú Editar > Agregar Plantilla > PSP0 e ingresemos el nombre MiApp.Clientes

3. Como observamos, Dashboard nos registra las diferentes fases del proyecto e inmediatamente
cambia su ventana principal
4. Ahora bien, la idea fundamental para dominar PSP es seguir el script y así lo haremos. Si damos
click en acceso a Script y seleccionamos PSP0 Process Script

5. El Script generar del Proceso es el siguiente

El Script es una guía que nos permite avanzar de manera ordenada y disciplinada en nuestro
trabajo, la práctica sugerida es la siguiente:

• Verifique que los criterios de entrada se cumplen. Desde este punto Dashboard nos
permite acceder directamente a Formulario de Project Plan Summary, Time Log, Defect
Log y al Standart de Tipos de Defectos

En esta herramienta podemos tener acceso a
Tiempo en Fase: nos permite ver el Tiempo planeado, actual y a la fecha por cada una
de las fases del Proceso
Defectos Inyectados: Visualización de la cantidad Defectos inyectados por cada una de
las fases
Defectos Removidos: Visualización de la cantidad de Defectos removidos por cada una
de las fases

El Time Log o Bitácora de Tiempos nos permite visualizar como se ha invertido el
tiempo en cada una de las fases

El Defect Log o Bitácora de Defectos nos permite observar los defectos registrados en
cada una de las fases

Es el primer y mas básico estandart de PSP, que nos permite categorizar los defectos y
con un tipo determinado (Debe personalizado según el desarrollador)
• También podemos ir directamente a los siguientes scripts del proceso, por ahora vamos
al script de Planning

Planeación.
El Script de planeación no está pidiendo: Definir claramente los requerimientos del programa y Estimar
los recursos.
1. Primero debemos iniciar el conteo del tiempo dando click en Play
esto generará que se empiece a contar el tiempo en la fase
de planeación (Nota: si se interrumpe el trabajo, solo bastaría dar click en Pause y Dashboard
dejará de contar el tiempo)
2. Producir los requerimientos para el programa. El Dashboard nos permite (al dar click en
requirements statements) registrar en un documento en el cual se tengan documentados los

requerimientos.
3. Debemos cambiar ????? por una ruta en el equipo donde se deseen almacenar los documentos

del proyecto, en esta ruta podemos almacenar todos los documentos que se generen en este
proyecto. Particularmente creé la siguiente C:\Proyectos\MiApp.Clientes\ y tengo el documento
DefiniciónRequerimientosMiAppClientes.rtf (El Documento se debe tener en la carpeta,
Dashboard no lo crea) Nota: PSP no define, ni exige ningún documento o metodología para la
recolecciones de requerimientos, esta tarea es libre para el Desarrollar usando las técnicas que
considere pertinentes.
4. El tiempo invertido desarrollando el documento se cuenta en la fase de planeación.
5. Posteriormente el Script nos pide
lo cual significa que
usando nuestro juicio (tal y como lo hacemos tradicionalmente) debemos estimar cuanto tiempo
en minutos creemos necesario para desarrollar la aplicación COMPLETAMENTE e ingresarlo
en el Plan Summary (Si damos click el nos envía el Plan Summary)
6. En PSP0 el único dato editable en el Plan Summary es el Tiempo Total planeado, tal y como lo
vemos por los ?????

7. Vamos a ingresar nuestra mejor estimación, en este caso pienso demorarme 300minutos
(Dasboard automáticamente convierte este valor en Horas:Minutos)
8. Si hemos seguido el script nos daremos cuenta que ya cumplimos la fase de Planeación pues
tenemos ya realizados lo pedido en Criterio de Salida
9. Para finaliza la fase solo es necesario marcar el Checkbox de la ventana principal
y Dashboard nos inicia automáticamente la fase siguiente

Desarrollo (Diseño, Codificación, Compilación y Pruebas)
La segunda fase del proceso (Desarrollo) contiene por si misma 4 pasos como lo muestra el script.

Estas diferentes etapas del Desarrollo pueden llevarse de la manera tradicional, pero realizando unas
pequeñas modificaciones a nuestras prácticas.
• El Diseño debe realizarse como una única unidad, es decir, Elaborar un diseño que represente la
totalidad de los requerimientos presentados.
• El Código igualmente se debe realizar completamente antes de probar. Es una de las
recomendaciones mas difíciles de aceptar para los desarrolladores, sin embargo, parte del hecho
de evitar el re trabajo y poder medir con exactitud los tiempos invertidos. Si escribimos un
bloque de líneas, las ejecutamos, las probamos, corregimos los errores encontrados y repetimos
esto varias veces no tenemos como determinar el Costo de corregir los Defectos y el tiempo que
se invierte en cada fase.
• Si el lenguaje o entorno de desarrollo usado hace innecesario o no usa compilación este fase
puede omitirse y “pasar” a la fase de pruebas
• En Pruebas el objetivo es verificar el funcionamiento del programa, corregir y registrar los
Defectos encontrados
• Cuando se pase de una fase a otra, ej. Diseño a Codificación. Si se hace necesario hacer
correcciones, cambios o mejoras esto es registrado como un Defecto
Diseño
El diseño es un componente fundamental para PSP, pues la oportunidad de pensar con cabeza fría la
forma de atacar los problemas presentados, proponer soluciones y pensar en la forma de
implementarlos.
Vamos a Diseñar.

1. iniciemos el conteo del tiempo
2. Mi proceso personal de Diseño, lo realizo mediante diagramas UML (no muy estrictos pero que
me permiten visualizar mas claramente el problema) mi diseño propuesto es el siguiente.

3. En esta fase no encontré defectos sobre los requerimientos levantados
4. Una decisión tomada en este punto del Diseño es usar ASP.NET MVC 5 con C# . Lo importante
de este numeral es hacer especial énfasis en que PSP no restringe lenguaje, paradigma o entorno
de desarrollo, simplemente propone algunos cambios “procedimentales” en la forma en que
realizamos el trabajo.
Continuando con el proceso, la fase a seguir sería Codificación.
Codificación
Esta fase tiene el objetivo de convertir el Diseño presentado en un lenguaje de programación, en este
caso vamos a suponer que la base de datos ya se encuentra desarrollada, pues las métricas para son
diferentes respecto a las usadas para escribir código en mi lenguaje C#.
De nuevo la idea es codificar de manera completa el diseño propuesto sin depuraciones ni pruebas
parciales. También podríamos considerar una estrategia de codificación modular, como lo vimos en las
publicaciones anteriores.
1. Se da inicio al desarrollo.
2. Transcurrido un buen periodo de tiempo de estar codificando encontré que algo faltaba en el
diseño. ¿Que debemos hacer? Rta: Registrar esto como un defecto.
3. Es importante aclarar que el tiempo del defecto debe empezarse a registrar desde el momento en
el cual se observa que algo debe ser cambiado.
4. Dashboard automáticamente registra este tiempo. En la ventana inicial damos click en el icono
de “Bug”

y obtenemos

5. Se debe seleccionar Tipo Del Defecto, Fecha, Fase Inyectada, Fase en la que se Eliminó y la
Descripción, veamos.
6. El Defecto encontrado es que en el diseño no especifiqué una clase Base (abstracta) para que de
ella se deriven las otras clases de Acceso a Datos. y se registró de la siguiente manera.

7. Este tiempo 8.7 Minutos incluyó: El Cambio del Diseño y la implementación del fragmento de
código. El resultado es este:

8. Una vez corregido y registrado el Defecto, continuo. (se encontraron mas defectos que para no
hacer esta publicación mas larga se omiten)
9. La Etapa de Codificación se encontrará terminada una vez el Código haya terminado de
generarse.
10.Una de las tantas ventajas del Dashboard es el indicador que muestra al lado del botón de Play

11.Al acercar el cursor a este indicador nos muestra el tiempo planeado para la fase, tiempo actual
y el porcentaje gastado.
12.una vez concluida la fase de Codificación el proceso se muestra como sigue: (Ventana PSP0
Project Plan Summary)

13.La columna Plan se encuentra vacía puesto que es PSP0 y no contamos con datos históricos
14.La columna Actual muestran el avance en Horas:Minutos
15.La columna To Date mostrará en los proyectos sitios los tiempos acumulados por fase
16.La columna To Date % en PSP0 muestra un porcentaje (siguiendo las practicas recomendadas)
que luego será cambiando por los tiempos reales.
17.Pasemos ahora a la fase siguiente

Compilación
Siguiendo el Script de Desarrollo continuaríamos con la fase de Compilación, sin embargo hay que
considerar si en verdad el lenguaje y el IDE necesitan de esta fase.
En este punto consideramos que C# en Visual Studio no requiere de una fase de compilación pues el
entorno Compila en “línea”.
Pruebas
Esta parte del proceso tiene como finalidad ejecutar el programa (Módulo) desarrollador y verificar el
funcionamiento correcto y en caso de presentarse Defectos, realizar los cambios pertinentes.
El objetivo final es entregar un programa completamente funcional.
Veamos mis resultados en esta fase.
1. Al ejecutar el programa se encontró un defecto. El cual registro de la siguiente manera:

2. Terminado de corregir este se encontró un defecto adicional.

3. Y un último

4. Al corregir estos inconvenientes la aplicación funciona correctamente en todas sus operaciones.

5. Con esto finalizamos la fase Desarrollo completamente y tenemos al momento lo siguiente:

6. El Programa se encuentra terminado y funcionando completamente así que cerramos la fase de
Desarrollo.
PostMorten
Esta es la tercera y ultima fase del Proceso PSP0, la cual es muy importante porque busca:

• Verificar los datos registrados, en cuanto a consistencia y si se encuentran completos y correctos
• Ingresar los datos que nos olvidamos de registrar en las diferentes fases.
Esto demora en PSP0 poco tiempo y nos sirve como revisión general de proceso realizado.
Revisemos el Script propuesto

Si seguimos el Script cuidadosamente nos aseguramos que los datos registrados nos sirvan
posteriormente en PSP1, PSP2 y PSP2.1 (los revisaremos posteriormente)
Lo que encontramos en verde es por ahora opcional, y en PSP1 lo consideraremos. Una vez terminado
el proceso
1. Marcamos PostMorten como completo
2. Y luego marcamos como Completado el Proyecto, esto lo hacemos accediendo al PSP0 Project
Plan Summary
3. Esta es la imagen antes de dar completado

4. Y esta es una vez terminado (Observen la diferencia de los Porcentajes en To Date %)

5. Por ultimo, una herramienta interesante que podemos usar para el PostMorten la encontramos
en el menú C > Análisis de Datos, la herramienta es la siguiente:

6. Muchos de los gráficos no se muestran porque requieren de otras medidas (Líneas de código)
que tomaremos en PSP1, observemos las que se generan:

Conclusiones.
PSP0 nos permite establecer una línea base para la estimación y aunque el proceso trae consigo varios
cambios en el comportamiento y las costumbres en el Desarrollo, veremos mas adelante que aporta
grandes ventajas a los programados.
¿Que debe tener en cuenta para usar PSP en mi trabajo?
• Es un proceso que requiere disciplina
• Es una forma de trabajar altamente ordenada y metodológica
• Requiere compromiso personal, al fin y al cabo los datos recolectados solo son usados por
nosotros mismos para mejorar cada vez mas
Es una publicación un poco larga, pero si llegaron hasta acá hemos cumplido una meta importante,
ahora los quiero retar a que desarrollen la misma aplicación propuesta y me compartan sus
experiencias.
En una semana tendremos una publicación sobre PSP1.