Unidad 2 S4-2
Unidad 2 S4-2
Unidad 2 S4-2
INTRODUCCIÓN
Desarrollar un software significa construirlo simplemente mediante su descripción. Está es una muy
buena razón para considerar la actividad de desarrollo de software como una ingeniería. En un nivel
más general, la relación existente entre un software y su entorno es clara ya que el software es
introducido en el mundo de modo de provocar ciertos efectos en el mismo.
Aquellas partes del mundo que afectarán al software y que serán afectadas por él será el Dominio de
Aplicación. Es allí donde los usuarios o clientes observarán si el desarrollo del software ha cumplido
su propósito.
Una de las mayores deficiencias en la práctica de construcción de software es la poca atención que se
presta a la discusión del problema. En general los desarrolladores se centran en la solución dejando
el problema inexplorado. El problema a resolver debe ser deducido a partir de su solución.
Esta aproximación orientada a la solución puede funcionar en campos donde todos los problemas
son bien conocidos, clasificados e investigados, donde la innovación se ve en la detección de nuevas
soluciones a viejos problemas.
ANTECEDENTES
El desarrollo de los sistemas tradicionales de ciclo de vida se originó en la década de 1960 para
desarrollar a gran escala funcional de sistemas de negocio en una época de grandes conglomerados
empresariales.
La idea principal era continuar el desarrollo de los sistemas de información en una muy deliberada,
estructurada y metódica, reiterando cada una de las etapas del ciclo de vida. Los sistemas de
información en torno a las actividades resueltas pesadas para el procesamiento de datos y rutinas de
cálculo.
Este documento describe el desarrollo de tareas en el contexto del ciclo de vida de la creación de
software. Lo ayudará a comprender qué incluyen las responsabilidades de desarrollo, las metas
amplias y los procesos que se llevan a cabo. En la figura se muestra una descripción general del ciclo
de vida típico para desarrollo de software.
El proceso de creación de software abarca una amplia gama de tareas; desde el diseño original hasta
la implementación final y la aceptación del cliente. La labor principal durante el desarrollo consiste
en convertir el diseño original en código de trabajo utilizando herramientas como Microsoft Visual
Studio y lenguajes como Visual Basic, C# y JavaScript. Sin embargo, habitualmente incluye alguna
participación durante el ciclo de vida completo de desarrollo de software, especialmente al trabajar
solo o en un equipo muy pequeño (en cuyo caso realizará frecuentemente una combinación de tareas
de desarrollo, pruebas y arquitectura). Las secciones siguientes describen las tareas principales del
desarrollo dentro del ciclo de vida del software.
Metodología:
Todo desarrollo de software es riesgoso y difícil de controlar, pero si no llevamos una metodología
de por medio, se obtiene clientes insatisfechos con el resultado y desarrolladores aún más.
Sin embargo muchas veces no se toma en cuenta el utilizar una metodología adecuada, sobre todo
cuando se trata de proyectos pequeños de dos o tres meses.
Con relación a los proyectos que se desarrollan con mayor envergadura, hay si se toma el sentido de
basarse en una metodología de desarrollo y se empieza a buscar cual sería la más apropiada para dicho
caso. A fin de cuenta no encontramos muchas veces la meas adecuada y se termina por hacer un
diseño propio de metodología, por supuesto no está mal siempre y cuando sirva para alcanzar el
objetivo.
Muchas veces se realiza el diseño del software de manera rígida, tal cual como el cliente lo solicito,
de esa manera cuando el cliente en la "etapa de prueba" solicita un cambio se hace muy difícil de
realizarlo, pues si se hace altera las cosas que no se habían previsto, y este es uno de los factores que
atrasan el proyecto y crea incomodidad al desarrollador y en muchas oportunidades no llegan a
cumplir con el cambio solicitado, esto conlleva malestar en el cliente puesto que no se sido tomado
en cuenta su pedido; para evitar estos incidentes se debe llegar a un acuerdo formal con el cliente al
inicio del proyecto de manera que no perjudique el desarrollo del mismo.
Muchas veces los usuarios finales se dan cuenta que dejaron de mencionar algunas cosas y lo
manifiestan en la etapa inicial del proyecto cuando se le muestra el prototipo del mismo.
Fases
RUP divide el proceso en 4 fases, dentro de las cuales se realizan varias iteraciones en número variable
según el proyecto y en las que se hace un mayor o menor hincapié en los distintas actividades.
• Inicio
Esta fase tiene como propósito definir y acordar el alcance del proyecto con los patrocinadores,
identificar los riesgos asociados al proyecto, proponer una visión muy general de la arquitectura de
software y producir el plan de las fases y el de iteraciones posteriores.
• Elaboración
En la fase de elaboración se seleccionan los casos de uso que permiten definir la arquitectura base del
sistema y se desarrollaran en esta fase, se realiza la especificación de los casos de uso seleccionados y
el primer análisis del dominio del problema, se diseña la solución preliminar.
Escribir código para componentes
Esta es la actividad central del desarrollo y la actividad que impulsa todo el proceso de creación de
software. La persona que crea el código usará una especificación o lista de requisitos que describen
lo que debe realizar un componente o sección de la aplicación, los resultados que debe generar y la
forma en que se comunicará con otras partes de la aplicación. Esta especificación puede ser en una
de muchas formas diferentes, como modelos escritos en un lenguaje de modelado estándar,
descripciones de la funcionalidad o simplemente diagramas en una pizarra.
Durante el desarrollo, se usan las funciones del lenguaje de programación elegido para crear archivos
de código fuente que contienen la serie requerida de instrucciones que ejecutará el equipo.
Básicamente, este código asimilará un conjunto de valores de entrada, realizará algún procesamiento
con estos valores y generará los resultados. Para lograr esto puede hacer uso de otros componentes
y funciones dentro del software, y también puede hacer uso de bibliotecas de códigos y funciones
que fueron escritos por el equipo u obtenidos de proveedores externos. Las herramientas y entornos
de desarrollo que se usen, como Microsoft Visual Studio (en la figura 2), ayudan a facilitar la escritura
de código al sugerir los nombres de objetos y variantes, al comprobar la sintaxis para garantizar que
se compilará correctamente y al indicar errores.
• Construcción
El propósito de esta fase es completar la funcionalidad del sistema, para ello se deben clarificar los
requisitos pendientes, administrar los cambios de acuerdo a las evaluaciones realizados por los
usuarios y se realizan las mejoras para el proyecto.
Con una revisión del código por parte de pares y gerentes se realizan dos tareas vitales. En primer
lugar, reúne los puntos de vista y las opiniones de varios desarrolladores que pueden ofrecer enfoques
alternativos, señalar errores desapercibidos o sugerir mejoras al código. Esto ayuda a optimizar la
eficiencia y el rendimiento de los códigos. En segundo lugar, ayuda a ampliar el conocimiento de
todos los miembros del equipo al compartir experiencia, lo cual mejora el desempeño de todo el
equipo con el tiempo.
Según el lenguaje de código que se use, el desarrollo implica la compilación del código fuente para
convertirlo en una forma que el equipo informático pueda ejecutar. Generalmente las herramientas y
entornos de desarrollo realizarán esta tarea. Un miembro del equipo (habitualmente el creador inicial,
luego los evaluadores) ejecuta después el código para garantizar que funcione como debería. Si el
equipo utiliza un enfoque Test Driven Design (TDD), un miembro del equipo habrá escrito
anteriormente pruebas unitarias que pueden ejecutarse para garantizar que el código se ejecuta
correctamente y genera los resultados requeridos.
La compilación, ejecución y prueba del código es un proceso iterativo que se produce mientras el
código se crea. Habitualmente, se crea primero el código mínimo básico para probar el concepto,
asegurando que se compila y ejecuta, y luego se agrega o actualiza código progresivamente para
maximizar el rendimiento y la eficiencia y, a la vez, confirmar que genera los resultados correctos.
Habitualmente estas compilaciones se realizan a diario, y el equipo de prueba trabaja con la nueva
compilación cada día para confirmar que los errores informados existentes se hayan resuelto y para
ubicar cualquier defecto nuevo.
• Transición
El propósito de esta fase es asegurar que el software esté disponible para los usuarios finales, ajustar
los errores y defectos encontrados en las pruebas de aceptación, capacitar a los usuarios y proveer el
soporte técnico necesario. Se debe verificar que el producto cumpla con las especificaciones
entregadas por las personas involucradas en el proyecto.
Si las pruebas dan como resultado errores que se informan en el código, el desarrollador debe volver
atrás, encontrar la causa de esos errores y luego cambiar el código para resolverlos. La depuración es
la tarea de localizar el origen de los errores, que se puede producir en cualquier parte del código y que
sólo puede surgir en el punto descubierto durante las pruebas. La depuración a veces se considera
como un “arte secreto” porque requiere experiencia y también un enfoque lógico, especialmente si el
error sólo aparece intermitentemente o es difícil de reproducir.
Sin embargo, las herramientas y entornos de desarrollo modernos como Visual Studio incluyen
características que permiten a los miembros del equipo recorrer el código mirando los valores de las
variables y observando cómo cambian. Esto hace que la localización de errores sea un proceso mucho
más fácil y más lógico. Otras características y herramientas que proporcionan una lista de los
procedimientos de código que se ejecutan y la forma en que el procesador del equipo informático los
maneja, ayudan al equipo a localizar errores. Además, el equipo puede agregar instrumentación (como
código para escribir eventos en archivos de registro) que supervisará el código mientras se ejecuta y
ayudará a localizar errores.
También es común que durante las pruebas de aceptación el cliente solicite cambios en características
de la aplicación a fin de ajustar el software exactamente a sus requisitos. El desarrollador
implementará estos cambios, generalmente según una revisión de los requisitos y un estudio detallado
del impacto que los cambios pueden tener sobre el resto del software. Un buen diseño original que
separe correctamente las responsabilidades de cada componente facilitará la implementación de
cambios sin afectar otras partes de la aplicación.
El ciclo de vida de desarrollo de software es un proceso iterativo, y muchas de las tareas descritas se
repiten a medida que el desarrollo continúa. Por ejemplo, durante el desarrollo el equipo puede crear
varias versiones completadas por partes del software o los componentes y luego mejorarlas o
cambiarlas según los resultados de las pruebas y los comentarios del cliente.
Los equipos más grandes por lo general operan de forma estructurada para poder administrar y
supervisar el ciclo de vida de desarrollo y el proceso de desarrollo. Existen muchos enfoques distintos
para administrar el desarrollo de software en un equipo, incluido el ciclo tradicional orientado al
diseño que se basa en tareas planeadas previamente que se siguen una a otra (el enfoque de “cascada”)
y el enfoque más orientado a comentarios donde la planeación se ejecuta en paralelo con tareas de
desarrollo según la información regular del cliente (el enfoque “ágil”). En la figura 4 se muestran estos
dos enfoques principales para el desarrollo de software.
Independientemente del enfoque de desarrollo que se use, es esencial la buena comunicación entre
los miembros del equipo y los administradores de proyectos. Aunque muchos equipos se ubican en
un solo lugar, cada vez es más común que estos incluyan miembros ubicados geográficamente en
otro lugar y que en las reuniones se utilicen instalaciones para teléfono y videoconferencia. Las
reuniones programadas en forma regular a las que asisten todos los miembros del equipo, incluidos
desarrolladores, diseñadores de software (arquitectos), evaluadores y administración de proyectos, se
usan para analizar el progreso, para planear actividades y para recibir comentarios de otros miembros
del equipo y clientes. Esto garantiza que los desarrolladores estén bien informados sobre la evolución
inevitable del diseño de software y que puedan actuar según los comentarios regulares que pueden
afectar la implementación del software.
Extraer los requisitos de un producto de software es la primera etapa para crearlo. Mientras que los
clientes piensan que ellos saben lo que el software tiene que hacer, se requiere de habilidad y
experiencia en la ingeniería de software para reconocer requisitos incompletos, ambiguos o
contradictorios. El resultado del análisis de requisitos con el cliente se plasma en el documento ERS,
Especificación de Requerimientos del Sistema, cuya estructura puede venir definida por varios
estándares, tales como CMM-I. Asimismo, se define un diagrama de Entidad/Relación, en el que se
plasman las principales entidades que participarán en el desarrollo del software. La captura, análisis y
especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en
gran medida el logro de los objetivos finales. Se han ideado modelos y diversos procesos de trabajo
para estos fines. Aunque aún no está formalizada, ya se habla de la Ingeniería de Requisitos. La IEEE
Std. 830-1998 normaliza la creación de las Especificaciones de Requisitos Software (Software
Requirements Specification).
Diseño y arquitectura
Se refiere a determinar cómo funcionará de forma general sin entrar en detalles. Consiste en
incorporar consideraciones de la implementación tecnológica, como el hardware, la red, etc. Se
definen los casos de uso para cubrir las funciones que realizará el sistema, y se transforman las
entidades definidas en el análisis de requisitos en clases de diseño, obteniendo un modelo cercano a
la programación orientada a objetos.
Programación
Reducir un diseño a código puede ser la parte más obvia del trabajo de ingeniería de software, pero
no es necesariamente la porción más larga. La complejidad y la duración de esta etapa está
íntimamente ligada al o a los lenguajes de programación utilizados.
Pruebas
Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación.
Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma
integral, para así llegar al objetivo. Se considera una buena práctica el que las pruebas sean efectuadas
por alguien distinto al desarrollador que la programó, idealmente un área de pruebas; sin perjuicio de
lo anterior el programador debe hacer sus propias pruebas. En general hay dos grandes formas de
organizar un área de pruebas, la primera es que esté compuesta por personal inexperto y que
desconozca el tema de pruebas, de esta forma se evalúa que la documentación] entregada sea de
calidad, que los procesos descritos son tan claros que cualquiera puede entenderlos y el software hace
las cosas tal y como están descritas. El segundo enfoque es tener un área de pruebas conformada por
programadores con experiencia, personas que saben sin mayores indicaciones en qué condiciones
puede fallar una aplicación y que pueden poner atención en detalles que personal inexperto no
consideraría.
Documentación
Todo lo concerniente a la documentación del propio desarrollo del software y de la gestión del
proyecto, pasando por modelaciones (UML), diagramas, pruebas, manuales de usuario, manuales
técnicos, etc.; todo con el propósito de eventuales correcciones, usabilidad, mantenimiento futuro y
ampliaciones al sistema.
Mantenimiento
Mantener y mejorar el software para enfrentar errores descubiertos y nuevos requisitos. Esto puede
llevar más tiempo incluso que el desarrollo inicial del software. Alrededor de 2/3 de toda la ingeniería
de software tiene que ver con dar mantenimiento. Una pequeña parte de este trabajo consiste en
arreglar errores, o bugs. La mayor parte consiste en extender el sistema para hacer nuevas cosas. De
manera similar, alrededor de 2/3 de toda la Ingeniería civil, Arquitectura y trabajo de construcción es
dar mantenimiento.
Se puede decir que con la mejora continua garantiza la calidad del producto, ya que el estarla aplicando
día con día es la mejor decisión que puede llegar a tener cualquier empresa, porque de esta manera
evita grandes problemas en la elaboración o desarrollo de los productos. Esto es fundamental para
todas las empresas ya que se vuelven competitivas, con mayor productividad y eficiencia. No hay que
olvidar que la mejora se da porque el cliente es el rey y hay que satisfacer todas y cada una de sus
necesidades siempre garantizando la calidad.
Importancia
Actualmente la transición que estamos viviendo hacia una sociedad del conocimiento ha cambiado
profundamente las relaciones entre las personas, empresas y gobiernos: las empresas usan la red para
comunicarse con los clientes, utilizan también herramientas de gestión del conocimiento para hacer
más eficientes, los gobiernos mejoran su presencia en Internet y los servicios a los ciudadanos a través
de la red, los usuarios usan las herramientas para sus relaciones personales, etc. Se va de forma
imparable hacia una sociedad altamente interconectada donde el eje fundamental es la información.
El software es el intermediario cada vez más grande entre la información y la inteligencia humana.
De la misma manera que preocupa para poder acceder a la información, si existe la censura, es tema
de preocupación de quien controla este intermediario y las garantías de su transparencia y
confiabilidad.
Está compuesto por un conjunto de instrucciones que el usuario realiza para ejecutar una función
específica. Normalmente los programadores escriben en un lenguaje en el que todos pueden entender
y que después es traducido al lenguaje binario el único que las máquinas entienden. El conjunto de
órdenes en el lenguaje que todos trabajan se llaman código fuente.
Si no se accede al código solo se puede usar el programa, no se puede ver cómo está hecho o
introducir comentarios. Un ejemplo muy utilizado es el de la receta de cocina, en el que el código
fuente son las instrucciones que permite confeccionar un plato. Sin la receta solo se pude degustar el
plato, pero no se sabe si se le añade algo vaya en contra de algunos de esos ingredientes ya que se
desconocen su composición y proporción. En este sentido, el código fuente juega un papel
fundamental en la manera como se debe entender el software.
Se podrían poner varios ejemplos para entender dicha importancia. A finales de los 90 se pudo ver
en todo el mundo la preocupación por parte de empresa y gobiernos por las consecuencias que podían
tener el llamado efecto 2000. El famoso error informático era debido al hecho de que muchos
programas almacenaban la parte de la fecha correspondiente al año utilizando únicamente dos dígitos,
de tal manera, que después del año 99 (el 1999) podíamos pasar al año 00 (¿año 2000 o año 1900?)
Causando todo tipo de errores en el cálculo de período de tiempo.
Los ordenadores de las empresas eléctricas, centrales nucleares, sistema de control de aviación,
bancos y en general, todo el software de uso cotidiano, tuvieron que ser revisados. Finalmente algunas
aplicaciones fueron corregidas, otras ya funcionaban correctamente y no hubo que lamentar ninguna
catástrofe, pero hubo miles de predicciones apocalípticas sobre las consecuencias que se podría llegar
a obtener este error, así podría haber sido si no se hubiera reparado a tiempo.
Es por eso, el software tiene un papel muy importante en la sociedad sobre manera garantizar
métodos trasparentes en sus diferentes fases de producción y explotación.
No existe consenso sobre cuál es el mejor modelo del proceso software. Distintos equipos de
desarrollo pueden utilizar diferentes modelos de proceso software para producir el mismo tipo de
sistema software. Sin embargo, algunos modelos son más apropiados para producir ciertos tipos de
sistemas, de forma que si no se utiliza un modelo adecuado puede ocurrir que el sistema software
resultante sea de menor calidad.
El reparto de costes entre las distintas fases del proceso de desarrollo es difícil de determinar dado
los distintos modelos de proceso existentes. Sin embargo, en dependencia del modelo que se adopte,
al menos el 60% del coste total se emplea en la actividad de evolución del sistema. La estimación de
este porcentaje es pesimista, ya que la tasa de crecimiento de nuevos productos software es mucho
mayor que la tasa de productos software que quedan en desuso (no tienen que ser mantenidos), por
lo que el número de operaciones de mantenimiento que se realizan sigue aumentando. El proceso de
diseño software debería, por tanto, tener en cuenta la posterior evolución del sistema.
Sin embargo, su principal problema reside en su poca flexibilidad al separar el proceso de desarrollo
en etapas totalmente distintas. En la práctica estas etapas no tienen fronteras tan bien definidas, lo
que hace que, en no pocas ocasiones, se solapen y compartan información.
Los principales problemas de este modelo son: dificultad para realizar prototipos, reutilizar software
y realizar pruebas sin disponer de una implementación del sistema.
Modelo evolutivo
En este modelo se entrelazan las actividades de especificación, desarrollo y validación. Inicialmente,
se desarrolla rápidamente un sistema inicial a partir de una especificación muy abstracta. El sistema
se va refinando con la información que van suministrando los clientes y/o usuarios hasta que se
obtiene un sistema final que satisfaga todas las necesidades previstas. El sistema final obtenido puede
rediseñarse para producir otro más robusto y más fácil de mantener. En la figura 2 se esquematiza
este modelo.
Prototipado desechable: Su objetivo es entender los requisitos del cliente. El resultado del proceso es
la especificación del sistema (el prototipo se deshecha).
Los principales problemas de este modelo son: escasa visibilidad; los continuos cambios que hacen
que los sistemas desarrollados estén deficientemente estructurados; y la necesidad de disponer, en
muchos casos, de un equipo de desarrollo altamente calificado. Estos problemas hacen que la
aplicación de este modelo se suela limitar a sistemas interactivos de tamaño pequeño o mediano. La
deficiente estructura dificulta las tareas de mantenimiento de ahí que se suela aplicar a sistemas con
una vida corta y a partes de grandes sistemas, especialmente a sistemas de inteligencia artificial y a
interfaces de usuario.
Modelo transformacional
Se basa en disponer de una especificación formal del sistema y en transformar, con métodos
matemáticos, esta especificación en una implementación. Si las transformaciones que se aplican son
correctas es posible asegurar que el sistema construido satisface la especificación, es decir, es posible
obtener programas correctos por construcción.
Figura 3: Modelo transformacional.
Modelo basado en reutilización: En este modelo se supone que alguno de los componentes del
sistema final ya existe. El proceso de desarrollo se centra en integrar las partes ya existentes más que
en construir todo el sistema desde el principio.
Las ventajas que desde un punto de vista económico puede producir este modelo actualmente
empiezan a ser estudiadas en profundidad. Prácticamente no existe experiencia sobre el empleo de
este modelo, si bien, se están haciendo numerosos estudios e investigaciones para posibilitar su uso.
Modelo en espiral
Desarrollado por Boehm en el año 1988 con el objetivo de reunir las ventajas de los modelos de
proceso software en cascada y de prototipado. Se incluye el análisis de riesgo como una parte
importante del proceso de desarrollo software.
El modelo tiene la forma de una espiral en la que cada vuelta representa cada una de las fases en las
que se estructura el proceso software y está organizada en cuatro sectores:
https://sites.google.com/site/metdlgsddesarrollodesoftware/antecedentes
https://www.monografias.com/trabajos39/desarrollo-del-software/desarrollo-del-software2.shtml
https://www.ecured.cu/Desarrollo_de_software
https://msdn.microsoft.com/es-es/hh126359.aspx
http://sofware1nathalygrijalva.blogspot.com/2012/10/modelo-espiral.html
https://es.wikipedia.org/wiki/Proceso_Unificado_de_Rational
http://metodologiadesoftware.blogspot.com/2012/11/fases-del-modelo-rup_27.html
https://es.slideshare.net/jcabot/mdd-desarrollo-de-software-dirigido-por-modelos-que-
funciona-de-verdad
http://todounidad3fsi.blogspot.com/2014/04/31-modelo-en-cascada_2303.html