Documento de ingeniería de software

[Editar este párrafo] Información básica

La ingeniería de software siempre ha carecido de una definición unificada. Muchos académicos y organizaciones han dado sus propias definiciones: Ingeniería de software (1) y Barry Boehm: Uso del conocimiento científico y tecnológico moderno para diseñar. y construir computadoras Programas y documentación relacionada necesaria para desarrollar, operar y mantener esos programas. (2) Definición de IEEE en el "Glosario de ingeniería de software": Ingeniería de software es: 1. Aplicar métodos sistemáticos, estrictamente restringidos y cuantificables al desarrollo, operación y mantenimiento de software, es decir, aplicar ingeniería al software. 2. El método descrito en el Estudio 1 (3), la definición dada por Fritz Bauer en la reunión de la OTAN: Establecer y un; serie de métodos que utilizan sólidos principios de ingeniería para obtener de forma económica software confiable que se ejecute de manera efectiva en máquinas reales. Actualmente, una definición aceptada sostiene que la ingeniería de software es el estudio de cómo desarrollar y mantener software en un enfoque de proceso sistemático, estandarizado y cuantificado, y cómo combinar técnicas de gestión correctas y probadas en el tiempo con los mejores métodos técnicos de investigación y análisis disponibles actualmente. solicitud. (4) Definición en la "Enciclopedia de Ciencias de la Computación y Tecnología": La ingeniería de software es un proyecto de desarrollo de software basado en los principios de aplicación de la informática, las matemáticas y las ciencias de la gestión. La ingeniería de software se basa en principios y métodos de ingeniería tradicionales para mejorar la calidad y reducir costos. Entre ellos, la informática y las matemáticas se utilizan para construir modelos y algoritmos, la ciencia de la ingeniería se utiliza para formular especificaciones, diseñar paradigmas, evaluar costos y determinar compensaciones, y la ciencia de la gestión se utiliza para gestionar planes, recursos, calidad y costos.

[Editar este párrafo] Objetivo

El objetivo de la ingeniería de software es desarrollar modificaciones, efectividad, confiabilidad y comprensibilidad bajo la premisa de un costo y cronograma determinados, mantenibilidad, reutilización, adaptabilidad, portabilidad, trazabilidad e interoperabilidad de los productos de software, y satisfacer las necesidades de los usuarios. Perseguir estos objetivos ayudará a mejorar la calidad y la eficiencia del desarrollo de productos de software y reducirá la dificultad de mantenimiento. Estos conceptos se presentan a continuación. (1) Variabilidad. Permite modificar el sistema sin aumentar la complejidad del sistema original. Admite la depuración y el mantenimiento del software, un objetivo inalcanzable. (2) Eficiencia. Los sistemas de software hacen el uso más eficiente de los recursos de tiempo y espacio de una computadora. Varios programas informáticos consideran la sobrecarga de tiempo/espacio del sistema como un indicador técnico importante para medir la calidad del software. En muchos casos, existe un conflicto entre la búsqueda de la eficacia temporal y la eficacia espacial. En este momento, tenemos que sacrificar la eficiencia del tiempo por la eficiencia del espacio, o sacrificar la eficiencia del espacio por la eficiencia del tiempo. Las compensaciones de tiempo/espacio ocurren con frecuencia. Los diseñadores de software experimentados utilizarán hábilmente el concepto de compromiso para satisfacer las necesidades de los usuarios y sus propios diseños en un entorno físico específico. (3) Confiabilidad. Puede prevenir fallas del sistema de software causadas por conceptos, diseños y estructuras imperfectos, y tiene la capacidad de recuperar fallas del sistema de software causadas por operaciones incorrectas. Para los sistemas informáticos integrados en tiempo real, la confiabilidad es un objetivo muy importante. Porque el software necesita controlar un proceso físico en tiempo real, como puede ser la navegación de una nave espacial, el funcionamiento de una central nuclear, etc. Si no se puede garantizar la confiabilidad, una vez que ocurre un problema, puede ser catastrófico y las consecuencias serán inimaginables. Por lo tanto, se debe dar máxima prioridad a la confiabilidad durante el desarrollo, la codificación y las pruebas de software. (4) Comprensibilidad. El sistema tiene una estructura clara y puede reflejar directamente las necesidades del problema. La comprensibilidad ayuda a controlar la complejidad de los sistemas de software y respalda el mantenimiento, la portabilidad o la reutilización del software. (5) Mantenibilidad. Una vez que un producto de software se entrega a los usuarios, se puede modificar para corregir errores potenciales, mejorar el rendimiento y otras propiedades, adaptar el producto de software a los cambios en el entorno, etc. Dado que el software es un producto lógico que se puede utilizar indefinidamente mientras los usuarios lo necesiten, el mantenimiento del software es inevitable. Los costos de mantenimiento del software representan una gran proporción de los costos de desarrollo de software. La mantenibilidad es un objetivo muy importante en la ingeniería de software. La comprensibilidad y modificabilidad del software favorecen la mantenibilidad del software. (6) Reutilizabilidad. Los módulos relacionados o un grupo de módulos con conceptos o funciones relativamente independientes se definen como componentes de software. La medida en que un componente de software se puede aplicar en diversas situaciones se denomina reutilización del componente.

