Está en la página 1de 63

Curso:

INGENIERÍA DE SOFTWARE
UNIDAD I: LA INGENIERÍA DE SOFTWARE: VISION GENERAL

SEMANA 1: ESTRUCTURA DE LA GUÍA SWEBOK

C SEMANA 2: INTRODUCCIÓN AL SEBOK

O SEMANA 3: PROCESOS DEL CICLO DE VIDA DEL SISTEMA: ISO/IEC 15288


N
T SEMANA 4: PROCESOS DEL CICLO DE VIDA DEL SOFTWARE: ISO/IEC 12207

E UNIDAD II: INGENIERÍA DE SOFTWARE: UNA DISCIPLINA RELACIONADA CON LA


N INGENIERÍA DE SISTEMAS
I SEMANA 5: INGENIERÍA DE SOFTWARE E INGENIERÍA DE SISTEMAS
D
O SEMANA 6: APLICACIONES DE LA INGENIERÍA DE SISTEMAS CON APOYO DE LA ISW

SEMANA 7: INGENIERÍA Y GESTIÓN DE SISTEMAS

SEMANA 8. Sistema “F”

2
UNIDAD III: GESTIÓN DE INGENIERÍA DE SISTEMAS Y DE COMPONENTES

SEMANA 9: GESTIÓN DE INGENIERÍA DE SISTEMAS

C SEMANA 10: COMPONENTES DE SISTEMAS Y DE SOFTWARE

O UNIDAD IV: CICLO DE VIDA DEL SOFTWARE


N
T SEMANA 11: PROCESO DE DESARROLLO DE SOFTWARE

E SEMANA 12: MODELOS DE DESARROLLO DE SOFTWARE


N
I SEMANA 13: MANTENIMIENTO Y EVOLUCIÓN DEL SOFTWARE

D SEMANA 14: ESTIMACIÓN DE COSTOS Y MÉTRICAS DEL PROCESO SOFTWARE


O
SEMANA 15: EXPOSICIONES GRUPALES DEL TRABAJO FINAL

SEMANA 16: Sistema “F”

3
INGENIERÍA DE SOFTWARE
UNI- FIIS / INGENIERIA DE SISTEMAS

UNIDAD I

LA INGENIERÍA DE SOFTWARE:
VISION GENERAL

CONCEPTOS, MODELOS Y METODOLOGÍAS.

Mg. Ing. WILFREDO CARRANZA


4
UNI- FIIS / INGENIERIA DE SISTEMAS

1. ESTRUCTURA DE
LA GUÍA SWEBOK 3.0
INGENIERIA DE SOFTWARE

SESION 1: ESTRUCTURA DE LA GUÍA SWEBOK


UNI- FIIS / INGENIERIA DE SISTEMAS

1.1 Objetivos y Alcance del curso. Contenidos. Metodología de


desarrollo. Sistema de Evaluación.
1.2 La naturaleza del software
1.3 Una descripción general de la guía SWEBOK
1.4 Características de ingeniería de software: modelos, métodos,
herramientas, estándares y métricas

Fuente: SWEBOK Guide v3.0

6
1.1 Objetivos y Alcance del curso

La Ingeniería de Software es una asignatura perteneciente a otras Disciplinas


Relacionadas a la Ingeniería de Sistemas.

Muestra arquitecturas de sistemas modernos y el software como el principal medio


para la integración de un sistema complejo.

Se procura entrelazar la ing. de software y la ing. de sistemas, explicando cómo esta es


un factor clave para el desarrollo de una buena ingeniería de software y viceversa.

Se explica el ciclo de vida de la Ing. de Software (ISO 12207) dentro del Ciclo de Vida
de Ing. de Sistemas (ISO 15288), la naturaleza del software y todos los aspectos claves
que un Ing. de sistemas necesita saber sobre la Ing. de Software.
1.2 La naturaleza del software

La naturaleza del medio de software tiene muchas consecuencias para la ingeniería de


sistemas (SE) de sistemas intensivos en software.
Fred Brooks ha observado que cuatro propiedades del software, tomados juntos, lo
diferencian de otro tipo de artefactos de ingeniería (Brooks 1995).
Estas cuatro propiedades son:

1. Complejidad
2. Conformidad
3. Mutabilidad
4. Invisibilidad.

Brooks afirma:
Las entidades de software son más complejas por su tamaño que tal vez cualquier otra
construcción humana porque no hay dos partes iguales (al menos por encima del nivel
de declaración). Si lo son, convertimos las dos partes similares en una subrutina: abierta
o cerrada. A este respecto, los sistemas de software difieren profundamente de las
computadoras, edificios o automóviles, donde abundan los elementos repetidos.
(Brooks 1995, p 82)
... La naturaleza del software

1. Complejidad

La complejidad del software surge del gran número de piezas de interacción únicas en
un sistema de software . Las piezas son únicas porque se encapsulan como funciones,
subrutinas u objetos e invocan según sea necesario en lugar de replicarse.

La representación de una entidad de software a menudo requiere varias


representaciones de diseño diferentes para retratar las numerosas estructuras estáticas,
acoplamientos dinámicos y modos de interacción que existen en el software
informático.

La complejidad dentro de las piezas y en las conexiones entre las piezas requiere que los
cambios experimenten un rigor de diseño sustancial y pruebas de regresión.
El software puede implementar bucles de control simples, así como algoritmos
complejos y heurística.

