You are on page 1of 10

MANUTENO DE SOFTWARE

Allan Dalmarco1 Rodrigo Reno Strey2 RESUMO Este artigo tem como objetivo fazer uma abordagem sobre a manuteno de software, seus desafios, as dificuldades encontradas durante o processo. Com base em pesquisa bibliogrfica, o artigo demonstra as vantagens do uso de tcnicas e ferramentas, da importncia do projeto prever a manuteno e da clarificao dos papis e responsabilidades. Aborda os principais conceitos relacionados manutenibilidade e rejuvenescimento de software. Palavras-chave: Engenharia de Software; Manuteno de Software; Manutenibilidade; Rejuvenescimento de Software. 1 INTRODUO Segundo Pfleeger (2004, p. 379) o desenvolvimento do sistema est completo quando ele pode ser considerado operacional, isto , quando o sistema est sendo utilizado pelos usurios em um ambiente real de produo. Qualquer modificao no sistema depois que ele estiver em produo considerada como manuteno. Taute (1983 apud PETERS; PEDRYCZ, 2001) afirma que a manuteno de sistema cclica. A fase de manuteno nos grandes sistemas de software tende a ser mais duradoura do que a combinao das fases de ciclo de vida anteriores. Von Mayr-Hauser (1990 apud PETERS; PEDRYCZ, 2001) observa que os produtos de software normalmente possuem erros que so detectados durante a manuteno. A correo destes erros resulta na modificao e expanso da aplicao original, alterando os requisitos exigindo adaptao do produto de software, que consequentemente, evoluem (PETERS; PEDRYCZ, 2001). A engenharia de software tem como objetivo desenvolver tcnicas que definem um problema, projetar um sistema como uma soluo, implementar um conjunto correto e eficiente de programas e test-los objetivando identificar possveis defeitos, em outras palavras, produzir um produto confivel, livre de defeitos, funcionando de acordo com a especificao (PFLEEGER, 2004). Paula Filho (2001) afirma que nem mesmo os melhores processos de desenvolvimento de produtos de software impedem que alguns defeitos sejam descobertos pelos usurios. O nmero de erros a serem removidos durante a utilizao do software maior quando os processos de desenvolvimento no esto definidos ou os procedimentos de gesto de qualidade so relaxados. Este artigo pretende apresentar a partir de pesquisa bibliogrfica, os desafios da manuteno de software, abordando quais so as atividades e pessoas envolvidas na
1 2

Especialista em Gesto de Desenvolvimento de Software allan.dalmarco@gmail.com Mestre em Cincias da Computao streyrs@gmail.com

2 manuteno, principais dificuldades encontradas no processo, incluindo custos, quais as tcnicas e ferramentas sugeridas pela engenharia de software que podem contribuir na melhoria da qualidade de um sistema durante sua evoluo e apresentar o conceito de rejuvenescimento de software. 2 MANUTENO DE SOFTWARE Pressman (2001) nos apresenta um cenrio bastante tpico: uma aplicao serviu s necessidades do negcio de uma empresa por vrios anos, passando por diversas correes, adaptaes e aperfeioamentos, a equipe envolvida sempre trabalhou com a melhor das intenes, porm boas prticas de engenharia de software sempre foram deixadas de lado por diversos aspectos. A aplicao torna-se instvel e apesar de funcionar, cada modificao efetuada resulta em efeitos colaterais srios e inesperados. Mas o software precisa continuar evoluindo. A manuteno de software existente pode ser responsvel por mais de 60% de todo o esforo dispendido por uma organizao de desenvolvimento e a porcentagem pode crescer medida que mais software produzido (MANNA, 1993 apud PRESSMAN, 2001, p. 786). Manuteno de software no se resume resoluo de defeitos (PRESSMAN, 2001). Segundo Pfleeger (2004), as atividades de manuteno so semelhantes s atividades de desenvolvimento, que incluem a anlise de requisitos, avaliao do sistema e projeto do programa, programao e reviso de cdigo, teste de modificaes e atualizao de documentao. Sendo assim, os papis das pessoas que realizam a manuteno so semelhantes. Os programadores que participam da manuteno desempenham um papel muito maior do que no desenvolvimento, face exigncia de profundo conhecimento da estrutura e do contedo do cdigo a ser modificado. Os quatro aspectos principais da evoluo do sistema focados simultaneamente pela manuteno, apresentados por Pfleeger (2004) so: 1. manter o controle sobre as funes do dia-a-dia do sistema 2. manter o controle sobre as modificaes do sistema 3. aperfeioar as funes aceitveis j existentes 4. tomar medidas preventivas para que o desempenho do sistema no diminua para nveis inaceitveis. 2.1 TIPOS DE MANUTENO DE SOFTWARE Pressman (2001), Pfleeger (2004) e Paula Filho (2001) nos apresentam quatro diferentes atividades de manuteno: manuteno corretiva, manuteno adaptativa, manuteno perfectiva ou de melhoria e manuteno preventiva ou reengenharia. A manuteno corretiva consiste na remoo dos defeitos remanescentes aps o fim do projeto de desenvolvimento (PAULA FILHO, 2001), medida que as falhas ocorridas so reportadas equipe de manuteno, que encontra a causa da falha, faz as correes e mudanas