Acompañando a los procesos anteriores se encuentran procesos de gestión, procesos de soporte, procesos de formación, etc.

[Editar este párrafo] Principios

Los principios de ingeniería de software se refieren a los principios que se deben seguir durante el proceso de desarrollo de software en torno al diseño de ingeniería, el soporte de ingeniería y la gestión de ingeniería. Los principios de la ingeniería de software incluyen los siguientes cuatro principios básicos para los ingenieros de software:

1) Elija un paradigma de desarrollo apropiado.

Este principio está relacionado con el diseño del sistema. En el diseño de sistemas, los requisitos de software, los requisitos de hardware y otros factores se restringen e influyen entre sí, lo que a menudo requiere concesiones. Por lo tanto, debemos comprender la variabilidad en la definición de requisitos y adoptar un paradigma de desarrollo adecuado para controlarla y garantizar que el producto de software satisfaga las necesidades de los usuarios.

2) Utilizar métodos de diseño adecuados.

En el diseño de software se suelen considerar características como la modularidad, la abstracción, la ocultación de información, la localización, la coherencia y la adaptabilidad. Los métodos de diseño apropiados ayudan a realizar estas funciones y así lograr los objetivos de la ingeniería de software.

3) Proporcionar soporte de ingeniería de alta calidad.

Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas. En ingeniería de software, las herramientas y entornos de software que respaldan el proceso del software son muy importantes. La calidad y el costo de un proyecto de ingeniería de software dependen directamente de la calidad y efectividad del soporte brindado a la ingeniería de software.

4) Prestar atención a la gestión del proceso de desarrollo.

La gestión de la ingeniería de software afecta directamente la utilización efectiva de los recursos disponibles, la producción de productos de software que cumplan los objetivos y la mejora de las capacidades de producción de la organización de software. Por lo tanto, sólo una gestión eficaz del proceso de software puede lograr una ingeniería de software eficaz. Este marco de ingeniería de software nos dice que los objetivos de la ingeniería de software son la usabilidad, la corrección y la rentabilidad. Para implementar un proyecto de software, es necesario elegir un paradigma de desarrollo apropiado, adoptar métodos de diseño apropiados, brindar soporte de ingeniería de alta calidad y; implementar el proceso de desarrollo La gestión eficaz de las actividades de ingeniería de software incluye principalmente requisitos, diseño, implementación, validación y soporte. Cada actividad puede adoptar paradigmas de desarrollo, métodos de diseño, procesos de soporte y gestión de procesos adecuados de acuerdo con la ingeniería de software específica. Según el marco de la ingeniería de software, el contenido de investigación de la disciplina de ingeniería de software incluye principalmente: paradigmas de desarrollo de software, métodos de desarrollo de software, procesos de software, herramientas de software, entornos de desarrollo de software, ingeniería de software asistida por computadora (CASE) y economía del software.

[Editar este párrafo] Principios básicos

