Enxeñaría de software
Na Galipedia, a wikipedia en galego.
Enxeñaría de software é unha área do coñecimento orientada á especificación, desenvolvimento e mantimento de sistemas de software aplicando tecnoloxías e prácticas de ciencia da computación, xestión de proxectos e outras disciplinas, considerando productividade 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, evaluando e garantizando as súas calidades. Ademais disto, a enxeñaría de software debe ofrecer mecanismos para se planexar e xestionar o proceso de desenvolvimento.
Índice |
[editar] Definición
Segundo Fritz Bauer, "Enxeñaría de software é a criació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 proprio significado de enxeñaría xa trai os conceitos de criación, construción, análise, desenvolvimento e mantimento.
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, incluindo hardware e enxeñaría de procesos ademais do software.
[editar] Produccion de Software
A produccion de software é un conxunto coherente de prácticas que obxetiva o desenvolvimento ou evolución de sistemas de software. Estas prácticas engloban as actividades de especificación, proxecto, implementación e testes e caracterizanse pola interacción de ferramentas, persoas e métodos.
[editar] Modelos
- Secuencial ou Cascada (do inglés waterfall) - con fases distintas de especificación, proxecto e desenvolvimento.
- Evolutivo - especificación, proxecto e desenvolvimento son entrelazados.
- En espiral - evolución a través de varios ciclos completos de especificación, proxecto e desenvolvimento.
- Componentizado - reuso a través de montaxe de compoñentes xa existentes.
- Formal - implementación a partir de modelo matemático formal.
- RAD
- Cuarta xeración
[editar] Metodoloxías
- Rational Unified Proces (RUP)
- Programación extrema (XP)
- Microsoft Solution Framework (MSF)
[editar] Modelos de Madurez
Os modelos de madurez surxiron para evaluar 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).
[editar] Xestión de Proxectos
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 desenvolvimento con baixa padronización.
[editar] Planexamento
O planexamento dun proxecto de desenvolvimento de software inclúe:
- organización do proxecto (incluindo 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 dificuldades típicas de desenvolvimento 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 desenvolvimento constantemente prexudica a produtividade futura.
A estimativa de dificuldades e custos de desenvolvimentos son moi difíceis, alén do surximento de problemas técnicos. Eses factores requeren unha análise de riscos cuidadosa.
[editar] Análise
As atividades de análise concentranse na identificación, especificación e descripció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 fatores son recrudecidos pola intanxibilidade sobre característicos de sistemas de software, principalmente sobre o custo de cada requisito.
[editar] Modelado
A abstracción do sistema de software a través de modelos que o descreben é un poderoso instrumento para o entendimento e comunicación do produto final que será desenvolvido.
A maior dificuldade nesta atividade está no equilíbrio (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.
[editar] Xestión
- de Persoal
- de Produto
- de Proceso
- de Proxecto
[editar] Tecnoloxías e Prácticas
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.
Destacanse 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
- Componentes de Software
- Programación orientada a aspecto
[editar] Ferramentas
Outro ponto importante é o uso de ferramentas CASE (do inglés Computer-Aided Software Engineering). Esa clasificación abranxe 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 desenvolvimento integrado (IDEs) teñen maior destaque e suportan:
- Editor
- Compilador
- Depurador (Debugger)
- Xeración de código
- Modelado
- Desplegue (Deployment)
- Testes automatizados
- Refactoración
[editar] Histórico
A Enxeñaría de Software (ES) surxiu a meiados 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 desenvolvimento de sistemas de software complexos. Un sistema de software complexo se caracteriza por un conxunto de componentes abstractos de software (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funcións, módulos, obxectos ou axentes interconectados entre si, compondo a arquitetura do software, que deberán ser executados en sistemas computacionais.