3 nos requisitos, no projeto, no cdigo, no conjunto de testes e na documentao. Geralmente o reparo inicial temporrio (PFLEEGER, 2004). A manuteno adaptativa consiste em pequenas expanses funcionais e alteraes para melhoria de desempenho, podendo ser feitas para adaptar o produto a variaes nos processos de negcio (PAULA FILHO, 2001), requeridas pela introduo de modificaes em outros pontos do sistema para que o sistema continue funcionando medida que evolui, no caracterizando uma correo de erro (PFLEEGER, 2004). A manuteno perfectiva consiste em realizar mudanas para melhorar alguns aspectos do sistema, mesmo quando nenhuma das mudanas for conseqncia de defeitos. Este tipo de manuteno responsvel pela introduo de melhorias solicitadas pelos usurios, resultando na alterao de requisitos. Pode resultado da busca de oportunidades de aperfeioamento atravs da reviso dos documentos, do projeto, do cdigo e dos testes (PFLEEGER, 2004). A manuteno preventiva consiste em modificar aspectos do sistema objetivando a preveno de falhas. Este tipo de manuteno rotineiro em outras reas de engenharia, mas raramente praticado com produtos de software. este tipo de manuteno que procura localizar os defeitos antes que se manifestem aos usurios. Trata-se da melhoria do desenho e da implementao sem alterar os requisitos. Tambm conhecida como reengenharia de software. (PRESSMAN, 2001). A figura 1 demonstra a distribuio do esforo por tipo de manuteno.

Preventiva 4% Corretiva 21%

Perfectiva 50%

Adaptativa 25%

Figura 1 distribuio do esforo por tipo de manuteno.


Fonte: Adaptado de Pfleeger (2004)

2.2 PAPIS E RESPONSABILIDADES NA MANUTENO DE SOFTWARE Segundo Pfleeger (2004), como as atividades de manuteno so semelhantes s atividades de desenvolvimento, os envolvidos no processo de manuteno analistas, programadores e projetistas tambm tem papis semelhantes.

