Qué Es El Diseño de Software

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 13

¿Qué es el diseño de software?

El diseño de software es el proceso de visionado y definición de


soluciones software a uno o más conjuntos de problemas. Uno de los
componentes principales del diseño de software es la especificación de
requisitos del software (ERS). Se trata de una parte del proceso de desarrollo
de software que enumera especificaciones empleadas en ingeniería de
software. Si el software está "automatizado" o centrado en el usuario, el
diseño de software puede implicar también el diseño de experiencia de
usuario que utiliza un storyboard o guion gráfico para ayudar determinar
esas especificaciones. Si el software es completamente automatizado (es
decir, sin usuario o interfaz de usuario), un diseño de software puede ser tan
sencillo como un diagrama de flujo o un texto describiendo una secuencia
planeada de acontecimientos. También hay métodos semiestándares como
el Lenguaje Unificado de Modelado (UML) y conceptos fundamentales de
modelado. En cualquier caso, normalmente alguna documentación del plan
resulta como producto del diseño. Además, un diseño de software puede ser
independiente de la plataforma o específico de la plataforma, dependiendo
de la disponibilidad de la tecnología utilizada para el diseño.

Importancia del diseño de software


El diseño del software ayuda a modificar elementos que se utilizan para armar
el formato que tendrá el programa, la importancia del diseño del software se
puede definir en una sola palabra: calidad; ya que dentro del diseño es
donde se establece la calidad del proyecto; El diseño es la única manera
de materializar con precisión los requerimientos del cliente.

Conceptos básicos del diseño de software


Abstracción
Existen diversos grados de abstracción, entre mayor sea el grado de la
misma se considera una solución general, entre menor sea su grado se hace
referencia a elementos de mayor especificidad.

• Abstracción procedimental: Permiten describir procesos omitiendo detalles


específicos.(ej: encender automóvil)

• Abstracción de datos: Describe las características de un objeto. (Automóvil,


no siendo necesario describir en detalle su especificación para reconocerlo).

Arquitectura
Representa la estructura general del software y la forma como interactúan
sus componentes.
“En un sentido más amplio, no solo se describe los componentes y
relaciones, también se pueden representar elementos más importantes del
sistema”.

 MODELOS ESTRUCTURALES
 MODELOS DE MARCO DE TRABAJO.
 MODELOS DINÁMICOS.
 MODELOS DEL PROCESO.
 MODELOS FUNCIONALES.

Patrones
“Un patrón es una semilla de conocimiento, la cual tiene un nombre y
transporta la esencia de una solución probada a un problema concurrente
dentro de cierto contexto en medio de intereses en competencia”.
Brad Appleton
Modularidad
“El software se divide en componentes con nombres independientes y que
es posible abordar en forma individual. Estos componentes reciben el
nombre de Módulos y se integran para satisfacer requisitos del problema”.

Ocultación de información
“Los módulos se caracterizan por ocultar las soluciones de diseño a otros.”
 Las pruebas y modificaciones se realizan de manera más cómoda.
 Se evita el ingreso de errores de frontera o involuntarios al estar
solucionando un problema.

Independencia Funcional
 Modularidad + abstracción + ocultamiento = Independencia funcional
 Módulos independientes permiten probarlos, modificarlos y
optimizarlos de manera más rápida y efectiva.
 Cohesión: Medida de la fuerza funcional relativa de un módulo.
 Acoplamiento: Medida de interdependencia entre módulos.

Refinamiento
Estrategia de diseño descendente, complemento de la abstracción.
Inicia con el enunciado de una función que maneja un alto grado de
abstracción y a medida que se producen nuevos detalles se va refinando el
enunciado.
Refabricación
“Es el proceso de cambiar un sistema de software de tal forma que no altere
el comportamiento externo de su código y aún así se mejore su estructura
interna”.

Problemas de diseño:
Redundancias, elementos inútiles, algoritmos innecesarios, estructuras de
datos inapropiados o mal construidas.

Clases de diseño
Las clases de interfaz con el usuario:
Define todas las abstracciones necesarias para la interacción humano-
computadora.
Puede ser representadas de manera visual los elementos de las
consideraciones del problema.

Las clases del dominio de negocios:


Las clases que establecen los atributos y servicios necesarios para
implementar algún elemento del dominio de negocio.

