Enxeñaría de software
| Proceso de desenvolvemento software | |
| Actividades e pasos | |
| Requisitos | Arquitectura | Implementación | Probas | Implantación| Mantemento | |
| Modelos | |
| Áxil | Cleanroom | Iterativo | RAD | RUP | Espiral | Fervenza | |
| Disciplinas de apoio | |
| Xestión de configuración | Documentación | Calidade (SQA) | Xestión do proxecto | |
Enxeñaría de software é unha área do coñecemento orientada á especificación, desenvolvemento e mantemento de sistemas de software aplicando tecnoloxías e prácticas de ciencia da computación, xestión de proxectos e outras disciplinas, considerando produtividade e calidade.
Actualmente, estas tecnoloxías e prácticas engloban linguaxes de programación, bases de dados, ferramentas, plataformas, bibliotecas, patróns e procesos.
Os fundamentos científicos para a enxeñaría de software comprenden o uso de modelos abstractos e precisos que permiten ao enxeñeiro especificar, proxectar, implementar e manter sistemas de software, avaliando e garantindo as súas calidades. Ademais disto, a enxeñaría de software debe ofrecer mecanismos para se planificar e xestionar o proceso de desenvolvemento.
A Enxeñaría do Software está composta por tres elementos:
- Os métodos: que indican como construír tecnicamente o SW, abarcando tarefas como a planificación, estimación de proxectos, análises de requirimentos, deseño de estruturas, codificación, probas e mantemento.
- As ferramentas: dan a subministración automática ós métodos. Actualmente existen ferramentas para soportar cada un dos métodos citados anteriormente.
- Os procedementos: propoñen, entre outras cousas, o orden en que aplica-los métodos, as entregas requiridas (documentación, informes, etc.), os controles que axudan a asegurar a calidade e coordina-los cambios e as directrices que axudan ós xestores do SW a evalua-lo progreso.
Índice |
Historia [editar]
A Enxeñaría de Software (ES) xurdiu a mediados dos anos 1970 nunha tentativa de tratar coa a crise do software e dar un tratamento de enxeñaría (máis sistemático e controlado) ao desenvolvemento de sistemas de software complexos. Un sistema de software complexo se caracteriza por un conxunto de compoñentes abstractos de software (estruturas de dados e algoritmos) encapsulados na forma de procedementos, funcións, módulos, obxectos ou axentes interconectados entre si, compondo a arquitectura do software, que deberán ser executados en sistemas computacionais.
Definición [editar]
Segundo Fritz Bauer, "Enxeñaría de software é a creación e a utilización de sólidos principios de enxeñaría a fin de obter software de maneira económica, que sexa confiable e que traballe eficientemente en máquinas reais". O propio significado de enxeñaría xa trae os conceptos de creación, construción, análise, desenvolvemento e mantemento.
A enxeñaría de software concéntrase nos aspectos prácticos da produción dun sistema de software, mentres que a ciencia da computación estuda os fundamentos teóricos dos aspectos computacionais.
A enxeñaría de sistemas é unha área máis ampla por tratar de todos os aspectos de sistemas baseados en computadores, incluíndo hardware e enxeñaría de procesos ademais do software.
Dito de outro modo, a Enxeñaría do Software trata sistematicamente tódalas fases do ciclo de vida do software.
Produción de software [editar]
A produciron de software é un conxunto coherente de prácticas que obxectiva o desenvolvemento ou evolución de sistemas de software. Estas prácticas engloban as actividades de especificación, proxecto, implementación e testes e caracterízanse pola interacción de ferramentas, persoas e métodos.
Modelos de Ciclos de Vida [editar]
- Secuencial ou Cascada (do inglés waterfall) - con fases distintas de especificación, proxecto e desenvolvemento.
- Evolutivo - especificación, proxecto e desenvolvemento son entrelazados.
- En espiral - evolución a través de varios ciclos completos de especificación, proxecto e desenvolvemento.
- Componentizado - reúso a través de montaxe de compoñentes xa existentes.
- Formal - implementación a partir de modelo matemático formal.
- RAD
- Cuarta xeración
Metodoloxías [editar]
- Rational Unified Proces (RUP).
- Programación extrema (XP).
- Microsoft Solution Framework (MSF).
Modelos de madurez [editar]
Os modelos de madurez xurdiron para avaliar a calidade dos procesos de software aplicados nunha organización (empresa ou institución). O máis coñecido é o Capability Maturity Model Integration (CMMI), do Software Engineering Institute (SEI).
Xestión de proxectos [editar]
A xestión de proxectos preocupase en entregar o sistema de software no prazo e de acordo cos requisitos establecidos, levando en conta sempre as limitacións de orzamento e tempo.
A xestión de proxectos de software caracterizase por tratar sobre un produto intanxible, moi flexible e cun proceso de desenvolvemento con baixa padronización.
Planificación [editar]
A planificación dun proxecto de desenvolvemento de software inclúe:
- organización do proxecto (incluíndo equipos e responsabilidades).
- estruturación das tarefas (do inglés work breakdown structure, WBS).
- cronograma do proxecto (do inglés project schedule).
- análise de riscos.
Esas actividades sofren as dificultades típicas de desenvolvemento de software. A produtividade non é linear en relación ao tamaño da equipe e o aumento de produtividade non é inmediato debido á custos de aprendizaxe de novos membros. A diminución de calidade para acelerar o desenvolvemento constantemente prexudica a produtividade futura.
A estimativa de dificultades e custos de desenvolvementos son moi difíciles, alén da aparición de problemas técnicos. Eses factores conseguen unha análise de riscos coidadosa.
Análise [editar]
As actividades de análise concéntranse na identificación, especificación e descrición dos requisitos do sistema de software. En resumo, requisito é unha necesidade que o software debe cumprir.
Hai varias interpretacións e clasificacións sobre requisitos, entre elas:
- funcional ou non funcional
- de usuario ou de sistema
É común que o cliente non saber o que el realmente desexa, que haxa problemas na comunicación e aínda que haxa mudanza constante de requisitos. Todos eses factores son agravados pola intanxibilidade sobre característicos de sistemas de software, principalmente sobre o custo de cada requisito.
Modelado [editar]
A abstracción do sistema de software a través de modelos que o describen é un poderoso instrumento para o entendemento e comunicación do produto final a desenvolver.
A maior dificultade nesta actividade está no equilibrio (tradeoff) entre simplicidade (favorecendo a comunicación) e a complexidade (favorecendo a precisión) do modelo.
É común a utilización de linguaxes para modelado como UML.
Xestión [editar]
- de Persoal.
- de Produto.
- de Proceso.
- de Proxecto.
Tecnoloxías e Prácticas [editar]
A enxeñaría de software aborda unha serie de prácticas e tecnoloxías, principalmente estudadas pola ciencia da computación, enfocando o seu impacto na produtividade e calidade de software.
Destácanse o estudo de linguaxe de programación, bancos de datos e paradigmas de programación, como:
- Programación estruturada.
- Programación funcional.
- Programación orientada a obxectos.
- Compoñentes de Software.
- Programación orientada a aspecto.
Ferramentas [editar]
Outro punto importante é o uso de ferramentas CASE (do inglés Computer-Aided Software Engineering). Esa clasificación abrangue toda ferramenta baseada en computadores que auxilian actividades de enxeñaría de software, desde de análise de requisitos e Modelado ata programación e testes.
Os ambientes de desenvolvemento integrado (IDEs) teñen maior destaque e soportan:
- Editor.
- Compilador.
- Depurador (Debugger).
- Xeración de código.
- Modelado.
- Despregue (Deployment).
- Testes automatizados.
- Refactoración.