Introducción al Personal Software Process (PSP) El Personal Software Process ayuda a los desarrolladores de software a mejorar su funcionamiento disciplinando la manera en que desarrollan software. De acuerdo con las prácticas encontradas en el modelo de la madurez de la capacidad integrado (CMMI), el PSP puede ser utilizado como guía a un acercamiento disciplinado y estructurado para el desarrollo de software. El PSP se puede aplicar a muchas partes del proceso del desarrollo del software, incluyendo el análisis, definición de requerimientos, desarrollo del programa, documentación, las pruebas del sistema, y mantenimiento. PSP es un proceso de software diseñado para ser utilizado por un Desarrollador de Software. Fue desarrollado por Watts Humphrey y se describe en su libro “A discipline for Software Engineering”. Es utilizado para guiar el planeamiento y desarrollo de módulos de software o pequeños programas, pero es adaptable a otras tareas personales. Como CMMI, PSP está basado en principios de mejoramiento de procesos, pero mientras que CMMI está enfocado en mejorar las capacidades organizacionales, PSP está puesto en el desarrollo individual. Para fomentar el mejoramiento en el nivel personal, PSP se extiende a la administración y control de procesos del desarrollador. Utilizando PSP los desarrolladores producen software usando un enfoque estructurado y disciplinado. Siguen un proceso definido, planifican, miden, supervisan su trabajo, administran la calidad de los productos y aplican un feedback cuantitativo para mejorar sus procesos personales de trabajo, llevando así a mejores estimaciones mejor planificación y seguimiento protección contra compromisos que nunca se cumplen un compromiso personal hacia la calidad involucrarse en un proceso de mejoramiento continuo PSP se está utilizando en un gran número de universidades y en algunas organizaciones industriales. Podemos decir que PSP es efectivo para la planificación de los trabajos de los ingenieros y para la calidad de los productos que se realizan, ya que ayuda a que los ingenieros aprendan a usar datos y técnicas de análisis para determinar su propia realización del trabajo, y medir así la efectividad de los métodos que se usan. El proceso de PSP tiene la siguiente evolución: PSP 3 Desarrollo Cíclico PSP 2 Revisión del código Revisión del diseño PSP 1 Estimación del Tamaño Informe de pruebas PSP 0 Proceso Figura 2.1 Evolución del PSP Las fases que se necesitan para llevar a cabo un trabajo utilizando PSP son: Medición Personal (PSP0) Planificación Personal (PSP1) Calidad Personal (PSP2) Proceso Personal Cíclico (PSP3) 2.1.1 Los principios del PSP El diseño de PSP se basa en los principios siguientes del planeamiento y de la calidad: Cada ingeniero es diferente; los ingenieros deben planear su trabajo y deben basar sus planes en sus propios datos personales. Para mejorar constantemente su funcionamiento, los ingenieros deben utilizar personalmente procesos bien definidos y medidos. Para producir productos de calidad, los ingenieros deben sentirse personalmente responsables de la calidad de sus productos. Los productos superiores no son producidos por error; los ingenieros deben esforzarse hacer el trabajo de la calidad. Cuesta menos al hallazgo y el arreglo deserta anterior en un proceso que más adelante. Es más eficiente prevenir defectos que encontrarlos y fijar. La manera derecha es siempre la manera más rápida y más barata de hacer un trabajo. Para hacer software de la manera correcta, los desarrolladores deben planificar sus trabajos antes de comprometerse a comenzar una tarea, utilizando un proceso definido de planificación de trabajos. Para comprender su rendimiento personal, deben medir el tiempo que pasan en cada paso de la tarea, los defectos que agregan y remueven, y los tamaños de los productos que producen. Para producir consistentemente productos de calidad, los desarrolladores deben planificar, medir, y realizar un seguimiento de la calidad del producto, y deben enfocarse en la calidad desde el comienzo de la tarea. Finalmente, deben analizar los resultados obtenidos de cada tarea y utilizar esos datos para mejorar sus procesos personales. 2.2.1 Los 7 pasos del PSP 2.2.1.1 PSP0 El punto de partida de PSP El paso inicial en PSP consiste en establecer una base que incluya mediciones y un formato de reportes. Esto permite medir el progreso y define los cimientos para mejorar. Esencialmente, PSP0 es el proceso habitual con el que los desarrolladores escriben software, mejorado para proveer mediciones. Se pasa a PSP0.1 agregando un estándar de código, mediciones de tamaño y el denominado PIP (Process Improvement Proposal). El PIP provee una manera estructurada de registrar problemas, experiencias y sugerencias para mejorar. PSP0.1 también mejora las mediciones para contar separadamente métodos y procedimientos. PSP 3 Proceso Personal Cíclico Administración de Calidad Personal Desarrollo Cíclico Revisión de Código Revisión de Diseño Proceso de Medición Personal Estimación de tamaño Reporte de pruebas PSP 0 Proceso actual Registro de tiempo Registro de defectos Estándar de tipos de defectos Formatos de Diseño PSP 1.1 PSP 1 Proceso de Planeación Personal PSP 2.1 PSP 2 Planeación de tareas Planeación de tiempos de actividades Estándar de tipos de PSP 0.1 Estándar de Codificación Medición de Tamaño Propuesta de mejora del proceso Figura 2.2 Evolución detallada del PSP 2.2.1.2 PSP1 Planeación personal PSP1 le agrega pasos de planeamiento a PSP0. El primer paso agrega estimaciones de tamaño y recursos y un reporte de prueba. En PSP1.1 se introduce planeamiento de cronograma y seguimiento del proyecto. Los desarrolladores son enseñados a: Entender la relación entre el tamaño de los programas que escriben y el tiempo que les toma desarrollarlos. Aprender a realizar compromisos que puedan cumplir. Preparar un plan ordenado para realizar su trabajo Establecer una base para realizar un seguimiento de su trabajo. Mientras que la importancia de estas técnicas en proyectos grandes es comprendida, pocos desarrolladores las aplican a su trabajo personal. PSP demuestra el valor de estos métodos en el nivel personal. 2.2.1.3 PSP2 Administración de Calidad Personal Un objetivo de PSP es ayudar a los desarrolladores a lidiar de manera realista y objetiva con los defectos que introducen. Los programadores por lo general se avergüenzan de sus errores. El hecho de que la mayoría de los errores sean tipográficos o errores tontos hace que los desarrolladores sientan que pueden mejorar haciendo más esfuerzo. El problema es que hacer más esfuerzo por lo general hace que las cosas empeoren; las claves, como en otras actividades, son las habilidades inherentes y las capacidades. En PSP2 se enfoca en mejorar la habilidad del desarrollador para producir programas de calidad. La idea es hacer al trabajo de calidad más natural y consistente. Mejoras significativas en la frecuencia de defectos de los desarrolladores no son posibles a menos que conozcan cuantos errores cometen y que comprendan sus causas y consecuencias. PSP2 agrega diseño personal y revisiones de código a PSP1. Estas revisiones ayudan a encontrar defectos de manera temprana y a ver los beneficios que esto proporciona. Los desarrolladores analizan los defectos que encuentran en los primeros programas y usan estos datos para establecer checklists de revisión que estén hechos a medida de su experiencia de defectos personales. El proceso de diseño es contemplado en PSP2.1. El objetivo no es decirle a los desarrolladores como diseñar sino orientar el criterio para la finalización del diseño, es decir, cuando han terminado que es lo que deben haber obtenido. Se establece un criterio de completitud de diseño y se examinan varias técnicas de verificación y consistencia de diseño. 2.2.1.4 PSP3 Proceso Personal Cíclico Hasta este punto PSP se concentró en el proceso lineal para construcción de pequeños programas. PSP3 presenta métodos para ser usados por individuos en la realización de programas de gran escala. De todas formas sigue enfocado en el individuo y no trata los problemas de comunicación y coordinación que son una parte importante del desarrollo de sistemas de gran escala. Para escalar PSP2 a proyectos más grandes la estrategia consiste en subdividir el proceso personal de desarrollo de grandes programas en elementos en la escala de PSP2. Estos programas son entonces diseñados para ser desarrollados en pasos incrementales. La primera construcción consiste en un módulo base o kernel que es ampliado en ciclos iterativos. En cada iteración se utiliza un PSP2 completo, incluyendo diseño, codificación, compilación y pruebas. Especificaciones Requerimientos Y Planificación Diseño de Alto nivel Ciclo específico . . . Diseño detallado Y Repaso del diseño Desarrollo de las pruebas Y repaso Repaso al Diseño De Alto nivel Implementación Y Repaso del código Desarrollo Cíclico Compilación Postmortem Pruebas Integración Pruebas del sistema Uso . . . Valorar de nuevo Y Reciclar Producto Fig. 2.3 Proceso cíclico de PSP3 El proceso cíclico PSP3 puede ser un elemento efectivo en un proceso de desarrollo de gran escala solo si cada incremento sucesivo de software es de alta calidad. De esta manera los desarrolladores pueden concentrarse en la verificación de la calidad del último incremento sin preocuparse por defectos en ciclos anteriores. Si un incremento anterior tiene muchos defectos, la prueba será más compleja y los beneficios de escalar PSP se pierden. Esta es una razón para enfatizar revisiones de diseño y código en los pasos anteriores de PSP.