Subido por cervantesfelipe2003

2022 IS 2 1 Tarea 01 Cervantes Hernandez Jose Felipe 01

Anuncio
Importancia de una planificación de un desarrollo
de Software
José Felipe Cervantes Hernández
Facultad de Informática Culiacán, Universidad Autónoma de Sinaloa
[email protected]
Resumen
El software es todo lo que administra y maneja nuestro computador, se encarga de llevar a
cabo la comunicación entre hardware y usuario, ya que los dispositivos como teclado y
ratón no tendrían utilidad si no tuvieran un software que los manejase, estos se clasifican
como, sistemas operativos, software de programación y software de aplicación, siendo este
ultimo y el primero los mas comunes ya que sin un sistema operativo no seriamos capaces
de usar nuestra computadora, incluso no podríamos usar nuestro celular, el proceso de
creación de un software no se puede generalizar, ya que cada software tiene sus objetivos
y resuelve distintos problemas, o necesidades, así que primero se debe llevar una
planificación de que necesidad vamos a cubrir, las tareas que debemos llevar a cabo, la
documentación de cada proceso que se llevará a cabo, el análisis de como se van a resolver
las problemáticas que se presenten dentro del desarrollo de nuestro software, traducir todo
el proyecto a un lenguaje o varios lenguajes de programación, y por ultimo entregarlo en
una fase de mantenimiento o beta, donde todos los errores que hayan quedado o surjan
durante su uso sean resueltos en la brevedad que salen, para darle una garantía al cliente
que su software será de calidad, además debemos cuidar que nuestro software sea
confiable, este bien optimizado, rápido y disponible para cualquier plataforma que desee el
cliente.
Introducción
En esta investigación, indagaremos profundamente el concepto de “Software”, partiendo de la
pregunta inicial ¿Qué es el Software?; viendo más de cerca como es su elaboración, su
implementación en diferentes ámbitos y como es que cualquier tipo de dispositivo electrónico
actual posee algún tipo de software para el buen funcionamiento de estos mismos; así mismo ver
los distintos tipos de software; además de su uso en el campo educativo, su proceso de desarrollo
y algunos conceptos de la ingeniería en software. Analizaremos algunas metodologías para el
desarrollo del software y sus criterios de selección para una correcta ejecución de estas; sus
principios éticos y algunas aplicaciones de la ingeniería en software.
Además, veremos los distintos tipos de métodos para realizar un proyecto de software y todas
las fases por las que se deben pasar para poder desarrollar un software.
¿Qué es el software?
El software son todos los programas o códigos informáticos que permiten una interacción
armoniosa entre el hardware y usuario, un gran ejemplo de software y la razón por la cual
podemos usar nuestras computadoras de manera intuitiva y rápida es el sistema operativo.
Este a su vez se encarga de elaborar, almacenar y procesar cierta información que forma parte
de cualquier sistema de cómputo, siguiendo un conjunto de instrucciones, procedimientos, reglas
datos y documentación respectivos.
Clasificación del software
La clasificación de un software es complicada, debido a que la cantidad de software que existe
en la actualidad (año 2022), es casi prácticamente infinita, así que este se clasifica respecto a su
función, o el campo donde se desarrolla.
Según el siguiente diagrama es como se clasifica el software, con los aspectos que ya
mencionamos anteriormente.
Clasificación de Software
Software
de base o
sistemas
Software de
programación.
Software de
Aplicación
Empezamos con el software base, este como habíamos mencionado en el concepto del software
se encarga de hacer funcionar nuestros dispositivos, es el que recopila la información que se
manda a través del hardware y nuevamente la envía de regreso al usuario.
Dentro de este software tenemos lo que es el sistema operativo, los drivers o controladores y
algunas librerías que nos desbloquean funciones especiales.
A partir de aquí veremos los softwares de programación, que no son más que un programa que
permite crear más programas, o, dicho de otra manera, un software que permite hacer más
software. Estos programas no se guían por las instrucciones que conocemos comúnmente, como
los clics del ratón, estos programas funcionan con su propio lenguaje, su propia sintaxis y
funciones, ya que dependiendo para que necesitásemos crear software, serán las instrucciones
que le daremos a este software de programación. Algunos ejemplos de lenguajes de
programación son Java, C y C++; Algunos sistemas operativos son creados en estos programas
o lenguajes de programación, y aunque en cada lenguaje la sintaxis es diferente, la semántica o
significado de nuestras instrucciones será la misma para cualquier lenguaje.
Por último, el software de aplicación, este se puede clasificar en dos tipos según su uso, puede
ser de uso general o de uso especifico, por ejemplo, un software de uso general se puede usar
para distintos propósitos, Word es uno de ellos, ya que en Word podemos hacer textos, cuadros,
mapas conceptuales, listas, incluyendo proyectos de investigación como el que está leyendo
usted. En cambio, el software especifico es utilizado para una sola tarea, por ejemplo, Photoshop,
el cual es exclusivamente para edición de fotografías, y aunque la comunidad haga un uso distinto
de este, el propósito principal es el antes mencionado, al igual que Audacity, este es para edición
exclusiva de audio, evidentemente para diferentes propósitos, pero solo te permite editar audios.
Características del software
Como ya sabemos, un software es todo un conjunto de programas, instrucciones y
procedimientos que se relacionan con el funcionamiento de un sistema informático, esto
incluyendo el sistema operativo de nuestras computadoras.
El software posee 3 características principales, características operativas, de transición, revisión.
Las características operativas del software son factores de funcionalidad, es como se mira el
software desde la perspectiva de los usuarios, los aspectos principales de la “parte exterior” son:






