Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenido Virtual Ingenieria de Software - UNIDAD 1
Contenido Virtual Ingenieria de Software - UNIDAD 1
Software
Página 1 de 2
Historia
La primera vez que se acuñó el término de Ingeniería de Software fue en 1967 por un grupo de
estudio de la OTAN quienes afirmaban que la Ingeniería de Software podía compararse con otras
ciencias ingenieriles.
Un año más tarde, en 1968, en una Conferencia de la OTAN celebrada en Garmisch, Alemania, se
concluyó según los conferencistas que la Ingeniería de Software debe utilizar las filosofías y los
paradigmas de las disciplinas de ingeniería para solucionar lo que se denomina la crisis del
software, la cual hace referencia a que la calidad de los productos de software no era la adecuada,
además existían problemas en los tiempos de entrega y en los presupuestos.
Lastimosamente los años han pasado y una proporción muy grande de productos de software
todavía se entregan tarde, se exceden los presupuestos, no cumplen con las expectativas de los
clientes, no cuentan con documentación apropiada y con fallas de último momento, es por ello que
algunos autores consideran que en lugar de llamarse crisis del software, debería llamarse
depresión del software, en vista de su larga duración y mal pronóstico.
Un ingeniero de Software debe adquirir habilidades técnicas y administrativas las cuales debe
aplicar no solo a la programación, sino en cada etapa de la producción del software, desde los
requisitos hasta el mantenimiento que se efectúa luego de la entrega al cliente.
Software
Hace unos años, pocas personas podrían haber definido lo que significa software, pero en la
actualidad, la mayoría de profesionales y personas particulares consideran que entienden el
significado.
Sin embargo, para poder llegar a una definición adecuada hay que considerar las características
siguientes:
a) El software no se desgasta:
El software idealmente no debería fallar, conforme avanza el tiempo, no se desgasta como lo hace
el hardware, pero se deteriora debido a los cambios que experimenta en su vida.
Cuando un componente de hardware falla, se sustituye con un repuesto, sin embargo, al software
hay que aplicarle mantenimiento para poder corregir el deterioro lo cual es una actividad de mayor
complejidad.
b) El software se desarrolla no se construye:
El hardware se manufactura y aunque tenga similitudes con el software, las actividades son
diferentes. En ambos la calidad depende del éxito de su diseño pero tienen características
diferentes, en ambos se utilizan personas, pero los costos del software se centran en las
actividades de la ingeniería, por tanto, los proyectos no se pueden manejar como si fueran
proyectos de manufactura.
c) La mayoría de software aún se construye a la medida:
Generalmente el software se desarrolla conforme los requerimientos del cliente y de acuerdo al
problema o necesidad que se requiere resolver.
En resumen, el software está conformado por programas que incluyen líneas de código, por datos
organizados o estructurados para facilitar su manipulación sin dejar a un lado la documentación
que incluye manuales de usuario, manuales técnicos y otros documentos relacionados al software,
sin embargo, hay diferentes definiciones y puntos de vista de diversos autores que también pueden
ser de utilidad.
Definición de ingeniería de software
Podemos encontrar aún más definiciones, pero lo más importante es comprender que es la
ingeniería de software para que hagas tu propia definición.
Objetivos de la ingeniería de software
En la construcción y desarrollo de proyectos se aplican métodos y técnicas para resolver los
problemas, la informática aporta herramientas y procedimientos sobre los que se apoya la
ingeniería de software, sus objetivos son:
MATEMÁTICAS
GESTIÓN DE PROYECTOS
El desarrollo de software de gran porte requiere de una adecuada gestión del proyecto.
CREACIÓN
Los programas son construidos en una secuencia de pasos
ARTE
Los programas contienden muchos elementos artísticos.
Evolución de la ingeniería del software
Inicialmente la programación de las computadoras era un arte que no disponía de métodos
sistemáticos en que poder basarse para la realización de productos software, por ello se realizaban
sin ninguna planificación.
En el año 1950 ya se hablaba de que existían programadores que escribían programas pero no
tenían muchos conocimientos técnicos, ni experiencia.
A principios de los años 60, ya existían los programadores expertos que desarrollaban grandes
proyectos.
A finales de los años 60, surgieron los grandes sistemas comerciales de software, el trabajo ya no
consistía solo en la programación, va más allá, se crea el término “ingeniería de software”.
Desde mediados de los 60 hasta finales de los 70 se caracterizó por el establecimiento del
software como un producto que se desarrollaba para una distribución general. En esta época nació
lo que se conoce como el mantenimiento del software que se da cuando cambian los requisitos de
los usuarios y se hace necesaria la modificación del software. El esfuerzo requerido para este
mantenimiento era en la mayoría de los casos tan elevado que se hacía imposible su
mantenimiento.
A continuación, surge una etapa que se caracteriza por la
aparición de una serie de técnicas como la Programación
Estructurada y las Metodologías de Diseño que
solucionan los problemas anteriores. A finales de esta
etapa aparecen las herramientas CASE, aunque como
podemos imaginar eran muy rudimentarias.
Hoy en día, los ingenieros de software están muy
orgullosos, ya que debido a la complejidad del software
que han desarrollado a lo largo del siglo XX, es que han
logrado muchas contribuciones en todas las actividades
cotidianas que efectuamos, pero la contribución en el
siglo XXI será aún más grande, ya visitamos el espacio,
se creó Internet, el transporte es controlado por un
software, etc.
El ingeniero en general
Un ingeniero es alguien que resuelve problemas utilizando las fuerzas de la naturaleza. Sus
herramientas principales son conocimientos científicos y una serie de técnicas aprendidas por
experiencia o en sus estudios de la ingeniería.
Ingeniero en informática
Ingeniero en sistemas
Ingeniero de software
Relaciones de la ingeniería del software
El ingeniero del software como especialista se relaciona con múltiples áreas en la empresa, así
como ajenos a ella:
El cliente (usuarios).
Programadores, diseñadores, testers, mantenimiento y calidad.
La alta gerencia.
Proveedores y grupos de interés.
Características aplicables
Búsqueda de una situación que requiere un cambio. La solución deseada tiene que ser consistente
con los recursos disponibles, la solución debe ser la mejor técnicamente se denomina la solución
optima.
Responsabilidad profesional y ética del ingeniero de software
Los ingenieros de software no solo deben considerar aspectos técnicos, deben tener una visión
más amplia, en lo ético, social y profesional.
Dentro de los aspectos éticos tenemos:
Confidencialidad.
Competencia.
Derechos de propiedad intelectual.
Uso del equipo informático.
La responsabilidad en la ingeniería de software es un concepto complejo, sobre todo porque al
estar los sistemas informáticos fuertemente caracterizados por su complejidad, es difícil apreciar
sus consecuencias.
En la ingeniería del software la responsabilidad será compartida por un grupo grande de personas,
que comprende desde el ingeniero de requisitos, hasta el arquitecto software, y contando con el
diseñador, o el encargado de realizar las pruebas. Por encima de todos ellos destaca el director del
proyecto. El software demanda una clara distribución de la responsabilidad entre los diferentes
roles que se dan en el proceso de producción.
El ingeniero del software tiene una responsabilidad moral y legal limitada a las consecuencias
directas.
No basta con decir que debes poseer estándares normales de honestidad e integridad. Existen
áreas donde los estándares de comportamiento no están acotados por las leyes, sino por la noción
de la responsabilidad profesional. Algunas de estas son:
Permita a las compañías liberar el software sin revelar los defectos conocidos.
Exentar a los desarrolladores de responsabilidad penal por cualesquiera daños que
resulten debido a dichos defectos conocidos.
Restringir a otros la revelación de defectos sin permiso del desarrollador original.
Permitir la incorporación de software de autoayuda dentro de un producto que pueda
desactivar (vía comandos remotos) la operación del producto.
Exentar a los desarrolladores de software con autoayuda de los daños en caso de que el
software lo desactive una tercera persona.
Al igual que con cualquier legislación, el debate con frecuencia se centra en conflictos políticos, no
tecnológicos. Sin embargo, mucha gente considera que la legislación protectora, si se propone de
manera inadecuada, entra en conflicto con el código de ética de la ingeniería de software al exentar
indirectamente a los ingenieros de software de su responsabilidad para producir software de alta
calidad.
EVALUACION DE TEMA 2
Tema 03: Modelos del ciclo de vida del software
Página 2 de 2
Primera, los profesionales del software son humanos y, por lo tanto, cometen
equivocaciones.
Segunda, los requerimientos del cliente pueden cambiar mientras se está construyendo el
software.
¿Qué es?
Los modelos del ciclo de vida del software, también conocidos como modelos prescriptivos del
software, definen un conjunto distinto de actividades, acciones, tareas, fundamentos y productos de
trabajo que se requieren para desarrollar software de alta calidad.
No son perfectos, pero proporcionan una guía útil para el trabajo de la ingeniería del software.
¿Por qué se les llama prescriptivos?
Porque prescriben un conjunto de elementos de proceso:
Tareas.
Aseguramiento de calidad.
Modelo en cascada
El modelo en cascada es secuencial, ejecuta una lista de actividades al pie de la letra, y no se
puede efectuar la actividad dos sin haber finalizado la uno, por eso es secuencial, se sabrá el
resultado hasta que se finalicen todas las etapas o tareas y eso puede ser desastroso, ya que
cuando se conozca el resultado ya no habrá mucho tiempo para corregir el software terminado,
pero si hay tiempo, los cambios que se hagan pueden deteriorar el software.
Algunas veces llamado “Ciclo de vida clásico” sugiere:
Un enfoque sistemático secuencial hacia el desarrollo del software.
Es el paradigma más antiguo para la ingeniería del software.
En este modelo las pruebas se dejan ya casi en las últimas etapas, hoy en día, es preferible que
las pruebas se hagan lo más pronto posible, no solo al final, así se garantiza la calidad del
software.
MODELO EN CASCADA
Se utiliza cuando existen ocasiones en que los requisitos de un problema se entienden de manera
razonable, cuando el trabajo fluye desde la comunicación a través del despliegue de una manera
casi lineal. Ejemplo en adaptaciones o mejoras de un sistema de contabilidad. Cuando los
requerimientos están bien definidos.
El cliente debe tener paciencia, debe esperar que el proyecto esté bien avanzado para poder
probar una versión que funcione del programa, no puede utilizar ninguna versión
Los cambios confunden mientras el equipo del proyecto actúa. Incorporan la incertidumbre
natural. Un error grave será desastroso si no se detecta antes de la revisión del programa.
Puede servir como modelo en situaciones donde los requerimientos están fijo, y donde el trabajo
se realiza hasta su conclusión
Los requisitos iniciales del software están bien definidos en forma razonable.
Hay una necesidad imperiosa de proporcionar un conjunto de funcionalidad al usuario y
después refinarla y expandirla.
A menudo, al utilizar un modelo incremental el primer incremento es un producto esencial,
es decir, software que puede ser utilizado pero que posee solo requerimientos básicos.
En muchas situaciones los requisitos iniciales del software están bien definidos en forma
razonable, pero el enfoque global excluye un proceso puramente lineal.
Quizá haya necesidad de proporcionar un conjunto limitado de funcionalidad para el
usuario y después refinarla y expandirla en las entregas posteriores del software.
Para situaciones como estas, es conveniente utilizar el modelo incremental, ya que por cada
incremento, el usuario verá una versión funcional del software. En el siguiente incremento se habrá
mejorado y agregado nuevas funcionalidades.
Características:
Este modelo combina elementos del modelo en cascada aplicada en forma iterativa.
Aplica secuencias lineales de manera escalonada conforme avanza el tiempo en el
calendario.
Cada secuencia lineal produce incrementos de software.
En este modelo el primer incremento es un producto esencial.
Es iterativo por naturaleza.
Se enfoca en la entrega de un producto funcional con cada incremento.
Es útil cuando el personal necesario para una implementación completa no está disponible,
posiblemente el personal con mayor experiencia esté trabajando en otro proyecto. Podemos
utilizar el personal disponible para iniciar el proyecto y luego incorporar más personal para los
siguientes incrementos.
Los primeros incrementos se pueden implementar con menos gente.
Los incrementos se pueden planear para manejar los riesgos técnicos.
En este tipo de proyectos podemos comenzar con un equipo reducido de personas y conforme se
avanza en los incrementos se van incorporando más, se corre el riesgo que estas nuevas personas
no se acoplen al equipo que inició el software, pero si se planifica y documenta bien todo, el riesgo
será mínimo.
Producto y proceso
El producto de software, generalmente, nace por una necesidad o para resolver algún problema,
luego este producto pasa por un proceso de software que incluye las etapas de desarrollo, control,
gestión y operación, hasta que obtenemos el producto o la solución del software.
Es extraño que alguien diga: "Me puse a programar y me salió una contabilidad", sin embargo,
algunas aplicaciones dan la impresión de que recordar que la probabilidad de que un mono teclee
en una máquina de escribir y salga el quijote no es cero, es decir, en algunas ocasiones se puede
finalizar un producto de software sin efectuar ninguna planificación, al final el software siempre se
va finalizar, pero no será un software de calidad.
Si el proceso es débil, sin duda, el producto final sufrirá las consecuencias. Asimismo, una
confianza excesiva en el proceso es peligrosa.
La gente obtiene tanta satisfacción del proceso creativo que del producto final. Un pintor disfruta
los trazos del pincel tanto como el resultado del cuadro. Un profesional creativo del software debe
sentir tanta satisfacción del proceso como del producto terminado.
El trabajo que realizan las personas relacionadas con el software, cambiará en los años que
siguen. La dualidad del producto y el proceso es un elemento importante para mantener a las
personas creativas comprometidas mientras finaliza la transición desde la programación hasta la
ingeniería de software.
La aplicación de cualquier modelo de proceso del software debe reconocer que la adaptación es
esencial para el éxito, pero los modelos de proceso difieren de manera fundamental en:
El grado en el cual las tareas de trabajo están definidas dentro de cada actividad del marco
de trabajo.
del software.
Patrón de proceso: de tarea: definen una acción de ingeniería de software que es parte del proceso
. De escenario: definen una actividad del marco de trabajo para el proceso. De fase: definen la
secuencia de actividades del marco de trabajo que ocurre junto con el proceso .
Los patrones de proceso proporcionan un mecanismo efectivo para describir cualquier proceso de
software, sin embargo, la existencia de un proceso de software no es garantía de que este será
entregado a tiempo, esto dependerá de otros factores.
¿Por qué el proceso de software cambia tan drásticamente de una organización a otra?
La razón principal es la falta de habilidades en ingeniería de programación. Pocos profesionales se
mantienen actualizados. La mayoría sigue desarrollando software a la antigua porque no conoce
otra forma de hacerlo.
Otra razón de que haya diferencias en el proceso del software es que muchos gerentes de
software son excelentes gerentes, pero saben muy poco acerca del desarrollo de software o de su
mantenimiento. Su falta de conocimientos técnicos puede ocasionar retrasos importantes en los
calendarios de los proyectos hasta el punto de que no haya modo de continuar. Con frecuencia
este es el motivo por el que muchos proyectos de software no se terminan.
EVALUACIÓN DE TEMA 3