Вы находитесь на странице: 1из 19

Engenharia de software

Conceitos Básicos de
Engenharia de Software
Conceitos básicos – Crise de
software
A abordagem utilizada nesse material apresentará a você uma ampla
perspectiva da Engenharia de Software. Esses aspectos são importantes
para a Engenharia de Software no século XXI, quando enfrentamos o desafio
de assegurar que nosso software cumpra as reais necessidades de seus
usuários, sem causar danos a eles ou ao meio ambiente.
Hoje em dia, praticamente todos os países dependem de complexos
sistemas com base em computadores. Cada vez mais os produtos
incorporam, de algum modo, computadores e softwares de controle. Nesses
sistemas, o software representa uma grande e crescente proporção do custo
total do sistema. Por isso, produzir software de um modo que apresente uma
boa relação custo-benefício é essencial para o funcionamento das economias
nacionais e internacionais.
Segundo Sommerville (2003), Engenharia de Software é uma
disciplina da Engenharia cuja meta é o desenvolvimento de sistemas de
software com boa relação custo-benefício. O software é abstrato e intangível,
não é restrito por materiais nem regido por leis fiscais ou por processos
industriais. De certa maneira, isso simplifica a Engenharia de Software, por
não haver limitações físicas para o potencial de software. Por outro lado,
contudo, essa ausência de limitações naturais significa que o software pode
facilmente se tornar bastante complexo e, consequentemente, muito difícil de
ser compreendido.
O conceito de Engenharia de Software surgiu pela primeira vez em
1968, em uma conferência organizada para discutir a chamada crise do
software. Essa crise resultava diretamente da introdução de novo hardware
de computador baseado em circuitos integrados. Seu poder fez das
aplicações de computador, consideradas até então não realizáveis, propostas
viáveis. O software resultante era ordens de grandeza maiores e mais
complexas que os sistemas de software anteriores (SOMMERVILLE, 2007).
Segundo Pressman (2004), os problemas que originaram essa crise
tinham relacionamento direto com a forma de trabalho das equipes. Eram
problemas que não se limitavam a "sistemas que não funcionam
corretamente", mas envolviam também dúvidas sobre como desenvolver e
manter um volume crescente de software e ainda estar preparado para as
futuras demandas. Essencialmente, eram sintomas provenientes do pouco
entendimento dos requisitos por parte dos desenvolvedores, somados às
técnicas e medidas pobres aplicadas sobre o processo e o produto, além dos
poucos critérios de qualidade estabelecidos até então.

Engenharia de software – Conceitos básicos - Crise de Software 2


Curiosidade: a crise de software e a Idade Média
Para compreender melhor as origens da crise de software, podemos fazer uma
comparação muito interessante com a história das outras indústrias. Por exemplo, antes
da revolução industrial, os sapatos eram feitos de forma muito individual. Nesses
tempos mais remotos, os sapateiros faziam cada par de sapatos de forma única para
cada cliente, desde a obtenção da matéria prima até o produto final. As semelhanças
com a indústria de software começam logo aí. Primeiro, porque as técnicas de
desenvolvimento de software ainda não estão totalmente maduras e consolidadas.
Afinal, a variedade de técnicas que surgiram nas últimas décadas é enorme.
Em segundo lugar, existe uma tendência muito forte em desenvolver software sem
aproveitar o material produzido no passado. E para piorar, além de entregá-lo quase
sempre mal documentado, a maior parte do conhecimento envolvido na sua construção
permanece apenas na cabeça dos desenvolvedores, o que deixa a situação muito
parecida com a do sapateiro do exemplo.

A experiência inicial de construção desses sistemas mostrou que uma


