Pular para o conteúdo principal

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.

Comentários

Anônimo disse…
Parabéns, pelo blog.
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.
Unknown 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.
phsil 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.
Unknown disse…
Qual a diferença entre Modelo de processo de software e modelo de desenvolvimento de software?

Postagens mais visitadas deste blog

O Modelo Espiral

O objetivo do modelo espiral é prover um metamodelo que pode acomodar diversos processos específicos. Isto significa que podemos encaixar nele as principais características dos modelos vistos anteriormente, adaptando-os a necessidades específicas de desenvolvedores ou às particularidades do software a ser desenvolvido. Este modelo prevê prototipação, desenvolvimento evolutivo e cíclico, e as principais atividades do modelo cascata. Sua principal inovação é guiar o processo de desenvolvimento gerado a partir deste metamodelo com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento. Riscos são circunstâncias adversas que podem surgir durante o desenvolvimento de software impedindo o processo ou diminuindo a qualidade do produto. São exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.

O Modelo Evolutivo

O modelo evolutivo descreve um processo na qual o software deve ser desenvolvido de forma a evoluir a partir de protótipos iniciais. Para entender melhor este modelo é importante entender o que é prototipação (ou prototipagem). Prototipação é uma abordagem baseada numa visão evolutiva do desenvolvimento de software, afetando o processo como um todo. Esta abordagem envolve a produção de versões iniciais - "protótipos" - de um sistema futuro com o qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído. Objetivos da Prototipação Num projeto de software várias questões podem ser respondida com a construcão de protótipos. Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na prototipação: Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos usuários com respeito ao sistema futuro. Uma prototipação também é exploratória

Sistemas Computacionais

Um sistema computacional (ou baseado em computador) é aquele que automatiza ou apóia a realização de atividades humanas através do processamento de informações. Um sistema baseado em computador é caracterizado por alguns elementos fundamentais. Hardware Software Informações Usuários Procedimentos ou Tarefas Documentação O hardware corresponde às partes eletrônicas e mecânicas (rígidas) que possibilitam a existência do software, o armazenamento de informações e a interação com o usuário. A CPU, as memórias primária e secundária, os periféricos, os componentes de redes de computadores, são exemplos de elementos de hardware. Um único computador pode possibilitar a existência de diversos sistemas e um sistema pode requisitar diversos computadores. O software é a parte abstrata do sistema computacional que funciona num hardware a partir de instruções codificadas numa linguagem de programação. Estas instruções permitem o processamento e armazenamento de informações na for