Desde que se propuso el término “ingeniería de software” en 1968, los expertos y académicos que estudian la ingeniería de software han propuesto más de 100 principios o principios sobre el software credo de ingeniería. Barry Boehm, un famoso experto estadounidense en ingeniería de software, sintetizó las opiniones de estos expertos y resumió la experiencia de TRW en el desarrollo de software a lo largo de los años. En 1983 propuso siete principios básicos de la ingeniería de software. Bohm cree que estos siete principios son el conjunto mínimo de principios para garantizar la calidad del producto de software y la eficiencia del desarrollo. Son independientes entre sí y constituyen un conjunto mínimo indispensable. Al mismo tiempo son bastante completos. Por supuesto, no se puede probar matemáticamente estrictamente que son un conjunto completo, pero se puede demostrar que más de 100 principios de ingeniería de software que se han propuesto anteriormente pueden contener o derivar cualquier combinación de estos siete principios. Los siguientes son los siete principios de la ingeniería de software:

1. Gestión estricta de la planificación del ciclo de vida por fases

Este artículo se propone basándose en el aprendizaje de sus predecesores. Las estadísticas muestran que más del 50% de los proyectos fallidos se deben a una mala planificación. Durante el largo ciclo de vida del desarrollo y mantenimiento de software, es necesario completar muchos tipos diferentes de trabajo. Este principio consiste en dividir el ciclo de vida del software en varias etapas, formular un plan viable en consecuencia y luego gestionar el desarrollo y mantenimiento del software estrictamente de acuerdo con el plan. Bohm cree que se deben especificar e implementar estrictamente seis planes a lo largo del ciclo de vida del software: plan de resumen del proyecto, plan de hitos, plan de control del proyecto, plan de control del producto, plan de verificación y plan de operación y mantenimiento.

2. Cumplir con la revisión por etapas.

Los resultados estadísticos muestran que la mayoría de los errores se generan antes de la codificación, representando alrededor del 63%. Cuanto más tarde se descubre un error, mayor es el coste de corregirlo, entre 2 y 3 órdenes de magnitud.

Por lo tanto, la garantía de calidad del software no puede esperar hasta el final de la codificación. Se deben cumplir revisiones estrictas de las etapas para que los errores puedan descubrirse lo antes posible.

3. Implementar un estricto control del producto.

Una de las cosas que más odian los desarrolladores es cambiar los requisitos. Pero la práctica nos dice que los cambios en la demanda suelen ser inevitables. Esto requiere que utilicemos tecnología científica de control de productos para cumplir con este requisito. Esto significa utilizar el control de cambios, también conocido como gestión de configuración básica. Cuando los requisitos cambian, la documentación o el código en otras etapas también cambia para garantizar la coherencia del software.

4. Utilizar tecnología de programación moderna.

Desde la tecnología de desarrollo de software estructurado de las décadas de 1960 y 1970 hasta la reciente tecnología orientada a objetos, desde los lenguajes de primera y segunda generación hasta los lenguajes de cuarta generación, la gente se ha dado cuenta plenamente de que los métodos son tan poderosos como como poder. El uso de tecnología avanzada no solo puede mejorar la eficiencia del desarrollo de software, sino también reducir el costo de mantenimiento del software.

5. Los resultados deben revisarse con claridad.

El software es un producto lógico invisible e intangible. El progreso del trabajo del equipo de desarrollo de software tiene poca visibilidad y es difícil de evaluar y gestionar. Para una mejor gestión, las responsabilidades del equipo de desarrollo y los estándares del producto deben definirse claramente en función de los objetivos generales y los plazos de finalización del desarrollo de software para que los estándares obtenidos puedan revisarse claramente.

6. El equipo de desarrollo debe ser pequeño pero refinado.

La calidad y cantidad de desarrolladores son factores importantes que afectan la calidad del software y la eficiencia del desarrollo. Deberían ser menos pero más precisos. Este artículo se basa en dos razones: los desarrolladores de alta calidad son entre varias y docenas de veces más eficientes que los desarrolladores de baja calidad y cometen muchos menos errores durante el trabajo de desarrollo cuando el equipo de desarrollo está formado por N personas, los posibles canales de comunicación son N; (N-1)/2, lo que indica que a medida que aumenta el número de personas N, el costo de comunicación aumentará considerablemente.

7. Reconocer la necesidad de mejora continua de las prácticas de ingeniería de software.

