Você está na página 1de 12

LUIZ AFONSO PECCINI

ENGENHARIA DE SOFTWARE
ENGSOFT-1

SJRPRETO – 2009
SUMÁRIO

Página
1 INTRODUÇÃO ............................................................................................................... 1
1.1 CRISE DO SOFTWARE ............................................................................................... 3
1.2 DESAFIOS-CHAVE DA ES ......................................................................................... 4
1.3 ÁREAS DE CONHECIMENTO DA ES ......................................................................... 5
1.3.1 REQUISITOS DE SOFTWARE ............................................................................. 6
1.3.2 PROJETO DE SOFTWARE .................................................................................. 6
1.3.3 CONSTRUÇÃO DE SOFTWARE .......................................................................... 6
1.3.4 GERENCIAMENTO DE PROJETO DE SOFTWARE ............................................. 7
1.3.5 PROCESSO DE ES ............................................................................................. 7
1.3.6 INFRAESTRUTURA DA ES ................................................................................ 8
1.3.7 QUALIDADE DE SOFTWARE.............................................................................. 8
1.3.8 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE.............................................. 8
1.3.9 TESTE DE SOFTWARE ....................................................................................... 9
1.3.10 EVOLUÇÃO E MANUTENÇÃO DE SOFTWARE .................................................. 9
1.4 REFERÊNCIAS BIBLIOGRÁFICAS ........................................................................... 10
1

1 INTRODUÇÃO
Na proposta de Plano Pedagógico para a matéria Engenharia de Software
apresentada pelos professores Jaelson Freire Brelas de Castro (UFPE/CIN), Ita-
na Maria de Souza Gimenes (UEM/DIN) e José Carlos Maldonado (USP São Car-
los/ICMC), no Workshop sobre Educação em Computação organizado pela PUC-
PR e promovido pela SBC (Sociedade Brasileira de Computação), são destacados
os principais objetivos que devem ser alcançados:
Os alunos devem demonstrar habilidades para gerenciar projetos de
software e analisar, projetar, verificar, validar, implementar e manter sis-
temas de software. Eles devem possuir habilidades para analisar/definir e
usar modelos, técnicas, ferramentas e métricas apropriadas para o desen-
volvimento de software, de tal forma que garanta a qualidade tanto do pro-
cesso de desenvolvimento, como do produto de software. Eles devem possu-
ir as habilidades necessárias para comunicação e trabalho em grupo, típi-
cas de um ambiente de desenvolvimento de software.

Nesta proposta os autores apresentam um conjunto de especificações de


módulos básicos de Engenharia de Software que podem fazer parte de qualquer
curso de computação:
Cada módulo poderá ser desenvolvido em uma única disciplina.
Contudo, dependendo dos objetivos e da natureza do currículo, alguns mó-
dulos podem ser agregados para formar uma única disciplina. São eles:

Introdução à Engenharia de Software


Fornece uma visão geral da Engenharia de Software como uma matéria,
introduzindo os alunos aos princípios fundamentais e metodológicos da
Engenharia de Software.

Requisitos de Software
Introduz conceitos e princípios básicos da Engenharia de Requisitos, suas
ferramentas, técnicas e métodos para modelagem de sistemas de software.

Projeto de Software
Trata de métodos e técnicas usadas para o projeto de software. Ela abrange
projeto arquitetural e detalhado, o processo de projeto, documentação e re-
visão do projeto.

Qualidade de Software
Trata de métodos e técnicas usadas para o gerenciamento do processo de
desenvolvimento de software. Examina a questão da qualidade dos produ-
tos e processos de softwares. Apresenta estratégias de melhoria do Proces-
so de Software.

EngSoft-1 Luiz Afonso Peccini


2

FIORINI, STAA & BAPTISTA (1998, p. 4) apresentam as seguintes consi-


derações sobre os motivos da preocupação com o desenvolvimento de software:
Analistas e Programadores
É interessante conversar com analistas e programadores, felizes portado-
res de um bip, ou de um telefone celular gentilmente cedido pela empresa
em que trabalham, mas que, em compensação, precisam estar sempre dis-
poníveis quando os seus sistemas estão em operação. Por que não podem
confiar em seus sistemas? Será que os testes foram planejados e realizados
a contento? Será que o desenvolvimento foi realizado seguindo procedimen-
tos e padrões definidos para o projeto? Houve controle de qualidade?

