Você está na página 1de 6

Princípios da Engenharia de Software http://www.devmedia.com.br/articles/viewcomp_forprint.asp?

comp=29630

www.devmedia.com.br
[versão para impressão]
Link original: http://www.devmedia.com.br/articles/viewcomp.asp?comp=29630

A Engenharia de Software é composta de diversos conceitos de fundamental importância


na área e abrange um processo, um conjunto de métodos ou práticas e diversas
ferramentas que possibilitam aos profissionais desenvolverem software de alta qualidade.
A primeira definição é a de Software. Muitos não sabem dizer realmente o que é um
software. Um Software de computador é um produto desenvolvido por profissionais de
software que também dão suporte a ele a longo prazo e abrange programas executáveis
em computadores de diversos portes ou arquitetura, conteúdos que são apresentados
quando programas são executados, informações descritivas em forma impressa ou virtual.
Outro conceito importante dentro do software é o de software legado que consiste de um
software desenvolvido há muitas décadas atrás, portanto, é um software bastante antigo
que têm sido continuamente modificado para se adequar a mudanças dos requisitos de
negócio e a plataformas computacionais. Esse tipo de software apesar de ser antigo, eles
são considerados indispensáveis para funções de negócios vitais.

A engenharia de software está fortemente relacionada ao software na medida que ela nos
capacita para o desenvolvimento de sistemas complexos dentro do prazo e com alta
qualidade, dois aspectos muito importantes para o sucesso de um projeto.

A criação de um software bem-sucedido se dá através de um processo adaptável e ágil


que conduzirá a um resultado de alta qualidade, atendendo às necessidades dos clientes

1 de 6 07/02/2014 10:48
Princípios da Engenharia de Software http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29630

que de fato usarão o software.

Outro conceito bastante importante é o de artefato que do ponto de vista de um


engenheiro de software consiste de um conjunto de programas, conteúdo (dados) e outros
artefatos que são software. No entanto, do ponto de vista do usuário, o artefato consiste
de informações resultantes que tornam melhor a vida dele, como documentação, help
online, etc.

No restante do artigo veremos mais detalhes sobre definições de Engenharia de Software


e processos.

A engenharia de software possui diversas definições. No entanto, Fritz Bauer definiu o


conceito de engenharia de software de forma bastante clara: "Engenharia de Software é o
estabelecimento e o emprego de sólidos princípios de engenharia de modo a obter
software de maneira econômica, que seja confiável e funcione de forma eficiente em
máquinas reais".

Essa definição apesar de fornecer uma base parece ser um tanto abstrata demais, não
enfatizando aspectos mais técnicos, necessidades do cliente, prazo, métricas e processos.
Por isso a IEEE desenvolveu uma definição muito mais abrangente: "Engenharia de
Software é: (1) A aplicação de uma abordagem sistemática, disciplinada e quantificável no
desenvolvimento, na operação e na manutenção de software; isto é, a aplicação de
engenharia de software. (2) O estudo de abordagens como definido em (1)".

A engenharia de software está fortemente ligada com a noção de qualidade. A Figura


1mostra as camadas da engenharia de software.

Figura 1. Camadas da Engenharia de Software.

A gestão da qualidade ajudam a promover uma cultura de aperfeiçoamento contínuo de

2 de 6 07/02/2014 10:48
Princípios da Engenharia de Software http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29630

processos, sendo esta a cultura que no final das contas sempre leva ao desenvolvimento
de abordagens cada vez mais efetivas na engenharia de software. Portanto, podemos
notar que a parte fundamental que sustenta a engenharia de software é o foco na
qualidade, como mostrado na figura acima.

A figura também mostra uma camada de processos que é a responsável por manter as
camadas de tecnologia coesas e também é quem possibilita o desenvolvimento de
software de forma racional e dentro do prazo. O processo define uma metodologia que
deve ser estabelecida para que possamos ter uma entrega efetiva. O processo também é
a base para o controle do gerenciamento de projetos de software, permite aplicar métodos
técnicos, produzir diferentes produtos como modelos, documentos, mudanças, etc, e por
fim estabelece marcos, garantia da qualidade e gerir mudanças de forma apropriada.

Temos também uma camada de métodos que é responsável por fornecer informações
técnicas para desenvolver software. Os métodos envolvem diversas tarefas como:
comunicação, análise de requisitos, modelagem de projeto, construção de software, testes
e suporte.

Por fim, as ferramentas são responsáveis por fornecer suporte automatizado ou


semiautomatizado para o processo e os métodos. Quando as ferramentas são interligadas
de forma que informações criadas por uma ferramentas são usadas por outra temos um
sistema que suporta o desenvolvimento, também chamado de Engenharia de Software
com o Auxílio do Computador ou Computer Aided Software Engeneering (CASE).

Ivar Jacobson, Grady Booch e James Rumbaugh definem um processo de software como:
"é quem está fazendo o quê, quando e como para atingir um determinado objetivo". De
forma geral um processo é um conjunto de atividades (esforço para atingir um objetivo
amplo como, por exemplo comunicar-se com os interessados), ações (conjunto de tarefas
que resultam num artefato de software como, por exemplo um modelo de projeto de
arquitetura) e tarefas (objetivos pequenos e bem definidos como, por exemplo realizar um
teste unitário) realizadas na criação de um produto.