Seguir los seis principios básicos anteriores puede realizar mejor la producción de ingeniería de software. Sin embargo, son sólo un resumen y una inducción de la experiencia existente y no pueden garantizar que se mantendrán al ritmo del continuo desarrollo tecnológico. Por lo tanto, Bohm propuso que el séptimo principio de la ingeniería de software debería ser reconocer la necesidad de una mejora continua de las prácticas de ingeniería de software. De acuerdo con este principio, no solo debemos adoptar activamente nuevas tecnologías de desarrollo de software, sino también prestar atención a resumir constantemente la experiencia, recopilar datos como el progreso y el consumo, y contar los tipos de errores y problemas. Estos datos pueden usarse no sólo para evaluar la efectividad de nuevas tecnologías de software, sino también para señalar cuestiones a las que se debe prestar atención y qué herramientas y tecnologías deben investigarse primero.

[Editar este párrafo] Método

El método de la ingeniería de software tiene muchos significados. Incluye gestión de proyectos, análisis, diseño, programación, pruebas y control de calidad. Los métodos de diseño de software de los ingenieros de software se pueden dividir en métodos pesados ​​y métodos livianos. Los métodos pesados ​​producen una extensa documentación formal. Los métodos de desarrollo de peso pesado más conocidos incluyen ISO9000, CMM y el proceso de desarrollo de software unificado de RUP. Un proceso de desarrollo ligero no requiere documentación formal extensa. Los métodos de desarrollo ligeros más conocidos incluyen Extreme Programming (XP) y AgileProcesses. El artículo "Nueva Metodología" cree que los métodos pesados ​​son defensivos. En las organizaciones de software que aplican métodos pesados, debido a que los gerentes de proyectos de software no participan o rara vez participan en la programación, no pueden comprender el progreso del proyecto en detalle, por lo que tendrán miedo del proyecto y tendrán que pedir a los programadores que escriban muchos continuamente ". proyectos de desarrollo de software". documento". El enfoque liviano presenta una actitud "ofensiva", que se refleja en los cuatro principios en los que el método XP enfatiza particularmente: "comunicación, simplicidad, retroalimentación y coraje". En la actualidad, algunas personas piensan que el método pesado es adecuado para grandes equipos de software (más de docenas de personas), mientras que el "método liviano" es adecuado para equipos de software pequeños (unas pocas personas, una docena de personas). Por supuesto, hay mucho debate sobre las ventajas del enfoque pesado versus el enfoque liviano, y los diversos enfoques continúan evolucionando. Algunos metodólogos creen que las personas deberían seguir e implementar estrictamente estos métodos en el desarrollo. Pero algunas personas no están equipadas para implementar estos métodos. De hecho, el método de desarrollo de software depende de muchos factores y está restringido por el entorno.

[Editar este párrafo] Curso principal

Lengua extranjera, matemáticas avanzadas, álgebra lineal, álgebra avanzada, conceptos básicos de tecnología electrónica, matemáticas discretas, introducción a las computadoras (lenguaje C), datos estructura, programación C, programación JAVA, programación Delphi, programación en lenguaje ensamblador, diseño y análisis de algoritmos, principios y arquitectura de composición de computadoras, sistemas de bases de datos, redes de computadoras, ingeniería de software, tecnología de prueba de software, requisitos de software y gestión de proyectos, análisis de casos de diseño de software. Además, también incluye sistemas operativos, introducción a la arquitectura de software, patrones de diseño, conceptos básicos de tecnología multimedia, modelado UML, teoría de la probabilidad, inglés universitario, etc. Algunas universidades también incluyen física universitaria, dibujo de ingeniería, análisis numérico, etc.

[Editar este párrafo] Dirección del desarrollo

El desarrollo ágil se considera un avance importante en la ingeniería de software. Enfatiza que el desarrollo de software debería poder hacer frente adecuadamente a posibles cambios e incertidumbres futuros. El desarrollo ágil se considera un enfoque "ligero". El más famoso de los métodos ligeros debería ser la "Programación extrema" (XP para abreviar). Al método ligero corresponde la existencia del "método pesado". El enfoque de peso pesado enfatiza el enfoque centrado en el proceso de desarrollo más que en las personas. Ejemplos de métodos pesados ​​son CMM/PSP/TSP. La programación orientada a aspectos (AOP) se considera otro desarrollo importante de la ingeniería de software en los últimos años. Aspecto aquí se refiere a una colección de objetos y funciones que completan una función. En este sentido, existen programación y plantillas genéricas.

