Responda rapidamente
às duas perguntas abaixo e justifique suas respostas:
1.Se você desejasse construir um canil na sua casa, você contrataria os serviços de um
arquiteto e os de um engenheiro?
2. E se você fosse construir a sua casa, com piscina, sala de jogos, biblioteca, sala de
som e vídeo, etc., você contrataria os serviços de um arquiteto e os de um engenheiro?Permita-me tentar adivinhar suas respostas:
1.Não contrataria, afinal eu quero apenas um abrigo para o meu cachorro de estimação, e
isto qualquer pedreiro faz.
2. Sim, eu contrataria um arquiteto e um engenheiro, pois eu pretendo morar nessa casa
muitos anos e isso só será possível se o ambiente for agradável, prático,
confortável, seguro e compatível com o meu orçamento.
Qual é a conclusão que nós podemos extrair disso? A
sofisticação do material, das técnicas e das ferramentas usadas na construção de um
imóvel depende da qualidade exigida pelo cliente. A qualidade exigida, por sua vez,
depende das expectativas do cliente e essas expectativas variam conforme a utilidade e a
finalidade do imóvel.
Na área de Informática, as coisas funcionam da mesma maneira: um
cliente encomenda um software visando satisfazer determinadas expectativas, as quais já
direcionam para a aplicação de recursos específicos. Portanto, o primeiro passo do
desenvolvimento de um software é levantar as expectativas de qualidade associadas ao
produto. Em seguida, devemos estruturar o processo de elaboração do software, prevendo
atividades de planejamento, execução, avaliação de produtos intermediários e
controle. Finalmente, devemos construir o produto contratado de acordo com o que foi
planejado.
Chamamos de Engenharia de Software a esse processo organizado de desenvolvimento de
produto, que visa a satisfação plena do cliente a um custo adequado. A definição forma
mais difundida de Engenharia de Software é a seguinte:
Desenvolvimento e aplicação de ciência, matemática, técnicas, métodos, metodologias
e ferramentas para o desenvolvimento e a manutenção econômica de software de qualidade,
preditível e controlável, operando de modo econômico em máquinas e ambientes reais.
Trocando em miúdos, ciência, matemática, técnicas, métodos, metodologias e
ferramentas são elementos agregados ao processo de engenharia que garantem a
organização, a economia, a qualidade e a satisfação almejados. Na realidade, esses
elementos são inerentes a qualquer processo que reivindique a categoria de engenharia.
A Engenharia de Programas é a parte da Engenharia de Software que se preocupa
especificamente com a confecção de programas de qualidade. Mas, afinal, o
que é um programa de qualidade? É aquele que produz resultados úteis e confiáveis na
oportunidade certa. Além disso, é fácil de usar, fácil de corrigir caso ocorra alguma
falha, fácil de modificar quando houver uma alteração de requisitos e passível de
evolução. Opera com economia de recursos, foi desenvolvido no prazo estipulado e a um
custo aceitável.
Há três pré-requisitos para se garantir a qualidade de um programa: especificar com
rigor o problema a ser resolvido, seguir uma metodologia de desenvolvimento e prever
diversos pontos de controle.
Diversas linguagens podem ser usadas para especificar o problema e sua respectiva
solução. Apresentaremos, a seguir, alguns fatores que nos permitem avaliar a qualidade
de uma linguagem de especificação e, dessa forma, selecionar as mais adequadas a cada
caso.
a) Naturalidade: é a proximidade conceitual e de notação entre o problema e a
linguagem;
b) Facilidade para o leitor entender o que foi especificado;
c) Facilidade para o engenheiro de programas construir sua especificação;
d) Facilidade para detalhar itens parcialmente especificados, usando a mesma linguagem;
e) Possibilidade de se construir uma ferramenta de apoio ao uso da linguagem;
f) Formalidade: avalia a notação (sintaxe) e o significado dos elementos da linguagem
(semântica) quanto à precisão e rigor de definição. A formalidade é necessária para
que a especificação seja verificável e não ambígua:
g) Capacidade de autoverificação: facilidades para verificar se a especificação está
intrinsecamente correta;
h) Capacidade de autovalidação: facilidades para validar a especificação,
entendendo-se validação como a avaliação do comportamento do produto do ponto de vista
do usuário. Neste caso o ideal é usar protótipos ou simulação;
i) Suporte à indexação: facilidades para produção de índices remissivos, sumários,
referências cruzadas, etc.
O segundo pré-requisito para garantia da qualidade de um programa é o uso de uma
metodologia. Conceitualmente, metodologia é qualquer roteiro de trabalho que especifique
claramente as atividades que devem ser executadas para cumprir um objetivo, a seqüência
de execução das mesmas, os subprodutos que serão gerados ao longo do processo e
critérios para avaliação e aceitação desses subprodutos.
O terceiro e último pré-requisito é prever pontos de controle. O sucesso da atividade
de controle depende, basicamente, da linguagem de especificação adotada e da metodologia
utilizada. É interessante observar que quanto melhores forem os fatores de qualidade da
linguagem de especificação, maior é a capacidade da equipe de projeto de prever
características do produto acabado e, conseqüentemente, torna-se mais econômico o
desenvolvimento dos programas. Fica sob a responsabilidade da metodologia determinar em
que momentos as atividades de revisão devem ser executadas, e quais características dos
produtos intermediários devem ser avaliadas.
A partir de agora vamos caracterizar a ocorrência de engenharia na atividade de
programação, através do uso de técnicas, ferramentas e linguagens de especificação
que você já conhece, dentro do ciclo de vida de um programa.