Usuários de Sistemas
É igualmente interessante conversar com usuários de sistemas que consi-
deram o seu departamento de desenvolvimento de sistemas muito simpáti-
co e prestativo, pois os analistas e programadores sempre estão disponíveis
para ajudar quando ocorrem erros de processamento. Será que o custo des-
ta disponibilidade é apurado, apesar de se relatar que não há problemas
com o desenvolvimento e manutenção? Será que tantos erros precisam o-
correr? E que erros são estes? Programou-se incorretamente? Especificou-
se algo diferente do que o usuário precisa? Esqueceu-se de adaptar interfa-
ces ao perfil do usuário ou oferecer-lhe o treinamento de que necessita? Se-
rá que são realizadas medições, como por exemplo, para descobrir onde os
erros aparecem com mais frequência, que tipos de erros são e em que fase
do desenvolvimento ocorrem?

Gerentes de Desenvolvimento
É também interessante conversar com gerentes de desenvolvimento de
software que afirmam não poderem dizer a seus superiores que os limites
de prazos e os custos propostos para o novo sistema, ou para a evolução de
um sistema existente, são irrealistas – “o melhor é ficar depois do expedi-
ente e tudo bem”. Mas será que os desenvolvedores possuem dados para
argumentar com seus superiores? São realizadas e registradas estimati-
vas? Os desenvolvedores sabem fazer estimativas? Possuem dados para fa-
zê-las com o mínimo de acurácia? Possuem registros do esforço realizado de
projetos anteriores?

Proprietários de Empresas de Desenvolvimento


E quanto aos donos de empresas de desenvolvimento de software passando
por necessidades, simplesmente por terem gentilmente cedido às solicita-
ções dos usuários, adicionado novos requisitos aos sistemas que estão de-
senvolvendo e, consequentemente, nunca chegando ao término satisfatório
do desenvolvimento desse sistema? Será que temos sempre que atender os
usuários, sem rever as consequências que isto traz a prazos e custos? Exis-
te um documento formal para os requisitos e estes são gerenciados? Como
foi realizado o contrato de desenvolvimento de software?

Estes são apenas alguns exemplos do que acontece no desenvolvi-


mento e manutenção de software. Entretanto, as empresas estão cada vez
mais exigentes e com os recursos financeiros mais limitados. Cada vez
mais o nome Engenharia de Software tem sido cobrado – deve-se realmen-
te fazer engenharia do produto (software): planejar, acompanhar, executar
EngSoft-1 Luiz Afonso Peccini
3

e controlar. Para tanto, a definição de como fazer isto, documentada em um


processo efetivo, é fundamental. Outro ponto crucial são as medições, sem
uma medição cuidadosa do processo utilizado o que será melhorado pode
ser apenas um reflexo de um problema maior.

Em resumo, todas as observações acima têm a ver com a falta de um


processo bem estabelecido. O analista não sabe especificar ou não realiza
especificação de requisitos, tampouco utiliza métodos de garantia de quali-
dade. O usuário aceita sistemas que não necessariamente o satisfazem. O
gerente não sabe estimar, tampouco possui dados para poder fazê-lo com
um mínimo de acurácia. Os superiores desse gerente acreditam piamente
na afirmação de que desenvolvimento de software sempre atrasa e custa
muito mais do que o necessário. Os diretores e presidentes pouco se preo-
cupam em estabelecer regras para o setor de Informática, embora o façam
para as outras áreas. Finalmente, o dono da empresa de prestação de ser-
viços não controla alterações a contento.

O Dicionário Aurélio Eletrônico V-3.0 apresenta as seguintes definições pa-


ra Engenharia e para Software:
Engenharia: arte de aplicar conhecimentos científicos (que têm o rigor
das ciências) e empíricos (baseados apenas na experiência e, pois, sem ca-
ráter científico; derivados de experimentos ou de observações da realidade)
e certas habilitações específicas à criação de estruturas, dispositivos e pro-
cessos que se utilizam para converter recursos naturais em formas ade-
quadas ao atendimento das necessidades humanas.

Software: em um sistema computacional, o conjunto dos componentes que