[Editar este párrafo] Análisis de requisitos

La ingeniería de software incluye cuatro etapas: requisitos, diseño, codificación y pruebas. La ingeniería de requisitos es la primera y muy importante etapa de la ingeniería de software. Tomando como ejemplo el sistema de análisis de requisitos de ingeniería de software de gestión hospitalaria, se presentan en detalle los métodos de composición e implementación de la ingeniería de requisitos. Primero, uno debe entender la relación entre la ingeniería de requisitos y otros procesos del proyecto: Figura 1 La relación entre los requisitos y otros procesos del proyecto Los requisitos de software incluyen tres niveles diferentes (requisitos de negocio, requisitos de usuario y requisitos funcionales), así como requisitos no funcionales: requisitos Explica los beneficios iniciales que el nuevo sistema proporciona a los clientes y desarrolladores de productos, refleja los requisitos objetivos de alto nivel de la organización o los clientes para el sistema y el producto, y se explica en los documentos de vista y alcance del proyecto, el documento de requisitos del usuario describe qué; los usuarios deben hacer cuando usan el producto Las tareas completadas se describen en el documento de caso de uso o en la descripción del script de la solución; los requisitos funcionales definen las funciones de software que los desarrolladores deben implementar para que los usuarios puedan completar las tareas y satisfacer las necesidades comerciales. La ingeniería de requisitos se divide en dos fases: desarrollo de requisitos y gestión de requisitos. Estas dos etapas se explican a continuación: Primero, el desarrollo de requisitos se divide en obtención de requisitos, análisis de requisitos, redacción de especificaciones y verificación de requisitos. Los pasos generales del análisis se enumeran y explican a continuación. Por supuesto, los pasos apropiados deben determinarse en función de la situación real, como el tamaño y las características del proyecto. 1. Adquisición de requisitos: 1) Determinar el proceso de desarrollo de requisitos: determinar cómo organizar los pasos de recopilación, análisis, refinamiento y verificación de requisitos durante el proceso de desarrollo de requisitos y escribirlos en documentos. Alguna orientación sobre pasos importantes ayudará a los analistas en su trabajo y facilitará la programación y programación de las actividades de recopilación de requisitos. 2) Prepare los documentos de alcance y vista del proyecto: los documentos de alcance y vista del proyecto deben incluir objetivos comerciales de productos de alto nivel, y todos los casos de uso y requisitos funcionales deben cumplir con los requisitos comerciales alcanzables. La descripción de la vista del proyecto permite a todos los participantes del proyecto * * * comprender los objetivos del proyecto. El alcance se utiliza como referencia para evaluar requisitos o características potenciales. Tabla 1 Plantilla para la vista del proyecto y el documento de alcance A, 1 Antecedentes En esta sección, resumimos la base teórica para el nuevo producto y proporcionamos una descripción general de los antecedentes históricos o las circunstancias del desarrollo del producto. 2Las oportunidades de negocio describen oportunidades de mercado existentes o problemas de negocio que se están resolviendo. Describa el mercado en el que compite el producto y el entorno en el que se utilizará el sistema de información. Incluye una breve evaluación relativa de los productos y soluciones existentes, señalando por qué los productos propuestos son atractivos y las ventajas competitivas que pueden aportar. a.3 Los objetivos comerciales resumen los importantes beneficios comerciales generados por el producto de forma cuantitativa y mensurable, y se centran en el valor otorgado al negocio. a.4 Las necesidades del cliente o del mercado describen las necesidades de algunos clientes típicos, incluidos productos o sistemas de información que no satisfacen las necesidades existentes del mercado.