Vale ressaltar que um processo não é algo rigidamente prescrito, pelo contrário, na
engenharia de software o processo é uma abordagem adaptável que possibilita que a
equipe de software selecione o trabalhoa ser realizado e escolha um conjunto apropriado
de ações e tarefas. O foco é sempre na entrega do software dentro do prazo e com
qualidade suficiente para satisfazer aos clientes e àqueles que de fato usarão o sistema.

3 de 6 07/02/2014 10:48
Princípios da Engenharia de Software http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29630

Um conceito bastante importante dentro de processo é o de metodologia ou framework


que é o responsável por estabelecer uma base para um processo de engenharia de
software completo através de um pequeno número atividades estruturais aplicáveis a
todos projetos de software, independente de tamanho ou complexidade. Uma metodologia
de processo genérica possui cinco atividades:

Comunicação: Antes do inicio do projeto comunicamos e colaboramos com os


clientes e todos os interessados para compreender os seus objetivos e fazermos o
levantamento das necessidades que ajudarão a definirmos as funções e
características do software a ser construído.
Planejamento: O planejamento é como um mapa que ajuda a guiar a equipe na
jornada de construção do produto. No planejamento define-se o trabalho de
engenharia descrevendo suas tarefas técnicas, riscos, recursos necessários, produtos
a serem construídos e um cronograma de trabalho.
Modelagem: Modelos são esboços de modo que possamos ter uma ideia melhor do
todo. Caso necessários os modelos são mais detalhados a fim de compreender
melhor o problema e como resolvê-lo.
Construção: Essa atividade é onde o software é construído. No entanto, atividades
de testes também são realizadas nessa atividade com o intuito de revelar erros na
codifição.
Emprego: O incremento do software ou o software completo é entregue ao cliente
que avalia o produto e retorna feedbacks baseando-se na avaliação do produto.

As cinco atividades genéricas acima podem ser utilizadas para criação de software
simples, pequenos ou grandes e complexos. O detalhes do processo de software poderão
ser diferentes para diferentes tipos de projetos, no entanto, as atividades metodológicas
permanecerão as mesmas.

Para a maioria dos projetos de software poderemos ter essas cinco atividades aplicadas
iterativamente quantas forem as iterações do projeto, sendo que cada iteração irá gerar
um incremento de software. Ao final de cada incremento teremos um software cada vez
mais completo.

As atividades acima também são complementadas por uma série de atividades de apoio
que são aplicadas ao longo de um projeto e ajuda a equipe no gerenciamento, controle de
progresso, qualidade, mudanças e risco. As atividades de apoio são:

Controle e acompanhamento: Permite uma avaliação do progresso em relação ao


plano do projeto e que sejam tomadas medidas necessárias para o cumprimento do
cronograma proposto.

4 de 6 07/02/2014 10:48
Princípios da Engenharia de Software http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29630

Administração de Riscos: Avalia os riscos que podem afetar o resultado ou a


qualidade do produto ou do projeto.
Garantia da Qualidade: Define e conduz as atividades que garantem a qualidade
do software.
Revisões técnicas: Avaliam-se artefatos para identificar e eliminar erros antes que
sejam propagadas para a atividade seguinte.
Medição: Define e coleta medidas do processo, projeto e do produto que auxiliarão
na entrega do software de acordo com os requisitos.
Gerenciamento da configuração de software: gerenciar os efeitos das
mudanças.
Gerenciamento da reusabilidade: Define quais serão os critérios para reuso e
estabelece mecanismos para obtenção de componentes reutilizáveis.
Preparo e produção de artefatos de software: Engloba atividades para criar
artefatos como modelos, documentos, logs, formulários, etc.

Não podemos esquecer que os projetos devem ser ágeis e adaptáveis. Dessa forma, não
precisamos de todas as atividades acima, o uso ou o não uso de determinada atividade
será feita de acordo com as necessidades de um projeto.

Nesse ponto podemos afirmar que existem dois modelos principais e bastante difundidos
que são utilizados nos processos de software. O primeiro deles são os modelos de
processo prescritivo que abordam detalhadamente a definição, identificação e a aplicação
de atividades e tarefas do processo. Esse modelo apesar de tentar melhorar a qualidade
do sistema tem muitos problemas quando aplicados de forma mais dogmática e sem
adaptações podendo aumentar a burocracia e criarão dificuldades para todos os
envolvidos. Por sua vez os modelos ágeis seguem princípios que conduzem à uma
abordagem mais informal enfatizando a flexibilidade e adaptabilidade. Esses modelos são
muito apropriados nos mais diversos tipos de projetos e muito úteis quando aplicações
para a Internet são projetadas.

Bibliografia

[1] Pressman, R. Engenharia de Software: Uma abordagem Profissional. 7º edição. Editora


Bookman.

[2] Ken Schwaber e Jeff Sutherland. Scrum Guide. Disponível em http://www.scrum.org

[3] Mike Cohns: Succeding with Agile. Disponível em


http://www.mountaingoatsoftware.com/blog/

5 de 6 07/02/2014 10:48
Princípios da Engenharia de Software http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=29630

Higor Medeiros

Higor Medeiros (higorowen@gmail.com) é aluno da Universidade do Vale do Rio dos Sinos em Ciência da
Computação cursando o 4º semestre, onde também trabalha na pesquisa científica na área de inteligência
artificial com Processament [...]

6 de 6 07/02/2014 10:48

Você também pode gostar