Back-End

10 fev, 2008

Estudo sobre Engenharia de Software

Publicidade

Peculiaridades

A Engenharia de Software trata-se de uma área do conhecimento da informática voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas da Ciência da Computação, Gerência de Projetos, dentre diversas outras disciplinas, objetivando organização, produtividade e qualidade.

Preocupam-se atualmente essas tecnologias com as linguagens de programação, bases de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a primordialmente com a qualidade do software. Os alicerces científicos da engenharia de software envolvem o uso de modelos abstratos e precisos, os quais permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, com a finalidade de avaliar e garantir sua qualidade.

Ademais, deve a engenharia de software desenvolver mecanismos para o planejamento e gerenciamento do processo de desenvolvimento.

Importa destacar o entendimento de Friedrich Ludwing Baues, que a “engenharia de software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas reais“. Valendo frisar que o próprio significado de engenharia já traz os conceitos de criação, construção, análise, desenvolvimento e manutenção.

Já a Engenharia de software concentra-se nos aspectos práticos da produção de um sistema de software, enquanto a Ciência da Computação estuda os fundamentos teóricos dos aspectos computacionais.

Em 1.960 pela primeira vez é usado o termo “Engenharia de Software”, mas oficialmente somente em 1.968 fora mencionado na “Nato Conference on Software Engineering”. A Engenharia de Software surge numa tentativa de aprimorar a crise do software e dar um tratamento de engenharia, o qual daria mais ênfase sistemática e controlada ao desenvolvimento de sistemas de software complexos.

O sistema de software complexo é caracterizado pelo conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados como procedimentos, funções, módulos, objetos ou agentes e interconectados entre si, os quais compõem a arquitetura do software e que deverão ser efetuados em sistemas computacionais.

É a engenharia de sistemas uma área ampla, uma vez que trata de todos os aspectos de sistemas baseados em computadores, pois engloba desde hardware e engenharia de processos até o software.

É o processo de Engenharia de Software uma seqüência lógica de práticas, a qual designa o desenvolvimento ou evolução de sistemas de software. Tais práticas, por sua vez, englobam atividades tais como as de especificação, projeto, implementação, testes e caracterizam-se pelo intercâmbio de ferramentas, pessoas e métodos.

Modelos de Processo de Software

Um modelo de processo de software pode ser visto como uma representação, ou abstração dos objetos e atividades envolvidas no processo de software. Além disso, oferece uma forma mais abrangente e fácil de representar o gerenciamento de processo de software e conseqüentemente o progresso do projeto.

Exemplos de alguns modelos de processo de software:

  • Seqüencial ou Cascata (do inglês waterfall) – com fases distintas de especificação, projeto e desenvolvimento.
  • Evolucional – especificação, projeto e desenvolvimento são entrelaçados.
  • V-Model – Parecido com o modelo cascata, mas com uma organização melhor, que permite que se compare com outros modelos mais modernos.
  • Espiral – evolução através de vários ciclos completos de especificação, projeto e desenvolvimento.
  • Componentizado – reuso através de montagem de componentes já existentes.
  • Formal – implementação a partir de modelo matemático formal.
  • Ágil.
  • RAD.
  • Quarta geração.

Metodologias, Métodos e Ferramentas

Inicialmente importa destacar o termo metodologia, o qual é bastante controverso nas ciências em geral, em especial na Engenharia de Software. Muitos autores tratam os termos metodologia e método como sinônimos, mas nào está correto. Correto é afirmar que a metodologia envolve princípios filosóficos que guiam uma gama de métodos que utilizam ferramentas e práticas diferencidas para realizar algo.

A exemplo disso, pode-se citar a Metodologia Estruturada, a qual é composta por vários métodos, tal como Análise Estruturada e Projeto Estruturado (muitas vezes denominados SA/SD), e Análise Essencial. E tanto a Análise Estruturada quanto a Análise Essencial utilizam-se da ferramenta Diagrama de Fluxos de Dados para modelar o funcionamento do sistema.

Importa aqui, ilustrar tal conceituação para melhor esclaracer a questão:

  • Metodologias Estruturadas
  • Análise Estruturado
  • Projeto Estruturado
  • Análise Essencial
  • SADT
  • Metodologias Ágeis
  • Feature Driven Development (FDD)
  • Enterprise Unified Process (EUP)
  • Scrum
  • Crystal (Crystal Clear, Crystal Orange, Crystal Orange Web)
  • Programação Extrema (XP)
  • Outras Metodologias
  • Rational Unified Process (RUP)
  • Microsoft Solution Framework (MSF)