Las clases de proceso:


Implementa abstracciones del negocio en un nivel más bajo, las cuales se
requieren para manejar por completo las clases del dominio de negocios.

Las clases persistentes:


Representan almacenamientos de datos que persistirán mas allá de la
ejecución del software.

Las clases de sistema:


Implementan las funciones de gestión y control del software que permiten
que el sistema opere y se comunique dentro de su entorno y con el mundo
exterior.

Trazabilidad de requisitos ingeniería de software

Trazabilidad de requisitos es el proceso de seguimiento y documentación


de la vida de un requisito a lo largo de un proyecto. Garantiza que cada
requisito esté vinculado a los elementos relacionados del proyecto (como el
diseño, el desarrollo, las pruebas y la implementación), lo que permite a los
equipos supervisar y verificar que se cumplan los requisitos a medida que
avanza el proyecto. Esta práctica establece una ruta clara y auditable desde
el requisito inicial hasta el producto final, lo que es fundamental tanto en la
ingeniería de software como en la de sistemas.

La esencia de la trazabilidad radica en garantizar que todos los requisitos, ya


sean funcionales o no, se aborden adecuadamente durante el proceso de
desarrollo. Al mantener estos vínculos, la trazabilidad permite una transición
fluida entre las etapas de desarrollo, prueba y entrega, lo que garantiza que
nada se pase por alto o se malinterprete. Ayuda a responder preguntas
como:

 ¿Se ha implementado este requisito?


 ¿Qué pruebas verifican que se ha cumplido este requisito?
 ¿Qué código o diseño corresponde a este requerimiento?
 Si un requisito cambia, ¿qué impacto tendrá en otros
componentes?

Tipos de Requerimientos Trazabilidad

1. Trazabilidad hacia adelante: La trazabilidad hacia adelante permite


seguir el progreso de cada requisito desde su definición hasta su
implementación. Garantiza que todos los requisitos de los clientes o las
partes interesadas se tengan en cuenta y se aborden en las fases de
diseño y desarrollo. Este tipo de trazabilidad es fundamental para
supervisar la evolución de un proyecto y garantizar que se mantenga
alineado con sus objetivos iniciales.
2. Trazabilidad hacia atrás (inversa): La trazabilidad inversa
garantiza que los resultados del producto o sistema se puedan rastrear
hasta los requisitos originales. Confirma que el producto final ha
cumplido con las necesidades especificadas y que no se han agregado
características innecesarias o fuera del alcance. Este tipo de
trazabilidad también ayuda a la hora de revisar la justificación de un
requisito o identificar la fuente de una característica.
3. Trazabilidad Bidireccional: La trazabilidad bidireccional es la
capacidad de hacer un seguimiento de los requisitos tanto hacia
delante como hacia atrás. Este enfoque integral garantiza que se
implementen todos los requisitos y que cada componente del producto
final pueda rastrearse hasta un requisito específico. Proporciona una
visibilidad completa del proyecto, lo que facilita una mejor toma de
decisiones y una mejor gestión de riesgos a lo largo del ciclo de vida.

Atributos de Calidad:
Funcionalidad “Se estima al evaluar el conjunto de características y
capacidades del programa, la generalidad de las funciones que se entregan
y la seguridad del sistema en su totalidad.”

Facilidad de uso “Se valora al considerar los factores humanos, la estética,


consistencia y documentación general.”

Confiabilidad “Se evalúa al medir la frecuencia y severidad de las fallas, la


precisión de los resultados de salida, la media del momento de fallas, la
habilidad para recuperarse de las fallas y la previsibilidad del programa.”

Desempeño “Se mide con la velocidad de procesamiento, tiempo de


respuesta, consumo de recursos, rendimiento y eficacia.”

Soportabilidad
 Facilidad de mantenimiento :
 Extensibilidad
 Adaptabilidad
 Serviciabilidad
 Resistencia a pruebas.
 Compatibilidad.
 Configurabilidad.
 Facilidad de instalación.
 Facilidad localización de problemas.

Participantes en el diseño

Se necesitan más que desarrolladores e ingenieros para formar un equipo de


desarrollo de software eficaz. Se necesitan muchos roles en el ciclo de vida
del desarrollo de software, y el equipo ideal está formado por los siguientes
roles:

 Dueño del producto


 Project manager
 Diseñadores UX y UI
 Analista comercial
 Desarrolladores de software
 Líder de equipo y de tecnología (o team lead y tech lead)
 Scrum master