La complejidad puede ocultar defectos que pueden no ser descubiertos fácilmente, lo


que requiere una reelaboración adicional y no planificada significativa.
... La naturaleza del software

2. Conformidad

El software, a diferencia de un producto físico, no tiene principios naturales subyacentes


a los que debe ajustarse, como las leyes de movimiento de Newton. Sin embargo, el
software debe ajustarse a las especificaciones exigentes en la representación de cada
una de sus partes, en las interfaces a otras partes internas y en las conexiones con el
entorno en el que opera.

Un compilador puede detectar un error sintáctico u otro error sintáctico que falta, pero
un defecto en la lógica del programa o un error de sincronización puede ser difícil de
detectar hasta que se encuentra durante el funcionamiento.

La falta de conformidad puede causar problemas cuando un componente de software


existente no se puede reutilizar según lo previsto porque no se ajusta a las necesidades
del producto en desarrollo.

Es posible que la falta de conformidad no se descubra hasta el final de un proyecto, lo


que requiere el desarrollo e integración de un componente aceptable para reemplazar
al que no se puede reutilizar; lo cual, requiere una asignación no planificada de recursos
(normalmente) y puede retrasar la finalización del proyecto.
... La naturaleza del software

3. Mutabilidad

El software coordina el funcionamiento de los componentes físicos y proporciona la


mayor parte de la funcionalidad en sistemas intensivos en software.

Siendo el software el elemento más maleable (fácilmente cambiado) en un sistema


intensivo de software, es el elemento que más cambia con frecuencia.

La complejidad y la necesidad de conformidad pueden hacer que cambiar el software


sea una tarea extremadamente difícil.

Cambiar una parte de un sistema de software a menudo resulta en efectos secundarios


no deseados en otras partes del sistema, lo que requiere más cambios antes de que el
software pueda funcionar con la máxima eficiencia.
... La naturaleza del software

4. Invisibilidad

Se dice que el software es invisible porque no tiene propiedades físicas. Si bien los
efectos de la ejecución de software en una computadora digital son observables, el
software en sí no puede ser visto, probado, olido, tocado u escuchado.

El software es una entidad intangible porque nuestros cinco sentidos humanos son
incapaces de detectarlo directamente.

Productos de trabajo como especificaciones de requisitos, documentos de diseño,


código fuente y código de objeto son representaciones de software, pero no son el
software.

En el nivel más elemental, el software reside en la magnetización y el flujo de corriente


en un enorme número de elementos electrónicos dentro de un dispositivo digital.

Como el software no tiene presencia física, los ingenieros de software deben usar
diferentes representaciones en diferentes niveles de abstracción en un intento de
visualizar la entidad inherentemente invisible.
... La naturaleza del software
Unicidad

Otro punto sobre la naturaleza del software al que Brooks alude pero no llama
explícitamente es la singularidad del software.
Los proyectos de software y software son únicos por las siguientes razones:

▪ El software no tiene propiedades físicas;


▪ El software es el producto del trabajo en equipo intensivo en intelectos;
▪ La productividad de los desarrolladores de software varía más ampliamente que la
productividad de otras disciplinas de ingeniería;
▪ La estimación y planificación de proyectos de software se caracteriza por un alto
grado de incertidumbre, que en el mejor de los casos puede mitigarse parcialmente
por las mejores prácticas;

▪ La gestión de riesgos para proyectos de software está predominantemente


orientada a procesos;

▪ El software por sí solo es inútil, ya que siempre es parte de un sistema más grande; y
▪ El software es el elemento más frecuentemente cambiado de los sistemas intensivos
de software.
1.3 Una descripción general de la guía SWEBOK
ESTRUCTURA DE LA GUÍA SWEBOK
Áreas de Conocimiento:

1. Requisitos de software
2. Diseño de software
3. Construcción de software
4. Pruebas de software
5. Mantenimiento de software

6. Gestión de configuración de software


7. Gestión de ingeniería de software
8. Proceso de ingeniería de software
9. Modelos de ingeniería de software
10. Calidad del software

11. Práctica profesional de ingeniería de software


12. Economía de ingeniería de software
13. Fundaciones informáticas
14. Fundamentos matemáticos
15. Fundaciones de Ingeniería

Fuente: SWEBOK Guide v3.0.


1. Requisitos de software

El área de conocimiento requisitos de software (KA) se ocupa de


• la obtención,
• análisis,
• especificación y
• validación de los requisitos de software, y
• la gestión de los requisitos durante todo el ciclo de vida del producto de software.

Los proyectos de software son críticamente vulnerables cuando las actividades


relacionadas con los requisitos están mal realizadas.

Los requisitos de software expresan las necesidades y limitaciones impuestas a un