Processos de Software

Trata-se o processo de software ou, também chamado de metodologia de desenvolvimento de software, de um conjunto de atividades e resultados agregados que auxiliam na produção de software. Sendo que as dentre várias atividades associadas, por exemplo, existem a análise de requisitos e a codificação. Por sua vez, o resultado do processo trata-se de produto que conjetura a forma como o processo foi administrado.

E, muito embora existam vários processos para o desenvolvimento de software, existem atividades fundamentais comuns a todos eles, tais como:

Especificação de Software: trata-se da definição das funcionalidades, ou seja, dos requisitos e das restrições do software. Normalmente é uma fase em que o desenvolvedor e cliente tratam as necessidades reais da empresa para definir as características do software a ser desenvolvido.

  • Projeto e Implementação de Software: todo software é produzido para suprir as necessidades da empresa, ou seja, de acordo com as especificações. Nesta fase, contudo, serão propostos modelos através de diagramas, e estes modelos são praticados em linguagem de programação.
  • Validação de Software: essa fase é importante para garantir que todas as funcionalidades especificadas do software sejam praticadas.
  • Evolução de Software: primordial que o software evolua para continuar sendo útil ao cliente.

Muitos softwares são desenvolvidos por organizações sem a utilização de nenhum processo. Isso normalmente ocorre porque os processos tradicionais nem sempre são adequados às realidades das organizações.

Particularmente, empresas pequenas e médias não possuem recursos suficientes para adotar o uso de processos pesados. E por esse motivo, muitas organizações não utilizam nenhum processo. O resultado final desta falta de sistematização na produção de software é a falta de qualidade do produto final, além de embaraçar a entrega do software nos prazos e custos predefinidos e inviabilizar a evolução do software.

Muitos são os processos de software definidos na literatura da Engenharia de Software. Muito comum, as organizações inventarem seu próprio processo ou adaptar algum processo à sua realidade. E, conforme já dito nesse trabalho, várias são as metodologias tradicionais, que são orientadas a documentação, e as metodologias ágeis, as quais buscam desenvolver software com o mínimo de documentação e burocracia.

Referências Bibliográficas

AGILE MANIFESTO. Disponível em: http://agilemanifesto.org. Acesso em 15 de mai de 2007.

AMBLER, Scott W. Modelagem Ágil: Praticas eficazes para a programação eXtrema e o Processo Unificado. Porto Alegre: Bookman, 2004.

BECK, Kent. Programação Extrema Explicada. Porto Alegre: Bookman, 1999.

CHARETTE, R. Fair Fight. Agile Versus Heavy Methodologies. In: Cutter Consortium E-project Management Advisory Service, 2, 13, 2001.

COCKBURN, Cockburn, A.; e HIGHSMITH, J. Agile Software Development: The Business of Innovation. IEEE Computer, Sept., p. 120-122, 2001.

GILB, T. Principles of Software Engineering Management. Addison-Wesley, 1999.

HIGHSMITH, J. Et al, A. Extreme Programming. E-Business Application Delivery, Feb., 2000.

IEEE, Institute. IEEE Std 830-1998. Recommended Practice for Software Requirements Specifications. Institute of Electrical and Eletronic Engineers. Inc. 1998.

LEITE, J., et al. Enhancing a Requirements Baseline with Scenarios. In: proceedings of the Third IEEE International Symposium on Requirements Engineering, IEEE Computer Society Press, Los Alamitos, CA, USA, 1994.

PRESSMAN, R. Engenharia de Software. McGraw-Hill, 2001.

PRESSMAN, Roger S. Engenharia de Software. 5. ed. Rio de Janeiro: McGraw-Hill, 2002.

ROUILLER, Ana Cristina. Gerência de Projetos de Software. In: Textos Acadêmicos, Curso de Pós-Graduação “Lato Sensu” (Especialização) a Distância: Melhoria de Processo de Software, Lavras (MG) – UFLA/FAEPE, 2004.

ROYCE, W.W. Managing the development of large software systems: concepts and techniques. Proc. IEEE Westcon, Los Angeles, CA, 1970.

SCHWABER, Schwaber, K. and BEEDLE, M. Agile Software Development with Scrum, NJ, Prentice-Hall, 2002.

SOMMERVILLE, I.. Software Engineering. Sixth Edition, Addison Wesley, 2001.

SOMMERVILLE, Ian. Engenharia de Software. 6 ed. São Paulo: Perarson, 2003.

ZAVE, P. Classification of Research Efforts in Requirements Engineering. ACM Computer Surveys, Vol. 29, No. 4, 1997.