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

quinta-feira, 27 de novembro de 2008

Rejuvenescimento X redocumentação X reengenharia X refatoração

Houve uma grande duvida no inicio dessa disciplina com o nosso o grupo. Nós decidimos que iríamos falar sobre rejuvenescimento de software, mas não sabíamos na verdade o que é que se tratava.
Rejuvenescimento vem de você pegar algo antigo e transformá-lo em novo. Disso todos já sabiam, mas ai veio a principal dúvida: Qual a diferença entre rejuvenescimento, redocumentação, reengenharia e refatoração?
Após várias pesquisas, conseguimos desvendar todas essas diferenças, as quais eu escrevo aqui em baixo:

- Refatoração

É o processo de modificar um software para melhorar a estrutura interna do código, sem alterar o seu comportamento externo. As duas vantagens principais da refatoração é: suavizar a deterioração do software e deixar o código mais limpo e mais facil de manutenção.

- Redocumentação

Não modifica a estrutura do software, nem meche no código. Apenas faz uma análise estática do código fonte, verificando informações adicionais que podem ser úteis para a documentação do software.

- Reengenharia

Se trata da aplicação da engenharia reversa em um sistema já existente e depois aplica a "engenharia direta" para fazer mudanças na especificação e no projeto que completam o modelo lógico.

E agora, aonde entra o rejuvenescimento?

Rejuvenescimento é na verdade a junção de todas essas técnicas, com o objetivo principal de evitar a degradação total do software.

terça-feira, 25 de novembro de 2008

Funções e Responsabilidades no Project Office

Neste post iremos apresentar as principais funções e responsabilidades do Project Office.

Definir e manter metodologias e padrões

Deve-se definir ou manter as políticas, normas, processos e procedimentos que serão utilizadas nos projetos. Também deve ser criado os modelos dos seguintes documentos: planos, wbs, cronogramas e relatórios dos projetos.
Não sabe o que é WBS ? clique aqui!


Manter as Ferramentas

Escolher as ferramentas que serão usadas no ambiente corporativo (repositório de metologias, documentos, etc.), as ferramentas operacionais de planejamento e  controle ( WbsChartPro, MSProject ), Bases de conhecimento, etc.


Capacitação

Treinamento nas metodologias e ferramentas que serão utilizadas. Para auxiliar a capacitação, pode ser solicitadas consultorias e o aprendizado através das "lições aprendidas".


Controle

Pode ser feito através de acompanhamento do desempenho dos projetos, Auditoria ( levantamento das informações usando sistemas de gestão, contratos, etc. ), Consolidação e divulgação dos indicadores do projeto( painel executivo )


Gestão de Recursos

As suas principais funções são: apoio a seleção e contratação, planejamento do desenvolvimento, controle do desempenho.


Outras Funções

Suporte administrativo, Apoio a start-up de projetos, Apoio a projetos com problemas.