Pesquisa: Ensino: Diversos:

Manutenção de Software

O Cabo Bojador da Engenharia de Software

Imagem do cabo Bujador Figura 1. O Cabo Bojador

Quando os portugueses, impulcionados pelo Infante D. Henrique, partiram à descoberta das costas da África e do caminho pelas Indias, ficaram impossibilitados durante muitos anos de navegar além do Cabo Bojador (Figura 1). Várias expedições foram montadas que todas foram postas em xeque por este cabo. Acreditava-se que o Cabo Bojador guardava o fim do mundo e que quanto mais se navegava ao sul, mais as águas iriam ficar quentes a ponto de queimar as embarcações, monstros estariam aguardando os aventureiros, Deus não quiria que os homens navegassem além deste ponto. Foram necessárias 15 expedições e a corragem de Gil Eanes para, em 1434, passar o Cabo Bojador e descobrir que o mar além deste cabo era o mesmo que aquem. O maior desafio do Cabo Bojador tinha sido o medo que os navegadores portugueses tinham dele.

A evolução de sofware sofre de um mal parecido ao do Cabo Bojador onde a percepção que se tem dela é um fator importante na incapacidade de tratar ela corretamente. Se os navegadores portugueses tinham medo do Cabo Bojador, os engenheiros de software desprezam a evolução de software, deixado-a nas mãos de profissionais menos experientes, algumas vezes tratando-a como uma punição ou pelo menos como uma atividade de pouca visibilidade e escaças possibilidades de progressão professional.

Em consequência, projetos de evolução de software são, muitas vezes, mal planejados, sendo mal executados, não acompanhados e não controlados. Como resultado, tem se projetos difíceis e arriscados que prejudicam a qualidade dos sistemas, que, por sua vez, dificultam as próximas evoluções. As equipes são pouco motivadas e cada projeto gera um desgate inútil.

O primeiro passo para melhorar a evolução de software é convencer-se da sua importância e de que, na verdade, é uma atividade benéfica que aponta para um sucesso dos sistemas de software. O objetivo deste capítulo é precisamente enfatisar esse ponto e vencer os aprioris negativos que a evolução de software sofre.

Um exemplo que illustra a importância da manutenção de software pode ser encontrado na importância que tem a linguagem Cobol, depois de meio-século de existência.

Um Problema Cultural

Existe em torno da evolução de software idéias falsas que são ao mesmo tempo as raizes e os frutos da pouco consideração que se tem por ela.

Por exemplo, estudos mostraram que a manutenção de software é considerada uma atividade que oferece menos oportunidade de promoção profissional e como pessoalmente menos satisfatória.

Talvez pode se rastrear as origens desse problema na origem da engenharia de software: o processo em cascata.

Não precisa ser assím. Acho que a manutenção de software não é intrinsicamente mais chata que o desenvolvimento e que o problema é primeiramente cultural. Por exemplo, é uma idéia falsa, communamente aceita, que manutenção de software equivale a correção de erros.

Foco Excessivo no Desenvolvimento de Software

gráfico da evolução do custo da manutenção Figura 2. Parte da manutenção no custo total de um software. Fonte: Pigoski, 1997.

Estudos realizados ao longo dos anos sempre apontam para um custo crescente da evolução de software no ciclo de vida dos sistemas. A Figura 2 resume os resultados de estudos que comprovaram que a parte da evolução de software no custo total (durante toda sua vida) de um sistema vai sempre crescendo, tendo provavelmente passado agora da casa dos 90%. Ou seja, o custo de desenvolvimento de um novo sistema passou a ser insignificante perante o custo total que este sistema irá requerer durante sua vida. A explicação é extremamente simples, sistemas que foram desenvolvidos nos anos 70 ou 80 continuam ativos, sendo mantidos. Por tanto, para esses sistemas, o custo do primeiro desenvolvimento, fixo, representa uma parte cada vez menor do custo total que não para de crescer a medida que o sistema continua ativo, sendo usado e modificado. Cada vez que se desenvolve um novo sistema, acrescenta-se mais um elemento ao enorme leque de sistemas sendo mantidos.

Em engenharia de software, muitos esforços são dedicados à melhoria dos métodos de desenvolvimento. Sempre se busca melhores técnicas de estimativa de projeto, planejamento dos projetos de desenvolvimento, melhor controle e acompanhamento da qualidade do desenvolvimento. Um objetivo implícito desta busca parece ser que com um melhor desenvolvimento, muitos dos problemas da evolução de software serião resolvidos: Com um bom desenvolvimento teriamos menos manutenção

Esta suposição é triplamente equivocada: Primeiro porque ela é baseada na falsa idéia de que a manutenção de software é um problema; segundo porque não pode mudar nada no enorme leque de sistemas já existentes; e terceiro porque quaisquer que sejam os progressos no desenvolvimento de software, a manutenção sempre será atrasada em relação a estes.

Em conclusção

A manutenção de software é uma atividade extremamente importante na prática das organizações de software correpsondendo a 90% ou mais de toda atividade de programação de sistemas.

Apesar desta importância na realidade, é uma atividade ainda mal vista pelos profissionais, pouco ensinada, pouco estudada e geralmente não entendida. A realidade é de uma atividade que oferece menos perspectivas de evolução profissional ou vista até como uma punição.

Em engenharia de software, a maioria dos esforços se concentra em tentar melhorar as condições de desenvolvimento de software com, possivelmente, dois objetivos: tentar diminuir as necessidades de manutenção (presumadamente corretiva) e focar numa atividade que tem mais visibilidade. Essa estratégia é equivocada por vários motivos:

  • A correção de erros representa, tipicamente, uma pequena parte de todas manutenções executadas num sistema de software durante sua vida;
  • A evolução dos sistemas de software é uma realidade intrínsica devida às mudanças que acontecem no mundo real e não a caracteristicas internas dos sistemas;
  • A melhoria do desenvolvimento só pode ter impacto sobre sistemas no futuro, deixando de lado o enorme leque de sistemas existentes (principalmente escritos em Cobol);
  • As realidades do desenvolvimento e da evolução de software são diferentes e soluções criadas para uma nem sempre se adequam à outra.

Esse texto tem como principal objetivo explicitar esses fatos e convencer o leitor da necessidade de mudar, primeiramente, a mentalidade dos profissionais de Tecnologia de Informação e dos usuários de software para começar a procurar soluções, muitas vezes existentes, às dificuldades encontradas.


Home Page/Nicolas Anquetil

Home Page
Nicolas Anquetil

Ultima atualização/Last updated: 12/08/2008