não fazem parte do equipamento físico propriamente dito e que incluem as
instruções e programas (e os dados a eles associados) empregados durante
a utilização do sistema; qualquer programa ou conjunto de programas de
computador; produto que oferece um conjunto de programas e dados para
uso em computador.

Pode-se dizer, portanto, que Engenharia de Software é o ramo da enge-


nharia relativo a construções de programas de computador, empregando estrutu-
ras, dispositivos e processos que se utilizam de cálculos, simulações, etc., dedica-
dos à geração, tratamento, apresentação e armazenamento de dados e/ou imagens
em computadores, com o objetivo de atender as necessidades humanas.

1.1 CRISE DO SOFTWARE


No final da década de 60 e início dos anos 70, a expressão “crise do softwa-
re” foi muito evidenciada pois, expressava as dificuldades do desenvolvimento de
software. Nesse período começou a existir um rápido crescimento na demanda por
EngSoft-1 Luiz Afonso Peccini
4

software e, também, na complexidade dos problemas a serem resolvidos. Além de


praticamente não existir a Engenharia de Software, inexistiam, também, técnicas
estabelecidas para o desenvolvimento de sistemas que funcionassem adequada-
mente e pudessem ser validados. Portanto, a crise se manifestava de várias for-
mas:
 Projetos estourando o orçamento;
 Projetos estourando o prazo;
 Software de baixa qualidade;
 Software muitas vezes não atingiam os requisitos;
 Projetos de difícil gerenciamento;
 Código difícil de manter.

Hoje em dia, os problemas apresentados acima continuam existindo e, des-


sa forma, pode-se dizer que a crise ainda não foi resolvida. Busca-se resolver a
crise de software por meio de:
 Uso de melhores técnicas, métodos e ferramentas;
 Mais treinamento e educação;
 Mudança de paradigma sobre o que é desenvolver software e como de-
veria ser feito.

1.2 DESAFIOS-CHAVE DA ES
O conceito de Engenharia de Software foi inicialmente proposto em 1968,
em uma conferência organizada para discutir o que foi então chamado de “crise
do software”.

A Engenharia de Software é uma disciplina de engenharia relacionada com


todos os aspectos da produção de software, desde os estágios iniciais de especifi-
cação do sistema até sua manutenção, depois que este entrar em operação. Por-
tanto, além de estar relacionada com os processos técnicos de desenvolvimento de
software, também está relacionada com atividades de gerenciamento de projeto
de software e o desenvolvimento de ferramentas, métodos e teorias que apóiem a
produção de software.
EngSoft-1 Luiz Afonso Peccini
5

Considerando a abrangência da Engenharia de Software, três desafios-


chave, que não são independentes, são destacados:
 Heterogeneidade (composto de partes de diferente natureza): os sis-
temas de software devem operar como sistemas distribuídos, através de
redes, que possuem diferentes tipos de computadores, com diferentes ti-
pos de sistemas de apoio. Envolve a integração do novo software com
sistemas herdados, escritos em diferentes linguagens de programação.
Portanto, este desafio consiste em desenvolver técnicas para construção
de software confiável que seja flexível o suficiente para adaptar-se a es-
sa heterogeneidade.
 Entrega (comprometimento): o ambiente de negócios deve apresentar
resposta ágil e mudar rapidamente e, por este motivo, o software de a-
poio deve acompanhar a velocidade da mudança. O tempo que as técni-
cas tradicionais de Engenharia de Software demandam é necessário pa-
ra se obter a qualidade do software. Portanto, este desafio consiste em
diminuir os tempos de entrega dos sistemas grandes e complexos, sem
comprometer a sua qualidade.
 Confiança (segurança): como o software está ligado com todos os as-
pectos da nossa vida, é essencial que ele seja confiável, principalmente
aqueles de acesso remoto, através de uma página Web ou interface de
Web service. Portanto, este desafio é o desenvolvimento de técnicas que
demonstrem ao usuário que ele pode ter confiança no software.

1.3 ÁREAS DE CONHECIMENTO DA ES