4 Dentre os diversos papis apresentados por Paula Filho (2001), destacam-se os representantes dos usurios, os gerentes de produto e os proprietrios dos itens analistas, programadores, projetistas, testadores. Segundo Paula Filho (2001), os papis citados e suas responsabilidades so descritos a seguir. O gerente de produto responsvel pela manuteno de um produto ou um grupo de produtos relacionados e, dentre outras atribuies, deve tomar as providncias necessrias para que sejam respeitados os procedimentos de manuteno. O representante dos usurios poder ser um contato dentro do cliente ou um membro da equipe do fornecedor, da rea de contato com clientes e usurios, normalmente a rea de suporte ao cliente. So responsveis por identificar as notificaes de problemas, reportadas pelos usurios, analisar as notificaes, verificando se requer manuteno, assistncia ou outro tipo de providncia, e caso for confirmado, formalizar a solicitao conforme descrito no processo de manuteno. Sob responsabilidade dos proprietrios dos itens esto: a emisso do parecer sob as solicitaes, analisar, desenhar, implementar, testar e documentar as modificaes necessrias e reportar ao gerente do produto o que foi feito. Porm, nem sempre a equipe que desenvolve um sistema fica responsvel pela manuteno, deixando o processo sob responsabilidade de uma equipe de manuteno separada, onde so encontrados aspectos positivos e negativos (PFLEEGER, 2004). Quando a equipe de desenvolvimento a mesma que far a manuteno, existe a tendncia da preocupao em facilitar futuras alteraes, mantendo a documentao atualizada. Porm, o excesso de confiana do conhecimento do sistema pode resultar no desleixo em relao documentao. E isto pode resultar na necessidade de mais pessoas ou recursos para resolver um problema, acarretando um longo intervalo entre a ocorrncia do problema e a correo (PFLEEGER, 2004). Uma nova equipe de manuteno pode ser mais objetiva do que os desenvolvedores, pois podem distinguir melhor o modo como o sistema deve funcionar do modo como ele realmente opera. Se a equipe de desenvolvimento souber que outras pessoas ficaro responsveis pela manuteno, haver maior cuidado com os padres de documentao e programao. Quanto s atividades da equipe descritas por Pfleeger (2004) deve-se: entender o sistema; localizar informaes na documentao do sistema; manter a documentao do sistema atualizada; ampliar as funes existentes, a fim de incluir novos requisitos ou requisitos modificados; 5. adicionar novas funes ao sistema; 6. descobrir a fonte das falhas ou problemas do sistema; 7. localizar e corrigir defeitos; 8. responder a questes sobre como o sistema funciona; 9. reestruturar o projeto e os componentes do cdigo; 10. reescrever o projeto e os componentes do cdigo; 11. excluir o projeto e os componentes do cdigo que no so mais teis; 1. 2. 3. 4.

5 12. gerenciar as mudanas que so feitas no sistema. Os membros da equipe so responsveis ainda por compreender o problema apresentado pelo usurio, traduzindo em uma solicitao que deve incluir uma descrio de como o sistema funciona, como deveria funcionar sob o ponto de vista do usurio e o que ser necessrio alterar para contemplar estas mudanas. Quando tudo foi concludo, se necessrio, a equipe treinar os usurios novamente, caracterizando a manuteno como uma interao entre pessoas e tambm com software e hardware (PFLEEGER, 2004). 2.3 DIFICULDADES E PROBLEMAS NA MANUTENO DE SOFTWARE Pfleeger (2004, p. 388) afirma que a manuteno de um sistema difcil. E essa dificuldade causada por diversos fatores. Paula Filho (2001) nos apresenta a formao de equipes como um problema usual nas atividades de manuteno de software, ou esta atividade disputa o pessoal mais qualificado com a atividade de desenvolvimento ou passa a ser desempenhada por uma equipe menos experiente e menos valorizada. O problema torna-se mais srio ainda quando o produto no foi desenvolvido segundo padres adequados de desenho e implantao, com documentao de sistema precria ou inexistente, dificultado ainda mais a manuteno. Pfleeger (2004) subdivide os problemas com pessoal em: entendimento limitado, prioridades de gerenciamento e nimo. Em relao ao entendimento limitado, Parikh e Zvegintzov (1983 apud PFLEEGER, 2004) relatam que 47% do esforo de manuteno so usados no entendimento do software a ser modificado. Lientz e Swanson (1981 apud PFLEEGER, 2004) descobriram que mais de 50% dos problemas enfrentados pelos programadores em relao manuteno vem da falta de habilidade ou de entendimento do usurio. Somado a tudo isto ainda preciso acrescentar as distraes nos ambientes de trabalho. Quanto s prioridades de gerenciamento encontram-se duas situaes problemticas. Uma delas ocorre quando os gerentes estimulam os responsveis pela manuteno a reparar um sistema antigo enquanto os clientes pedem novas funcionalidades ou at mesmo um novo sistema. A outra decorrente da pressa em disponibilizar um produto para o mercado, levando os desenvolvedores a implementar uma modificao de forma rpida, ineficiente e sem ter sido adequadamente testada, em vez de utilizar o tempo necessrio para seguir as boas prticas de engenharia de software. O resultado um produto com vrios remendos, difcil de ser entendido e alterado (PFLEEGER, 2004). Em relao ao nimo, os estudos de Lientz e Swanson (1981 apud PFLEEGER, 2004) indicam que 11,9% dos problemas so decorrentes da falta de nimo e da baixa produtividade, devido freqente classificao da atividade de manuteno como trabalho de segunda classe. Alm deste fator alguns programadores precisam trabalhar em vrios projetos ao mesmo tempo, resultando num conflito de prioridades. Segundo Pfleeger (2004), 8 % dos problemas resultado da falta de concentrao. Alm dos fatores humanos que causam problemas no processo de manuteno tm-se os problemas tcnicos, que podem ser conseqncia do trabalho dos desenvolvedores e mantenedores, dos paradigmas ou processos especficos adotados durante a implementao.