Corrección: Se debe cumplir con todas las exigencias del cliente hasta que este mismo
este satisfecho.
Usabilidad: Este software además de cumplir con las exigencias del cliente, la interfaz
debe ser intuitiva y fácil de usar, además que el cliente pueda aprender rápidamente a
usar todas las funcionalidades de dicho programa.
Integridad: El software no debe impedir con el rendimiento o información del cliente, al ser
un software de calidad no debe ser invasivo para el equipo de nuestro cliente.
Fiabilidad: El producto final no debe tener ni un solo defecto o fallo y lo más importante,
no debe fallar durante la ejecución de este, debe ser estable y usable al 100%.
Eficiencia: Esta es la forma en la que el software esta optimizado, un software que esta
correctamente optimizado y se considera eficiente no debe acaparar todos los recursos
del equipo, este debe ser eficaz en cuanto almacenamiento y tiempos de espera.
Seguridad: El software no debe ser vulnerable y no debe exponer la información que
nuestro cliente desee depositar en nuestro sistema.
Características de transición del software:


Interoperabilidad: Es la eficiencia con la que nuestro software intercambia información con
otros programas dentro del equipo.
Reutilización: El código fuente del software puede tener modificaciones sencillas para
cambiar el propósito de este, reduciendo los costos de producción para otro sistema con
otro propósito.

Portabilidad: Este debe ser capaz de realizar todas sus funciones de la misma manera en
todos los entornos posibles donde este se llevará a cabo.
Características de revisión de software:
Estos son los factores de ingeniería los cuales llevaran a cabo la revisión de la calidad del código
fuente, la documentación de este y su escritura.






Capacidad de mantenimiento: El mantenimiento de este para tratar cualquier tipo de bug
debe ser sencillo para cualquier usuario.
Flexibilidad: Los cambios en nuestro software deben ser simples, así poder cambiar su
propósito de manera sencilla.
Extensibilidad: Debe ser fácil de agregar funciones nuevas, sin alterar el funcionamiento
principal de este.
Escalabilidad: Debe ser fácil de actualizar para nuevas funciones.
Capacidad de prueba: Debe ser sencillo de probar para saber si contiene errores.
Modularidad: Debe contener distintos módulos independientes dentro de él.
Interacción entre hardware y software
El software de sistema como mencionamos anteriormente funciona directamente en los
dispositivos de hardware de nuestro equipo, este nos brinda una plataforma para ejecutar
cualquier aplicación, algunos ejemplos de sistemas son Windows, Linux, Unix y IOS.
Algunas similitudes entre el hardware y el software son que ambos dependen de la medida lógica,
y son deterministas, es decir que un software y un hardware funcionan siempre igual ante las
mismas instrucciones, siempre y cuando no haya algo mal dentro de alguno de estos.
Evidentemente las diferencias entre uno y otro son que el hardware es la parte física de nuestra
computadora, el software mientras tanto es todo lo intangible de nuestro equipo, sin embargo,
ninguno de estos tendría funcionalidad sin el otro. Aunque el hardware podría llegar a encender,
es porque ya tiene software dentro de él, y el software no podría ser utilizado sin algo físico que
le dé indicaciones sobre qué acción realizar.
Proceso de desarrollo de software
El proceso de desarrollo es una descripción de la secuencia de actividades a seguir por un grupo
de trabajadores para generar un conjunto de productos coherentes, los cuales cumplen con el
sistema deseado, principalmente el objetivo básico para el proceso de cualquier desarrollo de
software es:


Predecir costos.
Mantener un nivel de calidad.

Predecir el tiempo de desarrollo.
Para comenzar el desarrollo de un software se debe tener bien en mente cual es el objetivo
principal, cual es la problemática que yo deseo resolver, de lo contrario, el proyecto podría
alargarse más de lo deseado, causando retrasos en los tiempos de entrega, lo cual llevaría a
pérdidas millonarias, ya que este tipo de proyectos al no tener ningún límite físico, se puede hacer
cualquier cosa con el software, dejando volar la imaginación de los creadores.
Si bien no existe ningún proceso generalizado para todos los proyectos, existen algunas maneras
de clasificarlo dependiendo de la naturaleza del software y la experiencia de la empresa para
crear dichos softwares.
Tipos de aplicaciones:




Aplicaciones monoprocesadas: Se ejecutan en un solo computador, esta no se comunica
con ningún tipo de aplicación externa a ella.
Aplicaciones Embebidas: Se ejecuta en un entorno computarizado especial, este requiere
codiseño hardware/software, es decir, desarrollar hardware para tu software, no
necesariamente nuevo hardware, si no adaptar tu hardware a tu tipo de software o el uso
de este mismo.
Aplicaciones de tiempo real: Tiene entre sus especificaciones requerimiento temporal, es
decir aplicaciones que requieren de constante actualización, como lo pueden ser los GPS.
Aplicaciones distribuidas: Estas se ejecutan en múltiples procesadores, normalmente
requiere intercomunicación a través de alguna red.
Objetivos de un proceso de desarrollo




Tener una guía correcta de ejecución de tu proyecto que defina los procesos a seguir y
tareas que se requieren.
Mejorar la calidad del producto en cuanto la disminución del número de fallos, bajar la
severidad de cualquier defecto de nuestro software, mejorar la reusabilidad de este y que
este sea lo más estable y mantenible posible.
Mejorar la predictibilidad del producto, saber cuánto tiempo requiere y la cantidad de
trabajo que llevará.
Generar la información necesaria a los encargados de supervisar el proyecto, así ellos
harán un seguimiento más efectivo para no causar confusiones.
Específicamente un proceso de desarrollo debe proporcionar una plantilla de desarrollo del
proyecto en el cual quede bien definido el rol de cada trabajador que intervenga en él, mejorar la
calidad del producto, lo cual depende directamente de reducir los defectos que se producen en
su desarrollo, reducir la gravedad de los defectos que puedan quedar en el proyecto final, para
que estos no afecten en gran medida el desempeño de nuestro proyecto, mejorar la estabilidad
del proyecto, reducir costos y predecir el tiempo de producción.
Elementos básicos de un proyecto
Los elementos básicos de un proceso de desarrollo de software es definir los papeles que juegan
los trabajadores, las actividades que desarrollan y los productos que deben generarse. Cada
trabajador debe tener su papel dentro de él, lo que define sus actividades respectivas y los
productos que debe tener. Las actividades son todas las tareas que debe realizar el trabajador
para cumplir con su parte del proyecto, esto a alto nivel son concebidas como las fases del
proceso (especificación, análisis, etc.) mientras que las de bajo nivel son más específicas (crear
diagramas, escribir código, hacer reportes, etc.).
Los productos son documentos o información que debe ser creada como consecuencia de la
actividad que se desarrolla. El producto último es el sistema que se desarrolla, pero entre las
fases del proyecto debe generarse una gran cantidad de documentos intermedios. Cada actividad
debe tener un objetivo principal, el cual es generar productos bien definidos para el proyecto.
Escalabilidad
La escalabilidad es una propiedad importante en el proceso, ya que la dimensión de los proyectos
de desarrollo de software es muy variables e infinitas. Este describe el esfuerzo que se le debe
dar a un proyecto debe aumentar o mantenerse, nunca bajar, cuando la complejidad de un
proyecto crece, aumentan los niveles de abstracción que se usan, se incrementan la
intercomunicación entre los trabajadores, se es más difícil localizar errores. Lo más importante
es buscar que el esfuerzo crezca linealmente, ya que, si este crece de manera exponencial, el
nivel de esfuerzo no aumente en paralelo con la complejidad lo que significa que la calidad baja.
Claves tecnológicas para los procesos de desarrollo
Existen un conjunto de tecnología y criterios que facilitan los procesos de desarrollo:


Modelado Visual: Facilita la capacidad de apreciar los diferentes elementos e
interacciones del sistema en los diferentes niveles de abstracción.
Modelos Ejecutables: La mejor gestión de los errores que inevitablemente se introducen
a lo largo del proceso de desarrollo consiste en detectarlos y corregirlos tan pronto como
se cometan. Para que esto se pueda realizar eficientemente conviene tener capacidad de
realizar las pruebas directamente desde los modelos, bien mediante debbuger a nivel de
modelo, o bien, mediante la generación automática de prototipos que los hagan
ejecutables.

Relación biunívoca entre modelos y códigos: El proceso de desarrollo de las aplicaciones
se basa en modelos que se desarrollan para que los diseños sean comprensibles y
gestionables, y en código que es el producto final y es necesario que ambos se mantengan
en todas las fases sintonizados. Esto se consigue si se automatiza el tránsito entre ambos.

Automatización de las pruebas a partir de las especificaciones: El número de prueba que
hay que realizar para detectar errores se incrementa de forma acumulativa, como
consecuencia de que no solo hay que verificar los nuevos elementos sino su interferencia
con lo ya probado.

Frameworks: Los frameworks son aplicaciones parcialmente desarrolladas que se utilizan
como plantillas para el desarrollo de nuevas aplicaciones.

Desarrollo incremental e iterativo: Los sistemas de desarrollo deben basarse en la
generación iterativas de prototipos utilizables que vayan aumentando gradualmente su
funcionalidad en las sucesivas etapas hasta conseguir que sea plena.
Principales tareas en los procesos de software
Primero es necesario comprender la naturaleza del proyecto. Esto lleva su tiempo para poder
comprenderlo ya que debemos saber lo que desean los clientes, incluso cuando ellos no tienen
la idea clara de lo que quieren.
La documentación es parte fundamental de los proyectos, aunque es probable que la
documentación sufra cambios. Por esa misma razón debe de tenerse una estrategia para
conservar todos los documentos que se vayan generando en el proceso.
Parte del proceso es reunir los requisitos o metas que va cumpliendo la aplicación conforme
avanza el proyecto, analizar el problema, desarrollar una solución y crear el programa que lo
solucione.
Parte más importante del proyecto cuando está terminado es revisar todas sus partes y probarlo
para minimizar el rango de error.
Al final del proyecto se debe entregar con una “Garantía”, así podremos saber si hay errores y
solucionarlos en la brevedad con la que estos surgen.
Niveles de madurez de los procesos de desarrollo
El proceso de desarrollo de un software se divide en cinco fases o niveles, el primitivo, el cual tu
proyecto o el proceso de este no está formalizado aún, y el equipo resuelve los problemas sobre
la marcha, solo reconoce que el equipo es capaz de producir productos software, el éxito de este
mismo depende totalmente de la experiencia de las personas de tu equipo.
Pasamos con el programado, el proceso es capaz de definir tiempos o plazos medianamente
razonables y verificar los avances del proyecto en lapsos de tiempo determinados, este ya incluye
registros de costos y tiempos. El nivel sistemático es el proceso que esta sistemáticamente
definido y reduce la dependencia de los trabajadores con experiencia, es comprendido por todas
las partes que intervienen en el proyecto. Con este nivel se consigue predecir los resultados de
tu proyecto.
El nivel administrado puede predecir ciertos costos y ya incluye la programación de tareas, el
rendimiento es medible objetiva y cuantitativamente.
Por último, el nivel optimizado, que es el que hemos estado mencionando en esta investigación,
en este nivel es totalmente necesario disponer de estrategias adaptativas que permitan la
adopción de las nuevas tecnologías, su proceso es un proceso de metas e incluye de manera
sistemática el proceso mismo de la organización.
Dentro del proceso de desarrollo de aplicaciones software existen distintos modelos para la
organización de estos proyectos como, por ejemplo:
Modelo en cascada:
Este se compone por Análisis, diseño, codificación, pruebas de los distintos módulos, integración
de las soluciones, prueba de tu sistema y mantenimiento.
Aunque este modelo parece que lo tiene todo, tiene ciertos desperfectos, ya que la prueba
efectiva solo se hace cuando ya tenemos todo el código diseñado, sin embargo, esto es malo, ya
que lo más optimo es realizar pruebas cada cierto tiempo para ir descartando errores que salgan
al final, ya que cuando se descubren dichos problemas la aplicación esta desarrollada casi al
100%.
Proceso en espiral
El ciclo de vida iterativo se basa en una idea simple: Para comprender, diseñar e implementar un
sistema complejo, deben emplearse sucesivas etapas en las que en cada una de ellas se realiza
una evoluciona respectos a la anterior. Los sistemas complejos que funcionan en la Naturaleza y
en el campo de la tecnología han resultado siempre de la evolución de sistemas más simples. En
cada etapa de desarrollo del sistema es necesario conseguir que sea estable frente a los cambios
que va a suponer su evolución en la siguiente etapa. Las metodologías orientadas a objetos se
construyen alrededor de conceptos como encapsulamiento y modularidad y presentan una mayor
robustez frente a cambios. La orientación a objetos favorece el desarrollo de programas según
un método iterativo. Hay varias razones para utilizar el modelo en espiral:

Con este modelo se pueden reducir riesgos.

La generación de versiones parciales permite que el cliente se involucre en el proceso de
desarrollo de la aplicación.

Permite reunir a lo largo del proceso métrica del proceso en cada iteración. Y utilizar la
información para las siguientes. El proceso en espiral se ajusta al avance de los proyectos
típicos; sin embargo, requiere una administración mucho más cuidadosa, ya que hay que
conseguir que la documentación sea consistente después de cada iteración. En particular
el código debe corresponder al diseño documentado y debe satisfacer los requisitos
documentados.
Características del proceso iterativo
El proceso se basa en el desarrollo de prototipos ejecutables, y por tanto tangibles y medibles.
Las entregas fuerzan al equipo a dar regularmente resultados concretos, lo que evita el síndrome
del “90% terminado y 90% por hacer”
El desarrollo regular de las iteraciones facilita que se aborden desde el principio los problemas, y
si se presentan, se tenga un tiempo razonable para resolverlo.
A lo largo del desarrollo se muestran prototipo a los clientes o a los usuarios, lo que supone que:
•El usuario se enfrenta a situaciones de uso concreto y le requiere estructurar mejor sus deseos.



El usuario se constituye en colaborador del proyecto y asume su responsabilidad.
El equipo está continuamente motivado por objetivos tangibles muy próximos.
La integración se hace de forma progresiva y desaparece el Bing-Bang de la integración.