abordagem informal do desenvolvimento de software não era o suficiente.
Projetos importantes sofriam atrasos, às vezes, de alguns anos. Por
apresentarem custos muito maiores do que os inicialmente previstos, eles
não eram confiáveis, eram de difícil manutenção e tinham desempenho
inferior. O desenvolvimento de software estava em crise. Os custos de
hardware caiam, enquanto os de software subiam rapidamente. Novas
técnicas e novos métodos eram necessários para controlar a complexidade
inerente aos grandes sistemas de software.
Essas técnicas se tornaram parte da Engenharia de Software e são
agora amplamente, mas não universalmente, utilizadas. No entanto, ainda há
problemas em produzir software complexo, que atenda às expectativas dos
usuários e que seja entregue dentro do prazo e do orçamento estabelecido, e
isso levou alguns críticos a sugerirem que a Engenharia de Software está em
um estado de aflição crônica (PRESSMAN, 2004).
Conforme você pode observar, hoje em dia, os sistemas de software
estão em todos os lugares. Praticamente todo equipamento elétrico
apresenta algum tipo de software; o software é utilizado para ajudar nas
operações da indústria manufatureira, das escolas e universidades, do setor
de assistência à saúde, das finanças, do comércio e do governo. A
especificação, o desenvolvimento, o gerenciamento e a evolução desses
sistemas de software constituem a disciplina da Engenharia de Software.
Portanto, a Engenharia de Software é uma disciplina da Engenharia
em que os engenheiros de software utilizam métodos e teorias da ciência da
computação de modo eficaz em relação aos custos, com objetivo de

Engenharia de software – Conceitos básicos - Crise de Software 3


solucionar problemas.
Para ilustrar os problemas ocorridos no passado, selecionamos um
estudo desenvolvido em 1995 pela empresa americana The Standish
Group, líder em tecnologia da informação (TI) sediada em Boston,
Massachusetts, nos EUA. Realizado com 3.682 projetos de 365 companhias
(THE STANDISH GROUP, 1995), o estudo apresentou o seguinte resultado:
 US$ 250 bilhões de gastos com TI;
 31,1% dos projetos foram cancelados antes mesmo de começar
a um custo de US$ 81 bilhões;
 52,7% custam 189% a mais que o previsto a um custo de US$
59 bilhões;
 A taxa de sucesso foi de apenas 16,2%;
 Projetos atrasados ou acima do orçamento foram 52,7%.

Curiosidade: qual é a diferença entre eficaz e


eficiente?
Você sabe a diferença entre eficaz e eficiente? Veja a diferença entre
estes termos aqui:
MARQUES, Eder L. Eficaz ou eficiente? Saiba a diferença. Dispónível
em: <http://administrando.net/eficaz-ou-eficiente-saiba-a-diferenca/>.
Acesso em: 14 jul. 2013.

Leitura complementar: definição de projetos segundo


Project Management Institute (PMI)
“Um projeto é um esforço temporário empreendido para criar um
produto, serviço ou resultado exclusivo. A sua natureza temporária indica um
início e um término definidos. O término é alcançado quando os objetivos
tiverem sido atingidos ou quando se concluir que esses objetivos não serão
ou não poderão ser atingidos e o projeto for encerrado, ou quando o mesmo
não for mais necessário. Temporário não significa necessariamente de curta
duração. Além disso, geralmente o termo temporário não se aplica ao
produto, serviço ou resultado criado pelo projeto; a maioria dos projetos é
realizada para criar um resultado duradouro. Por exemplo, um projeto para a
construção de um monumento nacional criará um resultado que deve durar
séculos. Os projetos também podem ter impactos sociais, econômicos e
ambientais com duração mais longa que a dos próprios projetos” (PROJECT
MANAGEMENT INSTITUTE, 2008).

Engenharia de software – Conceitos básicos - Crise de Software 4