FASE 1 - DEFINIÇÃO
Nesta fase, especifica-se o que deve ser feito, as características da
interface do programa com o usuário, as restrições e as expectativas de
qualidade. O produto gerado nesta atividade é chamado de especificação
de requisitos.
Voltando à nossa analogia com a engenharia civil, esta fase equivale ao
projeto arquitetônico, no qual o contratante de um imóvel especifica os
ambientes desejados, características de espaço, acabamento, funcionalidade,
etc. No caso da construção de imóveis, o melhor produto intermediário
que pode ser elaborado nesta fase é a maquete, pois ela permite que cliente
e servidor façam simulações juntos e certifiquem-se de que o produto planejado
atende às expectativas do cliente. Obviamente, existem situações em que
não é econômico construir a maquete. Neste caso, deve-se produzir, pelo
menos, a planta arquitetônica para que os pedreiros saibam como deve ser
a fachada do imóvel.
A maquete de um programa nada mais é do que a interface dele com seu usuário
(telas, relatórios, mensagens, etc.). Portanto, dentro da engenharia de
programas, esta é a fase na qual se constrói um protótipo do programa.
Com as ferramentas de desenvolvimento "for windows" esta atividade
tomou-se brincadeira de criança. Caso o protótipo não seja viável economicamente,
então devemos partir para o equivalente à planta arquitetônica: desenhar
as interfaces.
Warnier propôs uma técnica para modelagem dos resultados esperados de
um programa chamada LDR - Lógica de Definição de Resultados - a qual especifica
um modelo visual da interface e uma especificação estrutural, contendo
elementos seqüenciais, repetitivos e condicionais.
FASE 2 - PROJETO
Nesta fase, especifica-se uma solução economicamente viável para o problema
proposto, isto é, na fase de definição especificamos "o que fazer",
e na fase de projeto especificamos "como fazer".
Pensando em construção civil, esta é a fase em que se define os detalhes
sobre instalação de rede telefônica, rede elétrica, encanamentos, características
da fundação, das principais vigas de sustentação do imóvel, etc. Alguns
produtos intermediários gerados são: planta elétrica, planta da rede telefônica,
cálculos das estruturas, etc.
O projeto de um programa pode gerar como resultado: diagrama de estrutura
modular e sua respectiva especificação detalhada, diagrama de classes
que o programa implementa, entre outros. Algumas das técnicas que podem
ser usadas para cobrir esta fase do ciclo de vida de um programa são:
a) Método de Jackson;
b) LCP - Lógica de Construção de Programas - técnica proposta por Warnier;
c) Projeto Estruturado;
d) Linguagens para detalhamento de especificações estruturais, tais como:
português compacto, português estruturado, pseudocódigo, árvores de decisão,
etc.
e) Diagramas de Eventos.
FASE 3 - CONSTRUÇÃO
Nesta fase, converte-se o projeto em programa propriamente dito. Equivale
a "colocar os pedreiros para trabalhar". Além de técnicas como
programação estruturada e programação orientada a objetos, nesta fase
é necessário o conhecimento de algumas ferramentas, tais como: editores
de programa, compiladores, depuradores, linguagens de programação, geradores
de aplicação, entre outras.
FASE 4 - AVALIAÇÃO
Na realidade, diversas avaliações devem ser feitas ao longo do processo
de construção de um programa. Esta fase trata especificamente da certificação
de que o produto construído atende às expectativas de qualidade do cliente
e é confiável. Equivale à vistoria do imóvel, após a conclusão da obra.
Para cumprir esta fase, a engenharia de programas dispõe de técnicas como
revisão estruturada (walkthrough), onde o produto é submetido a um "checklist"
para certificação de qualidade; testes caixa preta, através da qual prepara-se
uma massa de dados para testar o programa, baseado apenas na funcionalidade
dos seus módulos; testes caixa branca, na qual os casos teste são elaborados
levando em consideração os algoritmos dos módulos.
Medições sistemáticas verificaram que walkthrough é uma técnica bem mais
eficiente que teste caixa branca e que esta é pouca coisa mais eficiente
que teste caixa preta. Na mesma proporção de eficiência, variam os custos
de aplicação dessas técnicas. Portanto, cabe ao engenheiro de programas
identificar a técnica de teste mais adequada a uma situação especifica
e, para isso, ele deve fazer uma análise de custo/benefício: programas
cujas falhas implicam desastres ou custos altos devem ser testados minuciosamente,
programas muito simples não exigem técnicas de teste avançadas.
FASE 5 - USO E MANUTENÇÃO
Nesta fase, o cliente passa a obter os serviços do programa e pode surgir
a necessidade de alterá-lo. Equivale ao proprietário do imóvel recém construído
transferir sua residência para esse local, executando, periodicamente,
serviços de conservação: pintura, ampliação da churrasqueira, construção
de mais uma vaga de garagem, etc.
É importante que se estabeleça um processo formal de controle de alterações
nesta etapa do ciclo de vida do programa, para assegurar sua integridade.
Assim como não podemos congelar uma especificação, não podemos alterá-la
levianamente, pois ela pode servir de insumo para gerar diversos produtos
em paralelo.
Um processo formal de alteração deve prever o registro das solicitações
de manutenção, a avaliação da urgência dessas manutenções, o atendimento
das solicitações e, finalmente, a liberação formal da nova versão do produto.
vidal@celepar.gov.br

|