6 Um projeto inconsistente ou inflexvel pode exigir mais tempo para ser entendido, modificado e testado. Em geral, especificaes de projeto inadequadas, programas e documentao de baixa qualidade representam quase 10% do esforo de manuteno. Dificuldades para a realizao de testes provenientes de falta de tempo, da falta de dados apropriados ou da incapacidade de prever os efeitos das mudanas nos requisitos e no cdigo tambm so causas de problemas de manuteno (PFLEEGER, 2004). Outro fator a necessidade de conciliao. Entre os diversos conflitos que devem ser resolvidos pela equipe de manuteno podemos citar o conflito entre os princpios da engenharia de software e as questes de convenincia e de custo, principalmente quando a soluo deve ser obtida imediatamente (PFLEEGER, 2004). Todos estes fatores contribuem para o alto custo da manuteno de software, segundo Pfleeger (2004) existem muitos outros fatores que afetam o esforo necessrio manuteno de software. Entre eles, se destacam o tipo de aplicao, a novidade do sistema, a rotatividade e disponibilidade do pessoal de manuteno, a durao da vida til do sistema, a dependncia de um ambiente que se modifica, as caractersticas de hardware, a qualidade do projeto, a qualidade do cdigo, a qualidade da documentao e a qualidade dos testes. Osborne e Chikofsky (1990 apud PRESSMAN, 2001, p. 786) clarificam a necessidade de tanta manuteno de software e porque necessrio tanto esforo:
Grande parte do software do qual dependemos atualmente tem em mdia de 10 a 15 anos. Mesmo quando esses programas foram criados, usando as melhores tcnicas de projeto e codificao conhecidos na poca [e muitos no o foram], o tamanho do programa e o espao de armazenamento eram preocupaes importantes. Depois migraram para novas plataformas, foram ajustados para modificaes na tecnologia de mquina e de sistemas operacionais e foram melhorados para satisfazer a novas necessidades do usurio tudo sem preocupao suficiente com a arquitetura global. O resultado so estruturas mal projetadas, mal codificadas, de lgica pobre e mal documentadas em relao aos sistemas de software, para os quais somos chamados a fim de mant-los rodando...

2.4 MANUTENIBILIDADE DE SOFTWARE Segundo McCall et al. (1977 apud Pressman, 2001, p. 501) manutenibilidade o esforo necessrio para localizar e consertar um erro num programa. Pressman (2001, p. 92) afirma que manutenibilidade a facilidade com que um programa pode ser corrigido, se um erro encontrado, adaptado, se seu ambiente se modifica, ou aperfeioado, se o cliente deseja uma modificao dos requisitos. Idealmente, os produtos de software deveriam ser projetados tendo em vista a manutenibilidade (PETERS; PEDRYCZ, 2001, p. 572). A documentao do software deve permitir a correo e o reuso de cdigo durante o seu aprimoramento e eliminar a necessidade de engenharia reversa. Segundo Pfleeger (2004) a facilidade de manuteno no est restrita ao cdigo, ela inclui os documentos de especificao, de projeto e do plano de testes. Peters e Pedrycz (2001) propem uma medida de manutenibilidade utilizando estimativas da quantidade mdia de dias necessrios para cada uma das tarefas de manuteno.