Los progresos se evalúan sobre sistemas demostrables, lo que hace que los gestores
responsables se tomen en serio los resultados intermedios.
Generación de requerimientos
Al método iterativo se le suele atribuir que fomenta la generación ilimitada de requerimientos por
parte de los clientes y usuarios. Este temor no es fundado. Sea cual sea el procedimiento de
desarrollo, las necesidades siempre aparecen cuando el cliente o el usuario se enfrenta con la
aplicación. Cuanto mejor esté elaborada la fase de especificación, se generarán menos nuevos
requerimientos.
En la figura se compara el ritmo de generación de requerimientos en el caso de proceso en
cascada y de un proceso iterativo:
•En el proceso en cascada se definen unos requerimientos iniciales como consecuencia de la
fase inicial de especificación. Luego el cliente se desentiende y los requerimientos no suben (si
acaso bajan porque el programador trata de evitar los problemas que se le presentan). Al final,
después de la integración el cliente se enfrenta con el sistema y se produce una explosión de
requerimientos cuando el plazo de finalización está muy próximo.
•En el proceso iterativo, la generación de requerimientos iniciales es la misma. En las sucesivas
iteraciones, el usuario se enfrenta con los prototipos y generan nuevos requerimientos
incrementase. Con el proceso iterativo no se produce la explosión final de requerimientos.
Casos de uso
Los casos de uso expresan la funcionalidad que los usuarios requieren de la aplicación que se
desarrolla y deben tenerse presente como los objetivos que guían las sucesivas actividades del
proceso de desarrollo de esta.
Los casos de uso formulan las necesidades de los usuarios con el lenguaje de los actores. Los
modelos de casos de uso describen los servicios que se esperan del sistema, utilizando para ello
la forma de interacciones entre los actores y el sistema.
Durante la fase de análisis de los objetos, se comprueba mediante diagramas de secuencias o
de colaboración que el conjunto de objetos resultante satisface las necesidades requeridas en
los casos de uso.
Los casos de uso marcan las necesidades de la aplicación a efectos de la implementación,
fundamentalmente en lo que afecta a los requerimientos no funcionales.
Por último, los casos de uso sirven de base para establecer las pruebas funcionales que validan
la operatividad de la aplicación.
Arquitectura
La arquitectura se preocupa de la integridad, uniformidad, simplicidad, reusabilidad y estética de
la aplicación.
La arquitectura es la estructura maestra que soporta la aplicación y su formulación estable debe
hacerse al principio del proceso de desarrollo.
No existe una arquitectura universal válida para cualquier aplicación, pero si existen arquitecturas
reutilizables dentro de un ámbito concreto.
La arquitectura se ha definido como la unión de Componentes, Formas y Motivaciones. Los
componentes son las clases y objetos, las formas son las agrupaciones de clases y objetos
(patterns), y las motivaciones explican por qué cada agrupación es la adecuada en cada contexto.
Características que debe ofrecen una buena arquitectura son:





Simplicidad: Entendida como una estructura basada en pocos y bien definidos criterios.
Elegancia: Su estructura se basa en líneas bien definidas que se mantienen
uniformemente a lo largo de toda la aplicación y en la ausencia de atajos y casos
especiales que la oscurecen.
Inteligibilidad: Debe ser fácil de comprender, ya que va a ser utilizada por todos los que
intervienen en el desarrollo de la aplicación y que la utilizan como guía de sus actividades.
Niveles de abstracción bien definidos: La abstracción correcta de los componentes que
se propongan a nivel de la arquitectura es la principal herramienta para simplificar la
estructura y facilitar su evolución y reusabilidad.
Separación entre interfaz e implementación: La separación sistemática entre interfaces e
implementaciones, ayuda al mantenimiento de la aplicación. Si en el mantenimiento se
respetan las interfaces, se pueden modificar las implementaciones de un componente sin
efectos secundarios sobre otros
Análisis
Fase ingeniería en sistemas
La fase de Ingeniería de sistemas es el diseño arquitectural al máximo nivel del prototipo que
se desarrolla en la iteración actual. Es una subfase opcional que solo se ejecuta en sistemas
complejos en los que van a ser desarrollados por varios grupos de trabajo. El propósito de la
fase es descomponer el sistema en módulos independientemente especificados
(subsistemas) que puedan ser desarrollados independientemente por los diferentes equipos.
Las actividades primarias de esta fase son:
•Definir la arquitectura de subsistemas.
•Definir las interfaces y los protocolos de interacción de los subsistemas definidos.
•Definir como los subsistemas colaboran entre sí para implementar los casos de uso del
sistema, especificando los papeles que juegan cada subsistema en la colaboración, pero sin
detallar su estructura interna.
•Descomponer los casos de uso y los requerimientos del sistema en casos de uso y en
requerimientos de los subsistemas.
El producto primario usado en esta fase son los diagramas de subsistema. Estos son
diagramas de clase UML en los que los elementos primarios son subsistemas, controladores,
interfaces, actores y diagramas de secuencia de alto nivel. Sobre cada subsistema definido
en esta fase debe ser aplicado y generar los mismos productos que se desarrollaron en la
fase de análisis de requerimiento para el sistema completo.
Análisis de objetos
Un caso de uso es una caja negra que representa la funcionalidad del sistema a través de las
interacciones de los actores y el sistema. En esta fase se establece la estructura interna del
sistema. Cada caso de uso se concibe como la colaboración de un conjunto de objetos que
responden al dominio o dominios de la aplicación, que deben ser identificados y caracterizada
sus interfaces en esta fase.
Si la fase previa de ingeniería de sistemas está presente, esta fase debe realizarse
separadamente por subsistema.
Debe tenerse cuidado de minimizar la introducción de aspectos relativos al diseño. Solo debe
capturarse la funcionalidad esencial, y dejar los aspectos relativos a los requerimientos de
QoS para próximas fases.
Debe plantearse si el esquema de objetos que resulta del análisis es correcto, y para ello, en
sucesivas fases de nano ciclos, deben validarse la consistencia y completitud de la estructura
que se propone. Si se disponen herramientas de ejecución del modelo, esto puede
automatizarse, en caso contrario, pueden realizarse a través de familias de diagramas de
secuencias que ilustren los mecanismos de colaboración para los escenarios contemplados
en los casos de uso.
Los productos que se generan en esta fase son los diagramas de clases que modelan los
objetos definidos, y los diagramas de secuencias que ilustran sus colaboraciones.
Diseño arquitectural
Hay muchas formas de definir el termino arquitectura. En este curso la entendemos como el
conjunto de estrategias y decisiones de diseño que afectan globalmente al sistema. La
arquitectura se refiere principalmente a la organización estructural del sistema, y solo
implícitamente como objetivo final tiene en cuenta los aspectos de comportamiento y
funcionales del sistema.
La arquitectura se puede diseñar a base de estudiar cinco vistas complementarias que hacen
referencia a aspectos estructurales típicos en los sistemas:
•Vista de subsistemas y componentes: Hace referencia a los grandes módulos (subsistemas
y componentes) con que se construyen la aplicación.
•Vista de Concurrencia y Recursos: Hace referencia a los niveles de concurrencia que se
deben incorporar en la aplicación y en los recursos necesarios para una operación
concurrente segura.
•Vista de Seguridad y Fiabilidad: Hace referencia a los niveles de redundancia necesarios
para hacer fiable el sistema y a la gestión de los fallos que puedan producirse en la aplicación.
•Vista de Distribución: Hace referencia a como se establecen diferentes espacios de
direcciones, como se distribuyen los módulos software entre ellos, y los mecanismos,
formatos y protocolos de colaboración entre ellos.
•Vista de Despliegue: Hace referencia a la forma de mapear los componentes software en los
diferentes elementos físicos (procesadores, discos, dispositivos, etc.) que constituyen la
plataforma hardware del sistema.
La representación del diseño arquitectural utiliza los tipos de vistas propios de una descripción
estructural, esto es, diagramas de clases para definir los objetos y diagramas de secuencia
para describir las colaboraciones entre ellas.
Diseño de mecanismos
La fase de diseño de mecanismos hace referencia a la optimización de colaboraciones en
grupos individuales reducidos. Es un tipo de tarea similar a la realizada en la fase de diseño
de la arquitectura, salvo que se reduce localmente a un mecanismo de colaboración.
Al igual que en el diseño de la arquitectura, el diseño de los mecanismos debería basarse en
patrones de diseño, cuyos beneficios y efectos sean bien conocidos, sin embargo, estos
patrones son diferentes de los patrones estructurales.
La vista que se genera en esta fase de diseño de mecanismos se compone de diagramas de
clases que completan la definición de los objetos que intervienen, así como diagramas de
descripción de las interacciones tales como diagramas de secuencias, de colaboración y
diagramas de estados. A este nivel, estos dos últimos tipos de diagramas son muy útiles.
Diseño detallado
La fase de diseño detallado elabora los aspectos internos de los objetos y clases, y su
ámbito se reduce a cada clase de forma independiente. Los aspectos de las clases que son
habitualmente tratados en esta fase son:

Las estructuras de datos internas de las fases.

La implementación y optimización de los algoritmos y su descomposición cuando
son complejos.


La optimización de la máquina de estados de los objetos.
Las estrategias de elaboración de los objetos.