Para entender melhor a evolução do software no tempo, veja a seguir
uma explicação de suas três fases com as respectivas características de
cada época (PRESSMAN, 1995).
De 1950 a 1965, o hardware sofreu contínuas mudanças e seu
propósito era geral, ou seja, desenvolvido para suportar diferentes tipos de
software. Por sua vez, o software era uma arte “secundária” para a qual havia
poucos métodos sistemáticos e diferentemente do hardware, era específico
para cada aplicação. Além disso, não havia documentação de sistemas de
softwares desenvolvidos.
De 1965 a 1975, surgem multiprogramação e sistemas multiusuários,
técnicas interativas, sistemas de tempo real, primeira geração de sistemas de
gerenciamento de banco de dados (SGBDs), produto de software (software
houses) e as bibliotecas de software. Nesta época ocorre a Crise de Software
devido ao crescimento do número de sistemas baseado em computador com
manutenção quase impossível nestes sistemas.
De 1975 até hoje, uma grande evolução acontece com os sistemas
distribuídos, redes locais e globais, uso generalizado de microprocessadores
(produtos inteligentes), hardware de baixo custo e impacto de consumo.
Atualmente vivemos a chamada Quarta Era do software de
computador, que caracteriza-se pelas seguintes tecnologias da informação:
tecnologias orientadas a objetos, sistemas especialistas e software de
inteligência artificial usados na prática, software de rede neural artificial e
computação paralela.
No entanto, até hoje alguns problemas ainda persistem ao se
desenvolver um software, como:
 A necessidade por sofisticação do software ultrapassou nossa
capacidade de construir softwares que extraiam todo o potencial
do hardware;
 A capacidade de construir novos softwares não acompanha a
demanda por novos programas; e
 A capacidade de manter programas é atrapalhada por projetos
ruins e inadequados.

Esses problemas ainda ocorrem devido a uma série de fatores,


conforme descritos a seguir:
 As estimativas de prazo e de custo frequentemente são
imprecisas, pois não se dedica tempo para coletar dados sobre
o processo de desenvolvimento de software, e sem nenhuma
indicação sólida de produtividade, não podemos avaliar com
precisão a eficácia de novas ferramentas, métodos ou padrões;
 Insatisfação do cliente com o sistema concluído. Os projetos de

Engenharia de software – Conceitos básicos - Crise de Software 5


desenvolvimento de software normalmente são efetuados
apenas com um vago indício das exigências do cliente;
 A qualidade de software às vezes é menos que adequada. Só
recentemente começam a surgir conceitos quantitativos sólidos
de garantia de qualidade de software;
 software existente é muito difícil de manter, pois a tarefa de
manutenção devora o orçamento destinado ao software e,
ainda, a facilidade de manutenção não é enfatizada como um
critério importante.

É importante enfatizarmos quais foram as causas dos problemas


associados á crise de software:
 Próprio caráter do software: o software é um elemento de
sistema lógico e não físico. Consequentemente, o sucesso é
medido pela qualidade de uma única entidade e não pela
qualidade de muitas entidades manufaturadas. “O software não
se desgasta, mas se deteriora”;
 Falhas das pessoas responsáveis pelo desenvolvimento de
software: gerentes sem nenhuma experiência em software,
profissionais da área de software têm pouco treinamento formal
em novas técnicas para o desenvolvimento de software e
resistência a mudanças.

Quais são os mitos?

 Já temos manual repleto de padrões e procedimentos – pode


existir, mas é utilizado?
 Se estamos atrasados no prazo, podemos adicionar mais
programadores – software não é manufatura;
 cliente acha que uma definição (via e-mail ou telefone) é
suficiente para se começar a escrever programas – uma
definição inicial ruim é a principal causa do fracasso;
 Os requisitos do projeto modificam-se continuamente, mas as
mudanças podem ser facilmente acomodadas, pois o software é
flexível – os requisitos modificam, mas o impacto das mudanças
varia, e é preciso avaliar o impacto de cada solicitação.

Engenharia de software – Conceitos básicos - Crise de Software 6


Conceitos básicos de Engenharia de Software

Atualmente, existem inúmeras definições para a Engenharia de


