terça-feira, 16 de dezembro de 2008

Manuscrito

O software e sua vida util

Existem duas diferentes abordagens a serem aplicadas nos sistemas a fim de aumentar sua vida util:

Reativa:
É a prevenção que é mais comum. Nela toda decisão é tomada somente quando ocorre algo errado no sistema. Assim que a aplicação entra em um estado de inutilidade, queda ou perto disso, é tomada uma decisão, que pode ser desde rollbacks, até reiniciar o sistema, ordenar arquivos, ou alguma manutenção mais séria nas funcionalidades.

Proativa e preventiva:
Como o próprio nome já diz, nela não espera que aconteça algo para tomar uma decisão. A cada momento, a situação atual do sistema é visualizada para que se tome uma decisão adequada de acordo com a necessidade, evitando que o sistema entre em um estado de queda. É nesse tipo de prevenção que faz parte o rejuvenescimento de software.

Porque as aplicações falham?

Todo software sofre um processo de envelhecimento, que na verdade se trata da degradação gradual da sua performance. Ao longo do tempo, esse processo de envelhecimento pode deixar esse software em um estado de inutilidade, tirando necessidade dele.

As causas principais que provocam esse processo são:

-Vazamento de memória – Quando um sistema faz uso da memória, mas não verifica o “lixo” que deixa nela após o uso. Isso vem sendo mais atenuado com as linguagens de alto nível, tipo Java, que possui na sua maquina virtual um Garbage Collection que faz o gerenciamento da memória;

-Uso progressivo de discos de armazenamento – Esse é um problema já praticamente inexistente hoje em dia, devido o barateamento das unidades de armazenamento, mas já foi um ponto crítico dos sistemas, que ocupavam espaço continuamente com logs ou caches por exemplo;

-Uso de estruturas e arquivos desatualizados – Quando um sistema usa bibliotecas que estão desatualizadas ou arquivos que não existem mais suporte para manutenção, por exemplo;

-Erros de arredondamento numérico em excesso – São erros que aparentam ser simples, mas simples erros de cálculos podem levar a aplicação a um estado de falha.

Muitas dessas causas, como se pode notar, são quase que completamente amenizadas hoje em dia, devido às linguagens de alto nível e as plataformas de desenvolvimento modernas. Um software bem feito, usando ferramentas modernas e adequadas tem sua curva de degradação muito mais longa que um software legado teve, por exemplo. Apesar de esse fato existir, o software nunca deixará de envelhecer, por menor que seja.

segunda-feira, 15 de dezembro de 2008

Reengenharia de Software

Olá pessoal, para quem tem dúvidas do que é reengenharia de software, existe um artigo muito bom que eu encontrei que pode ajudar a entender mais sobre esse assunto. O título é "Reengenharia, o quê, por quê e como?". De Ana Elisa Tozetto Piekarski e Marcos Antonio Quináia. Data do ano de 2000.
Nele os autores conseguem definir muito bem, o que é redocumentação, engenharia reversa e refatoração ou reestruturação.

Relacionamentos no Ciclo de Desenvolvimento de Software (CHIKOFSKY e CROSS, 1990)

Reproduzerei alguns trechos abaixo.

Quando o sistema não é fácil de ser mantido sendo, porém, de grande utilidade, ele deve ser reconstruído. Partindo-se do sistema existente (via código-fonte, interface ou ambiente), são abstraídas as suas funcionalidades e são construídos o modelo de análise e o projeto do software. Esse processo é denominado reengenharia de software.

Redocumentação: como uma sub-área da engenharia reversa, é a criação ou revisão de uma representação semanticamente equivalente, dentro do mesmo nível relativo de abstração, sendo que as formas resultantes de representação são consideradas como visões alternativas, utilizadas para uma melhor compreensão humana do sistema analisado;

Recuperação de projeto: é uma sub-área da engenharia reversa na qual o conhecimento do domínio da aplicação, informações externas e dedução são adicionadas às observações referentes ao programa, para se extrairem abstrações significativas de mais alto nível, além daquelas obtidas através da observação direta do sistema;

Reestruturação: é a transformação de uma forma de representação, para outra no mesmo nível de abstração relativo, preservando o comportamento externo do sistema (funcionalidade e semântica). Geralmente usada como uma forma de manutenção preventiva, a reestruturação é aplicada em sistemas que tenham sido desenvolvidos de forma desestruturada, resultando uma representação que preserva as características do sistema, porém de forma mais bem estruturada;

Engenharia reversa: é o processo de analisar um sistema com a finalidade de criar sua representação de uma forma diferente ou em um nível mais alto de abstração do que o código fonte.

Reengenharia: é a reconstrução de algo do mundo real, tendo como propósito a busca por melhorias que permitam produzir algo de qualidade melhor ou comparável ao produto inicial

No processo de manutenção, quando se trata de reconstruir um software (ou seja, realizar sua reengenharia), é necessário, portanto, que se proceda à engenharia reversa do sistema em questão, a fim de obter os modelos de análise baseados no software existente. Esses modelos, com as devidas correções/alterações, serão o ponto de partida para a engenharia progressiva.

Vale a pena dar uma lida no artigo.

http://www.unicentro.br/editora/revistas/recenv1n2/Reengenharia.pdf


terça-feira, 2 de dezembro de 2008