Dueño del producto

¿Qué hacen?

Tal como el nombre sugiere, el dueño del producto es el responsable de


todas las cosas relacionadas al producto. Asisten a las reuniones y diseñan
un producto que cree valor y cumpla con los requisitos del cliente. Están
involucrados en todas las etapas del proyecto y se adaptan a cualquier
cambio. Tienen que entender por completo las necesidades comerciales y
estar al tanto de las tendencias del mercado. Como son aquellos que
entienden mejor el producto terminado, son fundamentales para los equipos
de desarrollo de software.

¿Qué habilidades aportan al equipo?

Los mejores dueños de producto tienen una variedad de habilidades: deben


ser creativos y tener muchas ideas para ayudar a crear un producto que
cumpla con los requisitos del cliente. También deben ser analíticos, ya que
su rol incluye tomar decisiones basadas en información.

¿Con quiénes interactúan más en el equipo?

Los dueños del producto interactúan más que nada con los analistas
comerciales y con los clientes. También trabajan con los ingenieros
encargados de la calidad y con los probadores para asegurar la alta calidad
del producto final.

Project manager

¿Qué hacen?

El project manager está a cargo del desarrollo, la organización y la entrega


de un proyecto. Ellos dividen el proyecto en partes modulares y diseñan el
flujo de trabajo para distribuir las tareas entre el equipo, y además, son
responsables de los contratos, los presupuestos y los tiempos. Asimismo, la
mitigación de riesgos y la gestión de circunstancias o demoras inesperadas
son responsabilidades de los project managers. Sin ellos, no habría un plan o
estructura para entregar el trabajo.

¿Qué habilidades aportan al equipo?

Los project managers necesitan fuertes habilidades de liderazgo y


organización, ya que son los que coordinan a los distintos miembros del
equipo. También deben ser comunicadores eficaces, porque conectan a
todas las partes del proyecto y se relacionan con el cliente.

¿Con quiénes interactúan más en el equipo?

Como los project managers son los que supervisan todas las partes del
proyecto de principio a fin, interactúan con todos los miembros del equipo,
así como también con el cliente y los accionistas. Con eso dicho, el analista
comercial interactúa más con el cliente, mientras que el project
manager se enfoca más en el equipo.

Diseñadores UX y UI

¿Qué hacen?

UX significa experiencia de usuario, así que la responsabilidad principal del


diseñador UX es asegurar un resultado suave y enfocado en el usuario. Su rol
es imaginarse como el usuario final interactuando con el producto, y hacen
que este sea fácil de utilizar y se enfocan en todos los aspectos de la
experiencia: usabilidad, funcionalidad y rendimiento.

UI significa interfaz de usuario, por lo que el rol del diseñador UI se enfoca


principalmente en el software y en cómo se ve y se siente para el usuario.
Necesitan que sea intuitivo y directo.

Los diseñadores UX y UI toman la idea del cliente y el producto y utilizan


prototipos para desarrollar la idea. Son una parte fundamental del equipo de
desarrollo de software ya que son los que defienden las necesidades del
usuario. Los roles de estos dos actores se superponen mucho, y dependiendo
del tamaño del proyecto, se pueden condensar en uno solo.

¿Qué habilidades le aportan al equipo?


Los diseñadores UX y UI deben contar con un estilo creativo y un fuerte
enfoque en el diseño. Deben ser analíticos y pensar con originalidad.

¿Con quiénes interactúan más en el equipo?

A no ser que sus roles se fusionen para proyectos más pequeños, los
diseñadores UX y UI interactúan más que nada entre ellos mismos. También
trabajan de cerca con los programadores para garantizar que sus diseños
puedan realizarse.

Analista comercial

¿Qué hacen?

El analista comercial es el responsable de cumplir con las necesidades


comerciales del cliente. Esto significa que tienen en cuenta los objetivos
comerciales del cliente y lo ayudan a definir metas claras. Luego, ellos
toman estos objetivos y los convierten en soluciones de software viables.
Están involucrados en el proyecto desde el inicio, y conectan las necesidades
del cliente con las realidades del proyecto. Además, llevan a cabo análisis
del mercado, evalúan a la competencia y definen a la audiencia meta.
También crean soluciones de documentación y prueban soluciones.