7 Utilizando a evidncia emprica sobre a distribuio das tarefas de manuteno, onde a manuteno corretiva tem peso igual 0.2, a manuteno corretiva tem peso igual a 0.25 e a manuteno perfectiva tem peso igual 0.55, obtemos a seguinte medida de manuteno: Manutenibilidade = 0.2 (quantidade mdia de dias para corrigir o cdigo) + 0.25 (quantidade mdia de dias para adaptar o cdigo) + 0.55 (quantidade mdia de dias para aprimorar o cdigo) Pfleeger (2004, p. 395) ainda nos lembra que existe uma conexo ntida e intuitiva entre produtos mal estruturados e mal documentados com sua manutenibilidade. 2.5 TCNICAS E FERRAMENTAS PARA MANUTENO Segundo Pfleeger (2004), o esforo de manuteno ser menor quando o sistema for construdo com qualidade desde o incio. Projetar e estruturar corretamente um sistema pronto no to produtivo como constru-lo novamente, porm existem vrias tcnicas que aprimoram a qualidade e a compreenso. Uma das tcnicas a gerncia de configurao, responsvel por manter o registro das mudanas e seus efeitos em outros componentes do sistema. Quanto mais complexo for o sistema, mais componentes sero afetados por modificaes, tornando a gerncia de configurao fundamental na fase de manuteno. Para facilitar a o trabalho da equipe de gerncia de configurao necessrio estabelecer um grupo de controle de configurao com o objetivo de supervisionar o processo. Ele deve ter representantes de todas as partes interessadas e seu principal papel controlar as alteraes. Cashman e Holt (1980 apud PFLEEGER, 2004) sugerem que a equipe de gerncia de configurao sempre deve saber as respostas das seguintes perguntas: Sincronizao: quando a alterao foi feita? Identificao: quem fez a alterao? Nomeao: quais os componentes do sistema foram alterados? Autenticao: a alterao foi feita corretamente? Autorizao: quem autorizou que a alterao fosse feita? Acompanhamento: quem foi notificado sobre a alterao? Cancelamento: quem pode cancelar o pedido de alterao? Delegao: quem responsvel pela alterao? Avaliao: qual a prioridade da alterao?

Outra tcnica a ser aplicada a anlise de impacto das mudanas, que a avaliao dos riscos associados com a alterao a ser realizada, abrangendo estimativas dos efeitos nos recursos, esforo e cronograma. Pfleeger (2004) nos apresenta alguns tipos de ferramentas que auxiliam na manuteno de software. Dentre eles esto os editores de texto, comparadores de arquivos , compiladores e linkers, ferramentas de depurao, geradores de referncia cruzada, analisadores estticos de cdigo e repositrios de gerncia de configurao. Alm destas tcnicas e ferramentas, existem fatores de manutenibilidade que, segundo Paula Filho (2001), facilitam a manuteno:

8 disponibilidade de pessoal qualificado; desenho adequado e bem-documentado; uso de linguagens padronizadas; uso de ambientes padronizados de desenvolvimento e operao; documentao padronizada; disponibilidade de casos e procedimentos de teste; ferramentas e procedimentos padronizados de gesto de configurao; existncia de um processo de manuteno definido.