A diferencia de los representantes de productos, los miembros del equipo central normalmente no tienen autoridad para tomar decisiones. 6) Determinar casos de uso: permita que los representantes de los usuarios identifiquen casos de uso, recopilen descripciones de los representantes de los usuarios de las tareas que deben completar con el software y analicen cómo los usuarios interactúan con el sistema y sus necesidades de diálogo. Puede utilizar plantillas estándar al escribir documentación utilizando ejemplos, a partir de los cuales puede derivar requisitos funcionales. Un caso de uso puede incluir muchas secuencias de tareas e interacciones lógicamente relacionadas para realizar una tarea. Por tanto, un ejemplo de uso es una colección de descripciones de uso relacionadas, que son ejemplos de ejemplos de uso. Al describir, enumere la secuencia de interacción o diálogo entre el actor y el sistema. Cuando termina esta conversación, el ejecutor ha logrado el propósito previsto. Para algunos casos de uso complejos, resulta beneficioso dibujar modelos de análisis gráfico, incluidos diagramas de flujo de datos, diagramas de relaciones entre entidades, diagramas de transición de estados, clases de objetos y diagramas de contactos. Las descripciones de casos de uso no proporcionan a los desarrolladores los detalles de la funcionalidad que desean desarrollar. Para reducir esta incertidumbre, es necesario describir cada caso de uso en requisitos funcionales detallados. Cada caso de uso puede dar lugar a múltiples requisitos funcionales, lo que permitirá a los actores realizar tareas relacionadas y múltiples casos de uso pueden requerir los mismos requisitos funcionales. Los beneficios de utilizar un enfoque de casos de uso para los requisitos provienen de la perspectiva de este enfoque centrada en las tareas y el usuario. En comparación con un enfoque centrado en funciones, un enfoque de ejemplo puede dejar más claro a los usuarios lo que les permite hacer el nuevo sistema. Cada caso de uso describe un método mediante el cual un usuario puede interactuar con el sistema para lograr un objetivo específico. El uso de instancias captura de manera efectiva la mayoría del comportamiento esperado del sistema, pero es posible que tenga algunos requisitos que no estén específicamente relacionados con las tareas del usuario o las interacciones entre otros actores. En este momento, necesita una especificación de requisitos independiente. 7) Convocar una reunión de enlace de desarrollo de aplicaciones: Convocar una reunión de enlace de desarrollo de aplicaciones es un simposio extenso y sencillo. También es una buena forma de cooperación entre analistas y representantes de clientes, a partir del cual se puede formular un borrador del documento de requisitos. La conferencia permite poner en práctica la asociación entre clientes y desarrolladores a través de debates estrechos y centrados. 8) Analizar el flujo de trabajo del usuario: analice el flujo de trabajo del usuario y observe el proceso de los usuarios que realizan tareas comerciales. Dibuje un diagrama esquemático simple (preferiblemente un diagrama de flujo de datos) para describir cuándo obtienen los usuarios qué datos y cómo utilizarlos. Escribir documentación de procesos comerciales ayuda a aclarar ejemplos de uso y requisitos funcionales del producto. Incluso puede descubrir que los clientes realmente no necesitan un sistema de software completamente nuevo para lograr sus objetivos comerciales. 9) Determine los atributos de calidad: determine los atributos de calidad y otros requisitos no funcionales, y considere las características de calidad no funcionales además de los requisitos funcionales, lo que permitirá que su producto cumpla y supere las expectativas del cliente. Las declaraciones sobre qué tan bien un sistema puede realizar ciertos comportamientos o permitir a los usuarios realizar ciertas acciones son atributos de calidad, que son requisitos no funcionales. Escuche comentarios que describan características razonables: rápido, simple, intuitivo, fácil de usar, sólido, confiable, seguro y eficiente. Hablarás con los usuarios para definir con precisión qué significan realmente sus palabras vagas y subjetivas. 10) Ver informes de problemas: al ver los informes de problemas del sistema actual, puede mejorar aún más los informes de problemas de clientes exigentes, complementar los requisitos y proporcionar una gran cantidad de ideas para mejorar y agregar funciones a nuevos productos o versiones. Las personas responsables de brindar soporte y asistencia al usuario pueden brindar información muy valiosa al proceso de recolección de requisitos. 11) Reutilización de requisitos: reutilización de requisitos en todos los proyectos. Si la funcionalidad requerida por el cliente es similar a la de un producto existente, podemos verificar si los requisitos son lo suficientemente flexibles como para permitir que se reutilicen algunos componentes de software existentes.