Software, e todas elas convergem para o mesmo ponto de vista, explicado,
algumas vezes, com maior ou menor riqueza de detalhes.
Engenharia de Software é a criação e a utilização de princípios sólidos
de Engenharia a fim de obter software de maneira econômica, que seja
confiável e que trabalhe eficientemente em máquinas reais (BAUER,1969).
A Engenharia de Software foi desenvolvida em resposta aos
problemas de construção de sistemas de software de grande porte e
personalizados, destinados a aplicações industriais, governamentais e para o
setor de defesa. Atualmente, desenvolvemos uma variedade muito maior de
produtos de software, desde jogos para consoles especializados, passando
por produtos para PCs e sistemas baseados na web, até chegar aos
sistemas distribuídos em grande escala.
Conforme Sommerville (2007), as áreas do conhecimento da
Engenharia de Software englobam:

 Requisitos de software;
 Projeto de software;
 Construção de software;
 Teste de software;
 Manutenção de software;
 Gerência de configuração de software;
 Gerência da Engenharia de Software;
 Processo de Engenharia de Software;
 Ferramentas e métodos da Engenharia de Software;
 Qualidade de software.

De forma mais abrangente, podemos dizer que softwares são


programas de computador com documentação associada e, ainda, com os
dados de configuração necessários para fazer com que esses programas
funcionem corretamente. Os produtos de software podem ser desenvolvidos
para um cliente particular (taylor made – feito sob medida), ou podem ser
desenvolvidos para o mercado geral (por exemplo, software de orçamento de
obras para a construção civil, software de contabilidade, software para
supermercado etc.).

Engenharia de software – Conceitos básicos - Crise de Software 7


Saiba mais: diferença entre softwares genéricos e
personalizados (taylor made)

Uma diferença importante entre esses diversos tipos de software é que, nos
produtos genéricos, a organização que desenvolve o software controla sua
especificação. Para os produtos personalizados, a especificação é usualmente
desenvolvida e controlada pela organização que está comprando o software.
Os desenvolvedores de software devem trabalhar de acordo com essa
especificação.

Outro conceito importante a ser apresentado é a diferença entre


Engenharia de Software e Engenharia de Sistemas.
A Engenharia de Sistemas está relacionada a todos os aspectos do
desenvolvimento de sistemas baseados em computadores, incluindo
hardware, software e Engenharia de Processo, enquanto a Engenharia de
Software é parte desse processo (SOMMERVILLE, 2003).
As atividades e seus resultados associados para desenvolver um
produto de software são conhecidos como processo de software. Essas
atividades são, em sua maioria, executadas por engenheiros de software. Há
quatro atividades de processo fundamentais comuns a todos os processos de
software. Essas atividades são: especificação do software,
desenvolvimento do software, validação do software e evolução do
software (SOMMERVILLE, 2003).
A seguir, introduziremos as perguntas mais frequentes sobre
Engenharia de Software com suas respectivas respostas (SOMMERVILLE,
2007):

Engenharia de software – Conceitos básicos - Crise de Software 8


O que é um modelo de processo de software?

Um modelo de processo de software é uma descrição simplificada de


um processo de software apresentada a partir de uma perspectiva específica.
Os modelos, por sua natureza, são simplificações; e, assim, um modelo e
processo de software é uma abstração do processo real que está sendo
descrito. Alguns exemplos dos tipos de modelos de processos de software
que podem ser produzidos são (SOMMERVILLE, 2003):
 Modelo de workflow: mostra a sequência de atividades no
processo, juntamente com suas entradas, saídas e
dependências. Nesse modelo, as atividades representam ações
humanas;
 Modelo de fluxo de dados ou de atividade: representa o
processo como um conjunto de atividades, cada uma das quais
realiza alguma transformação de dados. Esse modelo mostra
como a entrada para o processo, tal como uma especificação, é
transformada em uma saída;
 Modelo de papel/ação: representa os papéis das pessoas
envolvidas no processo de software e as atividades pelas quais
elas são responsáveis.