producto de software que contribuyen a la solución de algún problema del mundo real.
Contenido
•1 Fundamentos de requisitos de software •5 Especificación de requisitos
• 1.1 Definición de un requisito de software • 5.1 Documento de definición del sistema
• 1.2 Requisitos de producto y proceso • 5.2 Especificación de requisitos del sistema
• 1.3 Requisitos funcionales y no funcionales • 5.3 Especificación de requisitos de software
• 1.4 Propiedades emergentes •6 Validación de requisitos
• 1.5 Requisitos cuantificables • 6.1 Revisiones de requisitos
• 1.6 Requisitos del sistema y requisitos de software • 6.2 Prototipos
•2 Proceso de requisitos • 6.3 Validación del modelo
• 2.1 Modelos de proceso • 6.4 Pruebas de aceptación
• 2.2 Actores del proceso •7 Consideraciones prácticas
• 2.3 Soporte y gestión de procesos • 7.1 Naturaleza iterativa del proceso de requisitos
• 2.4 Calidad y mejora del proceso • 7.2 Gestión del cambio
•3 Requisitos Elicitación • 7.3 Atributos de requisitos
• 3.1 Fuentes de requisitos • 7.4 Seguimiento de requisitos
• 3.2 Técnicas de elicitación • 7.5 Requisitos de medición
•4 Análisis de requisitos •8 Herramientas de requisitos de software
• 4.1 Clasificación de requisitos
• 4.2 Modelado conceptual
• 4.3 Diseño arquitectónico y asignación de requisitos
• 4.4 Negociación de requisitos
• 4.5 Análisis formal
1. Requisitos de software
2. Diseño de software

El diseño se define como "el proceso de definir la arquitectura, los componentes, las
interfaces y otras características de un sistema o componente" y "el resultado de [ese]
proceso"

Visto como un proceso, el diseño de software es la actividad del ciclo de vida de ingeniería de
software en la que se analizan los requisitos de software con el fin de producir una
descripción de la estructura interna del software que servirá como base para su
construcción.

Un diseño de software (el resultado) describe la arquitectura de software , es decir, cómo el


software se descompone y organiza en componentes y las interfaces entre esos
componentes. Incluyendo, describir los componentes en un nivel de detalle que permita su
construcción.

Importancia en el desarrollo de software:


durante el diseño de software, los ingenieros de software producen varios modelos que
forman una especie de plano de la solución a implementar.
Al analizar y evaluar estos modelos lograremos determinar si nos permitirán o no cumplir con
los diversos requisitos.
Contenido 4.5 Proceso de diseño de la interfaz de usuario
1 Fundamentos del diseño de software 4.6 Localización e Internacionalización
1.1 Conceptos generales de diseño 4.7 Metáforas y modelos conceptuales
1.2 Contexto del diseño de software
1.3 Proceso de diseño de software 5 Análisis y evaluación de la calidad del diseño de software
1.4 Principios de diseño de software 5.1 Atributos de calidad
5.2 Técnicas de análisis y evaluación de calidad
2 problemas clave en el diseño de software 5.3 Medidas
2.1 Simultaneidad
2.2 Control y manejo de eventos 6 Notaciones de diseño de software
2.3 Persistencia de datos 6.1 Descripciones estructurales (vista estática)
2.4 Distribución de componentes 6.2 Descripciones conductuales (vista dinámica)
2.5 Manejo de errores y excepciones y tolerancia a fallos
2.6 Interacción y presentación 7 Estrategias y métodos de diseño de software
2.7 Seguridad 7.1 Estrategias generales
7.2 Diseño orientado a funciones (estructurado)
3 Estructura de software y arquitectura 7.3 Diseño orientado a objetos
3.1 Estructuras arquitectónicas y miradores 7.4 Diseño centrado en la estructura de datos
3.2 Estilos arquitectónicos 7.5 Diseño basado en componentes (CBD)
3.3 Patrones de diseño 7.6 Otros métodos
3.4 Decisiones de diseño de arquitectura
3.5 Familias de programas y marcos 8 Herramientas de diseño de software

4 Diseño de interfaz de usuario


4.1 Principios generales de diseño de la interfaz de usuario
4.2 Problemas de diseño de la interfaz de usuario
4.3 El diseño de las modalidades de interacción con el usuario
2. Diseño de software
3. Construcción de software

El término construcción de software se refiere a la creación detallada de software de trabajo a través de


una combinación de codificación, verificación, pruebas unitarias, pruebas de integración y depuración.

El área de conocimiento de construcción de software (KA) está vinculada a todos los demás KAs, pero está
fuertemente vinculado a diseño de software y pruebas de software porque el proceso de construcción de
software implica un diseño y pruebas de software significativos.

El proceso utiliza la salida de diseño y proporciona una entrada para las pruebas ("diseño" y "prueba" en este
caso que se refieren a las actividades, no a los KAs).
... Construcción de software

El KA Construcción Software está estrechamente vinculado con:

