Engenharia de Programas - Uma Visão Geral
Autor: Vidal Martins - GPT
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.
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.