Quais são os custos da Engenharia de Software?

Não há uma resposta simples para essa pergunta, uma vez que a
precisa distribuição de custos ao longo do processo de software depende do
processo utilizado e do tipo de software que será desenvolvido. Porém, em
média, podemos dizer que (SOMMERVILLE, 2003):
 Cerca de 60% dos custos são de desenvolvimento;
 40% são custos de teste;
 Para software sob encomenda, os custos de evolução
frequentemente excedem os custos de desenvolvimento.

Engenharia de software – Conceitos básicos - Crise de Software 9


Você sabia?
Além dos custos de desenvolvimento, também há os custos de alteração do
software, depois de ele ter sido colocado em uso? Para muitos sistemas de
software com um longo ciclo de duração, é provável que esses custos
excedam os custos de desenvolvimento em três ou quatro vezes.

O que são métodos de Engenharia de Software?

Um método de Engenharia de Software é uma abordagem estruturada


para o desenvolvimento de software cujo objetivo é facilitar a produção de
software de alta qualidade, apresentando uma boa relação custo-benefício
(SOMMERVILLE, 2003). Métodos como análise estruturada (DEMARCO,
1979) e JSD – jackson system design – (JACKSON, 1983) foram inicialmente
desenvolvidos na década de 1970. Esses métodos procuravam identificar os
componentes funcionais básicos de um sistema, e os métodos orientados a
funções ainda são amplamente utilizados. Nas décadas de 1980 e 1990,
esses métodos orientados a funções foram complementados por métodos
orientados a objetos, como aqueles propostos por Booch (1994) e Rumbaugh
et al. (1991). Essas diferentes abordagens foram integradas em uma única,
construída segundo a UML (unified modeling language – linguagem de
modelagem unificada) (BOOCH et al., 1999; RUMBAUGH et al., 1999;
JACOBSON et al., 1999).
Todos os métodos se baseiam na ideia de desenvolver modelos de um
sistema que possam ser representados graficamente e de utilizar esses
modelos como uma especificação ou projeto de sistema. Os métodos devem
incluir uma série de diferentes componentes, descritos na tabela 1.

Tabela 1. Relação de componentes de um método (SOMMERVILLE, 2003)


Componente Descrição Exemplo
Descrições dos modelos de
Modelo de objetos, modelos
Descrições de sistemas a serem desenvolvidos e a
de fluxo de dados, modelos de
modelos de sistemas notação utilizada para definir esses
máquinas de estado etc.
modelos
Restrições que sempre se Cada entidade em um modelo
Regras
aplicam a modelos de sistemas de sistema deve ter um único nome
Heurísticas que
caracterizam (distinguem) a boa
Nenhum objeto deve ter mais
Recomendações prática de projeto nesse método.
que sete subobjetos associados a ele
Seguindo essas recomendações,
deve-se chegar a um modelo de

Engenharia de software – Conceitos básicos - Crise de Software 10


sistema bem-organizado
Descrições das atividades Atributos de objetos devem
que podem ser seguidas para ser documentados antes de serem
Diretrizes de processo
desenvolver os modelos de sistema definidas as operações associadas a
e a organização dessas atividades um objeto

Para refletir: métodos de Engenharia de Software

Não existe método ideal, e diferentes métodos têm áreas de aplicação


diversificada. Por exemplo, os métodos orientados a objetos são, com
frequência, apropriados para sistemas interativos, mas não para sistemas com
severos requisitos de tempo real (SOMMERVILLE, 2003).

O que é ferramenta CASE?

O acrônimo CASE significa computer-aided software engineering


