Galería de mapas mentales Capítulo 4 Mapa mental de ingeniería de diseño
Capítulo 4 Mapa mental de ingeniería de diseño Este mapa mental incluye una descripción general de la ingeniería de diseño de software, los principios de diseño de software, el diseño de arquitectura de software, la tecnología de diseño a nivel de componentes, las especificaciones de diseño y la revisión del diseño.
Editado a las 2023-11-14 21:39:57,プロジェクトマネジメントとは、専門的な知識、スキル、ツール、方法論をプロジェクト活動に適用し、限られたリソースの制約の中で、プロジェクトが設定された要件や期待を達成、またはそれ以上にできるようにするプロセスである。 この図は、プロジェクトマネジメントプロセスの8つの構成要素を包括的に示したものであり、一般的なテンプレートとして利用することができる。
プロジェクトマネジメントとは、専門的な知識、スキル、ツール、方法論をプロジェクト活動に適用し、限られたリソースの制約の中で、プロジェクトが設定された要件や期待を達成、またはそれ以上にできるようにするプロセスである。 この図は、プロジェクトマネジメントプロセスの8つの構成要素を包括的に示したものであり、一般的なテンプレートとして利用することができる。
世界的に著名な科学者、航空力学者、中国有人宇宙飛行の創始者、中国科学院および中国工程院の院士、「二元一星勲章」受章者、「中国宇宙飛行の父」、「中国ミサイルの父」、「中国自動制御の父」、「ロケットの王」として知られる。 中国宇宙の父」、「中国ミサイルの父」、「中国自動制御の父」、「ロケット王」として知られる。
プロジェクトマネジメントとは、専門的な知識、スキル、ツール、方法論をプロジェクト活動に適用し、限られたリソースの制約の中で、プロジェクトが設定された要件や期待を達成、またはそれ以上にできるようにするプロセスである。 この図は、プロジェクトマネジメントプロセスの8つの構成要素を包括的に示したものであり、一般的なテンプレートとして利用することができる。
プロジェクトマネジメントとは、専門的な知識、スキル、ツール、方法論をプロジェクト活動に適用し、限られたリソースの制約の中で、プロジェクトが設定された要件や期待を達成、またはそれ以上にできるようにするプロセスである。 この図は、プロジェクトマネジメントプロセスの8つの構成要素を包括的に示したものであり、一般的なテンプレートとして利用することができる。
世界的に著名な科学者、航空力学者、中国有人宇宙飛行の創始者、中国科学院および中国工程院の院士、「二元一星勲章」受章者、「中国宇宙飛行の父」、「中国ミサイルの父」、「中国自動制御の父」、「ロケットの王」として知られる。 中国宇宙の父」、「中国ミサイルの父」、「中国自動制御の父」、「ロケット王」として知られる。
Capítulo 4 Proyecto de diseño
Descripción general de la ingeniería de diseño de software
Descripción general de la ingeniería de diseño de software
El análisis de requisitos de software resuelve el problema de "qué hacer", mientras que el proceso de diseño de software resuelve el problema de "cómo hacerlo".
El diseño de software es el proceso de transformar los requisitos del software en representación del software. Consta principalmente de dos etapas: etapa de diseño de la arquitectura del software y diseño a nivel de componentes.
Tareas de diseño de software.
Utilizando un enfoque de diseño, la información sobre los requisitos de software representados por datos, modelos funcionales y de comportamiento en el modelo de análisis de software se pasa a la fase de diseño, lo que da como resultado el diseño de datos/clases, el diseño de arquitectura, el diseño de interfaces y el diseño a nivel de componentes.
Diseño de datos/clases: transforme el modelo de clases de análisis en implementación de clases y estructuras de datos necesarias para la implementación del software.
El contenido de datos detallado descrito en las clases y los objetos de datos y las relaciones definidas en el CRC y el diccionario de datos proporcionan la base para las actividades de diseño de datos.
El proceso de diseño de datos incluye los dos pasos siguientes:
Primero, seleccionar una representación lógica para los objetos de datos determinados en la fase de análisis de requisitos requiere un análisis algorítmico de diferentes estructuras para seleccionar la solución de diseño más efectiva;
Luego, identifique los módulos del programa que operan en las estructuras de datos lógicas necesarias para limitar o determinar el alcance del impacto de las decisiones de diseño de datos individuales.
Diseño arquitectónico: el diseño arquitectónico define la estructura general del software.
El diseño arquitectónico define la estructura general del software, que consta de componentes de software, atributos visibles externamente y las relaciones entre ellos.
Las representaciones del diseño arquitectónico pueden derivarse de especificaciones del sistema, modelos de análisis e interacciones de subsistemas definidos en el modelo de análisis.
Diseño de interfaz: El diseño de interfaz describe cómo comunicarse dentro del software, entre el software y los sistemas colaborativos, y entre colegas del software.
El diseño de la interfaz incluye principalmente tres aspectos:
Diseñar interfaces entre módulos de software.
Diseñar interfaces entre módulos y otros productores y consumidores de información no humana (como entidades externas)
La interfaz entre el diseñador (usuario) y la computadora.
Diseño a nivel de componente: El diseño a nivel de componente transforma los elementos estructurales de la arquitectura del software en una descripción procesal de los componentes del software.
El diseño a nivel de componentes transforma los elementos estructurales de la arquitectura del software en descripciones de procedimientos de los componentes del software.
La información obtenida de modelos basados en clases, modelos de flujo y modelos de comportamiento es la base para el diseño de componentes.
Objetivos del diseño de software.
En el proceso de diseño de software, debemos prestar mucha atención a los factores de calidad del software.
Los objetivos del proceso de diseño de software McGlanghlin son:
1) El diseño debe implementar todos los requisitos explícitos descritos en el modelo de análisis y debe cumplir con todos los requisitos implícitos esperados por el usuario.
2) El diseño debe ser legible y comprensible, facilitando su programación, prueba y mantenimiento en el futuro.
3) El diseño debe comenzar desde la perspectiva de la implementación y brindar una imagen completa del software en relación con datos, funciones y comportamientos.
Normas técnicas para el diseño de medidas.
1) La estructura diseñada debe ser una estructura jerárquica para establecer el control entre los componentes del software.
2) El diseño debe ser modular, dividiendo lógicamente el software en componentes que completen funciones o subfunciones específicas.
3) El diseño debe incluir tanto la abstracción de datos como la abstracción de procesos.
4) El diseño deberá establecer módulos con características funcionales independientes.
5) El diseño debe establecer interfaces que reduzcan las conexiones complejas entre el módulo y el entorno externo.
6) El diseño debe poder establecer un método manejable y repetible basado en la información obtenida del análisis de requisitos de software.
proceso de diseño de software
1) Desarrollar especificaciones
2) Arquitectura y diseño de interfaz.
3) Diseño de datos/clase
4) Diseño a nivel de componente (proceso)
5) Escribir documentos de diseño.
6) Revisión del diseño
principios de diseño de software
Abstracción y refinamiento gradual.
La abstracción es una estrategia básica para controlar la complejidad a medida que aumenta gradualmente la escala del diseño de software.
El proceso de abstracción va de lo específico a lo general. El concepto de nivel superior es la abstracción del concepto de nivel inferior, y el concepto de nivel inferior es el refinamiento y refinamiento del concepto de nivel superior.
Cada paso en el proceso de ingeniería de software es una descripción concreta de la interpretación de un nivel superior de abstracción.
Los principales métodos de abstracción en el diseño de software son: abstracción de procesos y abstracción de datos.
La abstracción de proceso (también llamada abstracción funcional) significa que cualquier operación que complete una función claramente definida puede ser tratada como una sola entidad por el usuario, aunque esta operación en realidad se completa mediante una serie de operaciones de nivel inferior.
La abstracción de datos se refiere a la definición de tipos de datos y operaciones aplicadas a objetos de este tipo, y limita el rango de valores de los objetos que solo se pueden modificar y observar a través de estas operaciones.
Poco a poco busca el refinamiento.
Refinamiento paso a paso, dividiendo el proceso de resolución de problemas en varios pasos o etapas, siendo cada paso más refinado y más cercano a la solución del problema que el paso anterior.
La abstracción permite a los diseñadores describir procesos y datos ignorando detalles de bajo nivel, mientras que el refinamiento ayuda a los diseñadores a revelar detalles de bajo nivel durante el proceso de diseño.
Modular
La modularización, es decir, dividir el software en componentes más pequeños, independientes pero interrelacionados según principios prescritos, es en realidad un proceso de descomposición y abstracción del sistema.
Un módulo es una colección de objetos de programa, como descripciones de datos y declaraciones ejecutables. Tiene un nombre individual y se puede acceder a él por su nombre.
Por ejemplo, proceso. Funciones, subrutinas, macros, etc.
ocultación de información
Los detalles de implementación de cada módulo deben estar ocultos a otros módulos.
La información (incluidos datos y procedimientos) contenida en el bloque no puede ser utilizada por otros módulos que no necesiten esta información.
Mediante la ocultación de información, se pueden definir y aplicar restricciones de acceso a los detalles del proceso y a las estructuras de datos locales del módulo.
Funcionalmente independiente
Independencia funcional: la independencia funcional es un resultado directo de conceptos como modularidad, abstracción, ocultación de información y localización. La independencia funcional se puede lograr desarrollando módulos que sean funcionalmente específicos y eviten interacciones excesivas con otros módulos.
La importancia de la independencia funcional
La funcionalidad está separada y las interfaces se simplifican, lo que facilita el desarrollo del software.
Dado que los efectos secundarios causados por la modificación del diseño o la modificación de la codificación son limitados, se reduce la propagación de errores y se hace posible la reutilización del módulo, lo que hace que el software sea más fácil de mantener y probar.
La independencia funcional se puede medir mediante dos indicadores: cohesión y acoplamiento.
La cohesión es una medida de qué tan estrechamente están integrados entre sí los elementos dentro de un módulo.
La cohesión general del módulo se divide en siete tipos.
1) Cohesión coincidente (cohesión accidental): un módulo que separa los mismos segmentos de código de programa que no exhiben claramente funciones independientes en varios módulos se denomina módulo de cohesión coincidente.
2) Cohesión lógica: se refiere a un módulo que completa un conjunto de tareas relacionadas lógicamente. Cuando se llama al módulo, los parámetros de control pasados al módulo determinan qué función debe realizar el módulo.
3) Convergencia de tiempo: significa que todas las tareas de un módulo deben ejecutarse dentro del mismo período de tiempo. Por ejemplo, módulo de inicialización y módulo de terminación.
4) Cohesión del proceso: se refiere a un módulo que completa múltiples tareas, y estas tareas deben ejecutarse de acuerdo con un procedimiento específico (procedimental)
5) Cohesión de la comunicación: significa que todos los elementos de procesamiento de un módulo están concentrados en un área de una determinada estructura de datos.
6) Cohesión secuencial: se refiere a un módulo que completa múltiples funciones, y estas funciones deben ejecutarse secuencialmente
7) Cohesión funcional: se refiere al hecho de que todas las partes de un módulo trabajan juntas para completar una función específica, están estrechamente relacionadas y son inseparables.
El acoplamiento es una medida de la relativa independencia entre módulos (qué tan estrechamente están conectados entre sí)
Generalmente, existen siete tipos de posibles métodos de acoplamiento entre módulos.
1) Acoplamiento de contenido: si un módulo accede directamente a los datos internos de otro módulo; o un módulo no accede al otro módulo a través de la entrada normal, o dos módulos tienen parte del código del programa superpuesto o un módulo tiene múltiples entradas; Entonces se produce el acoplamiento de contenido entre los dos módulos.
2) Acoplamiento público: si un grupo de módulos accede al mismo entorno de datos común, el acoplamiento entre ellos se denomina acoplamiento público. El entorno de datos públicos puede ser una estructura de datos global, un área de comunicación compartida, un área de cobertura pública de la memoria, etc.
3) Acoplamiento externo: cuando los módulos se conectan a través de un entorno externo al software (como el acoplamiento de E/S del módulo a un dispositivo, formato o protocolo de comunicación específico), se denomina acoplamiento externo.
4) Acoplamiento de control: si los parámetros transmitidos de un módulo a otro contienen información de control y la información de control se utiliza para controlar la lógica de ejecución en el módulo receptor, se denomina acoplamiento de control.
5) Acoplamiento de etiquetas: parte de una estructura de datos (como una subestructura de una determinada estructura de datos) se pasa entre dos módulos a través de una tabla de parámetros, que es el acoplamiento de etiquetas.
6) Acoplamiento de datos: solo se transfieren datos simples entre dos módulos a través de tablas de parámetros, lo que se denomina acoplamiento de datos.
7) Acoplamiento indirecto: Si no existe una relación directa entre dos módulos, es decir, ninguno de los dos no depende del otro y puede funcionar de forma independiente, este acoplamiento se denomina acoplamiento indirecto.
Cuanto más estrechas sean las conexiones entre módulos, más conexiones habrá, mayor será el acoplamiento y más débil su independencia funcional.
Cuanto más estrecha sea la conexión entre los distintos elementos de un módulo, mayor será su cohesión.
Los módulos con una fuerte independencia funcional deben ser módulos con alta cohesión y bajo acoplamiento.
Diseño de arquitectura de software.
La arquitectura de software se centra en una o más estructuras de un sistema, incluidos los componentes de software, las propiedades visibles externamente de estos componentes y las relaciones entre ellos.
Bass propone tres razones clave por las que la arquitectura es importante:
① Facilitar la comunicación entre las partes interesadas
②Conducente a la toma temprana de decisiones en el diseño del sistema.
③Abstracción a nivel de sistema transmisible
proceso de desarrollo de la arquitectura
Arquitectura de software común
Estructura de host único k
Estructura C/S (Cliente/Servidor)
Estructura B/S (Navegador/Servidor)
estilo de arquitectura de software
La gran mayoría puede clasificarse como uno de un número relativamente pequeño de estilos arquitectónicos.
Cada estilo describe una categoría de sistema, que incluye:
① Algunos componentes que implementan las funciones requeridas por el sistema (como bases de datos, módulos informáticos)
②Un conjunto de "conectores" utilizados para conectar componentes para "comunicación, coordinación y cooperación"
③ Definir restricciones del sistema sobre cómo se integran los componentes.
④ Modelo semántico que permite a los diseñadores comprender las propiedades de todo el sistema y analizar las propiedades conocidas.
arquitectura centrada en datos
Algunos datos (como un archivo o una base de datos) se almacenan en el centro de la estructura y otros componentes los utilizan, agregan, eliminan o modifican con frecuencia.
arquitectura de estilo de flujo de datos
Esta estructura es adecuada para que los datos de entrada se transformen en datos de salida mediante una serie de componentes de cálculo o procesamiento.
Arquitectura de estilo de llamada y devolución.
Este estilo permite al diseñador de software diseñar una arquitectura que sea muy fácil de modificar y ampliar.
Contiene: arquitectura de estilo de programa/subprograma principal y arquitectura de estilo de llamada a procedimiento remoto
Hay algunos conceptos que debe comprender aquí:
Profundidad de la estructura del programa: el número de niveles de la estructura del programa se denomina profundidad de la estructura. La profundidad de la estructura refleja hasta cierto punto el tamaño y la complejidad de la estructura del programa.
El ancho de la estructura del programa: el número máximo de módulos en el mismo nivel en la jerarquía se llama ancho de la estructura.
Fan-in y fan-out del módulo: Fan-out representa el número de otros módulos que un módulo llama (o controla) directamente. Fan-in se define como la cantidad de módulos que llaman (o controlan) un módulo determinado. Múltiples distribuciones significan que es necesario controlar y coordinar muchos módulos subordinados. Los módulos de entrada múltiple suelen ser módulos públicos.
Arquitectura de estilo orientada a objetos
Métodos para que los componentes del sistema encapsulen datos y manipulen datos.
La interacción y coordinación entre componentes se transmiten a través de mensajes.
arquitectura de estilo jerárquico
En esta estructura, se definen diferentes niveles y cada nivel completa operaciones más cercanas a las instrucciones de la máquina que el nivel exterior.
Evaluar arquitecturas alternativas
Para el mismo requisito de software, se derivarán diferentes estructuras de software debido a diferentes principios de diversos métodos de diseño.
Diferentes estructuras de software para el mismo problema
ATAM (método de análisis de compensación de arquitectura)
1) Definir escenarios de aplicación (escenarios): expresar el sistema desde la perspectiva del usuario a través de diagramas de casos de uso
2) Derivar requisitos, restricciones y descripción del entorno: esto es parte de la ingeniería de requisitos para garantizar que se enumeren todas las inquietudes del cliente.
3) Describa el estilo arquitectónico que puede manejar las situaciones y requisitos anteriores.
4) Evaluar cada desempeño del sistema individualmente. El rendimiento para el diseño de arquitectura incluye: confiabilidad, rendimiento, seguridad, mantenibilidad, flexibilidad, capacidad de prueba, portabilidad, reutilización e interoperabilidad, etc.
5) Para diferentes formas arquitectónicas, evalúe la sensibilidad de estas actuaciones mencionadas en el paso 4. Se puede evaluar de esta manera: realice algunos pequeños cambios en toda la arquitectura, analice y determine si hay cambios sensibles en el rendimiento de la apelación. Aquellos rendimientos que se ven muy afectados por los cambios arquitectónicos se denominan puntos sensibles.
6) Evaluar aquellas arquitecturas propuestas en el paso 3 a través del análisis de sensibilidad en el paso 5. El método descrito por SEI es el siguiente: cuando se determinan los puntos sensibles de una arquitectura, necesitamos encontrar los factores que requieren la mayor cantidad de puntos de compensación en el sistema (puntos de compensación). El factor de compensación significa que cambiar este contenido en la arquitectura provocará cambios sensibles en el rendimiento del sistema. Por ejemplo, el rendimiento de un sistema con una estructura cliente-servidor está estrechamente relacionado con la cantidad de servidores en el sistema (por ejemplo, aumentar la cantidad de servidores mejorará el rendimiento del sistema hasta cierto punto)... En En este caso, la cantidad de servidores es este punto de equilibrio en la arquitectura.
Al diseñar una arquitectura de software, puede consultar las siguientes reglas:
(1) Mejorar la estructura del software y mejorar la independencia del módulo.
(2) Profundidad, ancho, distribución en abanico y entrada en abanico adecuados del módulo
(3) El alcance de juicio del módulo debe estar dentro de su alcance de control.
(4) Esforzarse por reducir la complejidad de las interfaces de los módulos.
(5) Diseñar un módulo con entrada única y salida única
(6) La funcionalidad del módulo debe ser predecible y el tamaño del módulo debe ser moderado
(7) Generalmente, es mejor que un módulo contenga entre 30 y 50 declaraciones.
(8) Una estructura de software bien diseñada generalmente tiene una mayor distribución en la capa superior, menos distribución en la capa intermedia y una alta distribución en la capa inferior.
tecnología de diseño a nivel de componentes
En los métodos estructurados de análisis y diseño, los componentes a menudo se denominan módulos.
En el análisis y diseño orientado a objetos, los componentes se denominan clases. En los métodos de desarrollo basados en componentes, los componentes se denominan componentes.
En la etapa de diseño a nivel de componente, se completa principalmente el siguiente trabajo:
Determine el algoritmo utilizado para cada componente, seleccione una herramienta adecuada para expresar el proceso del algoritmo y escriba una descripción detallada del procedimiento del componente.
Determinar las estructuras de datos utilizadas internamente por cada componente.
Al final del diseño a nivel de componente, los resultados anteriores deben escribirse en la especificación de diseño a nivel de componente y formarse en un documento formal mediante revisión, que servirá como base para la siguiente etapa (etapa de codificación).
Método de programación estructurada
Una definición más popular es: "Si los bloques de código de un programa están conectados sólo a través de las tres estructuras de control básicas de secuencia, selección y bucle, y cada bloque de código tiene sólo una entrada y una salida, entonces se dice que el programa está estructurado". . de"
Con el desarrollo de nuevos métodos y tecnologías de desarrollo de software, como la orientación a objetos y la reutilización de software, un enfoque de desarrollo más realista y eficaz puede ser una combinación orgánica de métodos de arriba hacia abajo y de abajo hacia arriba.
Representación grafica
Diagrama de flujo del programa
Los diagramas de flujo del programa son independientes de cualquier lenguaje de programación, relativamente intuitivos, claros y fáciles de aprender y dominar.
Para utilizar diagramas de flujo para describir programas estructurados, debe limitar los diagramas de flujo a solo cinco estructuras de control básicas.
diagrama NS
Nassi y Shneiderman propusieron una herramienta de descripción gráfica que se ajusta a los principios de la programación estructurada, llamada diagrama de caja, también llamado diagrama N-S.
Cinco estructuras de control básicas
ALMOHADILLA
PAD es la abreviatura de Diagrama de análisis de problemas, que evolucionó a partir del diagrama de flujo del programa.
Cinco estructuras de control básicas
tabla de decisiones
Cuando el algoritmo contiene múltiples selecciones de condiciones anidadas, es difícil describirlo claramente utilizando diagramas de flujo del programa, diagramas N-S o PAD.
Sin embargo, las tablas de decisiones pueden expresar claramente la correspondencia entre combinaciones complejas de condiciones y las acciones que deben tomarse.
La ventaja de la tabla de decisiones es que puede describir todas las reglas de procesamiento de manera concisa e inequívoca.
Sin embargo, la tabla de decisiones representa lógica estática, que es el posible resultado bajo una determinada combinación de valores de condición. No puede expresar la secuencia de procesamiento ni la estructura del bucle.
PDL de lenguaje de diseño
PDL (Program Design Language) es un lenguaje utilizado para describir el diseño del algoritmo y los detalles de procesamiento de componentes funcionales, llamado lenguaje de diseño.
Es una especie de pseudocódigo. En términos generales, las reglas gramaticales del pseudocódigo se dividen en "gramática externa" y "gramática interna".
La sintaxis extranjera debe ajustarse a las reglas gramaticales de las declaraciones comúnmente utilizadas en los lenguajes de programación generales.
La gramática interna puede utilizar algunas oraciones, frases y símbolos matemáticos comunes en inglés simples para describir las funciones que debe realizar un programa.
Ejemplos de uso de PDL
Funciones de PDL
1. Existe una sintaxis externa de palabras clave fija que proporciona todas las estructuras de control estructuradas, descripciones de datos y características de los componentes. Las palabras clave pertenecientes a la gramática extranjera son un conjunto de vocabulario limitado que puede segmentar estructuralmente el texto PDL y hacerlo fácil de entender. Para distinguir las palabras clave, se estipula que las palabras clave deben estar en mayúscula y otras palabras en minúsculas.
2. La gramática interna utiliza el lenguaje natural para describir las características de procesamiento. La sintaxis interna es relativamente flexible. Siempre que esté escrita con claridad, no hay necesidad de preocuparse por errores gramaticales, por lo que las personas pueden concentrarse en describir la lógica del algoritmo.
3. Existen mecanismos de descripción de datos, que incluyen estructuras de datos simples (como escalares y matrices) y complejas (como listas vinculadas y estructuras jerárquicas).
4. Existe una definición de subrutina y un mecanismo de llamada para expresar descripciones de interfaz de varias maneras.
Especificaciones de diseño y revisiones de diseño.
especificaciones de diseño
revisión de diseño
El objetivo final del diseño de software es obtener la mejor solución.
"Mejor" significa que entre todas las soluciones candidatas, la solución que puede lograr mayor productividad, mayor confiabilidad y mantenibilidad se selecciona en función de las condiciones de ahorrar costos de desarrollo, reducir el consumo de recursos y acortar el tiempo de desarrollo.
Contenido de la revisión del diseño.
Trazabilidad: es decir, analizar la estructura del sistema y la estructura del subsistema del software para confirmar si el diseño del software cubre todos los requisitos de software identificados y si cada componente del software se puede rastrear hasta un determinado requisito.
Interfaz: analice la conexión entre varias partes del software y confirme si la interfaz interna y la interfaz externa del software se han definido claramente. Si el componente cumple con los requisitos de alta cohesión y bajo acoplamiento. Si el alcance del componente está dentro de su rango de control.
Riesgo: Confirmar si el diseño del software se puede implementar a tiempo bajo las condiciones técnicas existentes y dentro del presupuesto.
Practicidad: Confirmar si el diseño del software es práctico para la solución a las necesidades.
Claridad técnica: confirmar que el diseño del software se expresa en una forma que se pueda traducir fácilmente a código.
Mantenibilidad: desde la perspectiva del mantenimiento del software, confirme si el diseño del software considera la conveniencia de un mantenimiento futuro.
Calidad: Confirme si el diseño del software presenta características de buena calidad.
Varias opciones: vea si ha considerado otras opciones y ¿cuáles son los criterios para comparar varias opciones?
Limitaciones: evaluar si las limitaciones del software son realistas y coherentes con los requisitos.
Otras cuestiones específicas: evaluación de documentación, testabilidad, proceso de diseño, etc.
Hay dos tipos de revisión: revisión formal y revisión informal.
Además de los desarrolladores de software, la revisión formal también invita a participar a representantes de los usuarios y expertos en el dominio, generalmente en forma de defensa.
Las revisiones informales son de naturaleza más o menos entre pares y no se limitan al tiempo o al formato.