Você está na página 1de 3

Tarefa Semana 8

1. Dê exemplos dos 4 tipos de manutenção de software: corretiva,


preventiva, adaptativa e perfectiva.
Corretiva: defeitos em requisitos, projeto, código

Preventiva: reestruturação de código, otimização de código, refatoração, atualização


de documentação

Adaptativa: alteração no SO, BD, servidor, compilador, bibliotecas, frameworks,


hardware

Perfectiva: novas funcionalidades

2. A compreensão de software é uma subárea que se preocupa com a


forma como os engenheiros de software entendem e mantêm o código-
fonte existente. Os processos cognitivos utilizados pelos engenheiros,
assim como os métodos e ferramentas envolvidas são identificados e
estudados.

Pesquise na literatura científica e na literatura cinzenta sobre conceitos,


métodos e ferramentas relacionadas a esse tópico, de forma a
complementar o conhecimento compartilhado em sala de aula. Sintetize
as ideias em um resumo;

No artigo Theories, Methods and Tools in Program Comprehension: Past,


Present and Future são abordados conceitos, métodos e ferramentas
relacionadas à compreensão de software. Disponível em:
https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1421034

1) Conceitos
Um modelo mental descreve a mentalidade de um desenvolvedor representação
do programa a ser entendido e um modelo cognitivo descreve o cognitivo processos
e estruturas de informação temporárias no cabeça do programador que são usados
para formar o modelo mental.
Planos de programação são fragmentos genéricos de código que representam
cenários típicos em programação.
Beacons são recursos familiares reconhecíveis no código que agem como pistas
para a presença de certos estruturas.
2) Métodos
⚫ Compreensão Top-Down: começa com uma hipótese sobre o natureza do
programa. Esta hipótese inicial é então refinado de forma hierárquica,
formando subsidiárias hipóteses. Hipóteses subsidiárias são refinadas e
avaliada em profundidade. A verificação de hipóteses depende muito do
ausência ou presença de balizas.
⚫ Compreensão Bottom-Up: assume que le primeiro as instruções de código e
então mentalmente dividir ou agrupar essas declarações em abstrações de
nível superior. Essas abstrações são agregados ainda mais até um
entendimento de alto nível do programa é atingido.
⚫ Estratégias oportunistas e sistemáticas: le sistematicamente o código em
detalhe, rastreando através do fluxo de controle e fluxo de dados abstrações
no programa para obter uma visão global compreensão do programa, ou
adotem uma abordagem necessária, focando apenas no código relacionado
a uma tarefa específica em mãos.
⚫ O Metamodelo Integrado: baseia-se nos três anteriores modelos descrevem
os processos de compreensão usados para criar processos mentais
representações em vários níveis de abstração, último é o modelo de
conhecimento escreve a base de conhecimento necessário para realizar um
processo de compreensão.
3) Ferramentas relacionadas
⚫ Suporte de navegação: o processo de cima para baixo requer navegando de
abstrações ou conceitos de alto nível para detalhes de nível inferior; de baixo
para cima requer seguir links de fluxo de controle e fluxo de dados, que
oferecem suporte à amplitude e navegação em profundidade.
⚫ Pesquisa: procurar trechos de código por analogia e para pesquisa iterativa.
⚫ Múltiplas visualizações: fornecer diferentes maneiras de visualizar programas.
⚫ Visualizações orientadas ao contexto: pela prioridade mostrar a navagação
primeira vez.
⚫ Suporte cognitivo adicional: suporte externa para ajudar a estudar.
⚫ Visualizações gráficas e hipertexto.
⚫ Modelo top-down: documentos on-line com busca por palavras-chave em
documentos; poda da árvore de chamadas com base em categorias
específicas; recursos de diferenciação inteligentes; histórico de locais
navegados; e fan-in de entidades.
⚫ Modelo de situação: fornece uma lista completa de fontes de domínio,
incluindo fontes não relacionadas a códigos; e representação visual das
principais funções do domínio.
⚫ Modelo de programa: declarações pop-up; relatórios de referência cruzada
on-line e contagem de funções.
⚫ compreensão na hora do código-fonte:
• Recursos de pesquisa para que o usuário possa pesquisar artefatos de
código por nome ou por correspondência de padrões.
• Recursos para exibir todos os atributos relevantes dos itens recuperados,
bem como as relações entre os itens.
• Recursos para manter o controle de pesquisas e sessões de resolução de
problemas, para apoiar a navegação de um histórico persistente.
⚫ Perguntas:
1. Onde uma determinada sub-rotina / procedimento é invocado?
2. Quais são os argumentos e resultados de uma função?
3. Como o fluxo de controle chega a um determinado local?
4. Onde uma determinada variável é definida, usada ou consultada?
5. Onde uma determinada variável é declarada?
6. Onde um determinado objeto de dados é acessado?
7. Quais são as entradas e saídas de um módulo?

Você também pode gostar