Conceptualización
En Desarrollo De
Proyectos De
Software
Proceso De Software
Modelos Clásicos
CASCADA: se define como una secuencia de actividades, donde la estrategia principal es seguir el progreso
del desarrollo de software hacia puntos de revisión bien definidos (milestones o checkpoints) mediante
entregas calendarizadas (schedule). El modelo de cascada fue inicialmente bien recibido, dado que las
actividades de las etapas eran razonables y lógicas. Lamentablemente, no explicaba cómo modificar un
resultado, en especial, considerando lo difícil que es definir todos los requisitos de un sistema inicialmente
y que se mantengan estables y sin cambios durante el desarrollo.
INCREMENTAL: s un desarrollo inicial de la arquitectura completa del sistema, seguido de incrementos y
versiones parciales del mismo. Cada incremento tiene su propio ciclo de vida. Cada incremento agrega
funcionalidad adicional o mejorada sobre el sistema. Conforme se completa cada etapa, se verifica e
integra la versión con las demás versiones ya completadas del sistema. El desarrollo incremental evita la
teoría del “Big Bang” para el desarrollo de software, donde una gran explosión de desarrollo se transforma
repentinamente en el sistema final.
EVOLUCIONARLO: es una extensión al modelo incremental, donde los incrementos se hacen de manera
secuencial en lugar de en paralelo. Desde el punto de vista del cliente, el sistema evoluciona según se van
entregando los incrementos. Desde el punto de vista del desarrollador, los requerimientos que son claros al
principio del proyecto dictarán el incremento inicial. El modelo evolucionario es también conocido como
desarrollo rápido de aplicaciones (RAD, Rapid Application Development), que se basa tradicionalmente en el
uso de prototipos.
ESPIRAL: Es una extensión del modelo de cascada. A diferencia del modelo de cascada, que es dirigido por
documentos, el modelo de espiral se basa en una estrategia para reducir el riesgo del proyecto en áreas de
incertidumbre, como requerimientos iniciales incompletos e inestables.
MODELOS RECIENTES
GANAR-GANAR: extiende el modelo de espiral, haciendo énfasis en la identificación de las condiciones de
ganancia para todas las partes, creando un plan para alcanzar las condiciones ganadoras y los riesgos
correspondientes. El modelo no necesita mucho tiempo de gestión, lo que permite utilizarlo tanto en
proyectos pequeños, como mayores
Programación extrema (XP): Es un modelo de proceso de software que toma los principios y prácticas
aceptadas, y las lleva a niveles extremos. Tiene como objetivo reducir el riesgo en el ciclo de vida del
software mediante grupos de desarrollo pequeños. XP define varias prácticas a seguir, quizás la más
representativa del proceso de XP es la programación en pares (pair programming), donde todo desarrollo
requiere de dos programadores que trabajan juntos.
Proceso unificado (UP): El proceso unificado tiene como aspecto esencial del desarrollo de software una
visión que parte de la arquitectura del sistema, siguiendo un proceso iterativo e incremental. El proceso
integra diferentes aspectos, como son los ciclos, fases, flujos de trabajo, mitigación de riesgo, control de
calidad, administración de proyecto y control de configuración. De manera adicional, el proceso unificado
considera las cuatro “P” del desarrollo de software: personas, proyecto, producto y proceso.
Modelos De Proceso
ARQUITECTURA: define la estructura general de un sistema y varía de acuerdo con el tipo de sistema a
desarrollarse. Así, puede estar basada en elementos sencillos o componentes prefabricados de mayor
tamaño, y se especifica de acuerdo con los diferentes tipos de sistemas. Ejem: Transformación en lote,
continua, Sistemas interactivos, simulación dinámica, sistemas de tipo real y administración de transacción.
ACTIVIDAD: Las actividades definen los pasos necesarios para lograr las metas y los objetivos, las
actividades deben ser: fáciles de definir y seguir; simplificar la comprensión del sistema; y ofrecer
flexibilidad, precisión y extensibilidad. Las actividades básicas del proceso de desarrollo de software,
conocidas como el ciclo de vida del software, son: Requisitos, análisis, diseño, implementación, integración,
pruebas, documentación y mantenimiento.
MÉTODOS Y MÉTODOLOGIAS: Los métodos definen las reglas para las transformaciones internas de las
actividades, mientras que las metodologías definen el conjunto de métodos. Un método es un
procedimiento que define tareas o acciones a realizar, donde cada tarea incluye condiciones de entrada y de
salida que se deben satisfacer antes y después de completarse.Las metodologías tradicionales o
estructuradas se enfocan principalmente en la descomposición funcional de un sistema. Las metodologías
orientadas a objetos se enfocan principalmente en el modelado de un sistema en términos de objetos. A
diferencia de las metodologías estructuras, se identifican inicialmente los objetos del sistema para luego
especificar su comportamiento.
ESTRATEGIAS: Las estrategias afectan aspectos como la arquitectura del sistema, el orden en que se llevarán
a cabo las actividades del proceso y las metodologías a utilizarse. El uso de PROTOTIPOS es una estrategia
que puede aplicarse en casi todas las actividades del proceso de software. El propósito de los prototipos es
obtener rápidamente la información necesaria para ayudar en la toma de decisiones. La REUTILIZACIÓN es
la explotación de componentes desarrollados anteriormente dentro de un mismo proyecto o entre
proyectos. En un mismo proyecto, la reutilización se aprovecha mediante estructuras comunes de bajo
nivel, como procedimientos, clases o herencia. Entre proyectos, la reutilización se aprovecha mediante
estructuras comunes de alto nivel, como paquetes gráficos y bibliotecas de análisis numérico.
HERRAMIENTAS: son aplicaciones que apoyan la administración del proceso de software. El conjunto de
estas herramientas se conoce como ingeniería de software asistida por computadora. CASE. Las herramientas
varían en su apoyo a los procesos integrando componentes como editores de texto , generadores de
modelos gráficos (diagramas) generadores de código, compiladores, depuradores, verificadores,
validadores, medidores (monitores), administradores de configuración y administradores del proyecto
Entornos De Programación
Alice
Alice es un entorno de programación libre con
código abierto, desarrollado en Java por la
Carnegie Mellon University en 2004, en el se
crean historias, juegos y videos que se pueden
compartir en el sitio web. Es un entorno
intuitivo y fácil de usar por medio del cual los
estudiantes pueden aprender conceptos básicos
de programación orientada a objetos, para
construir algoritmos se utilizan bloques drag
and drop que se visualizan de forma gráfica.
El entorno cuenta con una interfaz atractiva por
ser tridimensional, colorida y de fácil
comprensión, este aspecto incentivo a los
estudiantes a realizar las actividades que se les
proponen. Alice como herramienta de
programación promueven aspectos relacionados
con el pensamiento computacional como el
modelado, la abstracción, el pensamiento
algorítmico y la modularización.
Requisitos software/hardware: Existen versiones para
Windows Vista, XP, 2000, Windows 7 y 8, así como para Linux,
Huayra, Ubuntu y RedHat, procesador Pentium II, similar o
superior, 1Gb de memoria RAM. Para la versión Alice 3.1 se
recomienda tener 2GB de memoria RAM y tener instalada Java
JDK.
Alice utiliza una interfaz gráfica basada en la
programación visual. La interfaz de Alice está
diseñada para ser intuitiva y accesible,
especialmente para principiantes, permitiendo a
los usuarios crear programas mediante la
manipulación directa de objetos en un entorno 3D
y la construcción de scripts mediante bloques.
Tecnología Orientada a Objetos
Conceptos
Básicos
CONCEPTOS DE LA PROGRAMACIÓN
TRADICIONAL: Consta de múltiples
datos y funciones “globales”. Esta forma
de programación estructurada tiene sus
orígenes en las primeras computadoras
modernas basadas en la arquitectura
Von Neumann, donde las instrucciones
de un programa se guardaban en
memoria creando el concepto de
programa almacenado.
Tiene 2 problemas
principales
El primero es obligar a un programador a que
organice su programa de acuerdo con la
arquitectura de la computadora, en otras
palabras, que piense como la máquina.
Debería ser lo opuesto.
El segundo es que al estar separados de
las funciones, los datos se vuelven
globalmente visibles para poder ser
llamados. Dada esta situación, cualquier
cambio en la estructura de alguno de los
datos pudiera llegar a requerir la
modificación de todas las funciones del
programa en correspondencia con los
cambios en los datos.
CONCEPTOS DE LA
PROGRAMACION ORIENTADA A
OBJETOS: define una estructura de
más alto nivel llamada objeto. En
general, un programa orientado a
objetos se define exclusivamente
en términos de objetos y sus
relaciones
Ofrece 2
ventajas:
La segunda es que los datos
globales desaparecen, siendo
éstos junto con las funciones
parte interna de los objetos. Por
lo tanto, cualquier cambio en la
estructura de alguno de los datos
sólo debiera afectar las funciones
definidas en ese mismo objeto y
no en los demás
La primera es permitir al
programador que organice su
programa de acuerdo con
abstracciones de más alto nivel,
siendo éstas más cercanas a la
manera de pensar de la gente.
Programación y Lenguajes
Orientados a Objetos
ABSTRACCIÓN: Consiste en elevar el nivel de
las representaciones necesarias para un
sistema de software, de manera que se
reduzcan los detalles. Cuanto más alto sea
el nivel de la representación, menor será el
número de elementos necesarios para
representar un sistema completo y más
fácil será el manejo de la complejidad .
MODULARIDAD: permite dividir un sistema
en componentes separados- Esto reduce el
número final de componentes en un
sistema y a su vez, facilita su operación y
mantenimiento. El número final de módulos
u objetos es menor que el número de datos
y funciones . Esto reduce la complejidad de
la aplicación.
EXTENSIBILIDAD: Corresponde a la facilidad de
modificar un sistema durante el transcurso de
su vida. Los sistemas compuestos por múltiples
módulos facilitan esta extensibilidad dado que
los cambios en el sistema se pueden,
generalmente, reducir a cambios en módulos
particulares y no en todo el sistema a la vez
REUTILIZACIÓN: La reutilización reduce el
tiempo de diseño, codificación y costo del
sistemaal amortizar el esfuerzo sobre
varios desarrollos. los lenguajesorientados
a objetos aumentan sustancialmente las
posibilidades de reutilización gracias a la
mayormodularidad de los sistemas .
Aspectos
ENCAPSULACIÓN: es el mecanismo básico de
la programación orientada a objetos para
ocultar los detalles internos del objeto de los
demás objetos. El encapsulamiento permite
distinguir entre la interface del objeto, o sea,
los aspectos del objeto conocidos
externamente, y su implemen-tación, o sea,
sus aspectos conocidos sólo internamente.
Características
CLASIFICACIÓN: En la programación orientada a
objetos, la clasificación permite organizar objetos
de acuerdo con estructuras comunes. Los objetos
con datos y funciones similares se clasifican como
si fueran de una misma clase. Éstos podrán tener
datos con valores distintos.
GENERALIZACIÓN: Mediante la generalización, las
clases con estructura y comportamiento similar
se pueden reutilizar en la definición de nuevas
clases, siendo éstas más especializadas que las
anteriores. Las clases anteriores más
especializadas son conocidas como subclases,
mientras que las más generales son superclases.
El mecanismo para describir jerarquías de
generalización de clases se conoce como
herencia.
POLIMORFISMO: Mediante el polimorfismo se
definen múltiples funciones con nombres e
interfaces similares sólo que en distintas clases.
Las funciones son implementadas de manera
diferente en las clases. El polimorfismo es útil para
extender la funcionalidad del sistema al definir
nuevas clases aún desconocidas al momento de
especificarlo.
Lenguajes de Programación
Costo y Complejidad del
Software
Costos Ocultos y
Consecuencias por
Fallas Del Software
CONSECUENCIAS INMEDIATAS Y EFECTOS DIRECTOS:
Son los perjuicios ocasionados mientras dura la
caída de los sistemas. En el caso de sistemas de
misión crítica, de los cuales depende la operación
exitosa de una empresa.
CONSECUENCIAS A MEDIANO Y LARGO PLAZO Y EFECTOS
INDIRECTOS: Son los perjuicios posteriores a la caída de los
sistemas. Las consecuencias varían, desde la restauración
de datos, servicios de emergencia, propaganda negativa y
pérdida de clientes, hasta posibles accidentes y juicios en
contra.
Complejidad
del Software
SOFTWARE SUFICIENTEMENTE BUENO: Un sistema se puede
considerar correcto o exitoso cuando satisface y posiblemente
excede los deseos de los usuarios al momento de
utilizarse.También se considera exitoso si el sistema se
termina a tiempo, de manera económica y permitiendo
modificaciones y extensiones posteriores. La incorporación
frecuente de nueva funcionalidad a un producto es
finalmente la base del negocio de una compañía de software.
CONFIABILIDAD DEL SOFTWARE: depende de la cantidad de
errores que un sistema posea, cuanto menor sea ésta,
mayor será su confiabilidad. Aunque es casi imposible
lograr software 100% confiable y robusto, o sea, software
perfecto, es posible reducir el número de fallas o defectos
que contenga.
LA BALA DE PLATA: , Brooks deja un desafío a las futuras
generaciones: “según miramos al horizonte de una década, no
vemos ninguna bala de plata. No existe un solo desarrollo, en
la tecnología o técnica de administración, que por sí mismo
prometa incluso una mejora de un orden de magnitud en
productividad, confiabilidad, simplicidad, dentro de una
década”. En otras palabras, Brooks sugiere que no hay nada en
el horizonte que permita mejorar la calidad del software de
manera drástica, dados los avances tecnológicos de ese
momento y los que están en puerta
CICLO DE VIDA DEL SOFTWARE: comienza con la formulación de un
problema, seguido por la especificación de requisitos, análisis,
diseño, implementación o codificación, integración y pruebas del
software. Después viene una fase operacional durante la cual se
mantiene y extiende el sistema. La mayor parte de los avances en la
productividad del software se han dado históricamente gracias a
herramientas, ambientes y lenguajes de programación que reducen
el esfuerzo en el desarrollo de las tareas secundarias o accidentales.