¿Qué habilidades aportan al equipo?

Los analistas comerciales deben entender de números, ya que interpretan


información para defender sus decisiones. También necesitan ser
pensadores críticos y ser creativos ya que “traducen” lo que el cliente
necesita en una solución entregable.

¿Con quiénes interactúan más en el equipo?

Los analistas comerciales trabajan de cerca con el dueño del producto y con
el project manager.

Desarrolladores de software

¿Qué hacen?

Ningún proyecto de desarrollo de software está completo sin los


desarrolladores: ellos son los que crean el proyecto final al programar en un
rango de distintos lenguajes de programación. Dependiendo del nivel de
experiencia, los equipos pueden contar con desarrolladores senior, medios y
junior. En los proyectos más grandes, quizás existan distintos niveles de
experiencia en los equipos de desarrollo de software. Los programadores
junior apoyan al resto del equipo al ayudar con las tareas más fáciles para
darles más tiempo a los desarrolladores senior para que aborden las
programaciones más difíciles.

Los desarrolladores de software trabajan en conjunto según su nivel de


experiencia, según sus habilidades y según su especialización. A estos
desarrolladores se los conoce como front-end, back-end y full-stack.

Los desarrolladores front-end crean todo lo que el usuario final ve y con


lo que interactúa. Se enfocan en la usabilidad y funcionalidad del software,
mientras que los desarrolladores back-end son los responsables de los
procesos y funcionalidades que están detrás de lo que el usuario ve.

Tomemos el desarrollo de aplicaciones para ayudarnos a entender, y


utilicemos el ejemplo de una aplicación de e-commerce. Los desarrolladores
front-end programan cómo se ve la aplicación y cómo compran los usuarios,
mientras que los desarrolladores back-end programan todo lo que sucede
detrás de escena, como el inventario, la publicación de productos y la
categorización.

Los desarrolladores full-stack tienen un conocimiento más amplio pero


menos profundo de los lenguajes de programación front-end y back-end.

¿Qué habilidades aportan al equipo?

Los desarrolladores de software deben ser curiosos, ya que tienen que


probar distintos códigos al crear un software. Deben ser muy detallistas para
encontrar códigos que no funcionen y también deben contar con un
conocimiento sólido de distintos lenguajes de programación.

¿Con quiénes interactúan más en el equipo?

En el proceso de desarrollo de software, los desarrolladores trabajan de


cerca con los diseñadores UX y UI.

De todas formas, no debería confundirse a los desarrolladores con los


arquitectos de software, que tienen un rol similar pero diferente. Los
arquitectos de software diseñan la estructura interna de un código y son los
responsables del apoyo técnico a lo largo del proceso del desarrollo de
software, mientras que los ingenieros de software están a cargo de conectar
las necesidades del cliente con las soluciones técnicas.

Team lead y tech lead

¿Qué hacen?

Los términos suelen confundirse, pero el team lead y el tech lead son dos
roles que se relacionan pero que son distintos. El team lead está a cargo del
rendimiento general, la motivación y la organización de su equipo. El
desarrollador suele asumir el rol del team lead, y se aseguran de que los
miembros del equipo trabajen bien en conjunto y de que estén en el camino
correcto para entregar las soluciones de software a tiempo. A veces se
refiere a ellos como directores o arquitectos de ingeniería y son responsables
del desarrollo y aprendizaje de los miembros de su equipo.

El tech lead es el responsable de supervisar los requerimientos técnicos o de


hardware que no se relacionan al proceso de desarrollo de software en sí.
Brindan dirección técnica e integran el hardware externo.

¿Qué habilidades aportan al equipo?

Obviamente, un team lead necesita contar con fuertes habilidades de


liderazgo y comunicación.

¿Con quiénes interactúan más en el equipo?

Como son los que están a cargo, los team leads interactúan con todos los
miembros del proyecto informático.

crum master

¿Qué hacen?

El rol del scrum master es asegurarse de que el equipo siga metodologías y