Las estructuras con las que se elaboran las asociaciones, en particular cuando son
múltiples y requieren mecanismos contenedores.

La implementación de las visibilidades, en especial cuando son cruzadas y no son
directamente implementables, así como los criterios de modularización y
encapsulamiento de las clases.

Estudio de los mecanismos de garantizar en tiempo de ejecución que las
precondiciones son satisfechas y como responder cuando no se satisfacen. Hay
muchos criterios y guías para realizar el diseño de las clases, y suele corresponder
con las estrategias de programación básica. No suelen basarse en patrones sino en
bloques de sentencias proporcionadas por el lenguaje. El resultado de esta fase son
clases completamente definidas, en las que sus estructuras de datos internas
quedan perfectamente definidas, así como los diagramas de estados y actividades
que especifican las operaciones y métodos de sus interfaces.
Traducción y elaboración
La fase de transducción concierne con la correcta construcción de los elementos
arquitecturales que trabajen correctamente. Esta fase incluye la generación del código (que
puede generarse automáticamente por herramientas o manualmente, o por combinación de
ambas que es lo más habitual, la prueba a nivel de código fuente de los algoritmos e
interacciones, la compilación y compatibilidad de enlazado de los módulos compilados y la
instalación y ejecución de del código ejecutable generado. Así mismo, debe establecerse
un plan de verificación de los elementos construidos. Los principales productos a que da
lugar la fase de traducción y elaboración son:

El código fuente de los elementos definidos en el diseño.



Un plan de prueba , de las asociaciones, de las operaciones y de las interacciones.
Un informe sobre los módulos elaborados y su forma de utilización.
Los componentes de software compilados.
Testeo de proyecto
La fase de Prueba construye (Integración y prueba) el prototipo con los elementos
diseñados y verifica si el prototipo satisface o no (Valida) los requerimientos funcionales y
de QoS establecidos para él. La prueba se limita a demostrar que las interfaces de los
elementos estructurales operan correctamente y satisfacen las restricciones establecidas.
El proceso suele se incremental, se van integrando sucesivos elementos estructurales y se
va verificando que operan correctamente. Si se encuentran defectos y problemas durante
esta fase, deben ser reportados y analizados ya que son el objetivo final de la iteración, y
deben ser considerados como la base de las siguientes iteraciones.
Conclusión
Es muy importante una buena planificación y análisis antes de avanzar con cualquier
proyecto de software, ya que esto nos ayuda a evitar problemas de desarrollo, ahorrar o
aproximar tiempos y costos, y esto es muy importante para las empresas, ya que estas
siempre buscan maximizar sus ganancias y reducir costos, además que los proyectos que
no se planean de manera adecuada suelen ser mas costosos y salir en tiempos mas
extensos ya que siempre salen problemas y el nivel de dificultad aumenta
desproporcionalmente conforme a el nivel de análisis del proyecto, por que un proyecto
debe estar en constante análisis, para poder así darse cuenta de los posibles errores de
nuestro proyecto. La correcta planificación de un proyecto ayuda a ahorrar costos y
maximizar la calidad de este, lo cual es lo que buscamos el 100% de los casos.
Fuentes Bibliográficas
Definición de software: Qué es, para que sirve y porque es tan importante. (s. f.). Profesional
Review. https://www.profesionalreview.com/2020/01/26/definicionsoftware/#¿Que_es_el_software
Hardware y Software. Definición. Ejemplos. Similitudes y Diferencias - CAVSI. (s. f.).
CAVSI. https://www.cavsi.com/preguntasrespuestas/hardware-y-software-definicion-ejemplos/
Informática
Básica:
¿Qué
es
hardware
y
software? (s. f.).
GCFGlobal.org. https://edu.gcfglobal.org/es/informatica-basica/que-es-hardware-y-software/1/
Software de sistema: ¿qué es? Tipos, ejemplos y características. (s. f.).
TecnoMagazine. https://tecnomagazine.net/software-de-sistema/
Vista de clasificación del software | con-ciencia boletín científico de la escuela preparatoria no.
3.
(s. f.).
REPOSITORIO
ACADÉMICO
DIGITAL. https://repository.uaeh.edu.mx/revistas/index.php/prepa3/article/view/449/5398
Descargar