A Engenharia de Software compreende um conjunto de disciplinas mate-
máticas, técnicas (em computação), sociais e gerenciais que sistematizam a pro-
dução, a manutenção, a evolução e a recuperação de produtos intensivos em soft-
ware. Os produtos desenvolvidos e mantidos segundo os preceitos (ensinamentos)
da Engenharia de Software asseguram, por construção, qualidade satisfatória,
apoiando adequadamente os seus usuários na realização de suas tarefas, operam
satisfatória e economicamente em ambientes reais e podem evoluir continuamen-
te, adaptando-se a um mundo em constante evolução.
EngSoft-1 Luiz Afonso Peccini
6

1.3.1 REQUISITOS DE SOFTWARE

Esta área compreende os conhecimentos relacionados com o estabelecimen-


to dos entendimentos comuns dos requisitos que serão abordados pelo projeto de
software. Ela abrange métodos, técnicas e ferramentas associadas com a coleta,
análise, especificação e revisão dos requisitos de software. Este campo de conhe-
cimento pode ser dividido nas subáreas abaixo, que correspondem aproximada-
mente às tarefas de um processo que é concorrente e iterativo:
 Processo de engenharia de requisitos;
 Elicitação (extração de informações) de requisitos;
 Análise de requisitos;
 Validação de requisitos;
 Gerenciamento de requisitos.

1.3.2 PROJETO DE SOFTWARE

Esta fase de projeto transforma requisitos – tipicamente expressos por


meio de termos que são relevantes ao domínio do problema – em descrições, expli-
cando como resolver o problema. O projeto descreve como o sistema é decomposto
e organizado em componentes, bem como as interfaces entre os componentes. O
projeto também refina os detalhes desses componentes em um nível que seja a-
propriado para iniciar sua construção. Esta área de conhecimento pode ser divi-
dida nas subáreas abaixo:
 Princípios e conceitos básicos;
 Qualidade e métrica de projetos;
 Arquitetura de software;
 Notações de projeto;
 Estratégias e métodos de projeto.

1.3.3 CONSTRUÇÃO DE SOFTWARE

Esta é uma atividade fundamental da Engenharia de Software. Os pro-


gramadores devem construir softwares que funcionem e façam sentido e, para
isso, precisam reunir conhecimento da sintaxe da linguagem, aspectos referentes
EngSoft-1 Luiz Afonso Peccini
7

ao estilo e padrão de codificação, documentação interna, prototipagem de código,


reuso de código, análise e escolha de ferramentas de implementação e estratégias
de implementação em uso para vários paradigmas (padrões) de linguagem. Esta
área de conhecimento pode ser dividida de acordo com duas visões complementa-
res da construção de software:
 Principais estilos de construção de interfaces: métodos de construção
linguísticos, métodos de construção matemáticos e métodos visuais de
construção.
 Princípios básicos que afetam a forma que a construção de software é
realizada: redução de complexidade, antecipação de diversidade, estru-
turação para validação e uso de padrões externos.

1.3.4 GERENCIAMENTO DE PROJETO DE SOFTWARE

Esta área de conhecimento consiste das subáreas abaixo:


 Medição, que aborda os objetivos do programa de medição, seleção das
medidas, coleta dos dados e desenvolvimento do modelo.
 Processos de Gerenciamento, que trata de assuntos como seleção de pro-
jetos, padrões de desenvolvimento e implantação, seleção de equipes e
grupos de desenvolvimento. Aborda, ainda, a questão do início e defini-
ção do escopo, planejamento (incluindo prazos, custos e análise de ris-
co), execução, revisão, avaliação e término de projeto.

1.3.5 PROCESSO DE ES

Esta área de conhecimento envolve a definição, implementação, avaliação e


melhoria dos processos de software, referindo-se aos modelos, métodos e normas
para estruturar as atividades de produção de software, bem como para categori-
zar a capacidade e maturidade de uma organização na aplicação de conhecimen-
tos e das técnicas de produção de software. Ela pode ser dividida nas subáreas
abaixo:
 Definição de processos;
 Avaliação de processos;

EngSoft-1 Luiz Afonso Peccini


8

 Automação de processos;
 Alteração de processos.

1.3.6 INFRAESTRUTURA DA ES

Esta área envolve o conhecimento de métodos, técnicas e ferramentas para


automatizar os vários estágios do ciclo de vida do software. Abrange a análise, a
seleção e a operação de ferramentas e ambientes de Engenharia de Software. Ela
pode ser dividida nas seguintes subáreas:
 Métodos de desenvolvimento;
 Ferramentas de software;
 Integração de componentes.

