quinta-feira, 22 de fevereiro de 2007

O que é Engenharia de Software?

O que é Engenharia?

Vejamos duas definções:
Engenharia é a atividade em que os conhecimentos científicos e técnicos e a experiência prática são aplicados para exploração dos recursos naturais, para o projeto, construção e operação de objetos úteis (Origem: Wikipédia, a enciclopédia livre).
Engenharia é a aplicação de métodos científicos ou empíricos à utilização dos recursos da natureza em benefício do ser humano (Dicionário Houaiss)
Essas definições não são suficientes para designar tudo aquilo que envolve engenharia. Para entender melhor o que é engenharia, propomos que você faça uma pesquisa para responder as seguintes questões:
  • Qual a diferença entre o desenvolvimento de um produto de forma artesanal e o desenvolvimento seguindo os princípios de engenharia? Em outras palavras, qual a diferença entre o trabalho de um artesão e o de um engenheiro?
  • Qual a diferença entre cozinhar e fazer engenharia de alimentos?
  • O que as diferentes engenharias (civil, mecânica, elétrica/eletrônica, química, ambiental, etc.) têm em comum?

Uma engenharia não é uma atividade específica. Um engenheiro é aquele que tem o conhecimento científico e a experiência para desempenhar uma ou mais das diversas atividades da engenharia.

Além disso, a atividade de engenharia não pode prescindir da garantia da qualidade do produto, da conformidade às normas, e do planejamento e gerenciamento de custos e prazos.

Objetivos da Engenharia de Software

A engenharia de software tem por objetivos a aplicação de teoria, modelos, formalismos e técnicas e ferramentas da ciência da computação e áreas afins para a produção (ou desenvolvimento) sistemática de software.

Associado ao desenvolvimento, é preciso também aplicar métodos, técnicas e ferramentas para o gerenciamento do processo de produção. Isto envolve planejamento de custos e prazos, montagem da equipe e garantia de qualidade do produto e do processo.

Finalmente, a engenharia de software visa a produção da documentação formal do produto, do processo, dos critérios qualidade e dos manuais de usuários finais.


Definições de Engenharia de Software

Os autores apresentam diversas definições para engenharia de software. Vamos apresentar três que consideramos complementares.
  • A engenharia de software é a disciplina envolvida com a produção e manutenção sistemática de software que são desenvolvidos com custos e prazos estimados.
  • Disciplina que aborda a construção de software complexo - com muitas partes interconectadas e diferentes versões - por uma equipe de analistas, projetistas, programadores, gerentes, "testadores", etc.
  • O estabelecimento e uso de princípios de engenharia para a produção economicamente viável de software de qualidade que funcione em máquinas reais.
A primeira destas definições enfatiza que a engenharia visa não apenas o desenvolvimento, mas também a manutenção do produto. Além disso, ela ressalta a importância da estimativa de custos e prazos de desenvolvimento.

A segunda definição enfatiza a complexidade do produto e do processo. O software é formado por diversos componentes interconectados e o seu desenvolvimento é realizado por uma equipe com diferentes funções e especialidades, cujo trabalho precisa ser gerenciado.

A terceira ressalta que o desenvolvimento de software deve seguir os princípios comuns a todas as engenharias e deve visar a qualidade.

Veja o material apresentado em aula ( arquivo em PDF).

Para saber mais:

  1. James D. Herbsleb. Beyond computer science. Proceedings of the 27th international conference on Software engineering 2005, Pages: 23 - 27.
  2. Boehm, B. "A view of 20th and 21st century software engineering", Proceeding of the 28th international conference on Software engineering 2006, Shanghai, China May 20 - 28, 2006.
  3. Brooks, Jr., Frederick P. No Silver Bullet - Essence and Accidents of Software Engineering, in The Mythical Man-Month.Essays on Software Engineering, Twentieth Anniversary Edition, Reading, MA: Addison-Wesley1995
  4. Finkelstein, A. Kramer, J. "Software engineering: a roadmap", in Finkelstein, A. (ed.) The Future of Software Engineering, ACM Press, 2002
  5. Shaw, M. Software Engineering Education: a roadmap.in Finkelstein, A. (ed.) The Future of Software Engineering, ACM Press, 2002
  6. Shaw, M. What Makes Good Research in Software Engineering. ETAPS, Grenoble, 2002.

13 comentários:

Anônimo disse...

Parabéns, pelo blog.

Segurança disse...

Muito bom, falar sobre engenharia de software é ótimo, pois assim as pessoas iniciam os estudos.
Também estou escrevendo textos sobre engenharia de software no meu site:
www.analistasi.com.br

Anônimo disse...

Parabens, os assuntos são bastante esclarecedores.

Anônimo disse...

Gostei vei... Esse blog é massa.

Leandro disse...

Descobri o blog agora e é muito bom, parabéns mesmo...espero que continue sendo atualizado no futuro.

Anônimo disse...

Engenharia de Software agora é Engenheria da Computação, segundo o MEC deixou de existir !

http://portal.mec.gov.br/dmdocuments/convergencia_denominacao.pdf

Jair C Leite disse...

A Sociedade Brasileira de Computação está atuando junto ao MEC para incluir a Engenharia de Software como um curso específico e diferente da Engenharia de Computação.

PabloS disse...

Na opinião de vocês a engenharia de software sempre deve ser utilizada na criação de programas?

Anônimo disse...

Sim, para se ter um programa bem estruturado e organizado, porém, isso não significa que somente engenheiros de software podem desenvolver programas. Por exemplo, um analista de sistemas pode, assim como um jovem bem dedicado, que é o meu caso.

Obs.: Tenho 14 anos a já desenvolvi vários softwares.

Anônimo disse...

Eu quero faze um vestibular nesse área. Eu só não sei por qual faculdade começar. Tipo assim, o meu sonho é criar, desenvolver, projetar (principalmente) ROBÔS. Me disseram par começar por Engenharia de Software, porque o seu mercado tá em ascensão. Mas eu ainda não tenho a opinião de um especialista nessa área, entende? Será que dava pra me dar um concelho do que você faria no meu lugar? Por onde eu começo?

Desde já agradeço a atenção e colaboração, Obrigado!

Jair C Leite disse...

Para construir robos, um curso de engenharia de computação é mais adequado.

Anônimo disse...

Qual a diferença de Ciência da computação pra a Engenharia de Software ?

Jair C Leite disse...

Veja post neste blog em Março de 2012.