2.6 REJUVENESCIMENTO DE SOFTWARE O rejuvenescimento de software trata o desafio da manuteno no sentido de aumentar a qualidade de todo um sistema existente (PFLEEGER, 2004, p. 405). Ele responsvel pela obteno de informaes adicionais ou reformatao das informaes atravs da anlise dos produtos de software. Os aspectos do rejuvenescimento de software que devem ser considerados so: redocumentao; reestruturao; engenharia reversa; reengenharia. A redocumentao envolve a produo da documentao do sistema a partir da anlise esttica do cdigo-fonte. As informaes produzidas podem ser representadas graficamente ou textualmente. Como sada deste processo pode-se obter as hierarquias de classe, informaes do dicionrio de dados, pseudocdigo, caminhos para testes, entre outros. A reestruturao do software utilizada para torn-lo mais fcil de ser entendido e modificado. Este processo normalmente apoiado por ferramentas e possui trs atividades principais, a representao interna do cdigo, a simplificao das representaes internas e a gerao do cdigo estruturado. A engenharia reversa fornece informaes da especificao e do projeto de um sistema de software a partir de seu cdigo-fonte, alm disso, busca recuperar informaes de engenharia com base nos mtodos de especificao e de projeto de software, armazenando-as para futura manipulao. As informaes extradas nem sempre estaro completas, por isto o sistema de engenharia reversa pode ter menos informao que o sistema original. Como sada deste processo similar ao da redocumentao, disponibilizando o dicionrio de dados, diagramas de fluxo de dados, diagramas de fluxo de controle e diagramas de entidade-relacionamento. A engenharia reversa bem-sucedida quando as expectativas so pequenas (PFLEEGER, 2004). Peters e Pedrycz (2001, p. 578) afirmam que a engenharia reversa prtica comum durante a manuteno do software, pois a documentao produzida durante o desenvolvimento do software normalmente inadequada. Isto torna a reconstruo da documentao a partir do cdigo algo necessrio para entender o funcionamento do sistema e facilitar as tarefas de manuteno. De acordo com Pfleeger (2004, p. 408), reengenharia uma extenso da engenharia reversa, enquanto a engenharia reversa abstrai informaes, a reengenharia produz novo cdigo-fonte sem modificar a funo do sistema como um todo. As etapas deste processo so: a

9 aplicao da engenharia reversa para representar o sistema com base nos atuais mtodos de especificao e projeto de software para futuras modificaes; correo ou complementao do modelo do sistema; gerao de novo sistema a partir da nova especificao. As entradas deste processo incluem cdigo-fonte, arquivos de banco de dados, telas, e outros arquivos. A sada a documentao do sistema, incluindo especificao, projeto e novo cdigo-fonte (PFLEEGER, 2004). 3 CONSIDERAES FINAIS O software entrega o mais importante produto dos dias atuais a informao. Quanto maior a relao do software com a resoluo de problemas do mundo real, maior ser a probabilidade de solicitaes de alteraes e mais difcil ser a sua manuteno. A manuteno envolve problemas tcnicos e problemas relacionados s pessoas envolvidas. Os responsveis pela manuteno devem entender as necessidades do negcio dos seus clientes e de desenvolvimento de software, devem ser bons investigadores na busca por defeitos e suas fontes e testadores criteriosos. A manuteno uma atividade de equipe e exige bastante coordenao durante a verificao, modificao e testes. Muitas falhas so resultado da falta de viso geral do relacionamento do sistema com o ambiente e isto exige que os envolvidos aprendam a obter toda a informao necessria para efetuar a manuteno. Medir quanto um software manutenvel uma tarefa complexa que envolve dados histricos relacionados com o tempo mdio gasto em cada atividade de manuteno, podendo ser substituda pela previso da tendncia de falhas atravs da anlise de atributos internos do software. O rejuvenescimento do software pode resultar na melhoria de qualidade do software, explicitando informaes que podem ser utilizadas para melhoria dos projetos e estrutura do sistema. Esta atividade envolve a redocumentao, a reestruturao, a engenharia reversa e a reengenharia. A manuteno de software facilitada quando o projeto j previu esta necessidade, fornecendo documentao relevante para tal. Quando o software evolui de forma desorganizada, as atividades previstas no rejuvenescimento possam ser a soluo. Alm disso, as atividades de manuteno poderiam ser mais fceis se fosse possvel prever e identificar as provveis fontes de defeitos. O grande desafio da manuteno de software conseguir superar as limitaes tcnicas e pessoais atravs da utilizao da documentao do sistema, da conscientizao dos papis e responsabilidades da equipe, da aplicao de tcnicas e uso de ferramentas que facilitam a manuteno. 4 REFERNCIAS PAULA FILHO, Wilson de Pdua. Engenharia de software: fundamentos, mtodos e padres. Rio de Janeiro: LTC, 2001.

10 PETERS, James. F., PEDRYCZ, Witold. Engenharia de Software. Rio de Janeiro: Campus. 2001. PFLEEGER, S. F. Engenharia de Software: Teoria e Prtica. So Paulo: Prentice Hall, 2004. PRESSMAN, Roger S. Engenharia de Software. 5. ed. Rio de Janeiro: McGraw-Hill, 2002.

You might also like