estructuras ágiles (o “Agiles”, como se las conoce en inglés). Estas
metodologías son un concepto que puede describirse como una mentalidad
de gestión de proyectos que se enfoca en la colaboración y la creación de
valor. Según el Manifiesto Ágil, sus valores principales incluyen:
 Individuos e interacciones por sobre procesos y herramientas
 Software funcional por sobre documentación comprensible
 Colaboración con el cliente por sobre negociación de contratos
 Responder a los cambios por sobre seguir un plan

El “scrum” puede describirse como una forma de trabajo dentro de las


metodologías ágiles. El nombre viene del rugby, el deporte donde los
jugadores se agrupan en un “scrum” para avanzar por el campo, anotar y
ganar el juego. En la gestión de proyectos, el scrum permite un desarrollo
rápido mientras el trabajo se lleva a cabo en partes más pequeñas llamadas
sprints.

El scrum master es el responsable de cómo se siguen las estructuras en el


equipo. Su rol incluye eliminar obstáculos, crear un ambiente productivo y
ayudar al equipo a trabajar bien en conjunto. Aunque técnicamente es un
líder, no tienen autoridad por sobre otros miembros del equipo.

¿Qué habilidades aportan al equipo?

Los scrum masters deben contar con habilidades fuertes de liderazgo,


coaching y organización. También deben tener experiencia en project
management y un entendimiento profundo del desarrollo de software y de
metodologías ágiles.

¿Con quiénes interactúan más en el equipo?

Como son los responsables de garantizar el uso de las metodologías ágiles


en el equipo, los scrum masters interactúan con todos los miembros.

Estándares de calidad

La gestión de calidad del software incluye todas las operaciones y protocolos


orientados a garantizar que un desarrollo de software culmine de forma
exitosa.

Se trata de un concepto global que, a su vez, incluye los siguientes:

 QA Management. Supone un enfoque de planificación y estrategia


que observa toda la cadena de valor, accediendo a todos los beneficios
de la gestión de calidad del software.
 QA Assurance. Representa un enfoque proactivo y preventivo para
cumplir los requisitos de calidad de un software.
 QC Control. A diferencia del QA Assurance, tiene un enfoque reactivo,
buscando encontrar los potenciales errores del sistema para cumplir
los requisitos de calidad.

Qué estándares existen para la calidad del software

Los siguientes son estándares ampliamente reconocidos y utilizados en la


industria en relación a la calidad del software:

1. ISO 9001. Norma para la implementación de un método o Sistema de


Gestión de la Calidad (SGC), supone la acreditación de la capacidad
para satisfacer los requisitos de calidad. Aporta así una serie de
requisitos genéricos (no circunscritos al software) y aplicables a
cualquier organización.
2. ISO 10005:2018. Ofrece una guía para gestionar un plan de calidad
todo el ciclo de vida.
3. ISO IEC 25000. Supone una familia de normas también conocida
como SQuaRE (Software product Quality Requirements and
Evaluation), define un marco de referencia para la calidad del producto
de software. Evalúa un software en 8 áreas, incluyendo Adecuación
funcional, fiabilidad, usabilidad, eficiencia, compatibilidad, seguridad,
mantenibilidad y portabilidad.
4. ISO 33000 Calidad de los procesos de desarrollo de
software. Se enfoca en la evaluación de la calidad de los procesos de
desarrollo de software, y también se lo conoce como SPICE (Software
Process Improvement and Capability Determination). Así, busca
conocer la evolución en el tiempo sobre los procesos de desarrollo,
hacer un seguimiento respecto a la competencia y determinar posibles
estrategias de mejora.
5. CMMI (Capability Maturity Model Integration). Proporciona un
marco de referencia para evaluar y mejorar la madurez de los procesos
en el desarrollo de software. Se centra en áreas como la gestión de
proyectos, de la calidad, la configuración, o riesgos, entre otros.
6. ISO 12207 Modelos de Ciclos de Vida del Software. Proporciona
un estándar para observar los procesos de ciclo de vida del software,
desde la idea inicial hasta la retirada del software.
7. IEEE 730 – 2002 Standard for Software Quality Assurance
Plans. Define qué es es el software de alta calidad y propone una
elaboración de un Plan de Aseguramiento de la calidad de software
(SQAP).
8. ISO 5055 Software Quality Standards. En este caso, se trata de
medir las debilidades críticas de un software, fijándose en los criterios
de seguridad, confianza, eficiencia de rendimiento y mantenibilidad.

Buscar sobre la 27001

También podría gustarte