Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo

Este artigo foca na discussão sobre as dificuldades encontradas na realização das atividades de manutenção de software. Para isso, apresenta a realização de um estudo de observação que foi conduzido com o objetivo de verificar os problemas de manutenção de software existentes em uma organização empenhada no desenvolvimento de software comercial.


Para que serve

Este texto é indicado para aqueles profissionais que atuam com manutenção de software no seu dia-a-dia e que desejam entender melhor os atuais desafios em torno desse tema.


Em que situação o tema é útil

A manutenção de software é hoje um assunto presente em organizações que desenvolvem e mantém software. Isso se deve à necessidade de sempre ajustar e melhorar o produto de software de acordo com as mais diversas necessidades. Diante desse fato, entender o significado e abrangência do termo manutenção de software pode auxiliar organizações e profissionais interessados no tema a melhor conduzir seus esforços quando precisam manter seus produtos.

O desenvolvimento de qualquer software, exceto programas muito simples, é uma tarefa bastante complexa. Esse fato se tornou evidente com a “crise de software”, o que originou o conceito de engenharia de software como uma abordagem sistemática, disciplinada e quantificável para o desenvolvimento, manutenção e descarte de software.

A engenharia de software surgiu inicialmente mais como uma promessa do que uma realidade. De fato, muitos dos problemas ligados ao desenvolvimento e manutenção de software continuam sem solução, apesar de muitos conceitos terem evoluído.

Entender o que significa manutenção de software, e principalmente a abrangência do significado do termo, constitui passo fundamental para o estudo e aprofundamento de soluções para os problemas atrelados a essa tarefa.

Neste contexto, este artigo foca na discussão sobre as dificuldades encontradas na realização das atividades de manutenção de software. Para isso, apresenta a realização de um estudo de observação que foi conduzido com o objetivo de verificar os problemas de manutenção de software existentes em uma organização empenhada no desenvolvimento de software comercial. Além disso, apresenta uma comparação entre os problemas de manutenção de software atuais, identificados pelo estudo de caso, e aqueles registrados no passado, buscando inferir algum padrão de evolução nos mesmos.

Antes de iniciarmos a discussão sobre as dificuldades e problemas encontrados nas atividades de manutenção de software, iremos apresentar rapidamente algumas definições associadas à área de manutenção.

Atividade de Manutenção de Software

Este tópico tem por objetivo destacar as características, tipos e desafios para a manutenção de software. Trata-se de um tópico importante para esclarecer alguns pontos pertinentes ao assunto que serão considerados ao longo deste artigo.

Definições

A atividade de manutenção de software é caracterizada pela modificação de um produto de software já entregue ao cliente, para a correção de eventuais erros, melhora em seu desempenho, ou qualquer outro atributo, ou ainda para adaptação desse produto a um ambiente modificado.

Embora a definição trate genericamente qualquer produto de software, existem diferenças entre a manutenção de softwares com propósitos distintos.

Uma primeira classificação representa aqueles softwares construídos com base em uma especificação rígida e bem definida, cujos resultados esperados são bem conhecidos. Por exemplo, um software construído para realizar operações com matrizes (adição, multiplicação e inversão). Nesse tipo de software, uma vez que tenha sido construído considerando a correta implementação do método, dificilmente haverá a necessidade de manutenções.

Já em uma segunda classificação, são agrupados os softwares que constituem implementações de soluções aproximadas para problemas do mundo real, uma vez que soluções completas somente são conseguidas na teoria nesses casos. Como exemplo, pode-se citar um jogo de xadrez. Embora suas regras sejam bem definidas, não é possível construir um software que calcule a cada passo todos os possíveis movimentos de peças do tabuleiro, de forma a determinar o melhor movimento. Isso porque o número de movimentos possíveis é muito grande para ser calculado em um intervalo de tempo relativamente curto. A técnica utilizada para desenvolver esse tipo de solução baseia-se em descrever o problema de forma abstrata e então definir os requisitos de software a partir dessa abstração.

Percebe-se que esse tipo de sistema já abre espaço para diferentes interpretações por parte do desenvolvedor, o que tende a produzir software com maior necessidade de manutenção do que quando comparado aos da classificação anterior. Por considerar uma abstração para especificação de requisitos, a necessidade de mudança pode aparecer caso a abstração mude, na medida em que um maior entendimento do problema seja alcançado.