(Engenharia de Software com o auxilio de computador). Ele se refere a uma
ampla gama de diferentes tipos de programas utilizados para apoiar as
atividades de processo de software, como a análise de requisitos, a
modelagem de sistema, a depuração e os testes. Todos os métodos
atualmente são fornecidos com tecnologia CASE associada, como no caso
de editores para as notações utilizadas no método, módulos de análise que
verificam o modelo do sistema de acordo com as regras do método e
geradores de relatórios para ajudar na criação da documentação do sistema.
As ferramentas CASE podem também incluir um gerador de códigos que,
automaticamente, origina código-fonte a partir do modelo de sistema e
alguma orientação de processo, que fornece conselhos ao engenheiro de
software sobre o que fazer em seguida (SOMMERVILLE, 2003).
Esse tipo de ferramenta CASE, destinada a dar apoio à análise e ao
projeto, é, algumas vezes, chamada de ferramenta upper-CASE, porque dá
apoio às fases iniciais do processo de software. Por outro lado, as
ferramentas CASE projetadas para dar apoio à implementação e aos testes,
como depuradores, sistemas de análise de programa, geradores de casos de
testes e editores de programas, são, às vezes, chamado de ferramentas
lower-CASE (SOMMERVILLE, 2003).

Quais são os atributos de um bom software?

Engenharia de software – Conceitos básicos - Crise de Software 11


Da mesma maneira que os serviços que eles fornecem, os produtos
de software têm uma série de outros atributos associados, que refletem a
qualidade do software. Esses atributos não são diretamente associados ao
que o software faz. Em vez disso, eles refletem seu comportamento quando
em funcionamento, a estrutura e a organização do programa fonte e também
a documentação associada. Exemplos desses atributos (às vezes, chamados
de atributos não funcionais) são o tempo de resposta do software à consulta
de um usuário e a facilidade e compreensão de código do programa
(SOMMERVILLE, 2003).
O conjunto específico de atributos que se pode esperar de um sistema
de software depende obviamente de sua aplicação. Portanto, um sistema
bancário tem que ser seguro, um jogo interativo dever ter uma resposta
rápida, um sistema de controle de telefonia precisa ser confiável e assim por
diante (SOMMERVILLE, 2003).
A seguir, veja na tabela 2 quais seriam os atributos essenciais de um
software:

Tabela 2. Atributos essenciais de um software (SOMMERVILLE, 2003)


Característica do
Descrição
produto
O software deve ser escrito de modo que possa
evoluir para atender às necessidades mutáveis dos
Facilidade de manutenção clientes. Esse é um atributo crucial, pois as modificações
em um software são uma consequência inevitável de um
ambiente de negócios em constante mutação
O nível de confiança do software tem uma gama
de características que incluem confiabilidade, proteção e
Nível de confiança segurança. O software confiável não deve ocasionar
danos físicos ou econômicos, no caso de um defeito no
sistema
O software não deve desperdiçar os recursos do
sistema, como memória e ciclos do processador. A
Eficiência
eficiência, portanto, inclui a rapidez de resposta, o tempo
de processamento, a utilização da memória, entre outros
O software deve ser utilizável, sem esforços
indevidos, pelo tipo de usuário para quem foi projetado.
Facilidade de uso
Isso significa que ele deve dispor de uma interface
apropriada com o usuário e de documentação adequada.

Fundamentos de Engenharia de
Software

Engenharia de software – Conceitos básicos - Crise de Software 12


Por que Engenharia de Software?

Conforme já citado anteriormente, o software permeia o nosso mundo


tornando nossa vida mais confortável, eficiente e efetiva. Ele está presente,
explicitamente ou mesmo sem se fazer notar, em todos os aspectos da nossa
vida. Por isso, é importante que o engenheiro de software tenha boas
práticas de Engenharia de Software para assegurar que o produto de
software tenha uma contribuição positiva em nossas vidas.
Vale ressaltar algumas reflexões:
 Os usuários estão satisfeitos com os sistemas de software
existentes?
 Os produtos de software permitem realizar tarefas de maneira
mais rápida e eficiente do que anteriormente?
 Entretanto, produtos de software não estão isentos de
problemas!
 Existe uma enorme diferença entre um erro em um projeto feito