• KA Diseño Software.
• KA Prueba de Software (durante la construcción, los ingenieros de software, tanto de prueba unitaria
como de integración, prueban su trabajo)
• KA de Gestión de Configuración de software (se produce el mayor número de elementos de
configuración a administrarse en un proyecto de software: archivos de origen, documentación, casos de
prueba, etc.)
• KA Calidad del software (el código es el máximo entregable de un proyecto de software)
• KA Computing Foundations (por los conocimiento de algoritmos y de prácticas de codificación que
apoyan el diseño y la construcción de productos de software.
• También, está relacionado con la gestión de proyectos.
Contenido
1 Fundamentos de la construcción de software 4 Tecnologías de construcción
1.1 Minimizar la complejidad 4.1 Diseño y uso de API
1.2 Anticipar el cambio 4.2 Problemas de tiempo de ejecución orientados a objetos
1.3 Construcción para verificación 4.3 Parametrización y genéricos
1.4 Reutilización 4.4 Afirmaciones, diseño por contrato y programación defensiva
1.5 Normas en la construcción 4.5 Manejo de errores, manejo de excepciones y tolerancia a errores
4.6 Modelos ejecutables
2 Gestión de la construcción 4.7 Técnicas de construcción basadas en el Estado y basadas en tablas
2.1 Construcción en modelos de ciclo de vida 4.8 Configuración e internacionalización en tiempo de ejecución
2.2 Planificación de la construcción 4.9 Procesamiento de entrada basado en gramática
2.3 Medición de la construcción 4.10 Primitivas de simultaneidad
4.11 Middleware
3 Consideraciones prácticas 4.12 Métodos de construcción para software distribuido
3.1 Diseño de construcción 4.13 Construcción de sistemas heterogéneos
3.2 Idiomas de construcción 4.14 Análisis y ajuste del rendimiento
3.3 Codificación 4.15 Normas de plataforma
3.4 Pruebas de construcción 4.16 Programación de prueba primero
3.5 Construcción para reutilización
3.6 Construcción con reutilización 5 Herramientas de construcción de software
3.7 Calidad de construcción 5.1 Entornos de desarrollo
3.8 Integración 5.2 Constructores gui
5.3 Herramientas de prueba de unidades
5.4 Herramientas de generación de perfiles, análisis de rendimiento y
corte
3. Construcción de software
4. Pruebas de software

Las pruebas de software consisten en la verificación dinámica de que un programa proporciona


comportamientos esperados en un conjunto finito de casos de prueba, seleccionados adecuadamente
del dominio de ejecución normalmente infinito.

Cuestiones clave al describir el área de conocimiento de pruebas de software (KA):


• Dinámico: las pruebas siempre implican ejecutar el programa en entradas seleccionadas.
Las técnicas estáticas son diferentes y complementarias a las pruebas dinámicas. Las técnicas
estáticas están cubiertas en la KA de calidad de software.
• Finito: en la práctica, un conjunto completo de pruebas generalmente puede considerarse infinito, y
las pruebas se llevan a cabo en un subconjunto de todas las pruebas posibles, que está
determinado por criterios de riesgo y priorización.
• Seleccionado: La forma de identificar el criterio de selección más adecuado en condiciones dadas
es un problema complejo; en la práctica, se aplican técnicas de análisis de riesgos y experiencia en
ingeniería de software.
• Esperado: decidir si los resultados observados de las pruebas del programa son aceptables o no;
de lo contrario, el esfuerzo de prueba es inútil. El comportamiento observado puede comprobarse
con las necesidades del usuario (comúnmente denominadas pruebas para la validación), con una
especificación (prueba de verificación).
En los últimos años, la visión de las pruebas de software ha madurado en una forma constructiva.
Las pruebas ya no se ven como una actividad que se inicia solo después de que se complete la fase de
codificación con el propósito limitado de detectar errores.

Las pruebas de software son, o deben ser, omnipresentes a lo largo de todo el ciclo de vida de desarrollo y
mantenimiento. De hecho, la planificación de las pruebas de software debe comenzar con las primeras
etapas del proceso de requisitos de software, y los planes y procedimientos de prueba deben desarrollarse
sistemática y continuamente —y posiblemente perfeccionarse— a medida que avance el desarrollo de
software.

Para muchas organizaciones, el enfoque de la calidad del software es uno de prevención: obviamente es
mucho mejor prevenir problemas que corregirlos.

Las pruebas se pueden ver, entonces, como un medio para proporcionar información sobre la funcionalidad
y los atributos de calidad del software y también para identificar fallas en aquellos casos en los que la
prevención de errores no ha sido efectiva.

Tal vez sea obvio, pero vale la pena reconocer que el software todavía puede contener fallas, incluso
después de la finalización de una amplia actividad de pruebas.
Los fallos de software experimentados después de la entrega se abordan mediante el mantenimiento
correctivo.
Contenido
1 Fundamentos de pruebas de software 4 Medidas relacionadas con las pruebas
1.1 Terminología relacionada con las 4.1 Evaluación del programa en pruebas
pruebas 4.2 Evaluación de las pruebas realizadas
1.2 Problemas clave 5 Proceso de prueba
1.3 Relación de pruebas con otras 5.1 Consideraciones prácticas
actividades 5.2 Actividades de prueba
2 niveles de prueba 6 Herramientas de prueba de software
2.1 El objetivo de la prueba 6.1 Soporte de herramientas de prueba
2.2 Objetivos de las pruebas 6.2 Categorías de herramientas
3 Técnicas de prueba
3.1 Basado en la intuición y la
experiencia del ingeniero de software
3.2 Técnicas basadas en dominios de
entrada
3.3 Técnicas basadas en código
3.4 Técnicas basadas en fallas
3.5 Técnicas basadas en el uso
3.6 Técnicas de prueba basadas en
modelos
3.7 Técnicas basadas en la naturaleza de
la aplicación
3.8 Selección y combinación de técnicas
4. Pruebas de software
5. Mantenimiento de software
Los esfuerzos de desarrollo de software dan como resultado la entrega
de un producto de software que satisface los requisitos del usuario.
En consecuencia, el producto de software debe cambiar o evolucionar.
Una vez en funcionamiento, se descubren defectos, cambian los entornos operativos y surgen nuevos
requisitos de usuario.
La fase de mantenimiento del ciclo de vida comienza después de un período de garantía o entrega de
soporte de post-implementación, pero las actividades de mantenimiento se producen mucho antes.
El mantenimiento de software es una parte integral de un ciclo de vida de software.

El paradigma de código abierto ha traído más atención a la cuestión del mantenimiento de


artefactos de software desarrollados por otros.
El mantenimiento del software se define como la totalidad de las actividades necesarias para
proporcionar un soporte rentable al software. Las actividades se realizan durante la etapa de
predelivery, así como durante la etapa postdelivery. Las actividades de predelivery incluyen la
planificación de las operaciones de postdelivery, la capacidad de mantenimiento y la determinación
logística para las actividades de transición.
Las actividades posteriores a la entrega incluyen modificación de software, capacitación y operación o
interconexión en un servicio de asistencia.

El KA de mantenimiento de software está relacionada con todos los demás aspectos de la ingeniería
de software.
Contenido
1 Fundamentos de mantenimiento de software
1.1 Definiciones y terminología
1.2 Naturaleza de mantenimiento
1.3 Necesidad de mantenimiento
1.4 La mayoría de los costes de mantenimiento
1.5 Evolución del software
1.6 Categorías de Mantenimiento
2 problemas clave en el mantenimiento de software
2.1 Problemas técnicos
2.2 Problemas de gestión
2.3 Estimación de costes de mantenimiento
2.4 Medición de mantenimiento de software
3 Proceso de mantenimiento
3.1 Procesos de mantenimiento
3.2 Actividades de mantenimiento
4 Técnicas de mantenimiento
4.1 Comprensión del programa
4.2 Reingeniería
4.3 Ingeniería inversa
4.4 Migración
4.5 Jubilación
5 Herramientas de mantenimiento de software
5. Mantenimiento de software
6. Gestión de la Configuración de software

Un sistema se puede definir como la combinación de elementos de interacción organizados para lograr
uno o más propósitos declarados. La configuración de un sistema son las características funcionales
y físicas del hardware o software establecidas en la documentación técnica o logradas en un producto;
también se puede considerar como una colección de versiones específicas de hardware, firmware o
elementos de software combinados de acuerdo con procedimientos de compilación específicos para
servir a un propósito particular.

La administración de la configuración (CM), entonces, es la disciplina de identificar la configuración


de un sistema en puntos distintos en el tiempo con el propósito de controlar sistemáticamente los
cambios en la configuración y mantener la integridad y trazabilidad de la configuración a lo largo del
ciclo de vida del sistema.
6. Gestión de la Configuración de software

La administración de la configuración (CM), se define formalmente como una disciplina que aplique
la dirección técnica y administrativa y la vigilancia a:

• identificar y documentar las características funcionales y físicas de un elemento de configuración,


• controlar los cambios en esas características,
• registrar e informar el estado de procesamiento e implementación de cambios, y
• verificar el cumplimiento de los requisitos especificados.

La administración de la configuración de software (SCM) es un proceso de ciclo de vida de software de


soporte que beneficia a la gestión de proyectos, actividades de desarrollo y mantenimiento, actividades
de aseguramiento de la calidad, así como a los clientes y usuarios del producto final.
SCM está estrechamente relacionado con la actividad del Software Quality Assurance (SQA)
Contenido
1 Gestión del Proceso SCM 4 Contabilidad de estado de configuración de
1.1 Contexto organizativo para SCM software
1.2 Restricciones y orientación para el proceso SCM 4.1 Información de estado de configuración de
1.3 Planificación para SCM software
1.4 Plan SCM 4.2 Informes de estado de configuración de
1.5 Vigilancia de la gestión de la configuración de software.
software
5 Auditoría de configuración de software
2 Identificación de configuración de software 5.1 Auditoría de configuración funcional del
2.1 Identificación de elementos a controlar software
2.2 Biblioteca de software 5.2 Auditoría de configuración física de software
5.3 Auditorías en curso de una línea base de
3 Control de configuración de software software.
3.1 Solicitar, evaluar y aprobar cambios de software
3.2 Implementación de cambios de software 6 Gestión y entrega de lanzamientos de software
3.3 Desviaciones y exenciones 6.1 Construcción de software
6.2 Gestión de versiones de software.

7 Herramientas de gestión de configuración de


software.
6. Gestión de la Configuración
de software
7. Gestión de ingeniería de software
La administración de ingeniería de software se puede definir como la aplicación de actividades de
administración (planificación, coordinación, medición, monitoreo, control e informes) para garantizar
que los productos de software y los servicios de ingeniería de software se entreguen de manera
eficiente, eficaz y en beneficio de las partes interesadas.

En cierto sentido, debería ser posible gestionar un proyecto de ingeniería de software de la misma
manera que se gestionan otros esfuerzos complejos. Sin embargo, hay aspectos específicos de los
proyectos de software y los procesos del ciclo de vida del software que complican la gestión eficaz,
incluidos estos:
❑ Los clientes a menudo no saben lo que se necesita o lo que es factible.
❑ Los clientes a menudo carecen de apreciación por las complejidades inherentes a la ingeniería de
software, particularmente con respecto al impacto de los requisitos cambiantes.
❑ Es probable que el aumento de la comprensión y las condiciones cambiantes generen requisitos
de software nuevos o modificados.

❑ Como resultado de los requisitos cambiantes, el software se construye a menudo


utilizando un proceso iterativo en lugar de como una secuencia de tareas cerradas.
❑ La ingeniería de software incorpora necesariamente creatividad y disciplina.
Mantener un equilibrio adecuado entre los dos a veces es difícil.
❑ El grado de novedad y complejidad es a menudo alto.
❑ A menudo hay una rápida tasa de cambio en la tecnología subyacente.
Contenido
1 Definición de iniciación y alcance
1.1 Determinación y negociación de 4 Revisión y evaluación
requisitos 4.1 Determinar la satisfacción de los
1.2 Análisis de viabilidad requisitos
1.3 Proceso de revisión y revisión de 4.2 Revisión y evaluación del rendimiento
requisitos 5 Cierre
2 Planificación de proyectos de software 5.1 Determinación del cierre
2.1 Planificación de procesos 5.2 Actividades de cierre
2.2 Determinar entregables 6 Medición de ingeniería de software
2.3 Estimación de esfuerzos, horarios y 6.1 Establecer y mantener el compromiso de
costos medición
2.4 Asignación de recursos 6.2 Planificar el proceso de medición
2.5 Gestión de riesgos 6.3 Realizar el proceso de medición
2.6 Gestión de calidad 6.4 Evaluar medición
2.7 Gestión del plan 7 Herramientas de gestión de ingeniería de
3 Promulgación de proyectos de software software
3.1 Implementación de planes
3.2 Adquisición de software y gestión de
contratos de proveedores
3.3 Implementación del proceso de medición
3.4 Proceso de monitor
3.5 Proceso de control
3.6 Informes
7. Gestión de ingeniería de software
8. Proceso de ingeniería de software
Un proceso de ingeniería consiste en un conjunto de actividades interrelacionadas que transforman una
o más entradas en salidas mientras consumen recursos para lograr la transformación.

Los procesos de ingeniería de software se refieren a las actividades de trabajo realizadas por los
ingenieros de software para desarrollar, mantener y operar software, tales como requisitos, diseño,
construcción, pruebas, gestión de configuración y otros procesos de ingeniería de software.
El "proceso de ingeniería de software" se denominará "proceso de software" en esta KA.

Los procesos de software se especifican por varias razones:


❑ para facilitar la comprensión, la comunicación y la coordinación humanas;
❑ para ayudar a la gestión de proyectos de software; medir y mejorar la calidad
de los productos de software de una manera eficiente;
❑ para apoyar la mejora del proceso; y
❑ proporcionar una base para el soporte automatizado de la ejecución del proceso.

La KA de Calidad de software se ocupa de los procesos de planificación, garantía y control para la calidad
del proyecto y del producto.

Los resultados de medición y medición en KA engineering foundations son esenciales para evaluar y
controlar los procesos de software.
Contenido
1 Definición de proceso de software
1.1 Gestión de procesos de software 4 Medición de software
1.2 Infraestructura de procesos de software 4.1 Proceso de software y medición de productos
4.2 Resultados de calidad de la medición
2 Ciclos de vida de software 4.3 Modelos de información de software
2.1 Categorías de procesos de software 4.4 Técnicas de medición de procesos de software
2.2 Modelos de ciclo de vida de software
2.3 Adaptación del proceso de software 5 Herramientas de proceso de ingeniería de
2.4 Consideraciones prácticas software

3 Evaluación y mejora de procesos de software


3.1 Modelos de evaluación de procesos de
software
3.2 Métodos de evaluación de procesos de
software
3.3 Modelos de mejora de procesos de software
3.4 Clasificaciones continuas y por etapas de
procesos de software
8. Proceso de ingeniería de software
9. Modelos de ingeniería de software

Los modelos y métodos de ingeniería de software imponen estructura a la ingeniería de


software con el objetivo de hacer que esa actividad sea sistemática, repetible y, en última
instancia, más orientada al éxito.

El uso de modelos proporciona un enfoque para la resolución de problemas, una notación y


procedimientos para la construcción y el análisis de modelos.

Los métodos proporcionan un enfoque a la especificación sistemática, diseño, construcción,


prueba y verificación del software de artículos finales y los productos de trabajo asociados.

Los modelos y métodos de ingeniería de software varían ampliamente en alcance, desde abordar
una sola fase del ciclo de vida del software hasta cubrir el ciclo de vida completo del software.

El énfasis en este área de conocimiento (KA) se centra en los modelos y métodos de ingeniería de
software que abarcan múltiples fases del ciclo de vida del software, ya que los métodos
específicos para las fases del ciclo de vida único están cubiertos por otros KAs.
Contenido 4 Métodos de ingeniería de software
1 Modelado 4.1 Métodos heurísticos
1.1 Principios de modelado 4.2 Métodos formales
1.2 Propiedades y expresión de 4.3 Métodos de prototipado
modelos 4.4 Métodos ágiles
1.3 Sintaxis, semántica y pragmática
1.4 Condiciones previas,
postcondiciones e invariables

2 Tipos de modelos
2.1 Modelado de información
2.2 Modelado conductual
2.3 Modelado de estructura

3 Análisis de modelos
3.1 Análisis de la integridad
3.2 Análisis de consistencia
3.3 Análisis de la corrección
3.4 Trazabilidad
3.5 Análisis de interacción
9. Modelos de ingeniería de software
10. Calidad del software
¿Qué es la calidad del software y por qué es tan importante que se incluya en muchas áreas
de conocimiento (KAs) de la Guía SWEBOK?

La calidad del software puede referirse: a las características deseables de los productos de software,
en la medida en que un producto de software en particular posee esas características, y a los
procesos, herramientas y técnicas utilizados para lograr esas características.

A lo largo de los años, los autores y las organizaciones han definido el término calidad de manera
diferente:
• Para Phil Crosby, era "conforme a los requisitos".
• Watts Humphrey se refiere a él como "lograr excelentes niveles de "aptitud para el uso".
• IBM acuñó la frase "calidad impulsada por el mercado", donde el "cliente es el árbitro final“.
… Calidad del software

Más recientemente, la calidad del software se define como la "capacidad del producto de software
para satisfacer las necesidades declaradas e implícitas en condiciones específicas"
y como "el grado en que un producto de software cumple con los requisitos establecidos; sin
embargo, la calidad depende del grado en que esos requisitos establecidos representen con
precisión las necesidades, deseos y expectativas de las partes interesadas".

Ambas definiciones adoptan la premisa de la conformidad con los requisitos. Ninguno de los dos se
refiere a los tipos de requisitos (por ejemplo, funcional, fiabilidad, rendimiento, fiabilidad o cualquier
otra característica). Ambas definiciones hacen hincapié en que la calidad depende de los requisitos.

La calidad del software se logra mediante la conformidad con todos los requisitos, independientemente
de qué característica se especifique o cómo se agrupan o nombran los requisitos.
10. Calidad del software
Contenido

1 Fundamentos de calidad de software


1.1 Cultura y ética de ingeniería de software
1.2 Valor y costes de calidad
1.3 Modelos y Características de Calidad
1.4 Mejora de la calidad del software
1.5 Seguridad del software

2 Procesos de gestión de la calidad del software


2.1 Garantía de calidad del software
2.2 Verificación y validación
2.3 Revisiones y auditorías

3 Consideraciones prácticas
3.1 Requisitos de calidad del software
3.2 Caracterización de defectos
3.3 Técnicas de gestión de la calidad del software
3.4 Medición de la calidad del software

4 Herramientas de calidad de software


10. Calidad del software
11. Práctica profesional de ingeniería de software

El área de conocimiento de práctica profesional de ingeniería de software (KA)


se ocupa de los conocimientos, habilidades y actitudes que los ingenieros de software deben poseer
para practicar ingeniería de software de una manera profesional, responsable y ética.

Las aplicaciones generalizadas de los productos de software en la vida social y personal, generan que la
calidad de los productos de software tengan un profundo impacto en nuestro bienestar personal y
armonía social.
Los ingenieros de software deben manejar problemas de ingeniería únicos, produciendo software con
características conocidas y fiabilidad; siendo necesario que posean un conjunto adecuado de
conocimientos, habilidades, capacitación y experiencia en la práctica profesional.

El término "práctica profesional" se refiere a una forma de realizar servicios para lograr ciertas normas o
criterios tanto en el proceso de prestación de un servicio como en el producto final resultante del servicio.

Estas normas y criterios pueden incluir aspectos técnicos y no técnicos.

El concepto de práctica profesional puede considerarse más aplicable dentro de aquellas profesiones
que tienen un cuerpo de conocimiento generalmente aceptado; códigos de ética y conducta profesional
con sanciones por violaciones; procesos aceptados para la acreditación, certificación y concesión de
licencias; y sociedades profesionales para proporcionar y administrar todos ellos.
Un ingeniero de software mantiene una práctica profesional realizando todo el trabajo de
acuerdo con las prácticas, estándares y directrices generalmente aceptados, en particular
establecidos por la sociedad profesional aplicable.

• Por ejemplo, la Asociación de Maquinaria Informática (ACM) y la Sociedad informática IEEE


(IEEE CS) han establecido un Código de Ética y Práctica Profesional de Ingeniería de
Software.

• Tanto la British Computer Society (BCS) como la Federación Internacional para el


Procesamiento de la Información (IFIP) han establecido estándares de práctica profesional
similares.

• ISO/IEC e IEEE han proporcionado además normas de ingeniería de software aceptadas


internacionalmente (véase el Apéndice B de la Guía).

• IEEE CS ha establecido dos programas internacionales de certificación (CSDA, CSDP) y una


Guía correspondiente para el Software Engineering Body of Knowledge (Guía SWEBOK).

Todos estos son elementos que sentaron las bases de la práctica profesional de la ingeniería
de software.
11. Práctica profesional Contenido
de ingeniería de software
1 Profesionalidad 2 Dinámicas grupales y
1.1 Acreditación, Certificación y psicología
Licencias 2.1 Dinámica de trabajo en
1.2 Códigos de Ética y Conducta equipos/grupos
Profesional 2.2 Cognición individual
1.3 Naturaleza y función de las 2.3 Hacer frente a la complejidad
sociedades profesionales del problema
1.4 Naturaleza y función de las 2.4 Interactuar con las partes
normas de ingeniería de interesadas
software 2.5 Lidiar con la incertidumbre y
1.5 Impacto económico del la ambigüedad
software 2.6 Tratar entornos
1.6 Contratos de trabajo multiculturales
1.7 Cuestiones legales
1.8 Documentación 3 Habilidades de comunicación
1.9 Análisis de compensación 3.1 Lectura, comprensión y
resumen
3.2 Escritura
3.3 Comunicación en equipo y
grupo
3.4 Habilidades de presentación
11. Práctica profesional de
ingeniería de software
12. Economía de la ingeniería de software
La economía de la ingeniería de software consiste en tomar decisiones relacionadas
con la ingeniería de software en un contexto empresarial.

El éxito de un producto de software, servicio y solución depende de una buena gestión empresarial.
Sin embargo, las relaciones comerciales de software con el desarrollo de software y la ingeniería
siguen desconocidas.

La economía es el estudio del valor, los costos, los recursos y su relación en un contexto o
situación determinada. En la disciplina de la ingeniería de software, las actividades tienen costos,
pero el software resultante en sí tiene atributos económicos también.

La economía de la ingeniería de software proporciona una manera de estudiar los atributos de


los procesos de software y software de una manera sistemática que los relaciona con medidas
económicas, que pueden analizarse al tomar decisiones comprendidas en el ámbito de una
organización empresarial.

La economía de la ingeniería de software se ocupa de alinear las decisiones técnicas de software


con los objetivos empresariales de la organización.

En todo tipo de organizaciones , ya sea "con fines de lucro", "sin fines de lucro" o gubernamentales
- esto se traduce en dar sostenibilidad con rentabilidad al negocio.
Contenido

1 Fundamentos de la economía de 2.5 Ciclo de vida del producto


ingeniería de software 2.6 Ciclo de vida del proyecto 4 Métodos de análisis económico
1.1 Finanzas 2.7 Propuestas 4.1 Análisis de decisiones con fines de
1.2 Contabilidad 2.8 Decisiones de inversión lucro
1.3 Control 2.9 Planificación del horizonte 4.2 Tasa mínima aceptable de retorno
1.4 Flujo de caja 2.10 Precio y precios 4.3 Retorno de la inversión
1.5 Proceso de toma de decisiones 2.11 Costo y costo 4.4 Retorno del capital empleado
1.6 Valoración 2.12 Medición del rendimiento 4.5 Análisis costo-beneficio
1.7 Inflación 2.13 Gestión del valor ganado 4.6 Análisis de rentabilidad
1.8 Depreciación 2.14 Decisiones de terminación 4.7 Análisis de parón de rotura
1.9 Tributación 2.15 Decisiones de sustitución y 4.8 Caso de negocios
1.10 Valor de tiempo del dinero jubilación 4.9 Evaluación de múltiples atributos
1.11 Eficiencia 4.10 Análisis de optimización
1.12 Eficacia 3 Riesgo e incertidumbre
1.13 Productividad 3.1 Metas, estimaciones y planes 5 Consideraciones prácticas
3.2 Técnicas de estimación 5.1 El principio de "lo suficientemente
2 Economía del ciclo de vida 3.3 Abordar la incertidumbre bueno"
2.1 Producto 3.4 Priorización 5.2 Economía libre de fricción
2.2 Proyecto 3.5 Decisiones en riesgo 5.3 Ecosistemas
2.3 Programa 3.6 Decisiones bajo incertidumbre 5.4 Deslocalización y externalización
2.4 Cartera
12. Economía de la
ingeniería de software
1.4 Características de la Ingeniería de Software
En las últimas décadas, el software se ha vuelto omnipresente. Casi todos los sistemas
de ingeniería modernos incluyen subsistemas de software significativos; esto incluye
sistemas en los sectores de transporte, finanzas, educación, salud, legal, militar y
empresarial.

Junto con el aumento en la utilidad de software, capacidad, costo y tamaño ha habido


un crecimiento correspondiente en métodos, modelos, herramientas, métricas y
estándares, que apoyan la ingeniería de software.

En el capítulo 10 del SWEBOK se describen los principios y tipos de modelado, así como
los métodos y herramientas que se utilizan para desarrollar, analizar, implementar y
verificar los modelos.
Los otros capítulos de SWEBOK sobre las fases de desarrollo de software (por ejemplo,
Diseño de software) discuten métodos y herramientas específicas de la fase.

La Tabla 1 identifica las características de ingeniería de software para diferentes fases


del ciclo de vida. La tabla simplemente proporciona ejemplos.
… Características de la Ingeniería de Software
… Características de la Ingeniería de Software
Métricas del Software

Una métrica de software es una medida cuantitativa del grado en que un


sistema, componente o proceso de software posee un atributo dado.

Debido a la naturaleza abstracta del software y los problemas especiales con


la programación de software, el costo y la calidad, la recopilación de datos y
las métricas derivadas son una parte esencial de la ingeniería de software.

En la Tabla 2 se describen las métricas de software que se recopilan y utilizan


en diferentes áreas del desarrollo de software. Al igual que en el Cuadro 1, la
lista no está destinada a ser completa, sino a ilustrar el tipo y el rango de
medidas utilizadas en la práctica.
Métricas del Software
PREGUNTAS?

PÁGINA 61 61
CONCLUSIONES
Esto es lo que hemos
aprendido
(a responder por los
estudiantes)
Logros de
Aprendizaje
• …
• …
• …

PÁGINA 62 62
Mg. Ing. Wilfredo Carranza
wcarranzab@uni.edu.pe

63

También podría gustarte