Finalmente, uma terceira e última classe de softwares considera mudanças no ambiente onde o software vai ser utilizado, característica não existente nas duas classificações anteriores.

Um software integrante da terceira classificação corresponde àquele criado com base em um modelo dos processos abstratos envolvidos no sistema, e precisará mudar sempre que ocorrer mudanças nesses modelos, sendo, portanto, parte do ambiente que ele modela. Um exemplo desse tipo de software seria aquele que apresenta informações da economia de um país. À medida que a economia passa a ser mais bem compreendida, o modelo muda e com ele a abstração do problema, causando uma necessidade inevitável de manutenção no software. Esse tipo de software, comumente encontrado no dia-a-dia das organizações, tem interesse particular neste trabalho.

Além de considerar tipos diferentes de software, o processo de manutenção não corresponde a uma atividade isolada. Durante a sua execução, diferentes partes precisam interagir de forma que os objetivos da manutenção sejam entendidos e os resultados esperados alcançados. Essas partes são:

Organização Cliente: essa organização corresponde ao adquirente do software, conforme definido pela norma ISO/IEC 12207. Isso significa a organização que possui o software e requisita o serviço de manutenção.

Mantenedor: trata-se da organização que oferece o serviço de manutenção.

Usuário: representa a organização ou pessoa que utiliza o software em questão, valendo-se de suas funcionalidades para automatizar e facilitar tarefas.

Naturalmente, existe um relacionamento entre essas partes e a constituição de um fluxo para os pedidos de manutenção, conforme é esquematizado na Figura 1.

Figura 1. Fluxo envolvido na manutenção de software.

A organização solicitante deve possuir algum responsável pela solicitação de manutenção, que será encarregado de verificar os requisitos e informar o mantenedor. Esse responsável deverá considerar os erros e dificuldades apontadas pelo help-desk, que corresponde ao departamento diretamente encarregado do diálogo com os usuários.

Do lado do mantenedor, a organização que presta o serviço deve possuir alguém responsável por avaliar as requisições, julgando-as apropriadas ou não para os objetivos do software e da organização solicitante. Uma vez que os pedidos de manutenção são aceitos, deve existir alguém responsável por estabelecer um cronograma de entrega, que deverá considerar as prioridades e interesses de ambas as partes. Esse cronograma deverá ser seguido pela equipe de manutenção, que compreende o pessoal envolvido diretamente em atender às solicitações.

Finalmente, o papel do usuário consiste em utilizar o software reportando problemas para o help-desk, que por sua vez informará o responsável pelas solicitações de manutenção, fechando o ciclo.

Tipos de Manutenção

As ações ligadas à atividade de manutenção de software foram classificadas de acordo com sua natureza em três categorias: corretivas, adaptativas e perfectivas.

Manutenções do tipo corretivas visam corrigir defeitos de funcionalidade, o que inclui acertos emergenciais de programa. Pfleeger (2001) expõe um exemplo desse tipo de manutenção, que consiste em um usuário apresentando um problema de impressão em um relatório. O número de linhas impresso por folha é muito grande, o que causa sobreposição de informações. O problema foi identificado como uma falha no driver da impressora, provocando a necessidade de se alterar o menu do relatório para aceitar um parâmetro adicional que determina o número máximo de linhas impressas por folha.

Manutenções do tipo adaptativas referem-se a adequar o software ao seu ambiente externo. O exemplo apontado por Pfleeger (2001) ilustra bem essa categoria. Suponha um gerenciador de banco de dados, que faz parte um sistema maior de hardware e software. Em uma atualização do gerenciador, os programadores perceberam que as já existentes rotinas de acesso a disco precisavam agora de mais um parâmetro adicional. Essa manutenção corresponde a uma manutenção adaptativa, uma vez que teve por finalidade adequação do software ao seu ambiente e não a correção de um defeito.

Manutenções do tipo perfectivas têm por objetivo acrescentar novos recursos de funcionalidade ao software, normalmente em razão de solicitações dos usuários. Significam ainda re-projetar partes de um software, de forma a tornar mais simples a compreensão e utilização do mesmo. Como exemplo, pode-se citar o pedido do usuário por um novo relatório com informações que até então não podiam ser obtidas do banco de dados.

...
Quer ler esse conteúdo completo? Tenha acesso completo