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.


Traballo en progreso: Este artigo é, polo de agora, só un esbozo. Traballa nel e contribúe a que a Galipedia mellore e medre.