Enxeñaría de software

Na Galipedia, a Wikipedia en galego.
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.

Historia[editar | editar a fonte]

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 | editar a fonte]

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 | editar a fonte]

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 | editar a fonte]

  • 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 | editar a fonte]

Modelos de madurez[editar | editar a fonte]

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 | editar a fonte]

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 | editar a fonte]

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 | editar a fonte]

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 | editar a fonte]

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 | editar a fonte]

  • de Persoal.
  • de Produto.
  • de Proceso.
  • de Proxecto.

Tecnoloxías e Prácticas[editar | editar a fonte]

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:

Ferramentas[editar | editar a fonte]

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.