#+title: 16 4

* Producto
** Documentacion
Para poder hacer un sistema necesitamos poder hacer un analisis de los requerimientos necesarios por el cliente. En esto se engloba la creacion de documentacion (manuales, diagramas de clases).

** Programas
Cuando hacemos el sistema creamos distintos artefactos, ejecutables, etc.

** Datos
El diseño logico de datos.

* Ciclos de vida
** Hardware
#+begin_quote
Un disco duro se rompe o con su tiempo de vida o por errores de fabricacion
#+end_quote

[[src][title]]

** Software
Cuando hacemos un sistema nunca vamos a tener una version final al primer intento por lo cual vamos a necesitar editar el codigo para poder adecuar el sistema a los nuevos requerimientos.

Llegado a un punto el software si no fue hecho con la idea de soportar cambios en un futuro

Si no se hace de esa forma llegado a un punto el desarrollo del sistema va a sufrir de un mal diseño a lo largo del tiempo por lo cual el cliente queda con las opciones de o hacer una reingenieria o cambiar el sistema.

*Por lo que encontrar un error en una etapa tardia es 50x más caro que en una temprana*

* Proceso
** Incremental
- Cascada \\
  ir => A => D => C => P => I

- Incremental \\
  Repite el desarrollo cascada pero con la diferencia de que luego de terminar la implementacion vuelve a empezar otra etapa cascada para ponerle más caracteristicas al sistema.

- ORA \\
  Desde el *ir* se puede dividir el trabajo entre diferentes equipos, de forma paralela

** Iteractivos
- Prototipos \\

- Espiral \\
** Iterativos & Incremental
- Unificado \\

- ICONIX \\

** Agile
- XP \\

- Scrum \\

- Kanban \\


* Principios del agile
1. Nuestra principal prioridad es satisfacer al cliente a través de la entrega temprana y continua de software de valor.
2. Son bienvenidos los requisitos cambiantes, incluso si llegan tarde al desarrollo. Los procesos ágiles se doblegan al cambio como ventaja competitiva para el cliente.
3. Entregar con frecuencia software que funcione, en periodos de un par de semanas hasta un par de meses, con preferencia en los periodos breves.
4. Las personas del negocio y los desarrolladores deben trabajar juntos de forma cotidiana a través del proyecto.
5. Construcción de proyectos en torno a individuos motivados, dándoles la oportunidad y el respaldo que necesitan y procurándoles confianza para que realicen la tarea.
6. La forma más eficiente y efectiva de comunicar información de ida y vuelta dentro de un equipo de desarrollo es mediante la conversación cara a cara.
7. El software que funciona es la principal medida del progreso.
8. Los procesos ágiles promueven el desarrollo sostenido. Los patrocinadores, desarrolladores y usuarios deben mantener un ritmo constante de forma indefinida.
9. La atención continua a la excelencia técnica enaltece la agilidad.
10. La simplicidad como arte de maximizar la cantidad de trabajo que se hace, es esencial.
11. Las mejores arquitecturas, requisitos y diseños emergen de equipos que se autoorganizan.
12. En intervalos regulares, el equipo reflexiona sobre la forma de ser más efectivo y ajusta su conducta en consecuencia.