para uma disciplina na universidade e um erro em um grande
sistema de software.
 Alguns defeitos simplesmente causam
aborrecimentos; outros custam bastante tempo e
dinheiro;
 Outros podem ameaçar a vida das pessoas.

De uma forma simples e resumida, podemos dizer que a Engenharia


de Software foi desenvolvida para utilizar o conhecimento sobre
computadores e computação para solução de problemas, ela consiste em
analisar um problema para determinar a sua natureza utilizando técnicas,
métodos, ferramentas e procedimentos adequados.

Engenharia de software – Conceitos básicos - Crise de Software 13


Como podemos definir o papel do engenheiro de
software?

É o profissional com a competência para utilizar conceitos, princípios,


métodos e ferramentas para projetar e desenvolver software de alta
qualidade para solucionar um determinado problema.

Quem faz a Engenharia de Software?

A comunicação entre clientes/usuários e desenvolvedores gera um


produto de software. Os componentes no desenvolvimento de um software
são: cliente, desenvolvedor e usuário.

Uma perspectiva da indústria de software

Atualmente, o software custa mais que o hardware, devido ao custo de


seu desenvolvimento. Esse custo está relacionado a alguns problemas que
ainda persistem durante o seu desenvolvimento. Veja a seguir a relação dos
constantes autoquestionamentos de gerentes e técnicos:
 Por que é preciso tanto tempo para terminar os programas?
 Por que os custos são tão altos?
 Por que não se consegue encontrar todos os erros antes que o
software seja liberado para os clientes?
 Por que existe uma dificuldade em medir o progresso à medida
que o software está sendo construído?

A preocupação em resolver essas questões tem levado à adoção das


práticas da Engenharia de Software cuja essência se define em:
 Entender o problema  comunicação e análise.
 Planejar uma solução  modelagem e projeto.
 Executar o plano  gerar código.
 Examinar os resultados quanto à precisão  teste e garantida
de qualidade.

Engenharia de software – Conceitos básicos - Crise de Software 14


Lembre-se: definição de software
Software é um conjunto de programas de computador, documentação
e dados associados, relacionados à operação de um sistema de
computador.

Um software é composto por:


 Instruções: conjunto de sentenças que produzem a função ou
procedimento desejado;
 Estrutura de dados: permitem que os programas manipulem
adequadamente a informação;
 Documentos: descrevem a operação e o uso dos programas.

Lembre-se: definição de Engenharia de Software


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 (BAUER, 1969).

Na Engenharia de Software, seu processo abrange um conjunto de


três elementos fundamentais: métodos, ferramentas e procedimentos. Os
métodos proporcionam os detalhes de como fazer para construir o software.
As ferramentas dão suporte automatizado aos métodos, existem atualmente
ferramentas para sustentar cada um dos métodos, ferramentas que dão
suporte ao desenvolvimento de software  CASE. Os procedimentos
constituem o elo entre os métodos e ferramentas, por exemplo, definem
(PRESSMAN, 1995):
 Sequência em que os métodos serão aplicados;
 Produtos a serem entregues;
 Controles que ajudam assegurar a qualidade e coordenar as
alterações;
 Marcos de referência que possibilitam administrar o progresso
do software.

Agora, podemos então definir o que é o ciclo de vida de software.

Engenharia de software – Conceitos básicos - Crise de Software 15


MÉTODOS + FERRAMENTAS + PROCEDIMENTOS =
CICLO DE VIDA DE SOFTWARE
(representação alto nível do processo de software executado)

Um ciclo de vida tem como objetivo definir as atividades a serem


conduzidas no projeto, manter a consistência entre sistemas desenvolvidos
em uma mesma empresa e também para viabilizar pontos de controle para a
gerência.
Os modelos de processo de software mais conhecidos são: cascata
(ciclo de vida clássico), prototipação, espiral, incremental e processo
unificado.
Veja a seguir, na tabela 3, alguns tipos de software e sua
aplicabilidade.

