Clase 19/03/2010
SOFTWARE
Tenemos que construir Software que sea confiable, debemos utilizar la experiencia.
Hacer Software de determinada manera Ingeniería de Software.
Seguir determinados principios y un enfoque para cumplir con la calidad necesaria.
El Software es distintivo, una vez que funciona, se mantiene hasta que dejo de
usarlo.
- ANÁLISIS
- DISEÑO
- CODIFICACIÓN CICLO DE VIDA BÁSICO PARA EL DESARROLLO DE
SOFTWARE
- PRUEBA
- PUESTA EN MARCHA
ACTIVIDADES DE SOMBRILLA
Se denominan Actividades Sombrilla a una serie de actividades (paraguas) que le
dé calidad a lo que hacemos, es decir al Producto Final. Dichas Actividades
protegen la calidad del desarrollo, aunque podrían no llevarse a cabo con el riesgo
de perder calidad.
- Gestión de Configuraciones
Un Software puede tener varias configuraciones
- Gestión de la reutilización
- Productos de Trabajo
Todo esto hay que documentarlo y armar un producto de trabajo.
- COMUNICACIÓN INICIAL
ANALISIS
DISEÑO
CODIFICACION
PRUEBA
PUESTA EN MARCHA
- TAMAÑO:
No es lo mismo un Software grande, que un Software chico o construir un Software
para una empresa grande que construir un Software para una empresa chica.
- COMPLEJIDAD TÉCNICA:
Lenguaje específico, interactúa con otro Software o persona, el tiempo real.
- TIEMPOS:
A veces el tiempo es una variable predefinida o acotada, cumplir fechas o
determinados plazos.
- RIESGOS:
Escenarios riesgosos, por las características del escenario puede hacer que el
proyecto se aborte. Ej: Temas políticos, cambio de gobierno.
Hay varios modelos básicos que luego pueden combinarse de acuerdo al caso que
se nos presente.
- INGENIERIA DE REQUISITOS:
Construir en esta etapa los requisitos para una aplicación
Analizar u observar (Puede no haber sistemas o personas)
Hago todos los esfuerzos necesarios para buscar esos requisitos.
- DISEÑO:
Vemos como solucionar el problema y cumplir con los requisitos.
- CODIFICACION:
Programo la solución siguiendo el diseño definido.
- PRUEBA:
Ing. De Req. D C P D
- Requisitos
- Diseño con Prototipo
- Construcción Ingeniería de
Requisitos.
- Prueba Sigue en la 1er Etapa de
- Despliegue y Retroalimentación Desarrollo de Software
(Puede surgir un nuevo prototipo o cambios en el prototipo
A veces es difícil saber a quién creerle, si tengo que ver las encuestas a quien le
creo INDEC, como voy a saber quién gana las próximas elecciones.
Generamos código muy rápido y de esa forma el Software se genera en muy poco
tiempo.
1. Ingeniería de Requisitos
2. Diseño Adaptarlo a las características de la herramienta
3. Codificación Muy rápida y semiautomatizada
4. Prueba Más rápida, tienen herramientas de prueba, se pueden generar Lotes
de Prueba.
5. Despliegue Implementación, como cualquier otro sistema.
Trata de encontrar una fórmula matemática (no con modelos matemáticos, pero si
libre de errores), para desarrollar un Software libre de errores. Valida todas las
partes del Sistema, es por esto que no se usa.
Hay Software que no puede tener errores (por ejemplo, para aviones, uso medico,
militar, etc.) a veces hay que encontrarle la vuelta a esto.
Clase teórica 09/04/2010
MODELOS
Forma de Trabajo - DESARROLLO AGIL:
- Este modelo se debe usar a conciencia, es decir sino uso ningún modelo, no puedo
decir que es un desarrollo ágil.
1. PROGRAMACION EXTREMA
Muchas prácticas
FUNCIONES:
1). INICIO:
2). OBTENCIÓN:
3). ELABORACION:
4). NEGOCIACION:
5). ESPECIFICACION:
6). VALIDAR:
Realizar Auditoria, control para que lo que voy a mandar a Diseño, se encuentre
probado y que cumpla con las reglas de la empresa, o sea lo que se especificó.
* Usuarios Tóxicos: Objetivo: Que el proyecto no funcione (tener cuidado por que
generalmente se disfrazan de buenos tipos)
Relevamiento importante:
Hay que tener más conocimiento técnico que en la primera etapa. Especialistas con
conocimientos técnicos.
- Diseño
- Codificación
- Prueba
1). DISEÑO
PROTOTIPO
Si acá llamo por teléfono
para preguntar algo, es
por que fallo la ING. DE
REQ. Sino usemos
Prototipos y consultemos todo.
Al finalizar el diseño:
$, podemos decir, que hasta el diseño sale tanto, aunque siempre se habla del
costo del Proyecto, a veces es difícil cotizar la programación, puede hacerse
después.
# Estructura de Datos
- Como van a estar relacionados los datos
# Diseño Arquitectónico
- Ver como esos procedimientos -cargar un dato, diseñar consulta, etc.- se van a
diseñar entre si.
Tiene que ver con el grado de detalle que se analiza algo, hay que ir de lo general
a lo particular, primero debo entender la totalidad del problema y luego meterme lo
más adentro para ir a lo más detallado. Debo tener una visión general de la
situación / problema.
3). MODULARIZACIÓN:
Es muy importante, ya que seria imposible hacer una solución completa, debe
modularizarse, atacando el problema en partes, me debo ocupar de problemas
pequeños. Debo generar módulos, estos módulos son reutilizables, si hago un
módulo de calculo de IVA, puedo utilizarlo cuando quiera.
Cantidad de Módulos
Para que haya modularidad, debe haber ocultamiento de la información, debe haber
variables públicas, privadas y pasaje de datos por parámetro, los módulos deben
ser independientes.
Los módulos deben depender lo menos posible de otros módulos del Sistema.
Si un módulo tiene independencia funcional, puede ser reutilizable más fácilmente.
COHESION Y ACOPLAMIENTO:
Todos los elementos técnicos, que no sean necesarios ocultarlos, sería deseable
que la pantalla sea configurada por el usuario a partir de tanto conocimiento vaya
teniendo..
Debemos ver que cosas pueden poner el usuario que vayan en contra del sistema,
limitemoslo, demos el control pero no en todo. El rendimiento del sistema no debe
correr peligro.
Debemos cuidarnos con la ayuda y los mensajes de alerta (Deben ser en momentos
oportunos)
Las nuevas versiones deben ser parecidas a las anteriores, se debe respetar las
barras de herramientas, debemos seguir los estándares que por algo ya existen, el
usuario ya está acostumbrado a usar esos estándares.
Clases Teóricas 2DO PARCIAL
Clase Teórica 07/05/2010
ETAPA DE PRUEBAS:
A medida que sigo probando, va disminuyendo la tasa de error, pero siempre voy a
seguir encontrando errores.
Cuando el costo de seguir buscando errores, es mayor que los beneficios que puede
brindar el Software funcionando como está (con errores), entonces se deja de
probar (buscando también la aceptación del usuario ante está situación). En otras
ocasiones también depende del tipo de Software, ya que si es muy critico, como de
uso medicinal, aviones, etc. entonces se busca que el mismo se encuentre
prácticamente libre de errores.
Error
Tiempo $
Asimismo es útil que el desarrollador participe de las pruebas por cuestiones del
código (Algoritmos, etc.). Es mejor siempre que este equipo de prueba externo
trabaje con el desarrollador para encontrar más errores y contemplar la mayoría de
alternativas, sobre todo en Software grandes y complejos.
(Hay que definir con que orden se hacen, cuando se hacen y con que resultados).
A. Pruebas vinculadas al código
B. Pruebas vinculadas al Funcionamiento del Software
# Libro Pressman: Por un lado esta la clasificación Caja Blanca y por otro la de Caja
Negra.
Pero agrega otra clasificación relacionada a que es un error definir un tipo u otro de
prueba, ya que siempre se termina utilizando un mix de ambos tipos.
LO QUE QUIERE DECIR CON ESTO ES QUE QUIZAS SEA MAS CONVENIENTE DEFINIR
LA PRUEBA POR EL TIPO Y TOMAR ESTE COMO UNA CARACTERISTICA, YA QUE CASI
SIEMPRE CUALQUIERA DE LOS TIPOS MENCIONADOS POSEE UN MIX DE PRUEBA DE
CAJA BLANCA Y CAJA NEGRA.
1). La gente que hace la prueba debe conocer el lenguaje en que se codifica.
2) Importante presencia del desarrollador para que sea más eficiente la prueba.
3). Voy a ver los caminos independientes del Software:
Que todas las bifurcaciones del Software, lleguen a un mismo lugar
If o Case: Dos caminos, que se cumpla la parte del “Si” y la del “Sino”
Analizar condiciones lógicas, más complejas, AND, OR, PARENTESIS. Recurrir a
las tablas lógicas para ver si las condiciones son correctas.
Es importante analizar los caminos.
4). Analizar que todas las condiciones de una determinada situación se cumplen.
Por ejemplo: A > B Ver que pasa en el sistema cuando: A > B y que pasa cuando B
> A y que pasa cuando A = B. Es decir que todas las alternativas esten
contempladas y no sólo la condición inicial (A> B).
5). Probar los ciclos o estructuras:
- FOR, WHILE, UNTIL, Etc.
Primero que se ejecuten todas las veces que haga falta. Por ejemplo: Un FOR de
1 to 100 que llegue hasta 100.
6). Ver que todos los ciclos tengan salida, que exista la forma de salir y que no
quede en un Loop eterno.
7). Analizar la estructura interna de los datos.
8). Moviendo el código puedo ver las condiciones limites para probar en Caja Negra.
Me da casos de prueba para está técnica.
Ejemplo: Si es un número: Probar los límites, los muy grandes, los muy chicos, los
positivos, los negativos (ver que pasa si pongo un negativo, la interfaz avisa o no
avisa.)
B. CAJA NEGRA:
Ciclos
Caminos Independientes (En el código cuando se ejecuta puede tener muchos
caminos)
Estructura de Datos Locales (Variables)
Interfaz
* Si quisiera probar es Caja Negra cada Módulo, tengo que ir simulando cosas, por
este motivo es problemático y se hace sólo con Caja Blanca.
- Debo ver si estos módulos se integran entre si, es decir si pasaron la prueba
anterior.
- El módulo puede andar bien, pero cuando lo empiezo a integrar puede fallar.
- Es de caja negra, por que si tiene que integrarse, tiene que correr, funcionar.
- Cual es la estrategia para integrar estos módulos?
Integro de arriba para abajo (Descendente) - Integración Incremental
Integración “Sandwich”, empiezo del medio y voy tomando en forma
intercalada un módulo de arriba y otro de abajo.
Si superamos está Prueba, significa que no hay más errores con respecto a los
requerimientos de Usuarios.
La validación es contra los Requerimientos del Usuario (lo que pidió el Usuario
y que quedo formalmente firmado y aprobado por el Cliente) y NO se valida contra
el Usuario.
Negociar que pasa cuando el cliente (que siempre tiene la última palabra), dice que
no le sirve el Sistema desarrollado.
Hay que negociar, la extensión de los plazos, quien se va a hacer cargo de los
costos, etc.
El Sistema es parte de otros Sistemas Hay que ver como se comporta con el
Entorno.
Hay Errores Lo peor que puede pasar es que siga habiendo errores.
b). Que error se puede presentar con la corrección? Ver el tema de Parches.
c). Determinado Error, porque llego hasta acá? Se pudo haber prevenido la primera
vez?
CONSTRUCCION DE SOFTWARE:
GESTION DE PROYECTOS
Las Cuatro “P” (Según Pressman, Briano no coincide del todo con esta
denominación)
1). PERSONAL:
Dos cuestiones:
1. Rendimientos Decrecientes: No se puede arreglar todo, contratando más
personal.
2. Las personas no son fácilmente reemplazables. En función de los proyectos, hay
que pensar como reemplazar a un programador. Utilizando Documentación, Planes
de capacitación, etc.
# ESTIMAR:
1). HUMANOS
2). ENTORNO (Hardware, Servidores, Comunicaciones)
3). SOFTWARE
Tamaño: Cuanto más grande es el Software, más cosas hay para estimar, por lo que
hay más probabilidad de que la estimación falle.
CALENDARIZACION:
OUTSOURCING:
1ERA DECISIÓN:
SI DESARROLLO O SI COMPRO
Datos Históricos
Información Histórica
Permite saber como estamos y como vamos mejorando respecto al proyecto actual
y desarrollos pasados.
Debe estar organizada de manera tal, que sirva para obtener estas comparaciones.
Para ello existen METRICAS, que sirven para comparar con estándares.
- Son una construcción que se hace basada en las medidas que se toman con el
objetivo de ser comparadas con estándares (propios, ajenos o generales). Por
ejemplo: Un Software determinado tiene un promedio de error por línea de código
(unidad).
# Ninguna métrica es mala o buena en sí mismo, sino que depende del historial.
Las métricas no se puede utilizar solas, si no, se debe elaborar un conjunto de
métricas
Métricas Públicas
Son aquellas que afecten al proyecto, de manera tal que los involucrados en el
proyecto conozcan el objetivo y como están respecto a ellos.
Métricas Privadas:
Cuando responde a cuestiones individuales de las personas, rendimientos
individuales. Por ejemplo: Cantidad de errores que una persona comete.
# RIESGOS:
Amenazas contra la funcionalidad del proyecto. Debe existir una persona que
piense en estos posibles riesgos, calculando la probabilidad de ocurrencia e
impacto, gestionándolo, a fin de supervisar y de esa forma reducir los riesgos.
Virus
Falla en el Hardware
Me quede sin $
Aumento en los costos
Cambio en el Lenguaje o Sistema Operativo
Cambio Normativo
Cambio de Usuarios
Corte de Luz
Incendio
Cambio de Equipo de Desarrollo
Programador enfermo
Documentación Inadecuada o Inexistente.
Robo de Información / Fraude
# Matriz de Riesgo:
Probabilidad
Impacto
# Probabilidad de ocurrencia e impacto en función del momento.
- Plan de Riesgo:
Para tratar de bajar los riesgos. Actividades de Control!.
- Plan de Contingencia
Auditoria
# Los riesgos no se terminan cuando se termina el sistema. Los riesgos continúan.
Estuvimos viendo todas las cosas que hay que hacer para construir un software de
calidad, pero….qué es calidad?
Definiciones de Calidad:
Puede evaluarse un producto por 2 atributos distintos, por ejemplo una persona
puede evaluar un producto porque es rico y otra porque es sano.
CONCEPTOS DE CALIDAD:
Hay que darle calidad a cada uno de los procesos, cumpliendo con los
requisitos de cada uno de los procesos. (No sólo una prueba de calidad me
asegura un Software de Calidad)
El Usuario debe percibir esto.
Que se actualice periódicamente.
-Nosotros tenemos que hacer un software de calidad, para esto tenemos que dar
calidad a cada uno de los procesos, además de dar calidad a los procesos debemos
informarlos al usuario. Ejemplo: Windows se destaca sobre el resto porque se
actualiza todo el tiempo, eso es sinónimo de calidad.
1. Concordancia con los requisitos especificados por los ingenieros, hacer lo que se
solicito para la construcción del Software.
2. Concordancia con el rendimiento.
3. Adecuada Documentación
4. Concordancia con estándares profesionales
Ejemplo: Para la construcción de un puente, se siguen estándares realizados por
profesionales de acuerdo a la experiencia.
Para el desarrollo del Software no existen estándares consensuados entre los
profesionales, como sucede en la creación de un puente.
Las empresas generalmente utilizan sus propios estándares, o utilizan alguno
parecido, pero no hay unión de los profesionales que digan como hacer tal cosa
relacionada al desarrollo de SW.
Se aplican a cada una de las etapas del Software, luego de cada etapa debería
introducir una Revisión Técnica (Si es formal mejor), para revisar que cada una de
estas cosas sea desarrollada como corresponde, inclusive en la Etapa de Prueba.
Auditoria Formal:
- Se realizan las que sean necesarias para asegurar la Calidad del Software. Por
ejemplo si surge algún cambio, este también se debe revisar.
- La Revisión Técnica es la que da calidad, no la prueba.
Como se relaciona esto con las Certificaciones y las Normas ISO (de
Calidad)
Sirve para demostrar a terceros que los productos de la empresa que certifica son
de Calidad.
Certificar tiene un Costo. Se Contrata a un Tercero Independiente para que
certifique que lo que la empresa hace tiene calidad.
Las Certificaciones:
CMM: Microsoft no está certificada en CMM, ni en ningún otro Estándar, por que
ellos consideran que están por encima de toda certificación.
Certificaciones de los pares: Cada vez se confía mucho más en opiniones de los
pares y comunidades de usuarios en Internet (Foros de Discusión). Aunque hay que
tener cuidado en que opinión confiar, por que nunca se sabe exactamente quien
está escribiendo.
Normas ISO
Más allá de que no es una norma utilizada frecuentemente
Existe una posibilidad de aplicar estas normas al proceso de Software. 9000, 9001,
9126.
1). Funcionalidad:
En que grado el Software satisface las necesidades para lo que fue creado
Performance, exactitud.
2). Confiabilidad:
Cantidad de Tiempo en que el Software está productivo.
Es decisivo en muchas empresas / Bancos.
5). Eficiencia:
Hacer las cosas usando la menor cantidad de recursos.
7). Portabilidad:
- Facilidad de que un Software lo pueda llevar de un lado a otro.
- Difícil portabilidad entre el Sistema Operativo (por ejemplo Windows y Linux)
- En cambio si existe portabilidad entre una notebook y una PC de Escritorio.
- Software Online: Están disponibles en cualquier momento y lugar. Google Docs,
Hotmail, etc.
- Estar en la nube hace a la Calidad.
2) ACEPTAR CAMBIOS
Se realizan los cambios solicitados por el cliente, pero no se asegura que los
cambios persistan en versiones futuras del Software.
Por ejemplo:
- Version 1, se le realizan determinados cambios solicitados por el Cliente.
- Versión 2, de acuerdo al interés del Software, si el cambio solicitado, mejora y
beneficia al resto del Software se mantiene, pero si es algo muy especifico, puede
que se mantenga el cambio o no, en nuevas versiones.
# Control de Cambios
Garantizar que se realizó adecuadamente la implementación del cambio.
Cuando hay múltiples versiones. Se puede utilizar una Base de Datos. Gestor de
Base de Datos para ver como se comportan cada una de las versiones.
Tener cuidado con los números de versión. Nombres, tener bien identificado cada
módulo para saber de que versión estoy hablando.
1). Posee Base de Datos, donde están todos los objetos (módulos) que componen la
versión final.
2). Capacidad de gestión de versiones. Permitir reconstruir el original. Para construir
el final (todas las versiones)
Gestionar las distintas versiones (actuales) y también las distintas versiones de los
módulos (anteriores).
Historial de las distintas versiones
Historial propio de cada versión Para volver para atrás.
# Entre versiones tengo que asegurar de no tocar cosas que andaban bien.
Esa porción es revisada y aprobada. Esto queda en un estado de Línea Base., algo
así como “Read Only”. Lo pueden ver pero no modificar.
Kernell / Core Si se cambi es por que salgo del proyecto original. Si funciona Ok,
no se cambia.
Para sacar el Read Only, o sea sacarlo de Línea Base, se hace a través de una RTF.
(lo que dejo de ser Línea Base, nunca más vuelve a ser línea base)
Para volver a ser Línea Base, luego de los cambios introducidos, vuelvo a hacer RTF
para conseguir el Read Only.
Línea Base: Ayuda a que cuando hay mucha gente trabajando en un mismo
proyecto, alguien toque algo e introduzca un error.
MANTENIMIENTO:
Cambios que ocurren cuando el Software esta entregado, funcionando por alguna
cuestión (no tiene nada que ver con las versiones de la Gestión de Configuración)
Muchos dicen que es una etapa más del ciclo de vida del Software.
En Argentina: Generalmente se cobra por el Mantenimiento, por que hay cosas que
no funcionan una vez que se entrega el producto. Por tal motivo es que se arma la
etapa de Mantenimiento, para llegar con el presupuesto, es decir que como muchas
veces no se cuenta con el presupuesto necesario o el mismo es mal administrado,
entonces se reducen etapas claves como la Prueba. De está forma el producto
desarrollado no cuenta con la calidad suficiente y sufre errores pos implementación.
Es ahí en donde con el supuesto Mantenimiento se intenta solucionar los problemas
que se arrastran por achicar las etapas claves para llegar con el presupuesto.
# Errores No Encontrados:
No es la única causa por la cual un Software deba ser modificado, existen otras
cuestiones (incluso si hay Garantía). Hay casos en que si o si se necesita
Mantenimiento:
1° Etapa - Análisis
2° Etapa - Reingeniería Inversa:
Reconstruyo lo que no tengo
Diseño
Desde un Fuente puedo obtener los ejecutables, obtener el código y
regenerarlo (Hay herramientas para hacer esto)
Reestructuro el código y los distintos componentes.
Una vez que llegue al inicio, arrancó con la Ingeniería de Software
Tradicional y sigue el proceso habitual.
Análisis Diseño Codificación Pruebas Implementación Garantía
# Obtengo:
- Software con algún cambio
- Partiendo de un Software existente