IV.2 MANUTENÇÃO
O crescimento da demanda de software levou à evolução que hoje pode ser observada na indústria de software, mas também levou a um sério problema: a manutenção das aplicações.
O que é manutenção ?
A manutenção é o conjunto de atividades que visa alterar o software depois que ele foi liberado para o usuário e colocado em operação.
O que pode ser observado na indústria de software é que ela não está preparada para lidar com a atividade de manutenção. Os custos de manutenção tem sido altíssimos: nos anos 80 de 40 a 60 % do orçamento para sofware foi gasto em manutenção e para os anos 90 estima-se que o gasto será de 70 a 80 %.
Além desse há outros custos difíceis de serem medidos como:
- a insatisfação dos usuários com a demora das modificações;
- a redução da qualidade do software, devido às mudanças ocorridas que introduzem erros latentes;
- atrasos no desenvolvimento de novos sistemas.
O que fazer ?
A questão não é acabar com a manutenção, já que ela faz parte do ciclo de vida do software. Os sistemas de software são dinâmicos estando sempre em evolução.
Comparando-se o software com organismos vivos e fenômenos naturais observa-se que:
- Como organismos vivos e fenômenos naturais, projetos de software seguem um ciclo de vida com um rápido crescimento durante a infância, passam por um longo período de maturidade e depois começam um ciclo de decadência. O final do projeto de software é sua saída de produção.
- O período de gestação do projeto de software é proporcional ao tamanho do sistema final; isto é, grandes sistemas têm um longo período antes de serem liberados, como grandes animais tendem a ter longos períodos de gestação.
- A expectativa de vida da aplicação em produção é proporcional ao tamanho. Pequenas aplicações freqüentemente desaparecem de bibliotecas de produção em um ou dois anos, enquanto grandes aplicações tendem a existir durante 10 a 15 anos ou mais. Isto também se assemelha a fenômenos naturais, onde a expectativa de vida dos animais é proporcional à sua massa.
- Uma vez que uma aplicação entra em produção, ela continua a acrescentar novas funções e facilidades num ritmo relativamente constante entre 5 a 15 % de nova funcionalidade por ano. Este fenômeno parece similar ao ganho em massa de vários organismos vivos durante a infância e a adolescência.
- A entropia (medida do caos num sistema) dos sistemas de software aumenta com o tempo. Isto é equivalente a dizer que várias pequenas mudanças gradualmente degradam a estrutura inicial do projeto de software e aumentam sua complexidade. Este fenômeno é verdade em todas as entidades orgânicas naturais, de forma que a sua descoberta em software não é uma surpresa.
- Intervenções preventivas e corretivas podem atrasar o início da entropia de sistemas de software e estender o período antes que a substituição se torne mandatória. Isto é mais ou menos equivalente ao que ocorre em organismos naturais em que a intervenção preventiva e corretiva pode atrasar o início ou agravamento de algumas formas de doenças.
Uma vez que os sistemas evoluem e que a manutenção portanto é necessária, o que fazer para diminuir os custos, o que pode ser melhorado? Porque a manutenção tem sido encarada como um problema ?
Observa-se o seguinte:
- Muito software é gerado sem preocupação com a geração de algo com qualidade e que possa no futuro ser facilmente modificado. Isto torna muito difícil a tarefa da manutenção.
Por exemplo, é muito difícil entender o programa que outros fizeram quando não foram seguidas normas de documentação. Não se pode também esperar que aquele que desenvolveu o programa dará suporte pelo fato de haver muita mobilidade na área.
A necessidade de documentação é um fato. No entanto, é essencial que ela seja facilmente entendida e consistente com o código fonte para ter algum valor.
- A manutenção não tem sido vista como uma tarefa nobre. Muito deste sentimento vem do alto nível de frustração associado com o trabalho de manutenção.
Sem dúvida uma saída para diminuir os problemas da manutenção é melhorar o processo de desenvolvimento no sentido de construir um software com qualidade.
O fato é que atualmente o software que ainda está em operação possui problemas sérios, o que faz aumentar o número de pessoas envolvidas na atividade de manutenção.
Em meados dos anos 80 foi realizada uma pesquisa nos EUA onde se constatou que por volta de 3000 de um total de 7000 profissionais de software estavam envolvidos em atividades de manutenção. Isto significa que 43 % do pessoal estava trabalhando com a manutenção.
Você já considerou a possibilidade de vir a trabalhar em manutenção? É importante, então que se saiba:
-
que tipos de manutenção podem ser realizadas?
-
quais as atividades realizadas durante a manutenção?
-
quais os atributos de um sistema manutenível ?
-
o que é engenharia reversa e reengenharia ?
-
Tipos de manutenção
-
Corretiva: para corrigir um erro detectado.
-
Adaptativa: para adaptar o software por vários motivos, como:
-
surgimento de novas gerações de hardware;
-
aparecimento de novos sistemas operacionais ou novas versões dos atuais;
-
mudanças em equipamentos periféricos e outros elementos do sistema.
-
Aperfeiçoadora: para aperfeiçoar o software devido a recomendações, normalmente dos usuários, de que sejam acrescentadas novas capacidades, modificadas funções existentes e realizadas melhorias gerais.
-
Preventiva: visa prevenir erros. Neste caso o software é alterado para melhorar a futura manutenibilidade. Esta atividade ainda é raramente realizada.
Esses tipos de manutenção refletem características dos sistemas de software:
-
Mesmo após a liberação do software para uso, ele pode conter erros, ou seja, pode não estar atendendo completamente aos requisitos estabelecidos.
-
Ocorrem mudanças externas ao longo do tempo em que o software está em operação. Ex: A introdução de um novo sistema operacional
-
Sistemas de software são dinâmicos. Novas necessidades estão constantemente surgindo.
-
Atividades realizadas durante a manutenção
As atividades realizadas devem estar de acordo com a Gerência de Configuração proposta. A Gerência de Configuração de Software engloba o conjunto de atividades de acompanhamento e controle de modificações durante todo o ciclo de vida.
Assim como o desenvolvimento do software, a manutenção inclui além dos aspectos técnicos, os gerenciais e os de qualidade. Desta forma quanto mais bem definidos estiverem estes aspectos, melhor será conduzido o processo de manutenção.
Uma atividade que deveria ser realizada durante a manutenção é a obtenção de informações para posterior avaliação. Estas informações representam medidas como por exemplo, o tempo gasto para reconhecimento de um problema, o tempo gasto para realizar a modificação, o tempo para realização de testes, etc. São úteis para avaliar a qualidade do software com relação à manutenção, a eficiência de métodos usados, etc, além de possibilitar ao gerente ter ao longo do tempo uma série de dados concretos de forma a avaliar o efeito de medidas tomadas para melhorar a manutenibilidade.
c) Atributos de um sistema manutenível
Manutenibilidade pode ser definida como a facilidade com a qual o software pode ser entendido, corrigido, adaptado e/ou melhorado e testado.
Para isto o software deve ser modular, consistente, legível, conciso (expressar algo em poucas palavras), auto-descritivo, comunicativo, acessível e extensível.
É difícil especificar o nível de manutenibilidade desejado para um software. A especificação dos níveis requeridos de coesão e acoplamento no projeto é o que há de melhor para se quantificar a manutenibilidade.
-
Coesão poderia ser expressa como a mínima coesão aceitável para cada módulo e a mínima aceitável considerando-se a média de todos os módulos no projeto.
-
Acoplamento poderia ser expresso como o máximo aceitável para qualquer par de módulos e o máximo aceitável para todos os pares de módulos do projeto.
Para os demais casos em que é difícil quantificar um valor, como por exemplo, a legibilidade, uma idéia é declarar na especificação de requisitos que devem ser seguidas determinadas normas pré-definidas.
d) Engenharia Reversa e Reengenharia
De forma a realizar manutenções preventivas são utilizadas a engenharia reversa e a reengenharia.
Engenharia Reversa: este termo tem suas origens no mundo do hardware. Uma empresa desmonta um hardware comercializado, num esforço para entender os segredos de projeto e manufatura do concorrente.
Em software a idéia é semelhante com a diferença que na maioria dos casos o sistema que passará pela engenharia reversa não é do concorrente e sim da própria empresa. São sistemas obscuros e a engenharia reversa terá como objetivo extrair informações do código numa tentativa de gerar uma representação em um nível de abstração mais alto do que o código fonte.
Reengenharia: além de recuperar informações de projeto de um software existente, usa essas informações para alterar ou reconstituir um software existente de forma a melhorar sua qualidade. O desenvolvedor pode também adicionar novas funções ou melhorar o desempenho global.
Dostları ilə paylaş: |