1.3.7 QUALIDADE DE SOFTWARE

Esta área de conhecimento engloba técnicas para assegurar que o software


atende os requisitos, que os processos de desenvolvimento e manutenção são de
boa qualidade e mensuráveis, e que quando necessário o software exibirá certas
características, tais como, segurança, tolerância a falhas, robustez e confiabilida-
de. A produção de produtos de qualidade é fundamental para a satisfação dos cli-
entes e usuários, porém, mesmo com os melhores processos da Engenharia de
Software, a especificação de requisitos pode não retratar todas as necessidades
dos clientes e das partes interessadas, o código pode não satisfazer os requisitos,
um erro sutil pode permanecer não detectado até que ele cause um pequeno ou
sério problema. Esta área de conhecimento pode ser dividida nas subáreas abai-
xo:
 Definição de qualidade de software;
 Análise da qualidade de software.

1.3.8 GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE

Esta área de conhecimento identifica em pontos discretos do tempo a confi-


guração para permitir o controle sistemático das suas mudanças e seu rastrea-
mento durante o ciclo de vida do sistema. Como um sistema pode ser definido co-
EngSoft-1 Luiz Afonso Peccini
9

mo uma coleção de itens que são organizados de forma a realizarem uma função
ou conjunto de funções, a sua configuração depende das características físicas do
hardware, firmware1 e software existentes. Esta área de conhecimento pode ser
subdividida em:
 Gerenciamento do processo de GCS;
 Identificação da configuração de software;
 Controle da configuração de software;
 Registro do estado da configuração de software;
 Auditoria da configuração de software;
 Gerenciamento (e entrega) de versões de software.

1.3.9 TESTE DE SOFTWARE

O teste de software consiste na verificação dinâmica do comportamento de


um programa em relação a um conjunto finito de casos de teste (escolhidos cuida-
dosamente a partir de um domínio possivelmente infinito de execuções) contra o
comportamento esperado previamente especificado. Esta área de conhecimento
pode ser dividida nas subáreas abaixo:
 Conceitos e definições básicas de teste;
 Níveis de teste;
 Técnicas de teste;
 Medições relacionadas a teste;
 Gerenciamento do processo de teste;
 Teste automático.

1.3.10 EVOLUÇÃO E MANUTENÇÃO DE SOFTWARE

Esta área de conhecimento aborda os conhecimentos e técnicas necessárias


para melhoria, aperfeiçoamento e modificação do software através do tempo.
Compreende, também, aspectos como manutenção de software, extensão, adapta-
bilidade de software aos diferentes ambientes e re-engenharia de software. Ela
pode ser subdividida em:

1 Firmware, conhecido como software proprietário, é um tipo de software que controla diretamen-
te o hardware.
EngSoft-1 Luiz Afonso Peccini
10

 Conceitos de manutenção;
 Atividades de manutenção e papéis;
 Processo de Manutenção;
 Aspectos organizacionais da manutenção;
 Problemas de manutenção de software;
 Custos e estimativas de manutenção;
 Medição de manutenção;
 Ferramentas e técnicas para manutenção.

1.4 REFERÊNCIAS BIBLIOGRÁFICAS


AURÉLIO, Dicionário Eletrônico – Século XXI V-3.0. Lexikon, 1999.

FIORINI, Soeli T.; STAA, Arndt von; BAPTISTA, Renan M. Engenharia de


software com CMM. Rio de Janeiro: Brasport, 1998. 346 p.

PRESSMAN, Roger S. Engenharia de software. 6. ed. São Paulo: McGraw-


Hill, 2006. 720 p.

SOMMERVILLE, Ian. Engenharia de software. 8. ed. São Paulo: Pearson Ad-


dison-Wesley, 2007. 552 p.

WIKIPÉDIA, A Enciclopédia Livre. Disponível em: <http://www.wikipedia.org>.


Acesso em: 15 fevereiro 2009.

WORKSHOP SOBRE EDUCAÇÃO EM COMPUTAÇÃO, 2000, São Paulo. Anais


do II curso sobre qualidade de cursos de graduação da área de computa-
ção e informática. São Paulo: PUCPR, SBC, 2000.

EngSoft-1 Luiz Afonso Peccini

Você também pode gostar