Академический Документы
Профессиональный Документы
Культура Документы
del Software II
http://www.byteando.com/juanignacio
Comparto todos mis apuntes de IS2 de la Universidad
de Alicante a modo de libro electrnico y se lo dedico,
primero, a Davinia por estar siempre ah y apoyarme, y
segundo a todos aquellos estudiantes de ltimos cursos
que estn puteados con estas ltimas asignaturas y que
suman un problema ms en sus vidas.
Juan Ignacio Alberola Colomo
17/05/2010
Modelos Genricos.
Disponemos de una serie de modelos de proceso genricos que han ido surgiendo uno
despus de otro intentando suplir las carencias unos de otros. Estos modelos genricos son:
-
Modelo en cascada.
Modelo evolutivo.
Modelo basado en componentes.
Modelo en cascada.
Considera las actividades fundamentales del proceso de desarrollo (especificacin, desarrollo,
validacin y evolucin) y los representa como fases separadas del proceso.
Desde cada tarea se puede volver hacia atrs si se encuentran errores o cambian los
requerimientos.
Este modelo se puede usar para sistemas en los que tenemos los requerimientos MUY claros,
estn bien entendidos y son muy estables.
Lo importante de los modelos, a parte de su organizacin es conocer sus ventajas y sus
inconvenientes.
Ventajas:
-
Hace visible el proceso, nos podemos situar a lo largo del proceso y tenemos control
sobre l. Facilita pues la labor del gestor.
Se produce documentacin en cada fase por lo que como hemos dicho es un proceso
que facilita mucho la visibilidad.
Desventajas:
-
Modelo evolutivo.
El desarrollo evolutivo se basa en la idea de desarrollar una implementacin inicial,
exponindola a los comentarios del usuario y refinndola a travs de las diferentes versiones
hasta que se desarrolla un sistema adecuado.
Las actividades de especificacin, desarrollo y validacin se entrelazan en vez de separarse,
con una rpida retroalimentacin entre estas.
Este modelo al igual que los otros, posee unas ventajas y unos inconvenientes:
Ventajas:
-
Suele ser ms efectivo que el enfoque en cascada pues satisface las necesidades
inmediatas del cliente.
El desarrollo y la especificacin se puede hacer de forma creciente. Tan pronto como
los clientes entiendan mejor el problema se puede reflejar en el sistema software.
Desventajas:
-
El proceso no es visible. Los administradores tienen que hacer entregas regularas para
medir su progreso y si el sistema se realiza rpidamente puede no ser rentable generar
documentacin.
Puede surgir una estructura deficiente. Los cambios continuos tienden a corromper la
estructura del software haciendo que incorporar cambios sea cada vez una tarea ms
difcil y costosa.
Estos modelos se suelen usar en sistemas pequeos o medianos hacindose los problemas
tpicos de estos modelos ms graves en sistemas grandes y con un tiempo de vida largos. Para
este tipo de sistemas grandes se recomienda un proceso mixto que incorpore las mejores
prcticas de un modelo en cascada y del desarrollo evolutivo. Las partes del sistema bien
comprendidas se pueden especificar y desarrollar usando cascada, las otras no tan claras
como la interfaz de usuario se deben desarrollar usando un enfoque explorativo.
Desventajas:
-
Los compromisos con los requerimientos son inevitables y esto puede dar lugar a que
el sistema no cumpla las necesidades reales de los usuarios.
Si las nuevas versiones de los componentes no estn bajo el control de la organizacin
se pierde el control sobre la evolucin del sistema.
Modelo incremental.
Modelo en espiral.
Modelo incremental.
Los clientes identifican, a grandes rasgos, los servicios que proporcionara el sistema y se
identifican los ms importantes y los menos. Despus de esto se definen varios incrementos
en donde cada uno proporciona un conjunto de la funcionalidad del sistema.
La asignacin de las funcionalidades a los incrementos depende de la prioridad, as
normalmente los primeros incrementos tienen las funcionalidades ms crticas.
En los incrementos, cuando se decide lo que se va a implementar se congelan los
requerimientos y no se pueden modificar. Adems, cuando se acaba un incremento se le
puede proporcionar al cliente para que lo pruebe.
Los clientes no tienen que esperar hasta que el sistema est completo para sacarle
provecho. El primero incremento satisface los requerimientos ms crticos de tal forma
que se puede usar el software inmediatamente.
Los clientes pueden usar los incrementos iniciales como prototipos y obtener
experiencia sobre los requerimientos posteriores del sistema.
Normalmente no suele fracasar el proyecto, pero se pueden encontrar problemas en
algunos incrementos.
Dado que lo ms crtico se entrega antes y los incrementos posteriores se integran en
ellos, hace que lo ms crtico se pruebe ms. As se hace menos probable encontrar
errores en parte crticas del sistema.
Desventajas:
-
Los incrementos deben ser pequeos y se debe entregar alguna funcionalidad del
sistema. Puede ser difcil adaptar el tamao a la funcionalidad.
Puede necesitarse algn recurso en todos los incrementos, pero como se implementa
de manera incremental no nos daremos cuenta hasta que sea necesario.
Modelo en espiral.
Este modelo tambin es iterativo. Cada ciclo de la espiral representa una fase del proceso
software, de esta forma el ciclo ms interno podra referirse a la viabilidad del proyecto, el
siguiente a la definicin de requerimientos, etc, aunque no hay fases fijas dando las vueltas
necesarias dependiendo de lo que sea necesario.
La principal caracterstica de este modelo es que los riesgos se resuelven de forma explcita
en cada vuelta de la espiral.
Lo podemos usar como el modelo en cascada, pero con la diferencia de que se explicitan los
riesgos, por lo que las vueltas hacia atrs no van a suceder tanto como en cascada.
Modelos giles.
Este tipo de modelos surgen para subsanar los problemas de todos los anteriores,
normalmente altos costes. Estos modelos:
-
Los ciclos XP suelen ser cortos (1-3 semanas por iteracin). Y cada 2 o 3 semanas se hace un
plan para la iteracin siguiente sin mucho detalle inicialmente para posteriormente ir
desglosndolo. Normalmente se parte de escenarios (stories) que se dividen en tareas que se
planifican. Despus se desarrolla, integra y se prueba para hacer una release y evaluar el
software. Luego, se vuelve a empezar con otros escenarios.
10
11
Inicio: Se establece un caso de negocio del sistema. Se identifican todas las actividades
externas, tanto personas como sistemas que interactuaran con el sistema y se definen
estas interacciones. Esa informacin se usa para evaluar la aportacin que hace el
sistema al negocio y si es de poca importancia se puede cancelar el proceso en esta
fase.
Elaboracin: Se desarrolla una compresin del dominio del problema, se establece un
marco de trabajo arquitectnico y un plan del proyecto que identifica los riesgos clave.
Al finalizar se tiene un modelo de los requerimientos, una descripcin arquitectnica y
un plan de desarrollo.
Construccin: Se disea el sistema, se programa y se hacen pruebas. Se tiene el SW
operativo y la documentacin.
Transicin: Se pone el sistema en produccin, generando instalaciones, distribuyendo
el sistema, etc.
Modelado del sistema: Se modelan los procesos de negocio usando los casos de uso
del negocio.
Requerimientos: Se definen los requerimientos funcionales y no funcionales haciendo
casos de uso para los primeros.
Anlisis y Diseo: Se crea y documenta un modelo de diseo usando modelos
arquitectnicos, modelos de componentes, de objetos y de secuencia.
Implementacin: Se implementan los subsistemas como componentes.
Pruebas: Se llevan a cabo junto con la implementacin.
Despliegue: Release del producto y puesta en produccin.
Gestin de configuraciones: Gestin de los cambios en el sistema.
Gestin del proyecto: Gestin del desarrollo del sistema.
Entorno: Identificar las herramientas que se van a usar.
Perspectiva prctica:
-
12
13
Actividades de de gestin.
El gestor de proyectos se encarga de varios asuntos, entre ellos elabora un plan de proyecto
que contempla la creacin de una agenda, adems hace estimaciones de coste y tiempo, se
evalan los riesgos y se organiza al personal.
Tambin monitoriza y controla el plan del proyecto, identificando los hitos y entregas del
proyecto adems el gestor debe tener conocimiento del progreso del proyecto y comparar el
progreso con lo que se haba planificado.
Selecciona al personal basndose en sus conocimientos y su disponibilidad. En un entorno
ideal todos sabran de todo y estaran disponibles al 100% con la experiencia necesaria, pero
normalmente se elige un equipo profesional mnimo capaz de desarrollar el trabajo basndose
en sus conocimientos y en su personalidad.
Por ltimo, el gestor debe rendir cuentas, creando y presentando informes. Debe informar a
los clientes y contratistas sobre el proyecto, en consecuencia, la habilidad de comunicarse
tanto por escrito como oralmente es esencial para el gestor. De hecho, es un asunto que
Galipienso busca en los objetivos de la asignatura, la capacidad de comunicarnos y escribir
bien.
El OBJETIVO FINAL es entregar el proyecto a tiempo, sin exceder el coste estimado y
satisfaciendo las necesidades del cliente.
Volviendo al plan del proyecto, en la planificacin se decide de antemano QUE hay que hacer,
COMO hay que hacerlo, CUANDO hay que hacerlo y QUIEN lo va a hacer. Esto es importante
pues en el examen no hay porque enrollarse, simplemente si se pide un plan de proyecto
debemos contestar a estas cuestiones de forma resumida.
La buena gestin del proyecto depende de planificar completamente el progreso del proyecto.
El gestor se anticipa a los problemas que pueden surgir y prepara soluciones a estos
problemas. Un plan preparado al inicio de un proyecto debe usarse como conductor para el
proyecto y debe ser el mejor posible de acuerdo con la informacin disponible. El plan
evolucionar conforme el proyecto avance y se disponga de ms informacin.
Para planificar un proyecto existen diversos algoritmos, pero en la asignatura nos ponen uno
que es el siguiente, se adjunta la imagen de las transparencias y a continuacin se explica cada
apartado.
14
Las actividades en azul son actividades de creacin del plan y las que estn en rojo son
actividades de monitorizacin. Los dos siguientes apartados se van a centrar exclusivamente
en confeccionar la agenda y en monitorizar el progreso del proyecto.
Pero ahora veamos cada actividad de la planificacin.
Establecer objetivos, mbito y restricciones del proyecto: Se decide que es lo que se quiere
hacer, los lmites del proyecto y su dominio as como los requisitos funcionales y no
funcionales, de tiempo, coste, personal y maquinaria disponible.
Definir hitos y entregas: Servir para monitorizar el proyecto y darle visibilidad.
Estimar recursos: Vemos cuanta gente vamos a necesitar en funcin del tamao y complejidad
del proyecto.
Organizar al grupo de trabajo: Asignar trabajo al personal y decidir cundo lo va a hacer.
Determinar estndares de calidad: Poner en comn prcticas entre el equipo para que el
proyecto sea lo ms uniforme posible.
Determinar riesgos: Pensar en los problemas que pueden surgir y anticipar soluciones.
Organizar comunicacin del grupo: Dependiendo de cmo se comunique el equipo el proyecto
avanzar ms rpidamente o no.
Confeccionar una agenda: Identificar las tareas y sus dependencias.
Definir presupuesto:
Escribir plan: Contestar a QUE, COMO, QUIEN y CUANDO.
Este ltimo plan puede tener diferentes formatos, pero el que nos dan en las transparencias es
el siguiente.
I O A R D A M.
15
Confeccin de agendas.
El siguiente proceso de confeccin de agendas sirve como hilo conductor para lo que resta de
tema.
Los gestores estiman el tiempo y los recursos requeridos para completar las actividades y
organizarlas en una sucesin coherente. A menos que el proyecto a calendarizar sea similar a
otro anterior las estimaciones previas son una base no cierta para este proceso.
Los calendarios se deben actualizar conforme se vaya obteniendo nueva informacin.
Las primeras actividades del proceso de creacin de agendas (identificar actividades y
dependencias entre actividades) no nos resultan nuevas pues es lo que se estudi en el primer
16
17
18
Monitorizacin y control.
Una vez realizada la agenda, hay que ir controlndola y tomando decisiones con el objetivo
principal de entregar el proyecto a tiempo con los costes apropiados.
El 70% de los proyectos cuestan ms de lo presupuestado o se entregan ms tarde de lo
planificado y el 52% de ellos se entregan con un 189% de lo presupuestado.
Otros muchos ni se entregan.
Monitorizar o hacer un seguimiento a una agenda consiste en comprobar si la agenda
planificada se ajusta con la agenda real. A la agenda inicial la llamaremos agenda planificada,
es la que hemos creado siguiendo los pasos del apartado anterior basada en nuestra intencin
inicial y estimaciones. La agenda real es lo que realmente est sucediendo con el proyecto a
partir de informacin real.
Para hacer la monitorizacin se necesitan datos que ofrezcan una visin cuantitativa de la
agenda, estos datos son mtricas del proyecto. Se pueden usar varias de ellas, por ejemplo, la
holgura libre dice lo que se puede retrasar una tarea sin afectar a las dems.
En MS Project para hacer el seguimiento de una agenda hay que seguir el siguiente
procedimiento.
-
19
Guardar lnea base del proyecto: Esto se hace a travs de la opcin Proyectos
Herramientas Establecer lnea base. Los campos duracin, trabajo, comienzo, fin y
costo se guardan como valores PREVISTOS.
Establecer fecha de estado: Definimos en qu fecha nos encontramos a travs de las
opciones Proyecto Informacin del proyecto Fecha de estado.
Entre las mtricas anteriormente nombradas existen varias ms como por ejemplo:
-
Pero la cuestin importante es el USO de estas mtricas para controlar y monitorizar una
agenda.
Controlar una agenda consiste en tomar las decisiones adecuadas para que las diferencias
entre las agendas planificada y real sean mnimas partiendo de que las actividades crticas (con
holgura total igual a cero) no se pueden retrasar y que las actividades no crticas se pueden
retrasar siempre y cuando el retraso no supere su holgura total.
Earned Value Analysis (EVA).
El Valor Acumulado es una mtrica, tal y como se vio en el apartado de mtricas. Esta mtrica
en concreto proporciona una informacin cuantitativa del progreso de un proyecto asignando
a cada tarea un valor devengado basado en su porcentaje estimado del valor total.
EVA permite vislumbrar dificultades antes de que estas sucedan lo que permite tomar
decisiones antes que el proyecto entre en crisis y la liemos parda.
Un EVA siempre se realiza en un momento determinado del tiempo y bsicamente usa y
compara tres tipos de informacin:
-
Cunto trabajo (del planificado) debera haberse realizado hasta el momento? BCWS.
Cunto se ha gastado hasta el momento? ACWP.
Cul es el valor (en trminos de lnea base) del trabajo realizado hasta el momento?
BCWP.
20
Indicadores de PRODUCTIVIDAD.
-
21
22
Representa un modelo en cascada, se pueden ver fcilmente las distintas actividades del
proceso de desarrollo (Requerimientos, Anlisis y Diseo, Implementacin, Pruebas y
Despliegue). Por otro lado se puede considerar que tiene tintes de un desarrollo evolutivo ya
que se presenta un prototipo intercalndolo con los requerimientos.
Qu estilo de plan elegiras como gestor de proyecto?
El segundo, ya que indica claramente la salida de cada tarea, el primero servira en todo caso
para alguna plantilla genrica.
Recalcular los valores para la siguiente tarea con las unidades (recursos) fijos.
Vamos a seguir la ecuacin para recalcular que usa MSProject que es Trabajo = Duracin x
Unidades.
De esta manera.
Si duracin se cambia a 2 das el trabajo se recalcula y 2*8 = 16. El trabajo cambia a 16.
23
24
Con MSExcel he resuelto la tabla que hay que analizar siguiendo las frmulas adecuadas.
SV = BCWP BCWS.
SPI = BCWP / BCWS.
CV = BCWP ACWP.
CPI = BCWP / ACWP.
BAC
1000
1500
6000
1000
1000
2000
BCWS
1000
1500
5000
500
500
1000
BCWP
1000
1000
4000
0
500
1500
ACWP
1200
1500
4500
0
750
1500
SV
0
-500
-1000
-500
0
500
CV
-200
-500
-500
0
-250
0
SPI
1
0,66666667
0,8
0
1
1,5
CPI
0,83333333
0,66666667
0,88888889
0,66666667
1
Tarea 1.
La tarea debera haber acabado segn lo planificado pues BAC = BCWS. Por otro lado la tarea
se est ejecutando segn la agenda ya que SV=0. Vemos tambin que la tarea ha acabado
porque BAC = BCWS = BCWP.
Por otro lado hemos gastado ms de lo presupuestado, concretamente 20% ms, esto quiere
decir que por cada presupuestado estamos gastando 1.20.
Tarea 2.
La tarea debera haber terminado segn lo planificado pues BAC = BCWS. Por otro lado la tarea
va con retraso porque SV = -500, se ha completado un 66% de la tarea.
Estamos gastando ms de lo presupuestado, concretamente 1.5 por cada presupuestado.
Tarea 3.
25
26
27
28
Las estimaciones pueden ser poco exactas debido a que podemos cometer errores al estimar,
estos errores pueden provenir de diferentes lugares.
-
El cono representa la exactitud en el mejor caso que es posible conseguir en las estimaciones
del software en diferentes momentos del proyecto. El cono no se estrecha por s mismo. Se
estrecha tomando decisiones que reducen las fuentes de variabilidad sobre el proyecto.
29
30
Descripcin
31
Costes de esfuerzo (horas trabajadas): Engloban los sueldos de los ingenieros y gastos
de seguros o seguridad social.
Costes hardware y software: Se necesitan mquinas? Comprar entorno de
desarrollo?
Costes de viajes y aprendizaje: Congresos, cursos.
Otros: Alquileres, redes, recursos compartidos.
32
El tamao del cdigo lo podemos cuantificar con unas mtricas, ejemplos de estas mtricas
son las Lneas de Cdigo (LOC), los Puntos de Funcin (FP) y los Puntos de Objeto (OP).
Hay que destacar tambin que el esfuerzo requerido para completar un proyecto crece
exponencialmente con el tamao del proyecto debido a lo siguiente.
Diseconomas de escala.
Normalmente se asume que un sistema 10 veces ms grande que otro requerir 10 veces ms
de tiempo, pero esto es totalmente falso. Cuanto mayor sea el proyecto se requiere ms
comunicacin entre la gente implicada as que el rendimiento de un equipo es inversamente
proporcional a la cantidad de comunicacin que se deba entablar.
Al crecer la comunicacin crece el esfuerzo de forma exponencial. Esto es la diseconoma de
escala, lo contrario de la economa de escala que es asumir que a ms gente, menos tiempo.
Para reducir la diseconoma de escala hay que reducir la escala partiendo el problema en
problemas ms pequeos que requieran menos comunicacin.
33
La suma ponderada de los elementos anteriores dan como resultado los puntos de funcin no
ajustados.
Para ajustarlos hay que determinar el VAF o Value Adjustement Factor, para esto se valor del
0 al 5 un total de 14 caractersticas de la aplicacin y se suman los valores resultantes (TDI). Al
final el VAF se calcula como:
VAF = (TDI * 0.01) + 0.65
Para hacer el ajuste FPA = FPNA * VAF.
Para el clculo de los puntos de funcin no ajustados se usan una serie de tablas, como las de
este ejemplo.
34
Esta manera de calcularlos es una de tantas recetas para poder calcularlos. Los OP tienen las
mismas ventajas e inconvenientes que los FP, adems tiene una cierta subjetividad a la hora de
calcularlos dependiendo del estimador y se emplea una granularidad ms gruesa que en los
FPs.
En la asignatura se centran en el clculo de los FP que al fin y al cabo es lo que puede ser ms
largo de hacer en el examen.
Los FP y OP se pueden traducir a LOC mediante el anlisis de datos histricos de la siguiente
manera: LOC = AVC * FP.
35
Factores personales.
Es el tercer factor ms significativo que contribuye a las estimaciones. En la siguiente imagen
se observan diferentes factores sobre el personal y como estos pueden afectar positivamente
disminuyendo el esfuerzo (zona azul) y negativamente aumentndolo (zona gris). La zona
nominal sera la lnea negra, es decir, por ejemplo, si la continuidad del personal es muy baja el
esfuerzo se ve aumentado en un 29% sobre el valor normal (lnea negra).
Lenguaje de programacin.
La experiencia en el lenguaje de programacin y herramientas especficas usadas en el
proyecto tiene un efecto alrededor de un 40% sobre el ratio de productividad del proyecto.
Algunos lenguajes producen ms funcionalidad por lnea que otros.
Dependiendo del nivel de soporte de las herramientas automticas usadas con el lenguaje se
puede incrementar hasta en un 50% el esfuerzo requerido.
Los programadores que usan lenguajes de programacin interpretados suelen ser ms
productivos que los que usan lenguajes compilados.
36
CONSIDERACIONES ESPECFICAS.
Tenemos que tener claro qu es lo que queremos estimar, debemos conocer las incgnitas a
despejar y pueden venir por dos lados diferentes.
Por un lado dadas unas funcionalidades a implementar tenemos que estimar el tamao del
proyecto, el esfuerzo y el tiempo que tardar en entregarse, y partiendo de estas estimaciones
el coste del mismo pensando en los sueldos del personal y otros gastos. Por otro lado se nos
pueden dar una serie de restricciones de presupuesto y tiempo y debemos de ser capaces de
saber la cantidad de funcionalidades que podemos implementar.
A la hora de estimar podemos seguir dos estrategias diferentes, la top-down y la bottomup, en ambas el WBS es importante para ver la jerarqua de tareas.
Estimaciones top-down.
Comienza a nivel de sistema y evala la totalidad de funcionalidades y cmo estas interactan
entre ellas. Adems se puede usar sin conocer la arquitectura ni los componentes que
formarn parte del sistema, es decir, no es necesario conocer los niveles ms bajos del WBS.
Este mtodo tiene en cuenta costes de integracin, gestin de configuraciones y
documentacin, que suelen estar en la parte ms alta del WBS, pero por otro lado puede infraestimar costes relacionados con la resolucin de problemas tcnicos de bajo nivel difciles de
resolver. Puede que abajo del WBS haya algo muy problemtico y que requiera ms
esfuerzo/tiempo/coste del que hemos estimado.
Estimaciones bottom-up.
Pues simplemente lo contrario que el anterior.
Comienza a nivel de componentes y estima el esfuerzo requerido para cada componente.
Dichos esfuerzos se aaden a la estimacin final. Se puede usar cuando la arquitectura del
sistema es conocida y los componentes han sido identificados.
Proporciona estimaciones bastante exactas se el sistema se ha definido con detalle y puede
infra-estimar costes a nivel de sistema (nivel ms alto) como la integracin y la
documentacin.
Con estas definiciones es lgico pensar que las estimaciones top-down se usarn ms cuando
estemos comenzando el desarrollo y la bottom-up cuando vayamos teniendo claros la
arquitectura y los componentes conforme avanzamos el proyecto.
37
MTODOS DE ESTIMACIN.
Juicio experto.
Con este mtodo se consulta a expertos en tcnicas de desarrollo de software y/o del dominio
de la aplicacin. El experto o expertos emiten un juicio sobre tareas individuales segn una
estimacin bottom-up y para ello puede ser til usar un WBS.
Dentro del juicio experto podemos usar dos variantes, el individual y en grupos,
concretamente en ste ltimo tenemos la tcnica Delphi.
Para asegurar los juicios efectivos hay que usar expertos que realmente han trabajado en lo
que van a estimar, no vale con cuatro personas que hayan ledo sobre el tema, se han tenido
que poner varias veces manos a la obra.
Otra manera de asegurar juicios efectivos puede ser usar la granularidad adecuada y usar
rangos, adems se pueden usar frmulas y comparar las estimaciones con los resultados
reales.
38
sta tcnica se usa para estimaciones iniciales del proyecto ya que se tiene una granularidad
alta al comienzo del mismo y consume mucho tiempo. Es til tambin para estimaciones en
nuevas reas de negocio o nuevas tecnologas.
Se usa adems para proyectos que engloban diversas disciplinas y se consigue una exactitud
posible media.
39
40
Veamos ahora las frmulas y que es cada parte de ellas. Es importante saber que para el
examen no es necesario saber las formulas de memoria pero si saber justificar qu es cada
parte de las mismas.
41
Vamos a ello. Empezamos por las ecuaciones de tamao para saber el Size de la ecuacin.
Las lneas de cdigo se miden en miles as que es importante que lo que calculemos lo
pasemos a miles, COCOMO se usan para proyectos grandes.
-
KNSLOC: Son las nuevas lneas de cdigo que hay que implementar. Son lneas que no
existen y hay que crearlas.
KESLOC: Son las lneas de cdigo que no estn hechas desde cero sino adaptadas de
versiones existentes.
REVL: Es el porcentaje de cdigo que se ha implementado pero se ha desechado por la
volatilidad de los requerimientos.
KASLOC: Son las lneas de cdigo modificadas.
AT: El porcentaje de lneas de cdigo que se traducen automticamente.
42
Los multiplicadores de esfuerzo y factores de escala tampoco hay que sabrselos de memoria,
sino que hay que saber identificarlos en un enunciado.
43
EJEMPLOS DE CLCULOS.
Para hacer estimaciones hemos visto que tenemos que seguir una serie de pasos, vamos a ver
ejemplos de estos pasos y diferentes maneras de llevarlos a cabo.
Hemos visto que lo primero que hay que hacer es estimar el tamao del proyecto, nosotros en
la asignatura vamos a hacerlo calculando los puntos de funcin (FP). En prcticas se explica
cmo calcularlos y en el documento de la prctica correspondiente tambin.
El segundo paso es calcular el esfuerzo a partir del tamao que hemos estimado usando datos
histricos de productividad. Si los datos histricos tienen un rango estrecho (la diferencia es un
factor de 3 desde el mayor al menor) se puede usar un modelo lineal.
Por ejemplo, si hemos estimado el tamao y hemos visto que el tamao est entre 65000 y
100000 LOC vamos a estimar el esfuerzo partiendo de datos histricos de otros proyectos.
44
45
Hemos calculado las estimaciones de tiempo usando la frmula para los proyectos de la tabla
anterior pero sin contar los que habamos descartado. Como vemos calculamos el tiempo
usando el esfuerzo que nosotros habamos estimado y un valor medio que no es necesario
calcularlo.
Luego podemos hacer dos cosas, podemos coger valores medios de las estimaciones baja y
alta y obtener [12, 13.8] meses o coger el peor del bajo y el mejor del alto, esto lo que hace es
ampliar el rango para ser ms exactos y as contemplamos posibles problemas. Se suele usar
este segundo mtodo cuando no tenemos demasiada confianza en los datos. En este caso
sera la estimacin [10.8, 15.3] meses.
46
Si bien hemos estimado el esfuerzo y el tiempo del proyecto en general, normalmente luego
debemos asignar estas estimaciones a las diferentes actividades del proceso software.
Normalmente esto se hace partiendo de una tabla de distribucin del esfuerzo para proyectos
de diferentes tamaos y de unos ajustes que depende del tiempo del proyecto.
De esta manera al asignar esfuerzos a diferentes actividades debemos considerar el tamao
del proyecto, el tipo de proyecto y los tipos de esfuerzo contenidos en los datos de calibracin
usados.
A continuacin se expone la tabla de esfuerzos por actividades en proyectos de diferente
tamao y los ajustes por tipo de proyecto.
47
48
49
50
51
Producto. CRDDR
o CPLX. Complejidad del Producto.
o RELY. Fiabilidad requerida por el software.
o DOCU. Extensin de la documentacin necesaria.
o DATA. Tamao de la base de datos usada.
52
53
54
55
Nos quedara calcular SIZE, pero como no tenemos cdigo desechado ni lneas equivalentes, el
tamao es el que hemos calculado con anterioridad.
Clculo de la estimacin de esfuerzo.
Nos queda el siguiente clculo.
56
Anlisis de sensibilidad.
Se nos pide ahora ver qu pasa cuando los requerimientos de documentacin son mnimos y
cuando son mximos y ver lo que pasa con el esfuerzo.
Adems tambin se nos pide el ahorro de esfuerzo que podramos tener si la madurez del
proceso es de CMM 4 lo que su valor seria 1.56. Debemos calcular de nuevo el factor de
escala.
Anlisis de reusabilidad.
Nota: vamos a ver qu pasa ahora, si merece la pena hacer uso de un componente existente
que sustituya una parte de nuestro cdigo o no.
Un aspecto de la aplicacin puede satisfacerse adaptando un software existente
recientemente desarrollado denominado Calculadora de Tasas Declarables (CTD). Si la usamos,
un applet de Java de 4000LOC podra satisfacer aproximadamente un 20% de la funcionalidad
requerida (un 20% de los UFP necesarios).
Se estima que el rediseo del applet sera aproximadamente menos del 20%, y que la cantidad
de cdigo a reescribir sera no ms de un 30%. Adems la integracin y pruebas para
comprobar el rendimiento con los cambios introducidos no requerirn ms de un 25% de
esfuerzo adicional.
Debido a la elevada rotacin del personal, la gente que desarroll CTD ya no estn contratadas
por nuestra organizacin, y el personal actual tiene una familiaridad limitada con CTD, sin
embargo hay una buena correlacin entre API y CTD ya que siguen los mismos estndares de
documentacin.
57
Tenemos que calcular entonces KESLOC, que recordamos, las lneas equivalentes de la
funcionalidad a sustituir y que resolvemos en el siguiente clculo.
Para calcular AAF hemos resaltado en el texto del anlisis de reusabilidad en azul, y en orden,
DM (modificacin del diseo), CM (cdigo modificado), IM (pruebas modificadas).
Los valores de AA, UNMF y SU los tenemos que elegir en una tabla a partir de lo que diga el
texto, de esta manera elegimos un AA intermedio, un UNFM mayormente no familiar debido a
58
59
Esto quiere decir que en las funcionalidades que se pueden adaptar podemos ahorrarnos un
50% de cdigo.
Para ver el ahorro de esfuerzo debemos calcular el esfuerzo con el tamao usando la
adaptacin del componente CTD.
Nos haban dicho que tenamos que entregar en 6 meses o menos, pero esto es imposible ya
que la agenda nominal no se puede acortar ms de un 25% y la estaramos acortando ms de
un 50% si entregamos en 6 meses.
Como mucho podramos entregar, a costa de incrementar el esfuerzo, en 9.4 meses.
60
61
62
Adems se identifican las herramientas que se van a usar y se establece cmo usarlas as como
describe la estructura de la BD de configuraciones.
63
64
El control de cambios tambin puede ser soportado por herramientas CASE, estas
herramientas deben facilitar que los documentos correctos deben pasarse a las personas
correctos en el tiempo correcto.
65
Vemos que es el sistema de gestin de versiones el que usa los componentes adecuados para
compilar posteriormente y linkar los objetos. Todo parte de un script de construccin que
indica las rdenes que hay que ir ejecutando.
Y hablando de estos scripts existe soporte CASE para la construccin del sistema con el
objetivo de automatizar el proceso de construccin para reducir los errores humanos y el
tiempo requerido. Estas herramientas deben tener en comn:
-
66
Project: Obligatorio, elemento central. Cada Project tiene uno o ms targets, que se
pueden ejecutar.
Property: es un par nombre-valor que pueden ser definidas por el usuario.
Target: es un conjunto de tasks que se ejecutan y pueden depender de otros targets.
Task: es un cdigo que se puede ejecutar, pueden tener varios atributos haciendo
referencias a las properties.
Para que quede ms claro he hecho una imagen poniendo en ella explicaciones:
67
Identificacin de versiones.
Se deben definir procedimientos para identificar las versiones de los componentes de forma
no ambigua. Hay tres tcnicas bsicas.
-
68
El coste de una release es superior al de las versiones y nunca debemos asumir que el cliente
dispone de releases anteriores. Es decir, que no hay que asumir que para que vaya la release 2,
el cliente tiene que tener anteriormente la 1.
Como en todo eso de la GC, la gestin de versiones puede ser automatizada con herramientas
CASE. La gestin de versiones implica la gestin de grandes volmenes de informacin para
asegurar que los cambios en el sistema son almacenados y controlados.
Las herramientas de gestin de versiones controlan un repositorio de EC. Para trabajar con un
EC debemos extraerlo en un directorio de trabajo y posteriormente volverlo a introducir.
Las caractersticas de estas herramientas deben ser:
-
CVS es una aplicacin que usa una arquitectura cliente-servidor donde el servidor guarda las
versiones actuales del proyecto y su historial. Los clientes se conectan al servidor para sacar
una copia completa del proyecto, realizar modificaciones, y posteriormente volver la copia al
servidor o repositorio CVS.
Varios clientes pueden sacar copias al mismo tiempo, luego el servidor trata de acoplar ambas
versiones si es posible haciendo un merge. Si se ha modificado la misma lnea el servidor avisa
de ello al segundo en modificarla y este elige en cambiarla o dejar la que est.
Cuando se completa la actualizacin la versin se incrementa en todos los componentes
implicados y se almacena informacin del autor, descripcin y fecha.
Todo este tema del USO de CVS se especificar mejor en el material de prcticas.
69
70
Como he dicho, nos vamos a centrar en lo del recuadrito donde ejecutaremos las pruebas de
unidad. Como se puede ver en distintas fases del proyecto hay distintos tipos de prueba. De
esta manera una vez de integran las unidades probadas en un modulo, se prueba este para ver
si cumple con el diseo, cuando se integran estos se hace una prueba funcional del sistema
para ver si cumple con los requerimientos funcionales. Posteriormente se comprueba el
rendimiento y requerimientos no funcionales para luego ver si se cumple con los
requerimientos del cliente y por ltimo una prueba de instalacin en el entorno de produccin.
71
72
JUnit 4.
Vamos a lo que vamos. Buscbamos que con unas entradas en concreto nos diese un resultado
esperado.
JUnit es un API de Java que permite crear los drivers (de hecho solo crea los drivers) para
ejecutar los casos de prueba sobre los componentes UP de forma automtica.
Esta herramienta permite implementar las pruebas o tests enviando las entradas a las UP
(parmetros de entrada), nos da respuestas de la ejecucin de la UP (salidas esperadas) y
determina si un test falla o no (informe).
Los tests, se ejecutan a travs de test runners que no son ms que un mecanismo para leer las
pruebas y ejecutarlas registrando y siguiendo la pista de los resultados de los tests.
Resultados.
Los resultados de las pruebas pueden ser varios, en concreto tres:
Pass: El caso de prueba consigue su propsito y que el software a probar funciona tal y como
se esperaba.
Fail: Indica que el caso de prueba consigue su propsito pero el software a probar no funciona
tal como se esperaba.
Error: Indica que el caso de prueba no consigue su objetivo, normalmente por la ocurrencia de
algn evento inesperado o que no se ha escrito correctamente.
73
Usos de JUnit.
JUnit normalmente se usa para aplicar una metodologa TDD (Test Driver Development)
escribiendo siempre un test JUnit y ejecutarlo antes de escribir la UP a probar por lo que es
imperativo automatizar las pruebas.
Cuando ejecutamos las pruebas implementamos el cdigo de forma que sea el mnimo cdigo
requerido para pasar las pruebas.
Si modificamos el cdigo las pruebas las debe pasar igualmente, hacindolo de forma
incremental y haciendo por tanto tests de regresin.
Esta metodologa nos permite hacer una especificacin completa del programa desde el
principio (por ejemplo, al disear las pruebas podemos pensar que pasara cuando a una
funcin le pasamos nmeros negativos).
Tests y ejemplos.
Un test es un conjunto de mtodos Java que implementan el driver para probar las unidades
del sistema.
JUnit usa aserciones (asserts) para informar del resultado de un test, estas aserciones se
implementan en un paquete y por ejemplo ofrece la comprobacin.
-
Nosotros, de forma obligada por Galipienso, debemos definir un caso de prueba en cada
mtodo de prueba proporcionando unos datos de entrada y un resultado esperado.
El resultado esperado es obligatorio meterlo de forma explcita. Por ejemplo:
74
Befores.
Prueba 1.
Afters.
Befores.
Prueba 2.
Afters.
75
Aserciones.
Estn definidas en la clase JUnit Assert:
-
76
Por otro lado, si queremos probar el mensaje de la excepcin, o limitar el mbito en el que se
espera la excepcin, capturaremos la excepcin y usaremos la asercin fail si no se lanza la
excepcin.
Es decir, podemos poner fail dentro de un try cuando se debera haber lanzado una excepcin.
77
Y se pueden ejecutar desde el cdigo, desde la lnea de comandos o desde eclipse de las
siguientes maneras.
78
79
80
Desarrollador: Los autores del cdigo tienen que estar presentes ya que ellos sern los
que mejor comprenden el cdigo.
Moderador: Conduce y organiza la reunin y registra los resultados decidiendo si no
hay errores, si los hay pero no son importantes o los hay graves.
Inspector: Miran el cdigo, lo analizan y dicen lo que han encontrado en l.
Preparacin individual: Es trabajo del moderador repartir el cdigo a priori para que
cada rol se lo estudie a fondo para cuando llegue la reunin saber de que se va a
hablar y solamente comentar lo que se ha encontrado y no malgastar tiempo.
Recopilacin de resultados: se trata de poner en comn lo que se ha encontrado
teniendo como objetivo tratar el mayor nmero de errores en el menor tiempo
posible.
Proceso corto: No debe ser un proceso de ms de dos horas.
Los artefactos a inspeccionar se examinaran usando unas tcnicas de lectura, siendo una de
ellas las listas de comprobacin de errores que sin simples listas de preguntas a las que
tenemos que responder s o no, por ejemplo, estn todas las variables inicializadas? Estas
listas de comprobacin son una estandarizacin de las comprobaciones y dicha
estandarizacin facilita posteriormente la automatizacin de la inspeccin.
Las listas de comprobacin se pueden ir modificando con el tiempo a medida que van saliendo
nuevos tipos de errores, pero un ejemplo estndar de lista de comprobacin puede ser el
siguiente:
-
81
Errores de datos.
o Estn todas las variables inicializadas antes de que se usen?
o Todas las constantes tienen nombre?
o El primer elemento de los arrays empieza por 0,1 o algo ms?
o La cota superior de los arrays es longitud-1 o longitud?
o Si se usan cadenas de caracteres, hay un delimitador asignado
explcitamente?
Errores de control.
o Para cada condicin, la condicin es correcta?
o Terminarn todos los bucles?
o Las sentencias compuestas, tienen los parntesis bien puestos?
o En los switch case se contemplan todos los caso?
Errores de entrada/salida.
o Las variables de entrada tienen todas valor antes de usarlas?
o Las variables de salida tienen un valor asignado antes de ser enviadas a la
salida?
Errores de interfaz.
o Las llamadas a las funciones, tienen el nmero correcto de parmetros?
o Coinciden los tipos de parmetros?
o Los parmetros estn en el orden correcto?
o Si los componentes acceden a memoria, tienen todos los mismos modelos de
memoria compartida?
Errores de memoria.
o Si una estructura enlazada se modifica, todos los enlaces a esta estructura se
reasigan todos?
o Si se usa memoria dinmica, se ha reservado memoria correctamente?
Anlisis del flujo de control: Comprobaciones de bucles con varias entradas y salidas,
cdigo no alcanzable, etc.
Anlisis de uso de los datos: deteccin de variables no usadas, escritas dos veces sin
asignaciones intermedias, variables declaradas pero no usadas, etc.
Anlisis de la interfaz: Comprobacin de inconsistencias de los prototipos de las
funciones y procedimientos y su uso.
Anlisis de flujo de informacin: Identifica las dependencias entre las variables de
entrada y salida.
Anlisis de caminos: Identificacin de caminos y sentencias ejecutadas en dichos
caminos.
82
Por ello debemos de ser sistemticos a la hora de elegir los datos de entrada y hacer uso de
los particionamientos de estos datos agrupando los datos de entrada que llevan a la misma
conclusin.
Las pruebas sistemticas dependen de estos particionamientos representando conjuntos de
posibles comportamientos del sistema. Debemos elegir muestras significativas de cada
particin asegurndonos de cubrir todas las particiones. En este tema descubriremos como
identificar las particiones.
Destacar que hay muchos mtodos de pruebas dinmicas garantizando algo cada mtodo y
unos mtodos garantizas cosas que otros no.
83
En la siguiente imagen se puede ver a lo que nos referimos, a partir del cdigo obtenemos los
datos de entrada, pasndoselos al cdigo para ejecucin y viendo las salidas de los tests.
Pruebas de caminos.
Nuestro objetivo sern, principalmente, con el menor nmero de pruebas obtener el mayor
numero de errores.
La prueba de caminos es un mtodo de caja blanca cuyo OBJETIVO es ejecutar cada camino
independiente en el cdigo a probar garantizando que se ejecutan todos ellos. Si sabemos que
se ejecutan todos estos caminos estaremos ejecutando todas las sentencias del cdigo al
menos una vez y que todas las condiciones se evalan a cierto y falso.
Un camino independiente es un camino en un grafo de flujo que representa un camino del
programa que difiere de otros caminos en al menos un nuevo conjunto de sentencias y/o una
nueva condicin.
Los pasos a seguir para disear las pruebas son mecnicos y secuenciales, son los siguientes:
a)
b)
c)
d)
84
Es importante para el examen tener CLARO que cada nodo SOLAMENTE puede representar
UNA SOLA DECISIN.
Complejidad Ciclomtica CC.
Es una mtrica que proporciona una medida de la complejidad lgica de un componente
software y se calcula a partir del grafo de flujo de la siguiente manera:
CC = nmero de arcos nmero de nodos + 2.
El valor CC indica el mximo nmero de caminos independientes en el grafo. Por ejemplo, para
una sentencia if:
85
Ejemplo:
86
87
Con este tipo de pruebas tenemos la ventaja de que podemos crear los casos de prueba antes
de implementar el cdigo cosa bastante til si queremos seguir una metodologa de desarrollo
guiada por las pruebas.
Dentro de este tipo de mtodo vamos a ver uno en concreto, la prueba de particiones
equivalentes.
Prueba de particiones equivalentes.
Este mtodo garantiza que probamos con todas las particiones necesarias en los datos de
entrada. Este es su objetivo, probar todas y cada una de las particiones de entrada y salida
tanto vlidas como invlidas.
Todos los datos que pertenecen a una particin de entrada tienen el mismo comportamiento
dentro de la caja negra a probar, es decir, si una particin vlida son los nmeros positivos
cualquier valor dentro de ese grupo har que el programa se comporte igual y provoque la
misma salida (suponiendo que solo se tenga una entrada).
Pasos para disear las pruebas.
Para crear los casos de prueba primero tenemos que crear las particiones de entrada y de
salida vlida y no vlida para cada uno de los parmetros de entrada y de salida.
Luego hay que combinar esas particiones de entrada y de salida cumpliendo una serie de
restricciones:
-
88
Como mximo solo se puede probar una clase invlida en cada uno de los casos de
prueba (cada fila de la tabla de casos de prueba puede contener como mucho una
entrada no vlida).
Cada uno de los casos de prueba puede ejercitar cualquier nmero de entradas vlidas
(cada fila puede contener ms de una entrada vlida).
La tabla resultante tendr las filas necesarias para que todas las clases vlidas y no
vlidas sean probadas al menos una vez.
Si nos presentan una tabla de este tipo pero sin la columna de clases ni la de caminos nos ser
imposible distinguir el mtodo por el cual se han diseado los casos de prueba.
JUnit automatiza esta tabla y no tienen en cuenta el mtodo usado para disear los casos de
prueba.
Reglas para obtener las particiones.
Se presentan algunas maneras de generar particiones que luego se tendrn que combinar para
casos ms complejos.
Adems podemos crear particiones con valores lmite para probar valores que estn cerca de
los lmites de las particiones.
Veremos ms casos y ejemplos en las prcticas.
89
90
En cuanto a la validacin:
-
91
Implica probar el programa implementado para ver si satisface las necesidades del
cliente.
Se trata de responder: Estamos construyendo el programa correcto?
Buscamos que el programa funcione correctamente usando los casos de prueba que
reflejen el uso esperado del sistema.
Adems de saber que es cada cosa y el proceso de las pruebas no hay que dejar pasar el
trmino depuracin y destacar que son procesos distintos, las pruebas y la depuracin.
El primero de ellos pone en evidencia la presencia de errores y el otro localiza y repara los
errores.
Normalmente, en proyectos grandes, estas actividades las realizan dos persos distintas pero en
proyectos relativamente pequeos lo puede hacer la misma persona cambiando de rol.
92
Dinmicas.
Estticas.
Especial mencin requieren las pruebas de integracin, implicando este proceso construir el
sistema a partir de sus componentes individuales y probar el (sub)sistema resultante para
detectar defectos en las interacciones entre dichos componentes.
Este tipo de pruebas suelen realizarse de forma incremental. Lo fundamental es el orden a
seguir a la hora de hacer la integracin disponiendo de dos modelos segn el orden de las
llamadas entre componentes.
93
94
95
96
Los stubs proporcionan respuestas predefinidas para las unidades a probar, de forma que se
pueden hacer aserciones sobre la forma en que dicha unidad reacciona ante dichas respuestas.
Se hace una verificacin de los resultados obtenidos basada en el ESTADO, es decir, se
comprueba que la unidad funciona correctamente examinando el resultado de la ejecucin de
dicha unidad. No importa lo que pase dentro del metodoB, sino lo que devuelve y como se
comporta la UP con ese valor de vuelta.
Ejemplo de Stub:
Queremos probar un mtodo que representa un pedido a un almacn, concretamente se trata
de Order.fill(warehouse). Si hay suficientes unidades del producto en el almacn el pedido es
procesado y se descuentan las unidades del producto correspondiente en el almacn. Si no hay
suficientes, no se procesa.
97
Los stubs son buenos usarlos porque pueden simular el comportamiento de objetos complejos
y por lo tanto, resultan tiles cuando no es prctico o resulta imposible incorporar objetos
reales en dicha unidad de prueba.
Es conveniente usarlos cuando el objeto real:
-
98
99
Mediante Herencia.
Tenemos una clase que procesa pedidos. El mtodo process calcula y aplica un descuento
sobre el pedido. El descuento se obtiene consultando el servicio PricingService que no
tenemos implementado.
100
101
Dada esa clase, implementar con JUnit las pruebas para recorrer todos los caminos del mtodo
calculaConsumo. Indicar todo el cdigo necesario para automatizar las pruebas. Asumir que
DIURNA y NOCTURNA son dos valores globales.
Yo asignar a DIURNA 5cents y a NOCTURNA 2cents.
Heredo de la clase a probar para sobreescribir el mtodo getHoraActual ya que usa una
llamada al sistema, lo sobrescribo para lo que yo quiero.
102
103