Descripción general de ingeniería de software
Primero entendamos qué significa la ingeniería de software. El término está compuesto por dos palabras, software e ingeniería.
Software es más que un código de programa. Un programa es un código ejecutable que tiene algún propósito computacional. El software se considera una colección de código de programación ejecutable, bibliotecas asociadas y documentación. El software, cuando se crea para un requisito específico, se denominasoftware product.
Engineering por otro lado, se trata de desarrollar productos, utilizando principios y métodos científicos bien definidos.
Software engineeringes una rama de la ingeniería asociada con el desarrollo de productos de software utilizando principios, métodos y procedimientos científicos bien definidos. El resultado de la ingeniería de software es un producto de software eficiente y confiable.
Definiciones
IEEE define la ingeniería de software como:
(1) La aplicación de un enfoque sistemático, disciplinado y cuantificable para el desarrollo, operación y mantenimiento de software; es decir, la aplicación de la ingeniería al software.
(2) El estudio de enfoques como en la declaración anterior.
Fritz Bauer, un informático alemán, define la ingeniería de software como:
La ingeniería de software es el establecimiento y uso de principios de ingeniería sólidos para obtener un software económico que sea confiable y funcione de manera eficiente en máquinas reales.
Evolución del software
El proceso de desarrollo de un producto de software utilizando principios y métodos de ingeniería de software se denomina software evolution. Esto incluye el desarrollo inicial del software y su mantenimiento y actualizaciones, hasta que se desarrolle el producto de software deseado, que satisfaga los requisitos esperados.
La evolución comienza con el proceso de recopilación de requisitos. Después, los desarrolladores crean un prototipo del software previsto y se lo muestran a los usuarios para obtener sus comentarios en la etapa inicial del desarrollo del producto de software. Los usuarios sugieren cambios, en los que también cambian varias actualizaciones y mantenimiento consecutivos. Este proceso cambia al software original, hasta que se logra el software deseado.
Incluso después de que el usuario ha deseado el software en la mano, la tecnología avanzada y los requisitos cambiantes obligan al producto de software a cambiar en consecuencia. No es factible volver a crear software desde cero e ir uno a uno con los requisitos. La única solución viable y económica es actualizar el software existente para que cumpla con los requisitos más recientes.
Leyes de evolución del software
Lehman ha dado leyes para la evolución del software. Dividió el software en tres categorías diferentes:
- S-type (static-type) - Este es un software que funciona estrictamente de acuerdo con especificaciones y soluciones definidas . La solución y el método para lograrlo, ambos se entienden inmediatamente antes de codificar. El software de tipo s está menos sujeto a cambios, por lo que este es el más simple de todos. Por ejemplo, programa de calculadora para cálculos matemáticos.
- P-type (practical-type) - Este es un software con una colección de procedimientos. Esto se define exactamente por lo que pueden hacer los procedimientos. En este software, las especificaciones se pueden describir pero la solución no es obvia al instante. Por ejemplo, software de juegos.
- E-type (embedded-type) - Este software funciona estrechamente como requisito del entorno del mundo real . Este software tiene un alto grado de evolución ya que hay varios cambios en las leyes, impuestos, etc. en situaciones del mundo real. Por ejemplo, software de comercio en línea.
Evolución del software E-Type
Lehman ha dado ocho leyes para la evolución del software E-Type:
- Continuing change - Un sistema de software de tipo E debe continuar adaptándose a los cambios del mundo real, de lo contrario se vuelve cada vez menos útil.
- Increasing complexity - A medida que evoluciona un sistema de software de tipo E, su complejidad tiende a aumentar a menos que se trabaje para mantenerlo o reducirlo.
- Conservation of familiarity - La familiaridad con el software o el conocimiento sobre cómo se desarrolló, por qué se desarrolló de esa manera en particular, etc. debe conservarse a cualquier costo, para implementar los cambios en el sistema.
- Continuing growth- Para que un sistema de tipo E destinado a resolver algún problema comercial, su tamaño de implementación de los cambios crece de acuerdo con los cambios de estilo de vida de la empresa.
- Reducing quality - Un sistema de software tipo E pierde calidad a menos que se mantenga y se adapte rigurosamente a un entorno operativo cambiante.
- Feedback systems- Los sistemas de software de tipo E constituyen sistemas de retroalimentación de varios niveles y bucles y deben tratarse como tales para poder modificarlos o mejorarlos con éxito.
- Self-regulation - Los procesos de evolución del sistema de tipo E se autorregulan con la distribución del producto y las medidas del proceso casi normales.
- Organizational stability - La tasa de actividad global efectiva promedio en un sistema de tipo E en evolución es invariable durante la vida útil del producto.
Paradigmas de software
Los paradigmas de software se refieren a los métodos y pasos que se toman al diseñar el software. Hay muchos métodos propuestos y están en funcionamiento en la actualidad, pero necesitamos ver en qué parte de la ingeniería de software se encuentran estos paradigmas. Estos se pueden combinar en varias categorías, aunque cada uno de ellos está contenido entre sí:
El paradigma de programación es un subconjunto del paradigma de diseño de software que es además un subconjunto del paradigma de desarrollo de software.
Paradigma de desarrollo de software
Este Paradigma se conoce como paradigmas de ingeniería de software donde se aplican todos los conceptos de ingeniería pertenecientes al desarrollo de software. Incluye varias investigaciones y recopilación de requisitos que ayudan a construir el producto de software. Consiste en -
- Recopilación de requisitos
- Diseño de software
- Programming
Paradigma de diseño de software
Este paradigma es parte del desarrollo de software e incluye:
- Design
- Maintenance
- Programming
Paradigma de programación
Este paradigma está estrechamente relacionado con el aspecto de programación del desarrollo de software. Esto incluye -
- Coding
- Testing
- Integration
Necesidad de ingeniería de software
La necesidad de ingeniería de software surge debido a la mayor tasa de cambio en los requisitos del usuario y el entorno en el que funciona el software.
- Large software - Es más fácil construir un muro que una casa o un edificio, así mismo, a medida que el tamaño del software se vuelve grande, la ingeniería tiene que dar un paso para darle un proceso científico.
- Scalability- Si el proceso de software no se basara en conceptos científicos y de ingeniería, sería más fácil volver a crear software nuevo que escalar uno existente.
- Cost- A medida que la industria del hardware ha demostrado sus habilidades y la enorme fabricación, ha bajado el precio del hardware informático y electrónico. Pero el costo del software sigue siendo alto si no se adapta el proceso adecuado.
- Dynamic Nature- La naturaleza siempre creciente y adaptable del software depende en gran medida del entorno en el que trabaja el usuario. Si la naturaleza del software siempre cambia, es necesario realizar nuevas mejoras en el existente. Aquí es donde la ingeniería de software juega un buen papel.
- Quality Management- Un mejor proceso de desarrollo de software proporciona un producto de software mejor y de calidad.
Características de un buen software
Un producto de software se puede juzgar por lo que ofrece y lo bien que se puede utilizar. Este software debe cumplir con los siguientes motivos:
- Operational
- Transitional
- Maintenance
Se espera que el software bien diseñado y elaborado tenga las siguientes características:
Operacional
Esto nos dice qué tan bien funciona el software en las operaciones. Se puede medir en:
- Budget
- Usability
- Efficiency
- Correctness
- Functionality
- Dependability
- Security
- Safety
Transicional
Este aspecto es importante cuando el software se traslada de una plataforma a otra:
- Portability
- Interoperability
- Reusability
- Adaptability
Mantenimiento
Este aspecto describe qué tan bien un software tiene las capacidades para mantenerse en un entorno en constante cambio:
- Modularity
- Maintainability
- Flexibility
- Scalability
En resumen, la ingeniería de software es una rama de la informática que utiliza conceptos de ingeniería bien definidos necesarios para producir productos de software eficientes, duraderos, escalables, dentro del presupuesto y a tiempo.