Visão geral da engenharia de software
Vamos primeiro entender o que a engenharia de software representa. O termo é composto de duas palavras, software e engenharia.
Software é mais do que apenas um código de programa. Um programa é um código executável que serve a algum propósito computacional. Software é considerado uma coleção de código de programação executável, bibliotecas associadas e documentações. Software, quando feito para um requisito específico é chamadosoftware product.
Engineering por outro lado, trata-se de desenvolver produtos, usando princípios e métodos científicos bem definidos.
Software engineeringé um ramo da engenharia associado ao desenvolvimento de produtos de software usando princípios, métodos e procedimentos científicos bem definidos. O resultado da engenharia de software é um produto de software eficiente e confiável.
Definições
IEEE define engenharia de software como:
(1) A aplicação de uma abordagem sistemática, disciplinada e quantificável para o desenvolvimento, operação e manutenção de software; isto é, a aplicação da engenharia ao software.
(2) O estudo das abordagens conforme a declaração acima.
Fritz Bauer, um cientista da computação alemão, define a engenharia de software como:
Engenharia de software é o estabelecimento e o uso de princípios sólidos de engenharia para obter software econômico que seja confiável e funcione de forma eficiente em máquinas reais.
Evolução do Software
O processo de desenvolvimento de um produto de software usando princípios e métodos de engenharia de software é conhecido como software evolution. Isso inclui o desenvolvimento inicial do software e sua manutenção e atualizações, até que o produto de software desejado seja desenvolvido, que satisfaça os requisitos esperados.
A evolução começa a partir do processo de coleta de requisitos. Depois disso, os desenvolvedores criam um protótipo do software pretendido e o mostram aos usuários para obter seu feedback no estágio inicial de desenvolvimento do produto de software. Os usuários sugerem mudanças, nas quais várias atualizações e manutenções consecutivas também mudam. Este processo muda para o software original, até que o software desejado seja realizado.
Mesmo depois de o usuário ter o software desejado em mãos, o avanço da tecnologia e as mudanças nos requisitos forçam o produto de software a mudar de acordo. Recriar o software do zero e ir um a um com os requisitos não é viável. A única solução viável e econômica é atualizar o software existente para que corresponda aos requisitos mais recentes.
Leis de evolução de software
Lehman deu leis para a evolução do software. Ele dividiu o software em três categorias diferentes:
- S-type (static-type) - Este é um software que funciona estritamente de acordo com as especificações e soluções definidas . A solução e o método para alcançá-la são compreendidos imediatamente antes da codificação. O software do tipo s está menos sujeito a alterações, portanto, este é o mais simples de todos. Por exemplo, programa de calculadora para computação matemática.
- P-type (practical-type) - Este é um software com uma coleção de procedimentos. Isso é definido exatamente pelo que os procedimentos podem fazer. Neste software, as especificações podem ser descritas, mas a solução não é óbvia instantaneamente. Por exemplo, software de jogos.
- E-type (embedded-type) - Este software funciona de acordo com o requisito do ambiente do mundo real . Este software tem um alto grau de evolução visto que existem várias mudanças nas leis, impostos etc. em situações do mundo real. Por exemplo, software de comércio online.
Evolução do software E-Type
Lehman deu oito leis para a evolução do software E-Type -
- Continuing change - Um sistema de software do tipo E deve continuar a se adaptar às mudanças do mundo real, caso contrário, ele se torna progressivamente menos útil.
- Increasing complexity - À medida que um sistema de software do tipo E evolui, sua complexidade tende a aumentar, a menos que seja feito um trabalho para mantê-lo ou reduzi-lo.
- Conservation of familiarity - A familiaridade com o software ou o conhecimento sobre como ele foi desenvolvido, por que foi desenvolvido daquela forma particular etc. deve ser mantida a qualquer custo, para implementar as mudanças no sistema.
- Continuing growth- Para que um sistema do tipo E tenha como objetivo resolver algum problema empresarial, seu tamanho de implementação das mudanças cresce de acordo com as mudanças no estilo de vida da empresa.
- Reducing quality - Um sistema de software do tipo E diminui em qualidade, a menos que seja rigorosamente mantido e adaptado a um ambiente operacional em constante mudança.
- Feedback systems- Os sistemas de software do tipo E constituem sistemas de feedback de vários loops e níveis e devem ser tratados como tal para serem modificados ou melhorados com sucesso.
- Self-regulation - Os processos de evolução do sistema tipo E são autorregulados com a distribuição de medidas de produto e processo próximas do normal.
- Organizational stability - A taxa média de atividade global efetiva em um sistema do tipo E em evolução é invariável durante a vida útil do produto.
Paradigmas de software
Paradigmas de software referem-se aos métodos e etapas que são realizadas durante o projeto do software. Muitos métodos são propostos e estão em funcionamento hoje, mas precisamos ver onde se encontram esses paradigmas na engenharia de software. Eles podem ser combinados em várias categorias, embora cada um deles esteja contido um no outro:
O paradigma de programação é um subconjunto do paradigma de design de software que é ainda um subconjunto do paradigma de desenvolvimento de software.
Paradigma de Desenvolvimento de Software
Este Paradigma é conhecido como paradigmas de engenharia de software, onde todos os conceitos de engenharia pertinentes ao desenvolvimento de software são aplicados. Inclui várias pesquisas e coleta de requisitos que ajudam a construir o produto de software. Isso consiste de -
- Recolha de requisitos
- Design de software
- Programming
Paradigma de Design de Software
Este paradigma é parte do Desenvolvimento de Software e inclui -
- Design
- Maintenance
- Programming
Paradigma de Programação
Este paradigma está intimamente relacionado ao aspecto de programação do desenvolvimento de software. Isso inclui -
- Coding
- Testing
- Integration
Necessidade de Engenharia de Software
A necessidade da engenharia de software surge devido à maior taxa de mudança nos requisitos do usuário e no ambiente no qual o software está trabalhando.
- Large software - É mais fácil construir uma parede do que uma casa ou prédio, da mesma forma, como o tamanho do software se torna grande, a engenharia tem que dar um passo para dar a ele um processo científico.
- Scalability- Se o processo de software não fosse baseado em conceitos científicos e de engenharia, seria mais fácil recriar um novo software do que dimensionar um existente.
- Cost- Como a indústria de hardware mostrou suas habilidades e a enorme fabricação baixou o preço do hardware de computador e eletrônico. Mas o custo do software permanece alto se o processo adequado não for adaptado.
- Dynamic Nature- A natureza sempre crescente e adaptável do software depende enormemente do ambiente em que o usuário trabalha. Se a natureza do software está sempre mudando, novos aprimoramentos precisam ser feitos no existente. É aqui que a engenharia de software desempenha um bom papel.
- Quality Management- Um melhor processo de desenvolvimento de software fornece um produto de software melhor e de qualidade.
Características de um bom software
Um produto de software pode ser julgado pelo que oferece e quão bem pode ser usado. Este software deve atender aos seguintes motivos:
- Operational
- Transitional
- Maintenance
Espera-se que um software bem projetado e elaborado tenha as seguintes características:
Operacional
Isso nos diz como o software funciona bem nas operações. Pode ser medido em:
- Budget
- Usability
- Efficiency
- Correctness
- Functionality
- Dependability
- Security
- Safety
Transitório
Este aspecto é importante quando o software é movido de uma plataforma para outra:
- Portability
- Interoperability
- Reusability
- Adaptability
Manutenção
Este aspecto descreve como um software possui os recursos para se manter em um ambiente em constante mudança:
- Modularity
- Maintainability
- Flexibility
- Scalability
Resumindo, a engenharia de software é um ramo da ciência da computação, que usa conceitos de engenharia bem definidos necessários para produzir produtos de software eficientes, duráveis, escaláveis, dentro do orçamento e dentro do prazo.