Enxeñaría de software: Diferenzas entre revisións

Contido eliminado Contido engadido
Gallaecio (conversa | contribucións)
Elimino categorías (un modelo xa se encarga diso)
Servando2 (conversa | contribucións)
Sen resumo de edición
Liña 1:
{{Proceso de desenvolvemento SW}}
'''Enxeñaría de software''' é unha área do coñecimentocoñecemento orientada á especificación, desenvolvimentodesenvolvemento e mantimentomantemento de sistemas de ''[[software]]'' aplicando tecnoloxías e prácticas de [[ciencia da computación]], [[xestión de proxectos]] e outras disciplinas, considerando productividadeprodutividade e calidade.
 
Actualmente, estas [[tecnoloxía]]s e prácticas engloban [[linguaxe de programación|linguaxes de programación]], [[bases de dados]], ferramentas, [[plataforma]]s, [[biblioteca]]s, [[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, evaluandoavaliando e garantindo as súas calidades. Ademais disto, a enxeñaría de software debe ofrecer mecanismos para se planexar e xestionar o proceso de desenvolvimentodesenvolvemento.
 
A Enxeñaría do Software está composta por tres elementos:
 
* '''Os métodos''': que indican como construirconstruí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.
Liña 16:
==Historia==
 
A Enxeñaría de Software (ES) surxiuxurdiu a meiadosmediados 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 desenvolvimentodesenvolvemento de sistemas de software complexos. Un sistema de software complexo se caracteriza por un conxunto de componentescompoñentes abstractos de software ([[estrutura de dados|estruturas de dados]] e [[algoritmo]]s) encapsulados na forma de procedimentosprocedementos, [[funcións]], [[módulos]], [[obxecto]]s ou [[axentes]] interconectados entre si, compondo a arquiteturaarquitectura do software, que deberán ser executados en [[sistemas computacionais]].
 
==Definición==
 
Segundo [[Fritz Bauer]], "Enxeñaría de software é a criacióncreació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 propriopropio significado de [[enxeñaría]] xa trai os conceptos de criacióncreación, construción, análise, desenvolvimentodesenvolvemento e mantimentomantemento.
 
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 [[computador]]es, incluindoincluíndo ''hardware'' e enxeñaría de procesos ademais do ''software''.
 
Dito de outro modo, a Enxeñaría do Software trata sistematicamente toda-las fases do [[ciclo de vida]] do software
 
==ProducionProdución de software==
 
A produccionproduciron de ''software'' é un conxunto coherente de prácticas que obxetivaobxectiva o desenvolvimentodesenvolvemento ou evolución de sistemas de ''software''. Estas prácticas engloban as actividades de especificación, proxecto, implementación e testes e caracterizansecaracterízanse pola interacción de ferramentas, persoas e métodos.
 
=== Modelos de [[Ciclos de Vida]] ===
 
* '''Secuencial''' ou '''Cascada''' (do inglés ''waterfall'') - con fases distintas de especificación, proxecto e desenvolvimentodesenvolvemento.
* '''Evolutivo''' - especificación, proxecto e desenvolvimentodesenvolvemento son entrelazados.
* '''En espiral''' - evolución a través de varios ciclos completos de especificación, proxecto e desenvolvimentodesenvolvemento.
* '''Componentizado''' - reuso a través de montaxe de [[compoñente software|compoñente]]s xa existentes.
* '''Formal''' - implementación a partir de modelo matemático formal.
Liña 44:
===Metodoloxías===
 
* [[Rational Unified Proces]] (RUP).
* [[Programación extrema]] (XP).
* [[Microsoft Solution Framework]] (MSF).
 
===Modelos de madurez===
 
Os modelos de madurez surxironxurdiron para evaluaravaliar 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==
Liña 60:
===Planexamento===
 
O planexamento dun proxecto de desenvolvimentodesenvolvemento de ''software'' inclúe:
 
* organización do proxecto (incluindoincluí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 dificuldadesdificultades típicas de desenvolvimentodesenvolvemento 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 desenvolvimentodesenvolvemento constantemente prexudica a produtividade futura.
 
A estimativa de dificuldadesdificultades e custos de desenvolvimentosdesenvolvementos son moi difíceisdifíciles, alén do surximento de problemas técnicos. Eses factores requerenconseguen unha análise de riscos cuidadosacoidadosa.
 
===Análise===
Liña 80:
* 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 fatoresfactores son recrudecidos pola intanxibilidade sobre característicos de sistemas de ''software'', principalmente sobre o custo de cada requisito.
 
===Modelado===
 
A abstracción do sistema de ''software'' a través de modelos que o describen é un poderoso instrumento para o entendimentoentendemento e comunicación do produto final a desenvolver.
 
A maior dificuldadedificultade nesta actividade está no equilíbrioequilibrio (''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]].
Liña 92:
===Xestión===
 
* de Persoal.
* de Produto.
* de Proceso.
* de Proxecto.
 
==Tecnoloxías e Prácticas==
Liña 103:
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]].
* [[ComponentesCompoñentes de Software]].
* [[Programación orientada a aspecto]].
 
===Ferramentas===
 
Outro pontopunto 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 [[Ambiente de DesenvolvimentoDesenvolvemento Integrado|ambientes de desenvolvimentodesenvolvemento integrado]] ('''IDEs''') teñen maior destaque e suportansoportan:
 
* Editor.
* [[Compilador]].
* Depurador (''Debugger'').
* Xeración de código.
* Modelado.
* DesplegueDespregue (''Deployment'').
* Testes automatizados.
* [[Refactoración]].
 
[[af:Sagteware-ingenieurswese]]