Tabela 3. Exemplos de software e sua aplicabilidade


Tipo de software Aplicação
Coleção de programas escritos
Básico
para dar apoio a outros programas
De tempo real Software que monitora, analisa e
controla eventos do mundo real
Sistemas de operações comerciais
Comercial
e tomadas de decisões administrativas
Caracterizado por algoritmos de
Científico e de Engenharia
processamento de números
Usado para controlar produtos e
Embutido sistemas para os mercados industriais e de
consumo
De computação pessoal Envolve processamento de textos,
planilhas eletrônicas, diversões etc.
Faz uso de algoritmos não
De inteligência artificial numéricos para resolver problemas que não
sejam favoráveis à computação ou à
análise direta

A escolha de um modelo de processo de software está diretamente


associada à natureza do projeto e da aplicação, dos métodos e ferramentas a
serem usados e dos controles e produtos que precisam ser entregues.

A seguir, veja algumas reflexões:


 Quais são os problemas?
o A sofisticação do software ultrapassou nossa capacidade

Engenharia de software – Conceitos básicos - Crise de Software 16


de construção.
o Nossa capacidade de construir programas não
acompanha a demanda por novos programas.
o Nossa capacidade de manter programas é ameaçada por
projetos ruins.

 Quais são as soluções?


o Começar a utilizar conceitos de Engenharia de Software.
o Tratar o software como um produto.
o Utilizar sempre um modelo de processo de software.
o Treinamento contínuo em técnicas, metodologias e
modelos.

Engenharia de software – Conceitos básicos - Crise de Software 17


BIBLIOGRAFIA BÁSICA

BAUER, F.L. Scientific Affairs Division, NATO, 1969.

BOOCH, Grady. Object-oriented analysis and design with applications. 2. ed.


Massachusetts: Addison-Wesley, 1994.

BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. The unified


modeling language user guide. Massachusetts: Addison-Wesley, 1999.

DEMARCO, Tom. Structured analysis and system specification. New Jersey:


Prentice Hall, 1979.

JACKSON, Michael A. System development. New Jersey: Prentice Hall,


1983.

JACOBSON, Ivar; RUMBAUGH, James; BOOCH, Grady. The unified


software development process. Massachusetts: Addison-Wesley, 1999.

PRESSMAN, Roger S. Engenharia de software. 3. ed. São Paulo: Makron


Books, 1995.

________________. Software engineering – A practitioner’s approach. 6. ed.


New York: McGraw-Hill, 2004.

RUMBAUGH, James; et al. Object-oriented modeling and design. New


Jersey: Prentice Hall, 1991.

RUMBAUGH, James; JACOBSON, Ivar; BOOCH, Grady. The unified


modeling language reference manual. Massachusetts: Addison-Wesley, 1999.

SOMMERVILLE, Ian. Engenharia de software. 6. ed. São Paulo: Addison-


Wesley, 2003.

________________. Engenharia de software. 8. ed. São Paulo: Addison-


Wesley, 2007.

THE STANDISH GROUP. Chaos Report. Massachusets, 1995. Disponível


em: <http://www.projectsmart.co.uk/docs/chaos_report.pdf>. Acesso em: 01
fev. 2013.

Engenharia de software – Conceitos básicos - Crise de Software 18


BIBLIOGRAFIA COMPLEMENTAR

PROJECT MANAGEMENT INSTITUTE. Um guia do conhecimento em


gerenciamento de projetos – Guia PMBOK®. 4. ed. [S.l.], 2009.

________________. O Instituto. Disponível em:


<http://www.pmisp.org.br/institucional/pmi/o-instituto>. Acesso em: 12 fev.
2013.

R.S. PRESSMAN & ASSOCIATES, INC. Products that improve your software
engineering practices. Disponível em: <http://www.rspa.com>. Acesso em: 12
fev. 2013.

Engenharia de software – Conceitos básicos - Crise de Software 19

Вам также может понравиться