UMA FERRAMENTA DE ANÁLISE AUTOMATIZADA DE TÉCNICAS DE SELEÇÃO DE TESTES DE REGRESSÃO BASEADA EM MINERAÇÃO DE REPOSITÓRIOS DE SOFTWARE

Tamanho: px
Começar a partir da página:

Download "UMA FERRAMENTA DE ANÁLISE AUTOMATIZADA DE TÉCNICAS DE SELEÇÃO DE TESTES DE REGRESSÃO BASEADA EM MINERAÇÃO DE REPOSITÓRIOS DE SOFTWARE"

Transcrição

1 UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE CIÊNCIAS EXATAS E DA TERRA DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA PROGRAMA DE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO UMA FERRAMENTA DE ANÁLISE AUTOMATIZADA DE TÉCNICAS DE SELEÇÃO DE TESTES DE REGRESSÃO BASEADA EM MINERAÇÃO DE REPOSITÓRIOS DE SOFTWARE João Maria Guedes da Cruz Júnior NATAL - RN 2014

2 UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE CIÊNCIAS EXATAS E DA TERRA DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA PROGRAMA DE PÓS-GRADUAÇÃO EM SISTEMAS E COMPUTAÇÃO UMA FERRAMENTA DE ANÁLISE AUTOMATIZADA DE TÉCNICAS DE SELEÇÃO DE TESTES DE REGRESSÃO BASEADA EM MINERAÇÃO DE REPOSITÓRIOS DE SOFTWARE João Maria Guedes da Cruz Júnior Dissertação de mestrado apresentada ao Programa de Pós-graduação em Sistemas e Computação do Departamento de Informática e Matemática Aplicada da Universidade Federal do Rio Grande do Norte como requisito para obtenção do grau de Mestre em Sistemas e Computação. Orientador: Prof. Dr. Uirá Kulesza Co-orientador: Prof. Dr. Roberta de Souza Coelho NATAL - RN 2014

3 Catalogação da Publicação na Fonte. UFRN / SISBI / Biblioteca Setorial Centro de Ciências Exatas e da Terra CCET. Cruz Júnior, João Maria Guedes da. Uma ferramenta de análise automatizada de técnicas de seleção de testes de regressão baseada em mineração de repositórios de software / João Maria Guedes da Cruz Júnior. - Natal, f. : il. Orientador: Prof. Dr. Uirá Kulesza. Co-orientadora: Profª. Drª. Roberta de Souza Coelho. Dissertação (Mestrado) Universidade Federal do Rio Grande do Norte. Centro de Ciências Exatas e da Terra. Programa de Pós-Graduação em Sistemas e Computação. 1. Teste de software Dissertação. 2. Seleção de testes de regressão Dissertação. 3. Diferenciação textual Dissertação. 4. Inclusão Dissertação. 5. Precisão Dissertação. I. Kulesza, Uirá. II. Coelho, Roberta de Souza. III.Título. RN/UF/BSE-CCET CDU:

4 RESUMO O objetivo dos testes de regressão (RT) é reutilizar o conjunto de testes da última versão de um software em sua versão atual, para maximizar o valor dos testes já desenvolvidos e garantir que antigas funcionalidades continuem corretas após as novas modificações. Mesmo com o reuso, é comum que nem todos os testes precisem ser executados novamente e para evitar o desnecessário, é estimulada a utilização de técnicas de seleção dos testes de regressão (RTS), que buscam selecionar dentre todos os testes, apenas aqueles capazes de revelar faltas, isto reduz custos e torna a prática realmente atrativa para as equipes de teste. Diversos estudos recentes avaliam a qualidade da seleção realizadas por técnicas de RTS, identificando qual delas apresenta melhores resultados através de métricas como a inclusão e a precisão. As técnicas de RTS deveriam buscar no sistema sob teste (SUT) por testes que revelem faltas, entretanto, como este é um problema sem solução viável, a alternativa é buscar por testes que revelem as modificações, onde as faltas podem ocorrer. Contudo, tais modificações podem alterar o próprio fluxo de execução dos algoritmos, fazendo com que alguns testes não exercitem mais os mesmos trechos. Neste contexto, esta dissertação de mestrado busca investigar se as modificações realizadas no SUT poderiam afetar a qualidade da seleção dos testes realizada por uma RTS, e se sim, quais características apresentam as modificações que provocaram os erros, levando a RTS a incluir ou excluir testes erroneamente. Para tanto, foi desenvolvida uma ferramenta na linguagem Java para automatizar o cálculo da inclusão e precisão médias alcançadas por uma técnica de RTS para uma dada característica da modificação. A fim de validar a ferramenta, foi conduzido um estudo empírico para avaliar a técnica de RTS Pythia, baseada em diferenciação textual, sobre um sistema de informação web de larga escala, analisando a característica dos tipos das tarefas realizadas para evoluir o SUT. Palavras-chave: Teste de Software; Seleção de Testes de Regressão; Diferenciação Textual; Inclusão; Precisão; Características das Modificações.

5 ABSTRACT The main goal of Regression Test (RT) is to reuse the test suite of the latest version of a software in its current version, in order to maximize the value of the tests already developed and ensure that old features continue working after the new changes. Even with reuse, it is common that not all tests need to be executed again. Because of that, it is encouraged to use Regression Tests Selection (RTS) techniques, which aims to select from all tests, only those that reveal faults, this reduces costs and makes this an interesting practice for the testing teams. Several recent research works evaluate the quality of the selections performed by RTS techniques, identifying which one presents the best results, measured by metrics such as inclusion and precision. The RTS techniques should seek in the System Under Test (SUT) for tests that reveal faults. However, because this is a problem without a viable solution, they alternatively seek for tests that reveal changes, where faults may occur. Nevertheless, these changes may modify the execution flow of the algorithm itself, leading some tests no longer exercise the same stretch. In this context, this dissertation investigates whether changes performed in a SUT would affect the quality of the selection of tests performed by an RTS, if so, which features the changes present which cause errors, leading the RTS to include or exclude tests wrongly. For this purpose, a tool was developed using the Java language to automate the measurement of inclusion and precision averages achieved by a regression test selection technique for a particular feature of change. In order to validate this tool, an empirical study was conducted to evaluate the RTS technique Pythia, based on textual differencing, on a large web information system, analyzing the feature of types of tasks performed to evolve the SUT. Keywords: Software Testing; Regression Tests Selection; Textual Differencing; Inclusion; Precision; Features of Changes.

6 LISTA DE FIGURAS Figura 1. Princípio básico do funcionamento da RTS Quality Figura 2. Conjuntos dos testes e as manipulações necessárias Figura 3. Diagrama de componentes e suas dependências Figura 4. Sequência de execução da RTS Quality Figura 5. Classes do módulo History Miner e suas associações Figura 6. Classes do módulo RTS e suas associações Figura 7. Classes do módulo Instrumentation Data e suas associações Figura 8. Composição e encapsulamento das classes do Instrumentation Data Figura 9. Callgraph dos métodos chamados a partir dos testes da revisão inicial Figura 10. Callgraph dos métodos chamados a partir dos testes da versão final Figura 11. Tipos de tarefas mais frequentes e suas porcentagens Figura 12. Inclusão média alcançada pela RTS Pythia para cada tipo de tarefa Figura 13. Precisão média alcançada pela RTS Pythia para cada tipo de tarefa

7 LISTA DE TABELAS Tabela 1. Diferenças entre a RTS Quality e o framework de (ROTHERMEL, 1996) Tabela 2. Características de uma modificação Tabela 3. Exemplo de sistema: versões e suas tarefas necessárias Tabela 4. Exemplo de commits em um repositório SVN Tabela 5. Dados analisados pela RTS Quality na Fase Tabela 6. Dados analisados pela RTS Quality na Fase Tabela 7. Números obtidos nas Fases 2 e 3 do estudo Tabela 8. Métricas obtidas pela RTS Pythia para o Programa de Exemplo Tabela 9. Principais características das duas versões do SUT Tabela 10. Inclusão e precisão médias por tipo de tarefa Tabela 11. Conjunto dos testes elaborados para a Biblioteca Tabela 12. Métricas de inclusão e precisão de cada tarefas

8 LISTA DE LISTAGENS Listagem 1. XML contendo as informações para acesso a uma base de dados Listagem 2. Script SQL para obter o tipo e o estado de uma tarefa do SIGAA Listagem 3. Script SQL para obter as revisões de uma tarefa do SIGAA Listagem 4. XML contendo a relação das tarefas e suas revisões Listagem 5. Exemplo do XML de configuração dos projetos de um SUT

9 LISTA DE ABREVIATURAS E SIGLAS CFG CMT RT RTM RTP RTS SUT Control Flow Graph Change Management Tool Regression Tests Regression Tests Minimization Regression Tests Prioritization Regression Tests Selection System Under Test

10 SUMÁRIO 1. INTRODUÇÃO Problema Abordado Limitações dos Trabalhos Existentes Objetivos Gerais e Específicos Questão de Pesquisa Organização do Trabalho FUNDAMENTAÇÃO TEÓRICA Teste de Software Testes de Regressão Otimização de Técnicas de RT Técnicas de RTS Técnicas de RTS Baseadas em Diferenciação Textual Instrumentação de Código Análise Comparativa Cálculo das Métricas Características das Modificações RTS QUALITY Arquitetura Geral da Ferramenta Projeto Detalhado da Ferramenta Módulo Executer Módulo History Miner Módulo RTS Regression Test Selection Subsistema TTracker Módulo Test Tracker Módulo Instrumentation Data Módulo File Persistence Instanciação e Funcionamento da Infraestrutura Pontos de Configuração Programa de Exemplo... 46

11 4. ESTUDO EMPÍRICO Objetivos e Questões de Pesquisa Sistema Investigado Métricas Utilizadas Fases do Estudo Fase 1 Obtenção das Tarefas e suas Modificações Fase 2 Análise da Revisão Inicial Fase 3 Análise da Revisão Final Fase 4 Cálculo das Métricas e das Médias Resultados do Estudo Avaliação da Técnica de RTS Pythia Avaliação da Ferramenta RTS Quality Ameaças a Validade do Estudo CONCLUSÕES Contribuições Limitações do Trabalho Trabalhos Futuros Múltiplas Características Sub-Ramo de um Control Flow Graph Generalização das Médias Pontos de Extensão Banco de Dados Comunidade Open Source REFERÊNCIAS ANEXO I ANEXO II... 83

12 1. INTRODUÇÃO Desenvolver sistemas de software tem se tornado uma tarefa cada vez mais difícil, devido ao crescente grau de exigência dos clientes por sistemas personalizados com as necessidades de cada empresa, que sejam mais intuitivos e de fácil utilização, com menor incidência de falhas e que simplifiquem tarefas dispendiosas. Atender tais exigências produz vários impactos ao longo do processo de desenvolvimento, a exemplo disso tem-se o aumento da complexidade das funcionalidades, a demanda por interfaces de usuário mais sofisticadas, a grande quantidade de informações que precisam ser armazenadas, a viabilização do acesso a múltiplos usuários simultâneos, a integração entre diferentes plataformas (web, mobile, desktop, embarcados), a incorporação de controles de permissões e acesso, dentre outros. Esta crescente complexidade impulsiona as equipes a adotarem processos e padrões de desenvolvimento cada vez mais sofisticados e com atividades melhor definidas. Para manter-se à frente da concorrência, as empresas precisam garantir que seus produtos sejam entregues dentro do prazo, e com as características de qualidade e requisitos previamente estabelecidos com os clientes e, para gerenciar este processo, foi criado o conceito de tarefas. Cada tarefa apresenta informações sobre o que deve ser realizado, quem são seus responsáveis, qual é o seu tempo limite e é comum que apresente também um tipo. Os possíveis tipos das tarefas, bem como a classificação de cada tarefa criada, são definidos pela própria equipe de desenvolvimento do sistema, seguindo uma lógica própria. Para gerenciar o andamento de cada tarefa durante o processo de desenvolvimento e manutenção de sistemas, é comum a utilização de ferramentas de gerenciamento de mudanças. A organização do trabalho a ser realizado em tarefas bem definidas, permite que a equipe mantenha o foco nas prioridades de cada etapa do desenvolvimento. De forma a prezar pela qualidade do software, as equipes têm buscado também adotar métodos e técnicas de testes ao longo das diversas fases do 1

13 desenvolvimento, visando exercitar as funcionalidades novas ou modificadas. Incorporar tais métodos e técnicas de teste demanda a ampliação dos investimentos, acarretando um maior consumo de tempo e recursos. É bastante comum que as empresas reduzam ou eliminem estas atividades para evitar exceder o limite dos prazos estipulados. Neste contexto surgem as técnicas de Testes de Regressão (RT Regression Tests), que visam à redução do retrabalho, objetivando reutilizar os testes que já foram implementados nas versões anteriores do sistema. Apesar do reuso trazer vantagens, reexecutar todos os testes pode consumir tempo e recursos excessivos. Surge então à necessidade de otimizar as soluções, garantindo que as novas mudanças não prejudicam o comportamento das funcionalidades preexistentes no sistema. Segundo (YOO e HARMAN, 2012), existem três diferentes formas de otimizar uma técnica de RT, que envolvem a seleção, a priorização e a minimização dos casos de teste. As técnicas de seleção dos testes de regressão (RTS Regression Tests Selection) (ROTHERMEL e HARROLD, 1996) visam selecionar um subconjunto dos testes da versão anterior que sejam capazes de revelar faltas. As técnicas de minimização dos testes de regressão (RTM Regression Tests Minimization) (ROTHERMEL et al, 2002) buscam também reduzir o conjunto final dos casos de teste que serão reexecutados, mas o objetivo é eliminar aqueles que exercitam partes semelhantes do sistema. Por fim, as técnicas de priorização dos testes de regressão (RTP Regression Tests Prioritization) (ROTHERMEL, UNTCH e CHU, 1999) buscam ordenar os casos de teste com base em alguma propriedade desejável, como por exemplo, maximizar a taxa de descoberta de faltas. Independentemente de os testes serem manuais ou automatizados, tais técnicas são importantes quando os testes são muitos, muito longos e/ou quando testes são repetidos várias vezes com entradas diferentes. As técnicas devem ser capazes de reduzir os custos da etapa de testes, otimizando a identificação de faltas e consumindo um tempo inferior ao tempo que seria gasto se todos os testes fossem executados. Executar algumas dezenas de testes em um único 2

14 módulo modificado de um sistema pode ser muito mais interessante que executar algumas centenas de testes em módulos que não foram impactados pelas modificações. Cada tipo de técnica pode ser avaliado com base em métricas bem definidas e que expressem, até certo grau, a qualidade das técnicas, assim como permitem também a comparação do desempenho entre elas. Este trabalho de dissertação focaliza nas técnicas de RTS e suas métricas. (ROTHERMEL, 1996) demonstra que as técnicas de RTS devem apresentar algumas qualidades, buscando serem: inclusivas, precisas, genéricas e eficientes. Ser inclusiva (inclusive) implica em selecionar testes do conjunto original que possam revelar erros em componentes modificados. Ser precisa (precise) consiste em ter a capacidade de identificar testes desnecessários, de tal forma que a exclusão compense o custo da própria técnica. Ser genérica (general) significa ser aplicável aos diversos tipos de programas que sejam alvos de modificações intra ou interprocedurais. Por fim, a técnica deve ser eficiente (efficient), isto é, ter características de tempo e espaço consumidos dentro de padrões razoáveis, que justifiquem sua utilização, comparada a não utilizar técnica alguma. Com base na qualidade de técnica inclusiva, algumas técnicas são ditas seguras (LEUNG e WHITE, 1990; WHITE e LEUNG, 1992; LASKI e SZERMER, 1992; WHITE et al., 1993; AGRAWAL et al., 1993; CHEN, ROSENBLUM e VO, 1994; VOKOLOS e FRANKL, 1997; ROTHERMEL e HARROLD, 1997), o que consiste em garantir a inclusão de 100% dos casos de teste que são capazes de revelar falhas. Ao analisar o conceito de precisão é possível notar que corresponde a qualidade inversa da inclusão, tendo em vista que visa à exclusão dos testes desnecessários Problema Abordado Motivado pela necessidade de otimizar uma RTS, reduzir os grandes custos e tornar sua aplicação mais interessante para as empresas, este trabalho procura identificar o comportamento de uma dada técnica, diante das diferentes características das modificações realizadas em um sistema. 3

15 O código de um sistema que sofreu modificações pode, inesperadamente, ser afetado em partes que não estão diretamente associadas à modificação, o chamado impacto indireto. Uma técnica de RTS bem estruturada deve ser capaz de identificar este impacto e garantir que as partes afetadas também sejam testadas, dada à possibilidade de possuírem faltas. Neste contexto, caso uma técnica de RTS não seja capaz de rastrear o impacto de uma modificação, poderia falhar e apresentar um resultado inseguro ou impreciso dependendo das características das modificações. Este trabalho apresenta uma ferramenta que busca compreender até que ponto os resultados das técnicas de RTS podem ser afetados pelas características das modificações do Sistema Sob Teste (SUT System Under Test) que avaliam. Esta ferramenta pode beneficiar: (i) as equipes de teste, pois teriam parâmetros para orientá-las na escolha da RTS que melhor se aplicará as novas modificações realizadas, com base apenas em um histórico previamente obtido para uma característica das modificações e; (ii) os desenvolvedores de técnicas de RTS, de posse da relação das modificações em que suas técnicas apresentaram os piores resultados poderiam identificar, na característica analisada, a origem das deficiências e planejar novas correções Limitações dos Trabalhos Existentes Os valores das métricas de inclusão e precisão obtidos pelo framework proposto por (ROTHERMEL, 1996), representam a qualidade dos conjuntos de testes selecionados por uma RTS, tais valores permitem fazer comparações entre duas técnicas distintas se ambas as técnicas forem avaliadas em um mesmo SUT. Tais valores não podem ser generalizados, pois nem sempre é possível afirmar que uma técnica terá o mesmo resultado em um sistema diferente. A ferramenta desenvolvida por este trabalho permite associar os valores das métricas a uma característica que esteja presente em todo e qualquer SUT, serão obtidos resultados mais genéricos e livres deste contexto. Ao analisar esta proposta, é possível observar que as modificações podem apresentam diferentes valores para uma mesma característica. As métricas propostas por este trabalho para generalizar a avaliação de uma RTS, baseiam-se nas métricas de inclusão e precisão propostas por Rothermel, mas 4

16 além de calculá-las, é selecionada uma das características presente em todas as modificações, agrupando as modificações com base nos valores que assumirem, de tal forma que modificações com o mesmo valor passaram a fazer parte de um mesmo conjunto. Para cada modificação é calculada a inclusão e a precisão, e para cada conjunto é calculada a média aritmética para as taxas de inclusão e de precisão. Desta forma, é possível analisar como a RTS é afetada pela característica analisada. Outros estudos realizados por (ROTHERMEL e HARROLD, 1996) e por (BISWAS et al., 2011) sobre técnicas de RTS, avaliam o desempenho de tais técnicas e as classificam em técnicas seguras ou não seguras, isto é, capazes de identificar todos os testes necessários para a nova versão ou não, respectivamente. Este trabalho, no entanto, busca avaliar quais características das modificações poderiam afetar a qualidade dos testes selecionados por uma RTS, levando-as a cometer mais erros. Desta forma, busca-se identificar não só os erros, como também suas possíveis origens. O estudo empírico realizados por (FRANKL et al., 2003), se baseia em uma métrica parecida com a precisão proposta por (ROTHERMEL, 1996), entretanto, ela calcula apenas a quantidade de testes que a RTS excluiu, sem verificar se a exclusão foi feita corretamente. Sendo assim, esta métrica não serve ao propósito de analisar a qualidade da seleção realizada pela RTS. A avaliação empírica realizada em (ENGSTRÖM et al., 2008), apenas identifica os diversos trabalhos, autores, tipos de técnicas de RTS, e as diversas métricas utilizadas para avaliá-las, entretanto, não implementa nenhuma ferramenta que analise a qualidade das seleções de uma RTS. O experimento realizado por (VOKOLOS e FRANKL, 1998) apesar de julgar como útil a presença de um histórico que apresente os tipos de modificação realizadas para evoluir o sistema, não os correlaciona com os valores das métricas obtidos pela RTS. Pensando nesta área tão pouco explorada, a abordagem proposta por este trabalho, objetiva não só obter os valores das métricas de inclusão e precisão de uma RTS, dadas duas versões de um mesmo SUT, mas também, relacionar tais valores a uma característica comum a todas as modificações 5

17 realizadas entre as versões analisadas, no intuito de investigar a vulnerabilidade das técnicas diante de diferentes tipos de modificações. Um dilema, comumente enfrentado pela equipe de testes, é o de ter que selecionar uma única técnica de RTS que atenda bem suas necessidades, selecionando corretamente a menor quantidade possível de testes sem excluir aqueles que são realmente necessários. Surge então um problema, nem sempre a RTS selecionada apresenta bons resultados perante qualquer tipo de modificação. Neste contexto, seria bastante útil catalogar o desempenho médio de diferentes técnicas de RTS para cada um dos valores que as modificações podem assumir para uma dada característica, pois permitiria, com uma simples análise de novas modificações, selecionar a técnica que apresente um melhor desempenho. Os próprios desenvolvedores de uma técnica de RTS poderiam utilizar o desempenho médio de suas técnica perante a característica analisada para identificar os valores em que a RTS apresente uma maior deficiência, evidenciando as situações em que a técnica precisa ser melhorada. Todos os estudos realizados com técnicas de RTS estão sempre focados em uma das seguintes áreas: implementar e aperfeiçoar novas técnicas; calcular a qualidade da seleção da técnica; ou comparar o desempenho de diferentes técnicas. Durante nossa revisão literária da área, não foi possível encontrar trabalhos ou ferramentas que se dispunham a estudar as vulnerabilidade de uma dada técnica, ou que tentem identificar características e padrões que ajudem a encontrar as causas que possam levar uma RTS a cometer erros Objetivos Gerais e Específicos Os principais objetivos deste trabalho são: (i) desenvolver uma ferramenta para analisar técnicas de RTS, correlacionando as métricas tradicionais de inclusão e precisão com uma característica das modificações, obtendo a inclusão e precisão médias de cada uma; (ii) instanciar e avaliar a ferramenta em um estudo empírico, que permita validar suas funcionalidades no contexto de um sistema web de larga escala e, considerando a técnica RTS Pythia (VOKOLOS e FRANKL, 1997); e, finalmente, (iii) investigar para quais tipos de tarefas a 6

18 técnica de RTS Pythia é mais apropriada, dado que é considerada segura, atingindo sempre 100% de Inclusão. Este trabalho busca compreender até que ponto os resultados das técnicas de RTS são afetados pelas tarefas do SUT. Para auxiliar neste processo, foi desenvolvida a ferramenta RTS Quality, implementada na linguagem Java. A Figura 1 ilustra o funcionamento da ferramenta que, além da função básica de calcular as métricas de inclusão e precisão propostas por (ROTHERMEL, 1996), tem como principal função a de, com base em técnicas de mineração de repositórios de software, agrupar as modificações realizadas entre duas versões do SUT de acordo com os valores que assumiram para uma dada característica, e obter a inclusão e precisão médias de cada grupo. Estas métricas permitem compreender melhor o efeito que esta característica exerce sobre o funcionamento da RTS. Figura 1. Princípio básico do funcionamento da RTS Quality. Como é possível observar na Figura 1, para funcionar, uma RTS precisa conhecer a versão inicial do SUT, as partes exercitadas pela execução dos testes desta versão e as modificações que foram realizadas entre a versão inicial e a final, com estas informações ela é capaz de selecionar e excluir testes do conjunto de regressão da versão final do SUT. A ferramenta desenvolvida por este trabalho, por sua vez, analisa a própria versão final, executando nela seus testes e identificando quais deles realmente são necessários, dadas as modificações, isto permite calcular os acertos da RTS ao incluir (métrica de inclusão) e excluir (métrica de precisão) os testes para a versão final. Como visto, uma tarefa pode realizar uma ou várias modificações, a RTS Quality, além de 7

19 calcular as métricas básicas, analisa a característica dos tipos das tarefas que cada modificação apresenta. Isso permite calcular a inclusão e a precisão média para cada um destes tipo. Para este trabalho, foi selecionada a característica do tipo da tarefa, pois pode ser obtida facilmente pelos testadores, realizando uma simples consulta de qual tarefa deve ser testada, e verificando qual o seu tipo, ficando a tarefa mais difícil para a RTS Quality, que precisará minerar tal informação na base de dados de um Sistema de Gerenciamento de Mudanças (CMT Change Management Tool), correlacionando as modificações realizadas com as tarefas que tais modificações atendem Questão de Pesquisa O principal objetivo do estudo empírico proposto no Capítulo 4 deste trabalho é validar o funcionamento da ferramenta RTS Quality. Para tanto, o estudo empírico avalia a qualidade das seleções dos testes de regressão realizados pela técnica de RTS Pythia, que é considerada segura. Ao avaliar a Pythia, a RTS Quality deve constatar que a técnica alcança sempre um valor constante e conhecido de 100% de inclusão média, independentemente do tipo da tarefa, o que pode confirmar que a ferramenta conseguiu avaliar a técnica de forma coerente. Desta forma, para o estudo empírico apresentado no Capítulo 4, foi definida a seguinte questão de pesquisa: Questão de Pesquisa 1. Os tipos das tarefas podem afetar a técnica de RTS Pythia? A Pythia foi originalmente proposta por (VOKOLOS e FRANKL, 1997), e utiliza a diferenciação textual para comparar duas versões de um sistema com o intuito de obter o conjunto de modificações realizadas entre elas. Além deste conjunto, ela armazena também as informações de cobertura da execução dos testes da versão inicial do sistema. Ao cruzar essas duas informações, ela é capaz de identificar quais testes cobrem as modificações realizadas, selecionando-os como necessários para testar a versão final do sistema. A Pythia é considerada uma RTS segura, segundo (ROTHERMEL e HARROLD, 1997), por ser capaz de incluir no conjunto de testes selecionados todos os 8

20 testes que exercitam alguma modificação e que consequentemente tem a possibilidade de revelar faltas. A Pythia será descrita com maiores detalhes na Seção A execução do estudo acompanhará a execução de todos os testes em duas versões homologadas de um sistema web de larga escala, denominado Sistema Integrado de Gestão de Atividades Acadêmicas, mais especificamente sobre o módulo da Biblioteca, desenvolvido originalmente na Superintendência de Informática da UFRN, e que atualmente possui diversas versões executando em diferentes instituições federais, estaduais e municipais do Brasil. A RTS Quality permitirá automatizar algumas das etapas do estudo e caso alguma das médias obtidas por ela para a técnica seja inferior a 100% para algum tipo de tarefa, é possível observar o quanto a técnica foi afetada por este tipo, permitindo assim identificar os tipos em que ela é menos recomendada Organização do Trabalho Este documento está organizado na seguinte ordem: O capítulo 2 detalha a fundamentação teórica, apresentando os principais conceitos associados a este trabalho. O capítulo 3 apresenta uma visão geral da ferramenta de análise de testes de regressão, descrevendo seus principais módulos e seus respectivos propósitos. O capítulo 4 apresenta o estudo empírico projetado com o objetivo de validar o funcionamento da RTS Quality ao analisar uma técnica de RTS, descrevendo em detalhes seus objetivos, o sistema investigado, as métricas utilizadas e cada uma das fases seguidas para concluí-lo. Por fim, o capítulo 5 traz as conclusões, apresentando as principais contribuições do trabalho e apresentando as propostas de trabalhos futuros. 9

21 2. FUNDAMENTAÇÃO TEÓRICA Este capítulo apresenta a fundamentação teórica do trabalho. A Seção 2.1 apresenta a área de testes de software no qual o trabalho está inserido. A Seção 2.2 discorre sobre testes de regressão, apresentando as vantagens do reuso. Finalmente, a Seção 2.3 explora as otimizações das técnicas de testes de regressão, incluindo a otimização por seleção, e por fim, descreve a técnica de seleção de testes de regressão por diferenciação textual, explorada neste trabalho Teste de Software Com a evolução da engenharia de software, a harmoniosa interação entre os vários componentes do sistema tornou-se uma necessidade, e as avaliações de software através de testes tem ganhado cada vez mais atenção, no intuito de garantir o nível de qualidade e maturidade dos sistemas. Segundo o National Institute of Standards and Technology (NIST), em 2002, as atividades envolvendo teste e identificação de erros tem consumido de 70 a 80% dos custos associados ao desenvolvimento de sistemas de software. Diversos fatores podem acarretar erros inesperados ao logo do desenvolvimento de um sistema de software, por exemplo: soluções errôneas de conflitos em operações de merge de revisões em um repositório de código, podem potencialmente provocar a perda de correções (WILLIAMS e SPACCO, 2008); erros em um local podem provocar erros em outro, mesmo que indiretamente associados (RYDER e TIP, 2001); o reaparecimento de erros também é bem comum, bastando, para isso, que um desenvolvedor replique um erro que já havia sido corrigido ao tentar realizar novas correções. Portanto, neste contexto sensível do desenvolvimento e da depuração de sistemas, é considerada uma boa prática que, para cada erro encontrado, se implemente um teste de unidade que ateste que o comportamento é realmente o esperado. Desta forma, sempre que houver novas modificações, será possível verificar se novas falhas não foram reintroduzidas. 10

22 Outro fator que motiva a implantação de testes de software desde as fases iniciais no processo de desenvolvimento, é que quanto mais tarde o erro é encontrado, mais caro se torna corrigi-lo. Estudos realizados por (LAZIC e MASTORAKIS, 2008), demonstram que, em uma distribuição típica dos erros, 56% deles são inseridos na fase de requisitos, 27% durante o design, 7% durante a implementação do código. Sem os testes, uma enorme porcentagem de erros poderá se propagar para as fases seguintes, provocando a necessidade de retrabalho, ocupando parte da equipe com tarefas de correção. O aumento da frequência dos testes ajuda a evitar estouro do orçamento e dos prazos previstos e a entrega de um produto com requisitos incompatíveis com os solicitados pelo cliente Testes de Regressão Segundo (HARROLD et al., 2001): Teste de regressão é o processo de validar o software modificado para fornecer confiança de que as partes modificadas do software se comportam como deveriam e que as partes inalteradas do software não foram impropriamente afetadas pelas modificações. Neste contexto, as técnicas de Testes de Regressão (RT Regression Test) visam à redução do retrabalho, estipulando quais testes já implementados nas versões anteriores podem ainda ser reutilizados após as últimas modificações. A vantagem do reuso está em sua capacidade de reduzir custos e de explorar o valor associado a cada teste, fazendo com que deixem de ser de uso instantâneo e passem a ser de uso periódico. Elas constituem importante ferramenta no desenvolvimento dos sistemas atuais, cada vez maiores, mais complexos, envolvendo diversos programadores e engenheiros de software, em momentos e contextos diferentes e que evoluem muito constantemente. Apesar do reuso trazer vantagens, reexecutar todos os testes que ainda são válidos pode consumir tempo e recursos excessivos, por incluírem rotinas redundantes, desnecessárias, ou que não avaliam corretamente funcionalidades implementadas anteriormente. Surge então à necessidade de otimizar as 11

23 soluções, garantindo que as novas mudanças não prejudicam o comportamento das funcionalidades preexistentes no sistema Otimização de Técnicas de RT Segundo (YOO e HARMAN, 2012) existem três áreas principais na otimização de técnicas de RT, que envolvem: a seleção, escolha dos testes relevantes, dado um conjunto de mudanças realizadas; a priorização, ordenação dos testes para maximizar alguma variável desejável; e a minimização, eliminação dos testes redundantes e que exercitam trechos comuns. Este estudo, mostra que inúmeros trabalhos têm desenvolvido formas de maximizar o valor do conjunto de testes em cada uma das áreas, elaborados para diferentes tipos de sistemas, onde 19% delas são avaliadas com SUTs das linguagens C, C++ e C#, 14% com Java e apenas 2% com aplicações web. As técnicas de seleção dos testes de regressão (RTS Regression Tests Selection) (ROTHERMEL e HARROLD, 1996) visam à redução do conjunto final dos casos de teste, selecionando apenas os mais relevantes para que as partes recém-modificadas sejam exercitadas, mantendo assim, apenas testes que possuam a capacidade de revelar falhas. As técnicas de minimização dos testes de regressão (RTM Regression Tests Minimization) (ROTHERMEL et al., 2002) buscam também reduzir o conjunto final dos casos de teste que serão reexecutados, eliminando aqueles que exercitam partes semelhantes do sistema, de tal forma que haja ao menos um caso de teste para cada requisito de teste (componente a ser testado). Finalmente, as técnicas de priorização dos testes de regressão (RTP Regression Tests Prioritization) (ROTHERMEL, 1999) buscam ordenar os casos de teste com base em alguma propriedade desejável, como por exemplo, maximizar a taxa de descoberta de faltas. Diferente da seleção e da minimização, a priorização não reduz o conjunto resultante dos casos de teste, realiza apenas permutações na ordem de execução para atingir o objetivo proposto, permitindo também a interrupção prematura a qualquer momento, com base em algum critério arbitrário. 12

24 Técnicas de RTS Em (ROTHERMEL, 1996) é feita uma análise aprofundada sobre o problema da seleção de testes de regressão, onde ele é subdividido em algumas definições, serão citadas 5 delas. Vale ressaltar que a avaliação de uma RTS ocorre em um contexto diferente daquele onde são utilizadas, para avaliar uma RTS os testes são executados em ambas as versões, inicial e final, para que seja possível verificar se o conjunto dos testes sugeridos pela técnica está corretos e completo. Na nomenclatura adotada nas definições, P representa a versão inicial do SUT analisado e P a versão final, após as modificações. Ocorrências como P(i) ou P (i) representam o resultado obtido pelos programas para a entrada i. Já o termo t, representa um teste pertencente ao conjunto de todos os testes T e cada teste possui um número identificador n, uma entrada i e uma saída especificada S(i), caso seja executado para o P(i), e S (i), caso seja executado para o programa P (i). Definição 1: Dado um teste t = n, i, S(i) T; t é obsoleto para P se e somente se i D(S ) S (i) S(i). Se t não atende a esta definição diz-se que ele é não obsoleto. Na Definição 1 o autor define o conceito de teste obsoleto, teste este cuja entrada fornecida ao programa não pertence ao domínio especificado pelo programa ou cujo resultado especificado para a versão inicial do programa seja diferente do resultado especificado para a versão final do programa. Testes obsoletos não funcionam corretamente na versão final, caso uma RTS o selecione, estaria simplesmente elevando os custos da regressão sem benefício algum. Definição 2: Um teste t = n, i, S(i) T; é capaz de revelar uma falta para P se e somente se obsoleto(t) P (i) S (i). Na Definição 2 fica claro o principal objetivo de um teste de regressão, teste este capaz de revelar faltas. Este tipo é definido como o teste, não obsoleto, cujo resultado da execução da versão final do programa seja diferente do 13

25 resultado especificado para esta versão. Não existe algoritmo que resolva este problema sem antes ter de executar todos os testes, comparando os resultados obtidos com os resultados esperados, este algoritmo seria extremamente dispendioso e iria de encontro com o objetivo das técnicas RTS de reduzir os custos da regressão, além do mais, é extremamente complicado definir com perfeição a especificação de um programa, motivo pelo qual muitas vezes a especificação nem sequer é definida. Definição 3: Um teste t = n, i, S(i) T; é capaz de revelar uma modificação para P e P se e somente se obsoleto(t) P (i) P(i). Para contornar este problema, Rothermel propõe a alternativa da Definição 3, que apresenta o conceito do teste capaz de revelar modificações. Um teste que revela uma modificação é aquele, não obsoleto, cujo resultado da execução da versão final do programa seja diferente do resultado da versão inicial. É possível garantir que se o programa possui faltas, elas foram introduzidas nas novas modificações do sistema e, além do mais, revelar modificações demonstra-se como um problema mais simples do que revelar faltas, pois não depende mais da especificação do programa na versão final, ao invés disso, utiliza apenas a execução da versão final. Até o momento é possível determinar que um programa mudou entre ambas as versões, entretanto, não é possível determinar onde esta modificação ocorreu. Definição 4: Tomando o ET(P(i)) e o ET(P (i)) como rastreamentos de execução. Diz-se que ET(P(i)) e ET(P (i)) são equivalentes, isto é, ET(P(i)) ET(P (i)), se e somente se [Tam(ET(P(i))) = Tam(ET(P (i)))] [[( k)(1 k Tam(ET(P(i))))(Cód(ET(P(i)), k) Cód(ET(P (i)), k))]]. Aprimorando a solução anterior o autor propõe a Definição 4, que conceitua a equivalência entre dois rastreamentos de execução (Execution Traces). Um Execution Trace representa a sequência de linhas de código executadas pelo programa para uma dada entrada. Dois Execution Traces são equivalentes quando apresentam a mesma quantidade de linhas executadas e igualdade de conteúdo para cada linha de código na sequência da execução. 14

26 Dessa forma é possível identificar qual linha foi modificada, caso os Execution Traces não sejam equivalentes, é o que propõe a Definição 6. Definição 6: Um teste t = n, i, S(i) T é capaz de cruzar com uma modificação para P e P se e somente se obsoleto(t) ET(P(i)) ET(P (i)). Nesta última definição é criado o conceito do teste capaz de cruzar com uma modificação, que são aqueles, não obsoletos, cujo Execution Trace da versão inicial não é equivalente ao Execution Trace da versão final. Reunindo todas as definições, é possível concluir que o principal conjunto no qual uma RTS se baseia para selecionar os testes é o conjunto de modificações identificadas entre as versões inicial e final Técnicas de RTS Baseadas em Diferenciação Textual Uma técnica de RTS é dita como baseada em diferenciação textual se houver alguma comparação entre as versões final e inicial do código, no intuito de descobrir quais foram as mudanças realizadas. Caso algum componente que existia na versão inicial, deixe de existir na final, entende-se que este foi excluído, e caso um componente, que não existia na versão inicial, for encontrado na versão final, entender-se que este foi adicionado. Os componentes que permanecerem em ambas as versões podem ainda terem sido modificados internamente, conforme a estruturação da linguagem de programação. Uma classe pode continuar existindo em ambas as versões, mas é preciso garantir que seus métodos continuam idênticos. A granularidade da análise pode variar de técnica para técnica, indo desde a assinatura das classes, dos métodos, ou de seus conteúdos, até os fluxos de controle do algoritmo. Como já foi dito, o estudo apresentado neste trabalho (Capítulo 4) avalia o desempenho da técnica Pythia, proposta originalmente por (VOKOLOS e FRANKL, 1997), cujo funcionamento segue a sequência de passos descritas a seguir, e que atendem as definições propostas por (ROTHERMEL, 1996). 15

27 Primeiramente a técnica Pythia se baseia em alguma instrumentação de código, que permita rastrear quais métodos são executados para cada teste realizado (Definição 4). Este mapeamento funcionará como um histórico de execução dos testes e é a partir dele que a técnica irá propor testes para uma versão futura. Como é fácil de constatar, a técnica exigirá que todos os testes sejam executados em uma versão dita inicial, e só então poderá propor testes de regressão para uma versão futura. Um segundo passo importante para a implementação da técnica é que ela seja capaz de identificar o que mudou entre a versão inicial, onde os testes já foram executados, e a versão final. Esta capacidade fica por conta da sua abordagem de diferenciação textual. Alternativamente ao proposto na definição 3, a técnica basicamente irá analisar cada um dos arquivos de código-fonte que compõem o sistema de software, e para cada um irá identificar quais linhas foram modificadas entre ambas as versões. A Pythia foi originalmente desenvolvida para a Linguagem C, que possui natureza procedural, isto é, permite a implementação de rotinas, sub-rotinas e métodos, assim como na Linguagem Java, na qual foi implementada uma nova versão. Isso posto, faz-se necessário que a técnica descubra não só as linhas que foram modificadas, mas também, os métodos. Para tanto, foi desenvolvida uma estrutura capaz de analisar o código-fonte e determinar: quais são os métodos presentes nos arquivos e em quais linhas eles se iniciam e finalizam. Desta forma, torna-se trivial determinar a quais métodos pertencem as linhas modificadas. Vale observar que linhas novas, isto é, que foram adicionadas, devem ter seu método continente analisado na versão final, onde elas passaram a existir, já as linhas antigas e que foram removidas, existiam apenas na versão inicial, que é de onde se deve obter seu método continente. O terceiro passo dessa técnica consiste em cruzar as informações dos métodos cobertos pelos testes na versão inicial com as informações dos métodos que sofreram modificações entre a versão inicial e final (Definição 6). Através da operação de intersecção dos conjuntos obtem-se a relação dos métodos que são simultaneamente modificados entre as versões e cobertos pelos testes. 16

28 Por fim, com base nos métodos modificados e cobertos, a técnica só precisa rastrear quais foram os testes que cobriram tais métodos, propondo-os como cruciais para os testes da versão final. Como visto anteriormente, a Pythia é dita segura, pois sempre propõe todos os testes que eram realmente necessários para a versão final, o que, entretanto, não a impede que proponha testes desnecessários. Isso faz dela uma técnica imprecisa. Basta que um teste existente na versão inicial e proposto como necessário, demonstre-se obsoleto (Definição 1) na versão final, como a técnica não é capaz de identificar tal obsolescência, acaba por propor erroneamente o teste. Outra possível fonte de erros é a granularidade da análise. Como as modificações são analisadas a nível de método, ignorando as estruturas de controle internas, a técnica pode sugerir um testes que exercita o método, mas não a linha modificada, gerando resultados imprecisos. Alguns analisadores utilizam estruturas de grafos de fluxo de controle mais elaboradas, para analisar a estrutura dos algoritmos, levando em consideração os conceitos de orientação a objetos e todo o fluxo de controle de cada condição do algoritmo. Apesar de serem mais custosos estes analisadores são muito mais precisos, levando em consideração toda a semântica do algoritmo Instrumentação de Código A instrumentação é uma estratégia utilizada para monitorar um dado sistema em execução, coletando informações que sejam úteis para uma dada abordagem. Uma das principais aplicações do AspectJ na instrumentação de código é no rastreamento da execução de programas (PALO, 2002). Sua utilização é bastante comum quando surgem interesses transversais, isto é, quando aspectos de um programa afetam ou são relevantes para outro. No AspectJ, conceituado por (KICZALES, 2001), existem três conceitos principais: os pontos de junção (join points), que possibilitam especificar quais pontos do sistema deveram ser interceptados, bem como suas características; os pontos de corte (pointcuts), que são capazes de reunir diferentes join points 17

29 de acordo com uma lógica estruturada; e por fim os conselhos (advices), que permitem ao desenvolvedor programar uma rotina que será executada em um ponto de junção capturado através da lógica de um ponto de corte. O AspectJ prevê três tipos de advices: o before, que permite executar uma rotina antes que o método interceptado seja executado; o around, que permite a execuc a o de uma rotina antes e depois da execuc a o do método ou mesmo substituir o corpo do método sendo executado e; por fim, o after, que como o próprio termo sugere, permite executar uma rotina após o método interceptado Análise Comparativa A ferramenta RTS Quality se baseia na mesma lógica do framework proposto por (ROTHERMEL, 1996), entretanto, apesar de utilizar duas das mesmas métricas propostas por ele, possui algumas características diferentes, como resume a Tabela 1. Tabela 1. Diferenças entre a RTS Quality e o framework de (ROTHERMEL, 1996). Ferramenta RTS Quality Estrutura inicial: Utiliza apenas o código-fonte de cada versão do sistema; Granularidade da análise: Métodos; Resultados menos precisos, mais rápidos e menos custosos; Identificação das modificações: A diferenciação textual identifica os métodos modificados; Analisa apenas a sintaxe do código modificado; Instrumentação: Captura a assinatura dos métodos executados pelos testes; Cobertura de um teste: Representada pelo conjunto das assinaturas dos métodos chamados durante a execução do teste; Métricas calculadas: Inclusão, precisão, inclusão média e precisão média; Framework de (ROTHERMEL,1996) Estrutura inicial: Gera um CFG para cada versão do sistema; Granularidade da análise: Sub-ramos do CFG; Resultados mais precisos, mais lentos e mais custosos; Identificação das modificações: A comparação entre CFGs identifica os sub-ramos modificados; Analisa tanto a sintaxe quanto a semântica do código modificado; Instrumentação: Identifica os sub-ramos do CFG executados pelos testes; Cobertura de um teste: Representada pela sequência de nós chamados (sub-ramo) durante a execução do teste; Métricas calculadas: Inclusão, precisão, eficiência e generalidade; 18

30 A RTS Quality não realiza nenhuma análise prévia no sistema, deixando para capturar as informações diretamente no código-fonte à medida que este é executado, enquanto o framework, proposto por (ROTHERMEL, 1996), gera um CFG para cada versão do sistema. A ferramenta desenvolvida por este trabalho utiliza a granularidade de métodos para identificar uma modificação, isto é, um método é considerado modificado se pelo menos uma de suas linhas tiver sido modificada, esta unidade de análise pode gerar resultados menos precisos, pois um método pode ser executado por um teste sem, no entanto, ter as linhas modificadas executadas, entretanto, esta unidade de análise permite obter resultados mais rapidamente e consumindo menos recursos computacionais. Já o framework, utiliza a granularidade de sub-ramos do CFG, o que permite saber com exatidão o trecho do programa que foi modificado e/ou exercitado por um teste, o que exige mais tempo e recursos computacionais. A RTS Quality utiliza-se da diferenciação textual para comparar duas versões de um mesmo arquivo de código-fonte e identificar quais linhas estão diferentes. Embora esta abordagem seja capaz de analisar a sintaxe do programa, pode erroneamente sugerir que um método sofreu modificações quando na verdade seu comportando continua inalterado. Isso não acontece com o framework, que realiza uma comparação entre os CFGs de ambas as versões do sistema, sendo capaz de apontar os sub-ramos que introduziram mudanças na semântica do programa, estas sim podem mudar o comportamento do sistema e introduzir novas faltas. A instrumentação tanto da ferramenta quanto do framework analisado, tem o mesmo objetivo de registrar a cobertura de um teste. Na ferramenta, a cobertura de um teste é representada pelo conjunto das assinaturas dos métodos capturadas pela instrumentação durante a execução de um teste, sem repetir as assinaturas, o que reduz a quantidade de dados que precisam ser armazenados. Já no framework, a instrumentação permite acompanhar no CFG a sequência de nós chamados durante a execução do teste, esta sequência de 19

31 nós constitui um sub-ramo do CFG, exigindo mais memória para guardar não só os nós, como a sequência em que ocorrem, mesmo que haja repetições. A RTS Quality finda por calcular duas das métricas também calculadas pelo framework: a inclusão e a precisão. Entretanto, a ferramenta traz duas novas métricas: a inclusão e a precisão médias. Cada uma das médias calculadas representam o resultado médio da inclusão e da precisão obtido pelo conjunto das modificações que apresentaram um mesmo tipo de tarefa que, como sugerido, pode apontar para as origens das deficiências da técnica de RTS utilizada Cálculo das Métricas Para compreender a métrica de inclusão, basta responder a seguinte pergunta: dados os testes da versa o antiga que precisam ser executados novamente na versa o atual, quantos a técnica de RTS conseguiu identificar?. Já para compreender a precisa o, a pergunta que precisa ser respondida é: dados os testes da versão antiga que não precisam ser executados na versão atual, quantos a técnica de RTS conseguiu identificar?. Figura 2. Conjuntos dos testes e as manipulações necessárias. 20

32 Na Figura 2 são apresentados os conjuntos A, B e C, que servem de dados de entrada para que a RTS Quality obtenha os conjuntos T, I e E, utilizados no cálculo das métricas de inclusão e precisão. Cada conjunto pode ser descrito da seguinte forma: (A) contém os testes existentes na versão inicial; (B) contém os testes existentes na versão final; (C) contém os testes que exercitam as modificações da versão final, obtido após a execução de todos os testes de B na versão final e selecionando apenas aqueles que exercutaram alguma modificação; (T) contém todos os testes não obsoletos da versão inicial; (I) contém os testes que a RTS deve incluir na regressão e; (E) contém os testes que a RTS deve excluir da regressão. O problema que uma técnica de RTS deve enfrentar pode ser definido da seguinte forma: a tarefa de identificar testes de regressão implica em selecionar, dentre todos os testes não obsoletos da versão inicial, quais testes exercitam as modificações da versão final. Esta definição desobriga as técnicas de RTS de selecionarem testes novos, que existam apenas na versão final (B), por isso o conjunto de todos os testes não obsoletos (T) não possui testes exclusivos da versão final (B), razão pela qual o conjunto dos testes que exercitam as modificações da versão final (C) foi reduzio ao conjunto dos testes que devem ser incluídos na regressão (I). Para calcular a inclusão (i) de uma tarefa (x), seguindo o que foi proposto por (ROTHERMEL e HARROLD, 1997), é preciso ter em mãos os seguintes conjuntos: a relação dos testes que devem obrigatoriamente ser incluídos na seleção (I) para a tarefa analisada, obtido pela intersecção de A com C; e o conjunto dos testes que a técnica de RTS foi capaz de selecionar (S), também para a tarefa analisada. Desta forma, a porcentagem da correta inclusão de testes no conjunto de regressão, para a tarefa analisada, pode ser obtida através da Equação 1. Equação 1. Cálculo da porcentagem da Inclusão de uma tarefa. i x = S I I 100% 21

33 De forma semelhante à Inclusão, o cálculo da Precisão (p) para uma tarefa (x) também irá analisar os acertos da técnica de RTS, entretanto, serão analisados os testes que ela acertou em excluir do conjunto de regressão. Para tanto, fazem-se necessários os seguintes conjuntos: o conjunto total dos testes pré-existentes e não obsoletos (T); o conjunto dos testes que devem obrigatoriamente ser excluídos do conjunto de regressão (E) para a tarefa analisada; e o conjunto dos testes que a técnica foi capaz de excluir do conjunto de regressão (P) para a tarefa analisada. Os conjunto E e P podem ser obtido a partir de E = T I e de P = T S. Para concluir o cálculo da Precisão computase a Equação 2. Equação 2. Cálculo da porcentagem da Precisão de uma tarefa. p x = P E E 100% 2.7. Características das Modificações Para compreender melhor o impacto que uma modificação exerce sobre uma RTS, é preciso primeiramente compreender a natureza das modificações, conhecer sua granularidade e algumas de suas características. Uma modificação ocorre quando os desenvolvedores tentam remover, corrigir ou aperfeiçoar alguma das funcionalidades de um sistema de software e, como visto, é extremamente difícil prever o impacto que ela causará, pois mesmo ela ocorrendo em uma parte do sistema pode afetar o comportamento de outras partes. Uma RTS precisa identificar todas as partes do sistema que possam apresentar faltas e, como a versão anterior testada é considerada estável, ela busca apenas por locais onde as modificações ocorreram, pois são neles que as faltas podem ocorrer. Caso a RTS não seja capaz de analisar as partes direta e indiretamente impactadas, é provável que cometa erros. Neste contexto, é possível levantar as seguintes dúvidas: (i) o que define o início e o fim de uma modificação? (ii) para uma característica de uma modificação existe algum valor 22

34 que faça a RTS cometer mais erros? E em caso positivo, (iii) que características comuns apresentam as modificações que provocaram o erro da RTS? Uma modificação tem um início e um fim, que determinam quais alterações fazem parte ou não da modificação. A este limite dá-se o nome de unidade de análise, que deve ser escolhida para a análise. Como exemplos de granularidade têm-se: uma linha, um commit no repositório de código, um subramo de um Grafo de Controle de Fluxo (CFG Control Flow Graph), um método, uma classe ou uma tarefa. Tabela 2. Características de uma modificação. Características de uma modificação Tamanho da modificação: Quantidade de linhas, métodos ou classes; Complexidade da modificação: Diferença entre a complexidade antes e depois da modificação; Dono da modificação: O desenvolvedor que a realizou; Tipo da tarefa da modificação: O tipo da tarefa que realizou a modificação; Complexidade ciclomática da modificação: Quantidade de caminhos independentes; Ação da modificação: Adição, modificação ou exclusão; Cada modificação possui ainda um conjunto de características facilmente identificáveis e que podem assumir diferentes valores. A Tabela 2 apresenta algumas destas características, das quais foi selecionado apenas o tipo da tarefa, como explicado mais adiante. Cada valor de cada característica, pode ser facilmente obtido. O tamanho de uma modificação pode ser calculado pela quantidade de linhas, métodos ou classes que foram modificadas. Já a complexidade pode ser calculada pela diferença entre a complexidade antes e depois da modificação. O dono da modificação pode ser obtido através do repositório de código. O tipo da tarefa da modificação pode ser obtido a partir da mineração do banco de dados de uma ferramenta de gerenciamento de mudanças (CMT Data Base). A complexidade 23

35 ciclomática pode ser entendida como a diferença na quantidade de caminhos de execução independentes de um programa, antes e depois de uma modificação. Um programa aqui pode ser representado, por exemplo, por um método ou em um caso de uso, onde ocorreu a modificação. Por fim, a ação de uma modificação pode ser obtida através do repositório de código, verificando se ela adiciona, modifica ou exclui código. Para cada modificação a técnica de RTS utilizada pode sugerir um conjunto de testes que as exercitam, com base nos quais serão calculadas as métricas de inclusão e precisão, que serão apresentadas com mais detalhes na Seção 4.3. Toda via, para compreender o efeito que um valor de uma característica de uma modificação exerce sobre a RTS, as modificações que apresentem características e valores iguais podem ser agrupadas, e entãocalcula-se a média aritmética da inclusão e da precisão para cada valor. Com estas médias, é possível investigar em quais valores é mais frequente que a RTS cometa erros. Este trabalho adotou a característica do tipo da tarefa, com o intuito de investigar o efeito das tarefas sobre qualidade da seleção de testes realizada por uma RTS. É comum encontrar Ferramentas de Gerenciamento de Mudanças (CMT Change Management Tool) sendo utilizadas ao logo de todo o processo de desenvolvimento de um sistema, eles permitem a criação de pequenos processos chamados tarefas, que visam adicionar, modificar, ou remover alguma funcionalidade do sistema de forma organizada, descrevendo em detalhes o que deve ser feito pelos desenvolvedores para cumpri-las. O tipo de cada tarefa distingue a natureza das modificações que serão realizadas e, assim, é possível dizer que estão intimamente associados aos tipos das tarefas das modificações realizadas. 24

36 3. RTS QUALITY Este capítulo apresenta a RTS Quality, uma ferramenta de apoio ao estudo dos impactos que as técnicas de RTS podem sofrer diante dos diferentes tipos de tarefas de cada modificação, que analisam enquanto estimam o conjunto dos testes de regressão necessários a nova versão de um SUT. A Seção 3.1 apresenta uma visão geral da ferramenta, seu propósito, arquitetura e funcionamento. A Seção 3.2 detalha o conjunto de componentes que constituem cada módulo e suas inter-relações. A Seção 3.3 esclarece os procedimento que devem ser seguidos para configurar a ferramenta e fazê-la funcionar. Por fim, a Seção 3.4 apresenta a aplicação da ferramenta a um programa de exemplo, com o objetivo de esclarecer quais são os dados obtidos a cada etapa Arquitetura Geral da Ferramenta A RTS Quality é um plug-in desenvolvido para o Eclipse IDE que tem como objetivo analisar técnicas de seleção de testes de regressão. Ela subdivide-se em 3 módulos, conforme apresentados na Figura 3. São eles: (i) History Miner que é o módulo responsável por obter, entre duas versões de um sistema analisado, a relação das tarefas finalizadas, seus tipos, revisões, bem como o conjunto das modificações realizadas em cada revisão, além também de fazer o checkout dos projetos necessários em cada fase do estudo; (ii) RTS Regression Test Selection que é o responsável por definir uma interface para a ferramenta, possibilitando a implementação de diferentes técnicas de RTS, além também, de acolher a lógica da própria implementação; (iii) Executer é o responsável por coordenar a execução dos diferentes módulos do sistema, dando sequência as fases do estudo que avaliará o desempenho da RTS Além dos módulos principais a RTSQuality possui também 1 subsistema, chamado TTracker. O subsistema TTracker, também desenvolvido por este trabalho, é responsável pela função de instrumentação do sistema sob teste. Ele está subdividido em 3 módulos, que podem ser observados na Figura 3. São eles: (i) 25

37 Test Tracker que é o módulo responsável por rastrear a execução de cada teste, identificando cada um dos métodos chamados por ele; (ii) Instrumentation Data que é o responsável pela estrutura de dados que armazena as informações obtidas pelo Test Tracker e; (iii) File Persistence o responsável por serializar e deserializar os objetos relacionados aos dados do Instrumentation Data persistindo-os e recuperando-os de arquivos. Figura 3. Diagrama de componentes e suas dependências. Na Figura 3, é possível observar também o conjunto das principais bibliotecas externas utilizadas pela ferramenta: (i) Eclipse Platform que possibilita analisar os projetos abertos no eclipse, bem como a implementar o plug-in que faz interface com o usuário; (ii) JUnit que permite que os testes automáticos também tenham sua execução rastreada; (iii) JDBC que implementa os drivers que possibilitam a conexão com as bases de dados da ferramenta de gerenciamento de mudanças (CMT Change Management Tool); (iv) SVNKit que permite consultar informações armazenadas no repositório de código SVN do sistema sob análise e; (v) AspectJ que possibilita a 26

38 implementação da instrumentação que intercepta a execução dos testes, a partir de pontos específicos do sistema. Por fim, é possível observar também os componentes que representam as bases de dados que detêm as informações do sistema sob análise: o (i) CMT Data Base que possui todas as informações relativas as tarefas, descrevendo, para cada uma, as atividades e modificações que devem ser realizadas para seu cumprimento, bem como o andamento de tais modificações; e o (ii) SVN Repository que detém as informações do sistema de controle de versões, contendo os projetos em suas diferentes fases de desenvolvimento, no trunk, nos branches e nas tags Projeto Detalhado da Ferramenta Esta seção apresenta cada um dos componentes que constituem a ferramenta, seus módulos, bibliotecas externas utilizadas durante a implementação, bem como as bases de dados utilizadas pelo sistema sob análise. Observando a Figura 3, é possível identificar o módulo RTSQuality na cor cinza escuro, o módulo do subsistema TTracker na cor preta, os componentes externos na cor cinza claro, e as bases de dados do sistema analisado na cor branca Módulo Executer Este módulo implementa um plug-in utilizando a biblioteca Eclipse Platform e é o responsável por coordenar a execução das funções dos demais módulos, executando-os no momento adequado para o correto sequenciamento das fases do estudo. Cada uma das interações do Executer com classes de outros módulos podem ser observadas na Figura 4, que será explicado a seguir. Antes de iniciar o estudo, o Executer solicita que o usuário defina em arquivos de configuração as informações necessárias para o acesso ao SVN Repository e ao CMT Data Base do sistema analisado. Estas informações são recuperada através do método Executer.loadSVNConfig(...). Outra informação requeridas ao usuário é a especificação dos projetos que compõem o sistema, juntamente com o número das versões inicial e final utilizadas no estudo. Tais 27

39 informações serão recuperadas pelo Executer através do método Executer.loadProjectsManually(). Figura 4. Sequência de execução da RTS Quality. Seguindo a ordem da Figura 4, na Fase 1 do estudo, através do método Executer.obtainTasksModifiedMethods(...), nos passos de 1 a 3, a ferramenta solicita ao History Miner que capture todos os números de tarefas, seus tipos e revisões entre as revisões inicial e final informadas pelo usuário, estas informações são salvas em um XML, para permitir que o estudo possa saltar esta etapa nas próximas execuções. De posse dessas informações, nos passos 4 e 5, o History Miner deve obter também os métodos modificados em cada revisão de cada tarefa, bem como os métodos cujas modificações foram desfeitas durante a revisão. As modificações desfeitas ocorrem quando em uma revisão da tarefa o desenvolvedor realiza alterações, e em outra revisão a desfaz para tentar uma nova abordagem de solução. As modificações desfeitas precisam ser excluídas do conjunto de modificações desta tarefa, caso contrário poderia reunir métodos equivocadamente. Na Fase 2, o Executer, nos passos de 6 a 8, solicita ao History Miner que faça o checkout da revisão inicial do sistema, baixando cada um dos projetos necessários, e incluindo neles a instrumentação do Módulo TTracker, isto é feito através do método Executer.checkoutExecuteDelete(...). Nos passos de 9 a 28

40 12 o Executer é interrompido para que o usuário compile os projetos, rode o sistema e execute cada um dos testes manuais especificados para esta versão. Após estes procedimentos, o Executer retoma o controle e recupera o Instrumentation Data contendo os Execution Traces gerados durante a execução dos testes, adicionando ao Instrumentation Data todos os demais métodos que não foram cobertos pelos testes, chamando o seguinte método: ProjectUtil.setAllUncoveredMethods(...). Em seguida, nos passos de 13 a 15, a RTS escolhida é executada para que selecione quais testes devem e quais não devem ser reexecutados após as modificações de cada tarefa. O conjunto de todos os testes e os conjuntos de inclusão e precisão são salvos em arquivos. Na Fase 3, nos passos 16 e 17, o Executer solicita ao History Miner que faça o checkout da revisão final do sistema, passando o controle, nos passos de 18 a 20, para que o usuário execute os mesmos procedimentos da revisão inicial. Ao finalizar todos os testes programados, o Executer retoma o controle e, nos passos 21 e 22, ele mesmo obtém quais testes eram realmente necessários, como base nos Execution Traces gerados na execução dos testes na revisão final. Então, antes de seguir para a próxima fase, os resultados são salvos em arquivos, através do método FileUtil.saveObjectToFile(...). Na Fase 4, para cada tarefa, nos passos 23 e 24, o Execute calcula as métricas de inclusão, com base nos testes que a técnica de RTS selecionou, e as métricas de precisão, com base nos testes que a RTS excluiu. Tanto a seleção quanto a exclusão da RTS, são comparadas a seleção e a exclusão realizada pelo Executer, para obter a quantidade de acertos. Os cálculos necessários para obtenção das métricas de inclusão e precisão serão posteriormente detalhados na Seção 4.3, e são calculadas através do método Executer.calculateMetricsAndAverages(...). Após calcular as métricas, nos passos 25 e 26, as tarefas são agrupadas com base em seus tipos e, nos passos 27 e 28, para cada tipo é calculada a inclusão e precisão médias, através do método Executer.finalizeAverages(...). 29

41 Módulo History Miner Este módulo foi customizado para atender ao processo de desenvolvimento do SIGAA, onde cada versão validada contém as modificações de um conjunto de tarefas finalizadas, cada tarefa é implementada no trunk do SVN Repository, e quando todas as tarefas que constituem uma versão são finalizadas, as modificações são copiadas uma por uma para o branch de produção, registrando sempre o número da tarefa copiada nos logs. Quando todas as tarefas são copiadas para produção, testadas e validadas, é feita uma cópia para uma nova tag, onde a versão ficará registrada. É possível observar este processo de controle de versões em no exemplo de um sistema fictício apresentado nas Tabelas 3 e 4. A Tabela 3 descreve três diferentes versões de um sistema, discriminando cada uma das tarefas que são requeridas para que o sistema evolua de uma versão para a seguinte. Cada tarefa por sua vez necessitará de uma ou mais revisões no trunk para que seja dada como finalizada, quando todas as tarefas de uma versão forem concluídas, cada modificação realizada será transferida para o branch de produção, onde as modificações serão postas a prova pela equipe de testes e validada pelos projetistas e arquitetos. Ao finalizar a validação, a versão pode então ser copiada para uma tag, recebendo o nome do sistema e o número da versão. Tabela 3. Exemplo de sistema: versões e suas tarefas necessárias. version required tasks 1 1 and and and... A Tabela 4 exemplifica a evolução do sistema através das revisões, cada revisão representa um commit de código submetido ao SVN Repository em seus diferentes diretórios (trunk, branch e tag). Notem que foram necessárias duas revisões (1 e 2) para finalizar a tarefa 1 e mais outra revisão (3) para finalizar a última tarefa necessária à versão 1 do sistema. Neste ponto, as modificações de cada tarefa são copiadas individualmente para o branch de produção nas 30

42 revisões 4 e 5 e, após copiar e validar todas as modificações, uma nova cópia é feita para a tag da versão 1 (revisão 6). A versão da tag geralmente é um número a mais que a revisão do branch, por exemplo as revisões 6 e 5 respectivamente, entretanto, pode acontecer de um outro commit ser realizado depois da validação e antes da cópia do sistema para a tag, como o commit da revisão 13, sendo assim, a forma correta de se obter a revisão no branch que possua código equivalente ao da revisão na tag, é procurando pela última revisão no branch que ocorreu antes da revisão na tag. Tabela 4. Exemplo de commits em um repositório SVN. revisions trunk branch tag commit log 1 changes of task 1 2 changes of task 1 3 changes of task 2 4 copy of changes on trunk 2 task 1 finished 5 copy of changes on trunk 3 task 2 finished 6 copy of branch 5 version 1 finished 7 changes of task 3 8 changes of task 4 9 changes of task 5 10 changes of task 3 11 copy of changes on trunk 8 task 4 finished 12 copy of changes on trunk 10 task 3 finished 13 changes of task 5 14 copy of branch 12 version 2 finished O History Miner funciona da seguinte forma, as versões inicial e final do sistema, informadas pelo usuário ao Executer, estão registradas em duas tags distintas, entretanto, nelas não há registo algum de quais tarefas foram atendidas para que uma versão evoluísse até a outra. Tais informações serão encontradas apenas no branch de produção. Desta forma, é preciso obter, para cada tag, sua revisão correspondente no branch de produção, isto é feito através do método HistoryMiner.getHeadRevision(...). Como a tag é uma cópia no tempo do branch de produção, é possível concluir que a revisão no branch é algum número inferior a revisão da tag, bastando consultar qual foi o último commit no branch antes da cópia, através do método HistoryMiner.getPreviousRevision(...). E assim, o History Miner obtém as revisões inicial e final no branch para cada 31

43 versão do sistema. Vale observar que a revisão inicial corresponde ao sistema antes das modificações, sendo assim, as modificações não serão procuradas nesta revisão, por isso serão analisadas as revisões a partir da subsequente da revisão inicial, para obtê-la é utilizado o método HistoryMiner.getNextRevision(...). Para que o History Miner obtenha as tarefas realizadas entre as revisões, ele consulta todos os logs das operações de commit no branch de produção entre as duas revisões, onde é possível encontrar os números de identificação de cada tarefa, registrados pelos próprios desenvolvedores, através do método HistoryMiner.getTaskNumberFromLogMessage(...). Após recuperar todos os números das tarefas, o History Miner utiliza a biblioteca do JDBC para consultar o CMT Data Base, onde pode encontrar as tarefas válidas a partir de seus identificadores, recuperando, também, outras informações relevantes ao estudo como seus tipos e logs de andamento. É a partir destes logs que serão extraídos os números das revisões no trunk, onde as modificações foram de fato realizadas. O identificador das revisões também são registrados pelos próprios desenvolvedores, à medida que concluem suas tentativas de atender a tarefa. Esta função está disponível através do método HistoryMiner.populateTasksTypeById(...). Como visto, as revisões das modificações se encontram no trunk, desta forma, o History Miner pode consultar tais revisões para obter cada uma das linhas modificadas em cada arquivo de classe Java do sistema, utilizando a operação SVNDiffClient.doDiff(...) do SVNKit. Além das modificações, ele analisa cada classe Java modificada para obter as linhas de início e fim de cada método, assim é possível inferir a quais métodos pertencem cada uma das linhas incluídas, na nova versão da classe, e das excluídas, na versão antiga da classe. Ao analisar todas as revisões de cada tarefa o History Miner obtém a relação dos métodos modificados entre as duas versões, função, esta, implementada pelo método HistoryMiner.getChangedMethodsSignaturesFromProjects(...). Outra operação desempenhada pelo History Miner é a de baixar os projetos com base numa revisão informada pelo Executer, através do método 32

44 HistoryMiner.checkouOrUpdateProjects(...), que por sua vez, ao ser solicitado, executa o método SVNUpdateClient.doCheckout(...) do SVNKit para cada um dos projetos que compõem o sistema. Cada projeto do sistema que deve ser rastreado recebe a instrumentação do TTracker através do método HistoryMiner.configureAspectJ(...), em seguida, todos os projetos são convertidos em projetos eclipse, e posteriormente importado para o Project Explorer do Eclipse, através do método HistoryMiner.importProject(...). A partir deste ponto o usuário é capaz de, utilizando o próprio eclipse para compilar, rodar e executar os testes no sistema. Figura 5. Classes do módulo History Miner e suas associações. 33

45 A seguir serão descritas as associações entre as classes deste módulo conforme apresentadas na Figura 5. A classe SVNConfig recebe do Executer as informações da URL, do usuário e da senha para acesso ao SVN Repository. A classe ChangedAssetsMinerUtil implementa os ativos modificados dos projetos, sendo capazes de fornecer as UpdatedLines, que representam as linhas alteradas de cada classe. O conjunto das UpdatedLines de uma classe constituem uma ClasseUpdates, várias destas, por sua vez, constituem o conjunto de atualizações de um mesmo projeto, o ProjectUpdates. A classe MethodLimitBuilder é capaz de determinar, a partir das classes modificadas, quais são as linhas limite dos métodos, isto é, linhas de início e de fim de cada método, os chamados MethodLimits, que permitem que o UpdatedMethod descubra a quais MethodLimits as UpdatedLines pertencem, consequentemente descobrindo quais foram os métodos modificados Módulo RTS Regression Test Selection Este módulo é inicializado pelo Executer ao criar um objeto da classe pai RegressionTestTechnique, para receber uma instância de uma classe filha que implemente a lógica de uma técnica de RTS. No caso do estudo realizado neste trabalho, a classe filha Pythia implementa a técnica de mesmo nome, descrita na Seção A classe pai possui alguns parâmetros comuns a todas as técnicas de RTS e alguns métodos abstratos, que serão os únicos utilizados pela ferramenta durante o estudo, o que permite que novas técnicas sejam implementadas sem a necessidade de realizar modificações no Executer. A classe filha se encarrega de implementar cada um dos métodos abstratos da classe pai conforme sua própria lógica. Ambas as classes, pai e filha, podem ser observadas na Figura 6. Ainda antes que o Executer rode a RTS, ela poderá precisar receber algumas informações não previstas pela classe pai, mas cruciais a sua execução. Isto é possível através do método RegressionTestTechnique.setConfiguration(...). No caso da Pythia, que se baseia na versão inicial do sistema para inferir os testes necessários à versão 34

46 final, o Executer precisará passar o Instrumentation Data contendo os Execution Traces gerados durante a execução dos testes. Outra informação crucial é a relação dos métodos modificados entre as versões inicial e final, que são enviadas à técnica através do método RegressionTestTechnique.setModifiedMethods(...). Como a RTSQuality utiliza-se da mesma abordagem de busca pelas modificações de que a Pythia faz uso, para evitar redundância a ferramenta obtém o conjunto e o compartilha com a Pythia, caso a RTS utilize uma abordagem de busca pelas modificações diferente da ferramenta, deverá implementar sua própria lógica. Feito isto, o Executer pode chamar o método principal da RTS, o RegressionTestTechnique.executeRegression(), que se encarrega de consultar cada uma das modificações no Instrumentation Data configurado, retornando o conjunto de testes que cobriram os métodos modificados. Figura 6. Classes do módulo RTS e suas associações. Outros dois métodos abstratos presentes na classe pai são o RegressionTestTechnique.getMethodStatePool(...) e o RegressionTestTechnique.getSelectedTestCoverages(), que exigem que a RTS seja capaz de retornar duas informações: os estados dos métodos contidos em sua instância do Instrumentation Data, que descrevem se o método foi 35

47 coberto e/ou modificado durante o processo de evolução entre as duas versões e; o conjunto dos testes selecionados pela técnica. Estas duas informações são importantes para que seja possível a realização dos cálculos das métricas de inclusão e precisão Subsistema TTracker O subsistema TTracker é o módulo responsável por rastrear a execução dos testes, gerando as chamadas Execution Traces, utilizando a estrutura de dados do módulo Instrumentation Data. Ele é capaz de obter e armazenar quatro tipos básicos de informações: a assinatura dos métodos que iniciam a execução dos testes, as entradas que estes métodos recebem por parâmetro, a relação de todos os métodos chamados a partir dos testes e, para cada método chamado, o conjunto dos testes que o exercitaram. Apesar de ser gerada nesta ordem, os Execution Traces são construídos para serem lidos na forma reversa, pois é desejado que, a partir de um método, seja possível identificar quais foram os testes que o exercitaram Módulo Test Tracker Este é o módulo responsável por implementar toda a lógica de captura de informações utilizando o AspectJ. O aspecto implementado possui dois Advices principais, um Before e um After., tornando-os ideais para registrar a execução de testes manuais no sistema, tendo em vista que são os primeiros métodos chamados pelo usuário ao utilizar a interface. Neste trabalho, a instrumentação desenvolvida tem interesse em capturar o fluxo de chamadas de métodos de ação, de classes descritas como Managed Beans, frequentemente utilizados para submeter requisições ao servidor de um sistema Web. Através de um pointcut, os métodos executados são monitorados por um advice before, que captura a assinatura e as entradas que foram passadas ao método, a captura prossegue para cada método subsequentes chamado a partir da ação, obtendo para cada um os mesmos tipos de informações. Quando um método chamado pelo fluxo retorna seu resultado, um advice after se encarrega de capturar sua 36

48 assinatura e verificar se ela corresponde a assinatura do método de ação que iniciou o fluxo de chamadas, em caso afirmativo a captura é finalizada. Esta solução objetiva implementar o que foi proposto na Definição 4 para técnicas de RTS (Seção 2.3.1), que trata das estruturas de rastreamentos da execução (Execution Traces). Incluir esta instrumentação em um sistema web baseado em Managed Beans permite capturar os Execution Traces de cada teste executado manualmente. Os métodos interceptados pelo Advice Before são definidos pelo pointcut beforemanagedbeanaction(), que intercepta um método sempre que classificado como um método de ação pertencente a um Managed Bean, ou como um método chamado a partir de um destes. Para tanto, durante a compilação, o AspectJ introduz a rotina deste Advice antes de todos os métodos que pertençam a uma classe que possua a exceto para construtores e métodos iniciados com get, is ou set, não esquecendo de introduzir a rotina, também, antes de todos os métodos chamados a partir deste, independentemente de sua classificação. A rotina implementada pelo Adivice Before recupera a estrutura de dados do Instrumentation Data e verifica se existe algum Execution Trace aberto através do método TestCoverageMapping.getOpenedTestCoverage(), em caso negativo, uma novo Execution Trace é criado e inserido na estrutura de dados, contendo a assinatura do método e as entradas passadas por parâmetro. Em caso positivo, o método é inserido no Execution Trace já aberto, sendo este inserido também no próprio método, que mantem um conjunto contendo todos os testes que já o exercitaram. Os métodos interceptados pelo Advice After são definidos pelo pointcut aftermanagedbeanaction(), que intercepta apenas os método classificados como de ação pertencente a um Managed Bean, não interceptando os métodos chamados a partir dele. Para tanto, durante a compilação, o AspectJ introduz a rotina deste Advice depois de tais métodos. Este pointcut é utilizado como condição de parada, tendo em vista que os testes serão considerados finalizados quando a ação do Managed Bean também o for. 37

49 A rotina implementada no Adivice After identifica que o método interceptado possuir a mesma assinatura daquele que iniciou o teste, isto feito, fecha o Execution Trace aberto utilizando o método TestCoverageMapping.finishTestCoverage() e persiste a estrutura de dados em um arquivo como método TestCoverageMapping.save(), dando por finalizado o teste. Alternativamente, os pointcuits são capazes de rastrear também os testes automatizados utilizando o JUnit, isso porque eles também buscam por métodos pertencentes a uma classe de testes, isto é, classes que estendam a classe TestCase do framework JUnit 3 ou possua a do JUnit 4. Para utilizar testes automatizados não há necessidade de configurações, pois ambos os modos são utilizados simultaneamente Módulo Instrumentation Data Este módulo possui todas as classes que compõem a estrutura de dados da ferramenta, ela é capaz de armazenar as informações dos Execution Traces de todos os testes, salvando informações sobre métodos, testes, tarefas e revisões envolvidas com o estudo. Cada uma das classes envolvidas com este módulo podem ser observadas na Figura 7 mais adiante, conforme descrito a seguir. A classe TestCoverageMapping é a principal da estrutura de dados do módulo Instrumentation Data, pois reúne todas as informações coletadas pela ferramenta. Ela implementa o padrão Singleton, onde todas as informações estão armazenadas em uma única instância estática da própria classe. Esta instância manipula diferentes tipos de objetos, apresentado a seguir. Um TestCoverage armazena o Execution Trace de um método de ação de um Managed Bean, quando o teste é manual, ou de um método de um TestCase JUnit, quando o teste é automático. Todos as instâncias finalizadas da classe TestCoverage ficam armazenadas em um conjunto chamado testcoverage, já as que ainda estão em construção, ficam dentro de um conjunto chamado testcoveragebuilding. Cada método do Execution Trace é armazenado em um MethodData, que por sua vez são armazenados dentro de 38

50 Figura 7. Classes do módulo Instrumentation Data e suas associações. dois mapeamentos distintos, um chamado methodpool e outro cham ado methodpoolstate, este último correlaciona os métodos do methodpool com o seu estado, isto é, se ele foi modificado ou coberto. Esta informação é armazenada em um MethodState dentro do MethodData. Cada teste é representado por um TestCoverageGroup, que reuni uma ou mais instâncias da classe TestCoverage. Cada execução realizada durante a 39

51 etapa de testes é rastreada e armazenada em um TestCoverage, dentro de um mesmo TestCoverageGroup, até que o usuário informe através da interface, que o teste foi finalizado, assim, as próximas instâncias de TestCoverage farão parte do próximo TestCoverageGroup. Quando os testes são automatizados não é necessário informar quando o teste for finalizado, pois cada TestCoverageGroup será finalizado após a inclusão do primeiro TestCoverage. Para cada novo método de ação executado, o módulo Test Tracker cria uma nova instância da classe TestCoverage, inserindo-a na estrutura de dados através do método TestCoverageMapping.addTestCoverageBuilding(...). Esta instância armazena a assinatura do método que iniciou a ação e todos os métodos que forem chamados a partir dele, os chamados métodos cobertos ou CoveredMethod, utilizando o método chamado TestCoverage.addCoveredMethod(...). O CoveredMethod contém a lista dos parâmetros de entrada passados ao método durante sua execução e também um MethodData, que será único em toda a estrutura de dados, sendo criado uma única vez e recuperado através do mapeamento methodpool nas demais vezes, através do método TestCoverageMapping.findOrCreateMethodData(...). O MethodData armazena a assinatura do método, seu estado de coberto e na o modificado em um MethodState, bem como, adiciona o TestCoverage que o cobriu em sua lista chamada testscoverage, que contém todos os testes que o cobriram até o momento. Esta organização justifica o alto grau de acoplamento entre estas classes TestCoverage, CoveredMethod e MethodData. Após a captura dos testes, as classes MethodData e MethodState são também utilizadas pelo Executer, que inclui na estrutura todos os métodos do sistema que na o foram cobertos pelos testes, definindo seus MethodState como na o coberto e na o modificado, através do método ProjectUtil.setAllUncoveredMethods(...). Em seguida, recupera da lista de tarefas todas as assinaturas dos métodos que foram modificados entre as revisões inicial e final, utilizando o método Executer.getTasksModifiedMethods(), com esta lista, executa o método 40

52 TestCoverageMapping.setModifiedMethods() para alterar o estado de tais métodos da estrutura de dados de na o modificado para modificado. Toda esta organização permite que consultas sejam realizadas, tais como: quais métodos foram modificados?, quais outros foram cobertos por testes?, quais testes cobriram um determinado método?, quais métodos modificados foram cobertos por testes?, ou o mais importante para o módulo RTS, referente a selec a o dos testes, quais testes cobrem métodos modificados?. Tais consultas estão respectivamente disponíveis através dos métodos da classe TestCoverageMapping mostrados a seguir: getmodifiednotcoveredmethods(), getnotmodifiedcoveredmethods(), gettestscoveragebycalledmethod(), getmodifiedcoveredmethods() e gettestscoveragemodifiedmethods(). Para ajudar a compreender a composição e o encapsulamento das classes que compõem a estrutura de dados deste módulo, a Figura 8 foi elaborada, onde as composições das classes são apresentadas. Figura 8. Composição e encapsulamento das classes do Instrumentation Data Módulo File Persistence Este módulo permite salvar objetos serializáveis e textos em arquivo na forma de stream, através dos métodos FileUtil.saveObjectToFile(...) e 41

53 FileUtil.saveTextToFile(...), bem como as operações reversas utilizando os métodos FileUtil.loadObjectFromFile(...) e FileUtil.loadTextFromFile(...). Todas as classes do Instrumentation Data são serializáveis, permitindo persisti-las ao longo do estudo. As informações salvas serão utilizadas posteriormente por outros módulos em diferentes fases do estudo. O Executer salva as tarefas, suas revisões e modificações para que seja possível continuar o estudo sem ter que obtê-las novamente. As técnicas de RTS salvam três conjuntos de testes distintos, um contendo todos os testes, outro contendo todos os testes selecionados por ela, e outro contendo todos os excluídos. O Executer, durante o processo de identificação dos testes que realmente deveriam ter sido incluídos pela técnica, salva seus próprios conjuntos de inclusão e exclusão de testes. Ao finalizar a análise dos testes em ambas as revisões, o Executer recupera todos os conjuntos citados para utilizá-los nos cálculos das métricas Instanciação e Funcionamento da Infraestrutura Para que o estudo seja iniciado, agora que detalhes do funcionamento da RTS Quality foram esclarecidos, resta: implementar uma técnica de RTS e apresentar as características do sistema sob teste (SUT), que serão essenciais para que a ferramenta funcione. Para desenvolver uma técnica de regressão utilizando o módulo RTS, a técnica deve implementar uma nova classe que estenda a classe pai RegressionTestTechnique, como visto na Seção 3.2.3, implementando os métodos exigidos incluindo neles sua própria lógica, sendo implementada no mesmo pacote que a classe pai (br.ufrn.dimap.rtquality.regressiontest). Para que a ferramenta funcione, é preciso que o SUT deve ter implantado o sistema de controle de versões, o SVN Repository e possuir uma ferramenta de gerenciamento de mudanças (CMT). O SVN Repository deve possuir uma grande quantidade de revisões que atendam diferentes tipos de tarefas cadastradas pelos desenvolvedores no CMT Data Base, para reforçar a validade 42

54 dos resultados obtidos no estudo. Ambas as ferramentas devem fornecer acesso às suas bases de dados. Faz-se ainda necessário que a equipe de testes forneça dois conjuntos de informações à RTS Quality, cada um contendo as URLs, os usuários e as senhas para acessar o SVN Repository e a CMT Data Base. Cada uma destes conjuntos deve ser descrito em um arquivos XML dentro do próprio workspace do SUT, em um diretório chamado config. Os arquivos devem se chamar dbinfosvn.xml e dbinfocmt.xml, que seguem a mesma estrutura apresentada na Listagem 1. <dbinfo> <url>http://scenario-analyzer.googlecode.com/svn</url> <user>username</user> <password>userpassword</password> </dbinfo> Listagem 1. XML contendo as informações para acesso a uma base de dados. SELECT tipo_tarefa.denominacao tipo, status_tarefa.denominacao status FROM iproject.tarefa INNER JOIN iproject.tipo_tarefa ON tarefa.id_tipo_tarefa = tipo_tarefa.id_tipo_tarefa INNER JOIN iproject.status_tarefa ON tarefa.id_status = status_tarefa.id WHERE tarefa.numtarefa =? Listagem 2. Script SQL para obter o tipo e o estado de uma tarefa do SIGAA. SELECT substring(log_tarefa.log, '([Revisão revisão Revisao revisao]+[: ]*[0-9]+)') revisao FROM iproject.log_tarefa INNER JOIN iproject.tarefa ON log_tarefa.id_tarefa = tarefa.id_tarefa INNER JOIN iproject.tipo_tarefa ON tarefa.id_tipo_tarefa = tipo_tarefa.id_tipo_tarefa WHERE tarefa.numtarefa =? AND log_tarefa.log ~ '([Revisão revisão Revisao revisao]+[: ]*[0-9]+)' Listagem 3. Script SQL para obter as revisões de uma tarefa do SIGAA. Para a CMT, será necessário também a elaboração de dois arquivos de scripts SQL, salvos também no diretório config. Os scripts devera o se chamar tasksearch.sql, que conterá um script SQL para recuperar o tipo e o estado 43

55 de uma tarefa a partir de seu número identificador, e revisionsearch.sql, um script SQL para recuperar todas as revisões de uma tarefa, também a partir de seu identificador. Para o SIGAA foram utilizados os scripts SQL tasksearch.sql e revisionsearch.sql apresentados na Listagem 2 e 3, respectivamente. Caso a CMT não permita acessar sua base de dados nem realizar consultas SQL, a equipe de testes deverá obter manualmente as tarefas e suas revisões, ocorridas entre a revisão inicial e final, através das consultas que a interface da CMT disponibilize. Caso seja possível obter as tarefas, suas informações devem ser organizadas em um arquivo XML, dentro do diretório config, chamado tasks.xml, conforme exemplificado na Listagem 4. <list> <br.ufrn.dimap.ttracker.data.task> <id>120986</id> <type>erronegociovalidacao</type> <revisions> <br.ufrn.dimap.ttracker.data.revision> <id>153679</id> </br.ufrn.dimap.ttracker.data.revision> <br.ufrn.dimap.ttracker.data.revision> <id>153680</id> </br.ufrn.dimap.ttracker.data.revision> </revisions> </br.ufrn.dimap.ttracker.data.task> </list> Listagem 4. XML contendo a relação das tarefas e suas revisões. É comum que alguns sistemas possuam mais de um projeto que combinados implementam o SUT completo, além disso, o próprio projeto do TTracker fará parte do próprio SUT, pois contém o código de instrumentação, devendo ser incluído no mesmo workspace. Com isto, é necessário que a equipe de testes gere um arquivo XML chamado projects.xml, contendo a relac a o dos projetos com as informações apresentadas na Listagem 5: o diretório do projeto dentro das estrutura do SVN Repository (projectpath); o nome que o projeto terá dentro do workspace (projectname); se o projeto deve ser rastreado ou não (totrace) e; se o projeto deve ser baixado ou não (tocheckout), caso não já se encontre no diretório do workspace. 44

56 Será necessário que os pesquisadores sejam capazes de compilar os projetos que compõem o SUT, tendo em vista que cada um pode apresentar requisitos divergentes para que seja inicializado, ficando a equipe responsável por configurar o Eclipse IDE com eventuais plug-ins e bibliotecas que se encontrem ausentes. Vale ressaltar que, devido a inclusão dos aspectos em alguns dos projetos, a compilação deve consumir um tempo maior, dependendo da quantidade de Managed Beans e Testes JUnit presentes no SUT, entretanto, como não há interesse em medir o desempenho da técnica no tempo, este consumo pode ser ignorado. Após a compilação os pesquisadores devem configuração de servidores de aplicação, as bases de dados ou quais quer outros componentes necessários para a execução do sistema. Isto feito, será possível dar início ao estudo. <projects> <project> <projectpath>/br.ufrn.dimap.ttracker</projectpath> <projectname>/br.ufrn.dimap.ttracker</projectname> <totrace>false</totrace> <tochekout>false</tocheckout> </project> <project> <projectpath>/br.ufrn.dimap.sample</projectpath> <projectname>/sample</projectname> <totrace>true</totrace> <tochekout>true</tocheckout> </project> </projects> Listagem 5. Exemplo do XML de configuração dos projetos de um SUT Pontos de Configuração A RTS Quality foi pensada para auxiliar no estudo dos impactos causados pelos tipos da tarefas sobre diferentes técnicas de RTS, podendo estas serem utilizada sobre diferentes sistemas, executando tanto testes manuais quanto automatizados. Esta seção tem por objetivo esclarecer quais são as configurações que a ferramenta permite modificar para atender a diferentes técnicas e cenários. 45

57 A primeira configuração que pode ser alterada na ferramenta é a técnica de RTS utilizada. Como visto na Subseção 3.2.3, a RTS Quality foi desenvolvida com o propósito de analisar diferentes técnicas, e por isto, sua implementação só interage com a técnica de RTS através da classe abstrata RegressionTestTechnique, que define todos os métodos que uma RTS deve implementar para que possa ser utilizada pela ferramenta. É através desta classe que a ferramenta passa as informações do SUT em questão para a técnica, e ordena que ela selecione os testes que devem ser incluídos. O segundo ponto de reconfigurável previsto modifica o próprio sistema sob teste (SUT) que será analisado pela RTS. Como visto na Seção 3.3, é possível, através de arquivos de configuração, fornecer o acesso as bases de dados, tanto do repositório de código (dbinfosvn.xml) quanto da ferramenta de gerenciamento de mudanças (dbinfocmt.xml), definir as consultas que devem ser realizadas para obter os tipos das tarefas e os estados (tasksearch.sql) e as revisões (revisionsearch.sql) de cada tarefa e, por fim, definir quais projetos do repositório deverão ser analisados (projects.xml) Programa de Exemplo Para demostrar o funcionamento da RTS Quality como ferramenta de auxílio no processo de execução do estudo e facilitar sua compreensão, foi criado um exemplo didático, representado nas Figuras 9 e 10. Nelas é possível observar as classes de duas revisões do programa de exemplo. Em ambas as figuras é possível observar as classes de teste, na cor preta, as classes cujos métodos são cobertos pelos testes, na cor cinza escuro, e por fim, as classes cujos métodos não são chamados por nenhum ET, na cor branca. A presença de um na assinatura de alguns métodos, marca que alguma modificac ão foi realizada nele entre a revisão inicial e a final. Vale observar que apesar do exemplo ter utilizado testes JUnit, o termo Test foi empregado nas figuras num sentido mais genérico, podendo representar tanto um teste automático quanto um teste manual. Um teste manual é iniciado quando o usuário, através da interface da RTS Quality, clica no bota o Iniciar 46

58 Estudo, clicando no bota o Finalizar Teste a medida que os conclui, este bota o finaliza o teste e iniciando um novo automaticamente. Cada teste executado dispara a rotina de rastreamento, que cria instâncias da classe TestCoverageGroup, que registram cada uma das instâncias da classe TestCoverage, contendo todos os métodos executados a partir de um método de teste ou a partir de um método de ação de um Managed Bean. Para auxiliar o usuário, um Bip é emitido sempre que um método rastreado é finalizado, informando que novas ações já podem ser executadas. Na primeira fase do estudo são identificados, entre as duas revisões do programa de exemplo, os métodos modificados, listados a seguir: Class1.method1*(); Class2.method2*(); Class3.method3*(); Class7.method7*(); Class8.method8*(); Class10.method10*(); Class11.method11*(); Test4.testMethod4*(). Figura 9. Callgraph dos métodos chamados a partir dos testes da revisão inicial. Na Fase 2, de posse da primeira revisão, vista na Figura 9, o usuário executa todos os testes (T), e a instrumentação se encarrega de gerar um Execution Trace para cada um. Em seguida, a RTS Quality obtém os dados apresentados na Tabela 5, que são utilizados para contabilizar o total de métodos (M) da revisão inicial e dentre estes, a quantidade de métodos que foram modificados (MM), cobertos pelos testes (MC) ou modificados e cobertos simultaneamente (MMC). Em seguida, a ferramenta invoca a RTS Pythia para 47

59 que identifique quais testes serão incluídos (TI) e excluídos (TE). Estes resultados podem ser observados na primeira linha da Tabela 7. Esta tabela apresenta os dados obtidos pela ferramenta na mesma ordem que são gerados. Cada teste executado gera um conjunto contendo todos os métodos cobertos por ele. Em seguida a ferramenta analisa, dentre todos os métodos do sistema, quais foram cobertos, não cobertos, modificados e não modificados, gerando um conjunto para cada um dos quatro. Por fim, a RTS Pythia identifica o conjunto contendo todos os testes, aqueles que ela decidiu incluir e o restante que decidiu excluir. Tabela 5. Dados analisados pela RTS Quality na Fase 2. Teste Executado Métodos Cobertos T1.t1() {T1.t1(); C1.m1(); C2.m2(); C7.m7()} T2.t2() {T2.t2(); C4.m4(); C5.m5()} T3.t3() {T3.t3(); C9.m9()} Estado dos Métodos Não Modificado Não Coberto {C6.m6()} Modificado Não Coberto {C3.m3(); C8.m8()} Não Modificado Coberto {T1.t1(); T2.t2(); C5.m5(); T3.t3(); C9.m9()} Modificado Coberto {C1.m1(); C2.m2(); C4.m4(); C7.m7()} Seleções da RTS Pythia Todos os Testes {T1.t1(); T2.t2(); T3.t3()} Inclusão {T1.t1(); T2.t2()} Exclusão {T3.t3()} Na Fase 3, a RTS Quality obtém a revisão final para que o usuário execute todos os testes, para os quais são gerados Execution Traces diferentes dos da revisão inicial, conforme observado na Figura 10. Com base nos Execution Traces e nas modificações, a ferramenta obtém os dados da Tabela 6, que se assemelham aos da Tabela 5, entretanto a identificação e seleção dos testes são feitas pela própria RTS Quality e não pela Pythia. Com base nesses dados, determina os resultados almejados por esta fase, e que são apresentados na segunda linha da Tabela 7. 48

60 Figura 10. Callgraph dos métodos chamados a partir dos testes da versão final. Tabela 6. Dados analisados pela RTS Quality na Fase 3. Teste Executado Métodos Cobertos T1.t1() {T1.t1(); C1.m1(); C3.m3()} T2.t2() {T2.t2(); C4.m4(); C6.m6(); C11.m11()} T3.t3() {T3.t3(); C9.m9()} T4.t4() {T4.t4()} Estado dos Métodos Não Modificado Não Coberto {C5.m5()} Modificado Não Coberto {C2.m2(); C10.m10()} Não Modificado Coberto {T1.t1(); T2.t2(); C6.m6(); T3.t3(); C9.m9()} Modificado Coberto {C1.m1(); C3.m3(); C4.m4(); C11.m11(); T4.t4()} Seleções da RTS Quality Todos os Testes {T1.t1(); T2.t2(); T3.t3(); T4.t4()} Inclusão Antes da Validação {T1.t1(); T2.t2(); T4.t4()} Inclusão Válida {T1.t1(); T2.t2()} Exclusão {T3.t3()} A Tabela 7 sumariza as características básicas do programa de exemplo, juntamente com a quantidade de testes que a RTS Pythia acredita que devem ser executados e com a quantidade de testes que a RTS Quality afirma serem realmente necessários. 49

61 Tabela 7. Números obtidos nas Fases 2 e 3 do estudo. Técnica Revisão M MM MC MMC T TI TE RTS Pythia RTS Quality Na Fase 4, conforme as equações que serão apresentadas na Seção 4.3, são calculadas as métricas de inclusão e precisão que a RTS Pythia alcançou. Tais métricas correspondem as quantidades de testes que a Pythia conseguiu incluir e excluir corretamente, divididas pela quantidade total de testes corretos. Os resultados desta fase são apresentados na Tabela 8. Tabela 8. Métricas obtidas pela RTS Pythia para o Programa de Exemplo. Inclusão Precisão Cálculo das Métricas {T1. t1(); T2. t2()} {T1. t1(); T2. t2()} {T1. t1(); T2. t2()} {T3. t3()} {T3. t3()} {T3. t3()} = 1 1 = 1 = 100% = 2 2 = 1 = 100% Este programa de exemplo demonstra a execução do estudo de forma incompleta, tendo em vista que tal exemplo não possui sistema de gerenciamento de mudanças, e possui apenas duas revisões subsequentes analisadas, sendo inviável obter uma média relevante para os diferentes tipos de tarefas que as modificações podem assumir. O cálculo das médias serão demonstrados na Seção 4.4.4, onde as médias são calculadas para um sistema real. 50

62 4. ESTUDO EMPÍRICO Este capítulo descreve a configuração do estudo empírico para avaliação da técnica de RTS Pythia, baseada em diferença textual. A Seção 4.1, a seguir, apresenta os principais objetivos e questões de pesquisa. A Seção 4.2 apresenta o SUT. A Seção 4.3 descreve cada uma das fases do estudo, e por fim, a Seção 4.4 apresenta detalhes das métricas utilizadas Objetivos e Questões de Pesquisa Os principais objetivos do estudo empírico são: (i) avaliar uma adaptação da técnica de RTS Pythia para a linguagem Java; e (ii) validar o funcionamento da ferramenta RTS Quality. Para tanto, calculam-se as métricas propostas para avaliar a qualidade dos resultados obtidos pela técnicas de RTS Pythia, e assim, responder a questão de pesquisa que guia este estudo: (QP1) Os tipos das tarefas podem afetar a técnica de RTS Pythia?. Para validar a ferramenta RTS Quality ela deve ser capaz de constatar que a taxa de inclusão da Pythia, que é considerada segura, é de 100% para todos os tipos de tarefas Sistema Investigado O ferramenta RTS Quality será aplicada sobre um sistema web de larga escala, denominado Sistema Integrado de Gestão de Atividades Acadêmicas (SIGAA), mais especificamente as versões e , representadas pelas revisões e do branch de produção no SVN Repository do SIGAA. Desenvolvido originalmente na Superintendência de Informática da UFRN (SINFO/UFRN), o SIGAA possui diversas versões executando em diferentes instituições federais, estaduais e municipais do Brasil, sendo responsável por informatizar procedimentos da área acadêmica através dos seus diversos módulos. Dentre estes módulos, o da Biblioteca foi selecionado, que surgiu da necessidade de atender às demandas das bibliotecas da UFRN, tendo por objetivo controlar a chegada de livros, catalogação e empréstimos. 51

63 O Módulo da Biblioteca apresenta os seguintes pré-requisitos que viabilizam o estudo: (i) sua evolução foi toda registrada em repositório de código com controle de versões SVN, o que permite obter o código das diferentes modificações, cada qual associado a uma ou várias tarefas na ferramenta de gerenciamento de mudanças; (ii) o sistema foi implementado utilizando o framework Java Server Faces (JSF) e adota o padrão arquitetural Modelo-Visão- Controlador (MVC Model View Control), que viabiliza o rastreamento da execução das actions (métodos de ação) dos componentes Managed Beans, que representam classes Java que realizam o tratamento das diferentes requisições HTTP submetidas ao sistema, que são alvos de testes de aceitação; (iii) o sistema tem suas modificações gerenciadas por uma ferramenta de gerenciamento de mudanças (CMT), que definiram, para a versão inicial, quais modificações deveriam ser realizadas para que uma nova versão pudesse ser obtida Métricas Utilizadas Este estudo baseia-se nas métricas de qualidade das técnicas de RTS propostas por ROTHERMEL, G. e HARROLD, M. J. (1997): a inclusão e a precisão, cujos cálculos foram apresentados na Seção 2.6. Além destas métricas, é proposto o cálculo da inclusão e da precisão médias, obtidas para cada conjunto de modificações que a RTS analisou. Durante o cálculo das métricas, que serão descritos a seguir, a RTS Quality leva em consideração que cada tarefa corresponde a um conjunto de modificações que conduz a evolução do sistema, sendo assim, não calcula as métricas de todas cada modificação individualmente, mas sim a inclusão e a precisão para cada tarefa, segundo as modificações realizadas por elas. Como um dos objetivos deste estudo é compreender o quanto as modificações podem afetar uma técnica de RTS, levando-a a cometer erros, é preciso correlacionar a quantidade de erros cometidos com os tipos das tarefas das modificações. Como visto, a RTS Quality é capaz de discriminar quais testes a RTS selecionou para cada tarefa. Se as tarefas forem agrupadas de acordo 52

64 com seus tipos, é possível calcular a média aritmética das inclusões e das precisões alcançadas pela RTS para cada tipo de tarefa, e assim, seria possível medir os efeitos que cada tipo exerce sobre ela. Após calcular os valores de inclusão e precisão alcançados pela RTS para cada tarefa, a RTS Quality agrupa as tarefas de acordo com seus tipos (y) e para cada conjunto (T y ) soma todos os valores de inclusão (i x ) deste conjunto, dividindo o resultado pela quantidade de tarefas dentro do conjunto ( T y ), fazendo o mesmo cálculo para os valores de precisão (p x ). Desta forma serão obtidas a inclusão média (M yi ) e a precisão média (M yp ) de cada tipo de tarefa, que em resumo podem ser calculadas utilizando as variações da Equação 3: Equação 3. Cálculo das médias aritmética de inclusão e precisão de um tipo de tarefa. T y M yi = 1 T y i x i=1 T y M yp = 1 T y p x i= Fases do Estudo Para responder as questões de pesquisa propostas, este estudo foi organizado em 4 fases conforme apresentado a seguir: (i) levantamento das tarefas, seus tipos e revisões, identificando as modificações realizadas em cada uma; (ii) checkout, instrumentação, execução dos testes e da RTS Pythia na revisão inicial; (iii) checkout, instrumentação, execução dos testes e da RTS Quality na revisão final; e (iv) cálculo das métricas de cada tarefa e das médias de cada tipo de tarefa Fase 1 Obtenção das Tarefas e suas Modificações Como visto, após realizar a configuração da ferramenta e fornecer acesso as bases de dados do SVN Repository e da CMT Data Base, a RTS Quality é capaz de obter a lista das tarefas, e para cada uma, seu tipo e revisões. Como explicado na Seção 3.2.2, é a equipe de desenvolvimento quem determina o tipo de uma tarefa durante sua criação, cabendo a RTS Quality apenas recuperar 53

65 está informação na base de dados. Para cada revisão pertencente a tarefa são identificadas as modificações que ela traz, isto é feito através da operação de diferenciação textual entre o código-fonte da revisão e de sua antecessora, identificando as linhas diferentes e a quais métodos elas pertenciam (exclusão) ou passaram a pertencer (inclusão ou alteração). Ao finalizar a busca desta fase, restam apenas tarefas com o estado finalizado, que tenham alterado ao menos uma classe Java. Na Figura 11 a seguir, são apresentados os diferentes tipos de tarefa registrados para o Módulo da Biblioteca, a quantidade de vezes que cada tipo ocorreu, juntamente com suas porcentagens de frequência. Verificação; 18 Tarefas; 10,65% Aprimoramento; 23 Tarefas; 13,61% Erro de Execução; 40 Tarefas; 23,67% Erro de Padronização de Visualização; 12 Tarefas 7,10% Erro de Negócio/Validação; 76 Tarefas; 44,97% Figura 11. Tipos de tarefas mais frequentes e suas porcentagens Fase 2 Análise da Revisão Inicial Nesta fase a RTS Quality faz o checkout da revisão inicial do sistema, baixando os projetos necessários, e incluindo neles a instrumentação para o rastreamento da execução dos testes. Feito isto, a ferramenta é interrompida para que o usuário compile, rode o sistema e execute todos os testes manuais, conforme descritos na Tabela 11 do Anexo I. Após estes procedimentos, e de posse dos TestCoverageGroups que reúnem os diversos Execution Traces gerados para os vários testes executados, a ferramenta executa a técnica de RTS Pythia, que obtém a relação das modificações realizadas entre as duas versões do SUT, fazendo em seguida, a intersecção entre os conjuntos do métodos modificados com o dos métodos cobertos pelos testes, identificando aqueles que precisam ser testados. A partir dos métodos restantes a Pythia segue o caminho inverso 54

66 da execução, para encontrar os testes que devem ser incluído, excluindo os demais. A medida que o usuário executa todos os testes (T), a instrumentação gera um Execution Trace para cada um. Em seguida, a RTS Quality obtém a quantidade total de métodos (M), identificado aqueles que foram modificados (MM), cobertos pelos testes (MC) ou modificados e cobertos simultaneamente (MMC). Por fim, a ferramenta executa a RTS Pythia, para que identifique quais testes serão incluídos (TI) e excluídos (TE). Os dados obtidos nesta fase podem ser observados na primeira linha da Tabela 9. Tabela 9. Principais características das duas versões do SUT. Técnica Revisão M MM MC MMC T TI TE RTS Pythia RTS Quality Fase 3 Análise da Revisão Final Da mesma forma que na fase anterior a RTS Quality baixa a última revisão, inclui a instrumentação e tem seu fluxo interrompido para que o usuário realize os mesmos procedimentos, executando os mesmos testes da Tabela 11 do Anexo I, seguindo a mesma ordem. Nesta fase o mesmo procedimento é realizado, mas ao invés da RTS Pythia selecionar os testes, a própria RTS Quality é quem realizará este procedimento, obtendo por conta própria TI e TE. Os valores obtidos nesta fase podem ser observados na segunda linha da Tabela 9, que apresenta as principais características das duas versões do sistema da Biblioteca Fase 4 Cálculo das Métricas e das Médias Na Fase 3 a ferramenta RTS Quality utilizou as informações dos métodos modificados e o código da revisão final para determinar, com 100% de certeza, quais são os testes que existiam na revisão inicial que devem ser executados novamente na revisão final, o que permite avaliar a qualidade da seleção realizada pela Pythia. 55

67 As modificações são agrupadas em tarefas e para cada tarefa a Pythia sugere um conjunto de testes, este conjunto é comparado ao que foi proposto pela RTS Quality, e assim são calculadas as métricas de inclusão e precisão apresentadas na Tabela 12 do Anexo II. As tarefas, por sua vez, são agrupadas de acordo com seus tipos (T y ), e para cada tipo (y), são calculadas as médias aritméticas da inclusão (M yi ) e da precisão (M yp ), conforme explicado na Seção 4.3. Na Tabela 10 são apresentadas a soma das inclusões (Σi x ) e das precisões (Σp x ) de cada tarefa de um mesmo tipo, divididas pela quantidades de tarefas que o tipo possui ( T y ), juntamente como as porcentagens M yi e M yp resultantes. Tabela 10. Inclusão e precisão médias por tipo de tarefa. Tipo da Tarefa Inclusão Média Precisão Média Σi x / T y M yi Σp x / T y M yp Erro de Negócio/Validação 76/76 100% 75,98/76 99,97% Erro de Execução 40/40 100% 40/40 100% Aprimoramento 23/23 100% 22,94/23 99,77% Verificação 18/18 100% 17,98/18 99,89% Erro de Padron. de Visualização 12/12 100% 12/12 100% 4.5. Resultados do Estudo Nesta seção traz os resultados da aplicação estudo, apresentando na Subseção a avaliação da técnica de RTS Pythia aplicada sobre o Módulo da Biblioteca do SIGAA e respondendo a questão de pesquisa (QP1) e na Subseção são apresentados os resultados obtidos na avaliação da ferramenta RTS Quality ao analisar uma técnica de RTS segura Avaliação da Técnica de RTS Pythia Questão de Pesquisa 1. Os tipos das tarefas podem afetar a técnica de RTS Pythia? Com base nos resultados do estudo, é possível concluir que os tipos das tarefas não afetam, pelo menos não diretamente, o desempenho da técnica de RTS Pythia. 56

68 A avaliação da técnica não foi capaz de demonstrar grandes diferenças nas médias calculadas para os 5 diferentes tipos de tarefas encontrados na execução do estudo. A Pythia é considerada segura, sendo assim, é capaz de incluir todos os teste necessário evitando que faltas passem desapercebidas, entretanto, nada a impede de incluir também testes além do necessário, isto é, erros de precisão, o que de fato ocorreu ocasionando um consumo de tempo desnecessário durante a execução dos testes. Após a execução de 55 testes, que cobriram 146 métodos de ação em Managed Beans com coberturas distintas, foi possível observar que todos os 5 tipos analisados pela técnica de RTS Pythia apresentaram inclusão média de 100%, conforme apresentam a Tabela 10 e a Figura 12. Mas foi possível observar pequenas oscilações nos valores de precisão em 3 diferentes tarefas, provocando erros de precisão média em 3 tipos de tarefas, como mostra a Figura 13. Entretanto, com oscilações tão pequenas não é possível afirmar que a Pythia seja inapropriada para estes tipos. Porcentagem de Acerto 200% 100% 0% 100% 100% 100% 100% 100% Erro de Negócio/ Validação Erro de Execução Aprimoramento Verificação Erro de Padron. de Visualização Figura 12. Inclusão média alcançada pela RTS Pythia para cada tipo de tarefa. Porcentagem de Acerto Porcentagem de Erro 100,05% 100,00% 99,95% 0,03% 0,11% 99,90% 99,85% 99,80% 99,75% 99,97% 100% 0,23% 99,89% 100% 99,70% 99,77% 99,65% Erro de Negócio/ Validação Erro de Execução Aprimoramento Verificação Erro de Padron. de Visualização Figura 13. Precisão média alcançada pela RTS Pythia para cada tipo de tarefa. 57

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software PROCESSO DE DESENVOLVIMENTO DE SOFTWARE Introdução Modelos de Processo de Desenvolvimento de Software Os modelos de processos de desenvolvimento de software surgiram pela necessidade de dar resposta às

Leia mais

Atividades da Engenharia de Software GERENCIAMENTO DA CONFIGURAÇÃO DE SOFTWARE. Atividades da Engenharia de Software. Processo de Desenvolvimento de

Atividades da Engenharia de Software GERENCIAMENTO DA CONFIGURAÇÃO DE SOFTWARE. Atividades da Engenharia de Software. Processo de Desenvolvimento de SCE186-ENGENHARIA DE SOFTWARE Módulo 1 Atividades da Engenharia de GERENCIAMENTO DA CONFIGURAÇÃO DE SOFTWARE Profª Rosely Sanches rsanches@icmc.usp.br 2003 DEFINIÇÃO CONSTRUÇÃO SOFTWARE PRODUTO MANUTENÇÃO

Leia mais

GARANTIA DA QUALIDADE DE SOFTWARE

GARANTIA DA QUALIDADE DE SOFTWARE GARANTIA DA QUALIDADE DE SOFTWARE Fonte: http://www.testexpert.com.br/?q=node/669 1 GARANTIA DA QUALIDADE DE SOFTWARE Segundo a NBR ISO 9000:2005, qualidade é o grau no qual um conjunto de características

Leia mais

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44

Etc & Tal. Volume 2 - Número 1 - Abril 2009 SBC HORIZONTES 44 Armazenando Dados em Aplicações Java Parte 2 de 3: Apresentando as opções Hua Lin Chang Costa, hualin@cos.ufrj.br, COPPE/UFRJ. Leonardo Gresta Paulino Murta, leomurta@ic.uff.br, IC/UFF. Vanessa Braganholo,

Leia mais

ISO/IEC 12207: Gerência de Configuração

ISO/IEC 12207: Gerência de Configuração ISO/IEC 12207: Gerência de Configuração Durante o processo de desenvolvimento de um software, é produzida uma grande quantidade de itens de informação que podem ser alterados durante o processo Para que

Leia mais

Gerenciamento de Configuração de Software

Gerenciamento de Configuração de Software Gerenciamento de Configuração de Software Prof. Ricardo Argenton Ramos [Baseado na apresentação do prof. Masiero ICMC-USP] Contexto para Gerência de Configuração 2 Problema dos Dados Compartilhados Desenvolvedor

Leia mais

ARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1.

ARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1. ARCO - Associação Recreativa dos Correios Sistema para Gerenciamento de Associações Recreativas Versão Histórico da Revisão Data Versão Descrição Autor Página

Leia mais

Gerenciamento de Projeto

Gerenciamento de Projeto UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA Gerenciamento de Projeto Engenharia de Software 2o. Semestre/ 2005

Leia mais

Engenharia de Software I

Engenharia de Software I Engenharia de Software I Rogério Eduardo Garcia (rogerio@fct.unesp.br) Bacharelado em Ciência da Computação Aula 03 In a calm sea every man is a pilot. Engenharia de Software I Aula 3 Gerenciamento de

Leia mais

Introdução à Simulação

Introdução à Simulação Introdução à Simulação O que é simulação? Wikipedia: Simulação é a imitação de alguma coisa real ou processo. O ato de simular algo geralmente consiste em representar certas características e/ou comportamentos

Leia mais

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd. Apresentação Este curso tem como objetivo, oferecer uma noção geral sobre a construção de sistemas de banco de dados. Para isto, é necessário estudar modelos para a construção de projetos lógicos de bancos

Leia mais

Capítulo 1 - Introdução 14

Capítulo 1 - Introdução 14 1 Introdução Em seu livro Pressman [22] define processo de software como um arcabouço para as tarefas que são necessárias para construir software de alta qualidade. Assim, é-se levado a inferir que o sucesso

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 10 PROFª BRUNO CALEGARO

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 10 PROFª BRUNO CALEGARO UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 10 PROFª BRUNO CALEGARO Santa Maria, 10 de Outubro de 2013. Revisão aula anterior Documento de Requisitos Estrutura Padrões Template Descoberta

Leia mais

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ MANUAL DE UTILIZAÇÃO DO CVS NO ECLIPSE

PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ MANUAL DE UTILIZAÇÃO DO CVS NO ECLIPSE PLATAFORMA DE DESENVOLVIMENTO PINHÃO PARANÁ MANUAL DE UTILIZAÇÃO DO CVS NO ECLIPSE Agosto 2007 Sumário de Informações do Documento Tipo do Documento: Manual Título do Documento: MANUAL DE UTILIZAÇÃO DO

Leia mais

Professor: Curso: Disciplina:

Professor: Curso: Disciplina: Professor: Curso: Disciplina: Aula 1 Turma: Esp. Marcos Morais de Sousa Sistemas de informação Engenharia de Software I Dinâmica da disciplina, plano de curso e avaliação 03º semestre Prof. Esp. Marcos

Leia mais

PDS - DATASUS. Processo de Desenvolvimento de Software do DATASUS

PDS - DATASUS. Processo de Desenvolvimento de Software do DATASUS PDS - DATASUS Processo de Desenvolvimento de Software do DATASUS Coordenação Geral de Arquitetura e Engenharia Tecnológica Coordenação de Padronização e Qualidade de Software Gerência de Padrões e Software

Leia mais

11 Conclusão. 11.1 Descobertas

11 Conclusão. 11.1 Descobertas 97 11 Conclusão 11.1 Descobertas Nesse trabalho apresentamos o McCloud Service Framework, um arcabouço para implementação de serviços baseados na Simulação de Monte Carlo na nuvem, disponibilizamos duas

Leia mais

Estratégias de Pesquisa

Estratégias de Pesquisa Estratégias de Pesquisa Ricardo de Almeida Falbo Metodologia de Pesquisa Departamento de Informática Universidade Federal do Espírito Santo Agenda Survey Design e Criação Estudo de Caso Pesquisa Ação Experimento

Leia mais

Fundamentos de Teste de Software

Fundamentos de Teste de Software Núcleo de Excelência em Testes de Sistemas Fundamentos de Teste de Software Módulo 2- Teste Estático e Teste Dinâmico Aula 3 Teste Estático SUMÁRIO INTRODUÇÃO... 3 1. Definição... 3 2. Custo Versus Benefício...

Leia mais

Gestão da Tecnologia da Informação

Gestão da Tecnologia da Informação TLCne-051027-P0 Gestão da Tecnologia da Informação Disciplina: Governança de TI São Paulo, Outubro de 2012 0 Sumário TLCne-051027-P1 Conteúdo desta Aula Abordar o domínio Adquirir e Implementar e todos

Leia mais

Requisitos de Software

Requisitos de Software Requisitos de Software Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 6 Slide 1 Objetivos Apresentar os conceitos de requisitos de usuário e de sistema Descrever requisitos funcionais

Leia mais

Requisitos de Software

Requisitos de Software Requisitos de Software Prof. José Honorato F.N. Prof. José Honorato F.N. honoratonunes@gmail.com Requisitos de Software Software é o conjunto dos programas e dos meios não materiais que possibilitam o

Leia mais

Programa do Módulo 2. Processo Unificado: Visão Geral

Programa do Módulo 2. Processo Unificado: Visão Geral 9.1 Programa do Módulo 2 Orientação a Objetos Conceitos Básicos Análise Orientada a Objetos (UML) O Processo Unificado (RUP) Processo Unificado: Visão Geral 9.2 Encaixa-se na definição geral de processo:

Leia mais

Qualidade de Processo de Software Normas ISO 12207 e 15504

Qualidade de Processo de Software Normas ISO 12207 e 15504 Especialização em Gerência de Projetos de Software Qualidade de Processo de Software Normas ISO 12207 e 15504 Prof. Dr. Sandro Ronaldo Bezerra Oliveira srbo@ufpa.br Qualidade de Software 2009 Instituto

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

José Benedito Lopes Junior ¹, Marcello Erick Bonfim 2

José Benedito Lopes Junior ¹, Marcello Erick Bonfim 2 ISBN 978-85-61091-05-7 Encontro Internacional de Produção Científica Cesumar 27 a 30 de outubro de 2009 Definição de uma tecnologia de implementação e do repositório de dados para a criação da ferramenta

Leia mais

Metodologia de Desenvolvimento de Sistemas

Metodologia de Desenvolvimento de Sistemas Metodologia de Desenvolvimento de Sistemas Aula 1 Ementa Fases do Ciclo de Vida do Desenvolvimento de Software, apresentando como os métodos, ferramentas e procedimentos da engenharia de software, podem

Leia mais

Processos de Software. 2007 by Pearson Education Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1

Processos de Software. 2007 by Pearson Education Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1 Processos de Software Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1 Objetivos Apresentar modelos de processos de software Descrever três modelos genéricos de processo e quando

Leia mais

CMMI. B) descrições das atividades consideradas importantes para o atendimento de suas respectivas metas específicas. Governo do ES (CESPE 2009)

CMMI. B) descrições das atividades consideradas importantes para o atendimento de suas respectivas metas específicas. Governo do ES (CESPE 2009) CMMI Governo do ES (CESPE 2009) Na versão 1.2 do CMMI, 111 os níveis de capacidade são definidos na abordagem de estágios. 112 os níveis de maturidade são definidos na abordagem contínua. 113 existem seis

Leia mais

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: davidmr@ifce.edu.br CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: davidmr@ifce.edu.br CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0 AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: davidmr@ifce.edu.br CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0 SUMÁRIO 1 Conceitos Básicos... 3 1.1 O que é Software?... 3 1.2 Situações Críticas no desenvolvimento

Leia mais

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como:

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como: Plano de Teste (resumo do documento) I Introdução Identificador do Plano de Teste Esse campo deve especificar um identificador único para reconhecimento do Plano de Teste. Pode ser inclusive um código

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

Versionamento de Código. Núcleo de Desenvolvimento de Software

Versionamento de Código. Núcleo de Desenvolvimento de Software Versionamento de Código Núcleo de Desenvolvimento de Software Por quê? Facilidades de utilizar um sistema de versionamento de código. Várias versões Quando se salva uma nova versão de um arquivo, a versão

Leia mais

PLANEJAMENTO DE CAPACIDADE EM INFRA-ESTRUTURAS SUPORTADAS POR SERVIÇOS TERCEIRIZADOS DE REDE DE COMUNICAÇÃO DE DADOS

PLANEJAMENTO DE CAPACIDADE EM INFRA-ESTRUTURAS SUPORTADAS POR SERVIÇOS TERCEIRIZADOS DE REDE DE COMUNICAÇÃO DE DADOS PLANEJAMENTO DE CAPACIDADE EM INFRA-ESTRUTURAS SUPORTADAS POR SERVIÇOS TERCEIRIZADOS DE REDE DE COMUNICAÇÃO DE DADOS Roosevelt Belchior Lima Neste artigo será apresentada uma proposta de acompanhamento

Leia mais

Desenvolvendo Websites com PHP

Desenvolvendo Websites com PHP Desenvolvendo Websites com PHP Aprenda a criar Websites dinâmicos e interativos com PHP e bancos de dados Juliano Niederauer 19 Capítulo 1 O que é o PHP? O PHP é uma das linguagens mais utilizadas na Web.

Leia mais

Glossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart.

Glossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart. Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart. Versão 1.6 15/08/2013 Visão Resumida Data Criação 15/08/2013 Versão Documento 1.6 Projeto Responsáveis

Leia mais

SAM GERENCIAMENTO DE ATIVOS DE SOFTWARE

SAM GERENCIAMENTO DE ATIVOS DE SOFTWARE SAM GERENCIAMENTO DE ATIVOS DE SOFTWARE Modelo de Otimização de SAM Controle, otimize, cresça Em um mercado internacional em constante mudança, as empresas buscam oportunidades de ganhar vantagem competitiva

Leia mais

Boas Práticas de Desenvolvimento Seguro

Boas Práticas de Desenvolvimento Seguro Boas Práticas de Desenvolvimento Seguro Julho / 2.012 Histórico de Revisões Data Versão Descrição Autor 29/07/2012 1.0 Versão inicial Ricardo Kiyoshi Página 2 de 11 Conteúdo 1. SEGURANÇA DA INFORMAÇÃO

Leia mais

Teste de Regressão. R. Anido Baseado em notas de aulas da profa. Eliane Martins

Teste de Regressão. R. Anido Baseado em notas de aulas da profa. Eliane Martins Teste de Regressão R. Anido Baseado em notas de aulas da profa. Eliane Martins Testes de Regressão Objetivo Utilização Falhas de regressão Manutenção do conjunto de testes Redução do conjunto de testes

Leia mais

Capítulo 1. Extreme Programming: visão geral

Capítulo 1. Extreme Programming: visão geral Capítulo 1 Extreme Programming: visão geral Extreme Programming, ou XP, é um processo de desenvolvimento de software voltado para: Projetos cujos requisitos são vagos e mudam com freqüência; Desenvolvimento

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

Gerenciamento de Serviços de TI com base na ITIL

Gerenciamento de Serviços de TI com base na ITIL Gerenciamento de Serviços de TI com base na ITIL Information Technology Infrastructure Library ou Biblioteca de Infraestrutura da Tecnologia da Informação A TI de antes (ou simplesmente informática ),

Leia mais

PROPOSTA DE SOFTWARE DE INSTALAÇÃO PARA UM AMBIENTE INTEGRADO DE GERÊNCIA DE PROJETOS E DE PROCESSOS DE NEGÓCIOS

PROPOSTA DE SOFTWARE DE INSTALAÇÃO PARA UM AMBIENTE INTEGRADO DE GERÊNCIA DE PROJETOS E DE PROCESSOS DE NEGÓCIOS PROPOSTA DE SOFTWARE DE INSTALAÇÃO PARA UM AMBIENTE INTEGRADO DE GERÊNCIA DE PROJETOS E DE PROCESSOS DE NEGÓCIOS Élysson Mendes Rezende Bacharelando em Sistemas de Informação Bolsista de Iniciação Científica

Leia mais

Introdução ao OpenUP (Open Unified Process)

Introdução ao OpenUP (Open Unified Process) Introdução ao OpenUP (Open Unified Process) Diferentes projetos têm diferentes necessidades de processos. Fatores típicos ditam as necessidades de um processo mais formal ou ágil, como o tamanho da equipe

Leia mais

Reflexões sobre as dificuldades na aprendizagem de Cálculo Diferencial e Integral

Reflexões sobre as dificuldades na aprendizagem de Cálculo Diferencial e Integral III Mostra de Pesquisa da Pós-Graduação PUCRS Reflexões sobre as dificuldades na aprendizagem de Cálculo Diferencial e Integral Marcelo Cavasotto, Prof.ª Dra. Ruth Portanova (orientadora) Mestrado em Educação

Leia mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de

Leia mais

Pós Graduação Engenharia de Software

Pós Graduação Engenharia de Software Pós Graduação Engenharia de Software Ana Candida Natali COPPE/UFRJ Programa de Engenharia de Sistemas e Computação FAPEC / FAT Estrutura do Módulo Parte 1 QUALIDADE DE SOFTWARE PROCESSO Introdução: desenvolvimento

Leia mais

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi Metodologias de Desenvolvimento de Sistemas Analise de Sistemas I UNIPAC Rodrigo Videschi Histórico Uso de Metodologias Histórico Uso de Metodologias Era da Pré-Metodologia 1960-1970 Era da Metodologia

Leia mais

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software. Processos de Software Objetivos Apresentar os modelos de processo de software Conjunto coerente de atividades para especificar, projetar, implementar e testar s de software Descrever os diferentes modelos

Leia mais

Importância do GED. Implantação de um Sistema de GED

Importância do GED. Implantação de um Sistema de GED Implantação de um Sistema de GED Gerenciamento Eletrônico de Documentos Importância do GED O GED tem uma importante contribuição na tarefa da gestão eficiente da informação; É a chave para a melhoria da

Leia mais

Projeto de Arquitetura

Projeto de Arquitetura Projeto de Arquitetura Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 11 Slide 1 Objetivos Apresentar projeto de arquitetura e discutir sua importância Explicar as decisões de projeto

Leia mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo

Leia mais

Capítulo 25. Gerenciamento de Configuração. Engenharia de Software Prof. Flávio de Oliveira Silva, Ph.D.

Capítulo 25. Gerenciamento de Configuração. Engenharia de Software Prof. Flávio de Oliveira Silva, Ph.D. Capítulo 25 Gerenciamento de Configuração slide 624 2011 Pearson Prentice Hall. Todos os direitos reservados. Tópicos abordados Gerenciamento de mudanças Gerenciamento de versões Construção de sistemas

Leia mais

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619 Tópicos em Engenharia de Software (Optativa III) AULA 2 Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619 Engenharia de Software Objetivo da aula Depois desta aula você terá uma revisão sobre o

Leia mais

UML - Unified Modeling Language

UML - Unified Modeling Language UML - Unified Modeling Language Casos de Uso Marcio E. F. Maia Disciplina: Engenharia de Software Professora: Rossana M. C. Andrade Curso: Ciências da Computação Universidade Federal do Ceará 24 de abril

Leia mais

Sistema Gerenciador de Hotel. Adriano Douglas Girardello. Ana Paula Fredrich. Tiago Alexandre Schulz Sippert

Sistema Gerenciador de Hotel. Adriano Douglas Girardello. Ana Paula Fredrich. Tiago Alexandre Schulz Sippert UNIOESTE Universidade Estadual do Oeste do Paraná CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS Colegiado de Informática Curso de Bacharelado em Informática Sistema Gerenciador de Hotel Adriano Douglas Girardello

Leia mais

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com Engenharia de Software: conceitos e aplicações Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com 1 Objetivos da aula Apresentar os conceitos de Engenharia de Software e explicar a sua importância.

Leia mais

ENGENHARIA DE SOFTWARE/ SISTEMAS DE SOFTWARE

ENGENHARIA DE SOFTWARE/ SISTEMAS DE SOFTWARE ENGENHARIA DE SOFTWARE/ SISTEMAS DE SOFTWARE CMP1280/CMP1250 Prof. Me. Fábio Assunção Introdução à Engenharia de Software SOFTWARE Programa de computador acompanhado dos dados de documentação e configuração

Leia mais

GERENCIAMENTO CENTRALIZADO DELL POWERVAULT DL 2000 BASEADO EM TECNOLOGIA SYMANTEC

GERENCIAMENTO CENTRALIZADO DELL POWERVAULT DL 2000 BASEADO EM TECNOLOGIA SYMANTEC GERENCIAMENTO CENTRALIZADO DELL POWERVAULT DL 2000 BASEADO EM TECNOLOGIA SYMANTEC RESUMO EXECUTIVO O PowerVault DL2000, baseado na tecnologia Symantec Backup Exec, oferece a única solução de backup em

Leia mais

UMA ABORDAGEM SOBRE TESTES AUTOMATIZADO DE SOFTWARES EM AMBIENTES DE DESENVOLVIMENTO

UMA ABORDAGEM SOBRE TESTES AUTOMATIZADO DE SOFTWARES EM AMBIENTES DE DESENVOLVIMENTO UMA ABORDAGEM SOBRE TESTES AUTOMATIZADO DE SOFTWARES EM AMBIENTES DE DESENVOLVIMENTO Robson L. Nascimento 1, Késsia R. C. Marchi¹ 1 Universidade Paranaense (UNIPAR) Paranavaí-PR-Brasil robsonluisn@yahoo.com.br,

Leia mais

Plano de Gerência de Configuração

Plano de Gerência de Configuração Plano de Gerência de Configuração Objetivo do Documento Introdução A aplicação deste plano garante a integridade de códigos-fonte e demais produtos dos sistemas do, permitindo o acompanhamento destes itens

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

FANESE Faculdade de Administração e Negócios de Sergipe

FANESE Faculdade de Administração e Negócios de Sergipe 1 FANESE Faculdade de Administração e Negócios de Sergipe ITIL V2 Service Support Aracaju, Setembro de 2009 EDUARDO DA PAIXÃO RODRIGUES LUCIELMO DE AQUINO SANTOS 2 ITIL V2 Service Support Trabalho de graduação

Leia mais

Ambiente de workflow para controle de métricas no processo de desenvolvimento de software

Ambiente de workflow para controle de métricas no processo de desenvolvimento de software Ambiente de workflow para controle de métricas no processo de desenvolvimento de software Gustavo Zanini Kantorski, Marcelo Lopes Kroth Universidade Federal de Santa Maria (UFSM) 97100-000 Santa Maria

Leia mais

Documento de Arquitetura

Documento de Arquitetura Documento de Arquitetura A2MEPonto - SISTEMA DE PONTO ELETRÔNICO A2MEPonto - SISTEMA DE PONTO ELETRÔNICO #1 Pág. 1 de 11 HISTÓRICO DE REVISÕES Data Versão Descrição Autor 28/10/2010 1 Elaboração do documento

Leia mais

Roteiro 2 Conceitos Gerais

Roteiro 2 Conceitos Gerais Roteiro 2 Conceitos Gerais Objetivos: UC Projeto de Banco de Dados Explorar conceitos gerais de bancos de dados; o Arquitetura de bancos de dados: esquemas, categorias de modelos de dados, linguagens e

Leia mais

7 Trabalhos Relacionados A idéia é tentar dar todas as informações que ajudem os outros a julgar o valor da sua contribuição; não apenas as informações que levem o julgamento a uma direção em particular.

Leia mais

Introdução à Engenharia de Software

Introdução à Engenharia de Software Introdução à Engenharia de Software Professor: Rômulo César romulodandrade@gmail.com www.romulocesar.com.br Imagem Clássica Objetivo da aula Depois desta aula você terá uma visão sobre o que é a engenharia

Leia mais

Estratégia de TI. Posicionamento Estratégico da TI: como atingir o alinhamento com o negócio. Conhecimento em Tecnologia da Informação

Estratégia de TI. Posicionamento Estratégico da TI: como atingir o alinhamento com o negócio. Conhecimento em Tecnologia da Informação Conhecimento em Tecnologia da Informação Conhecimento em Tecnologia da Informação Estratégia de TI Posicionamento Estratégico da TI: como atingir o alinhamento com o negócio 2011 Bridge Consulting Apresentação

Leia mais

GUIA DE CURSO. Tecnologia em Sistemas de Informação. Tecnologia em Desenvolvimento Web. Tecnologia em Análise e Desenvolvimento de Sistemas

GUIA DE CURSO. Tecnologia em Sistemas de Informação. Tecnologia em Desenvolvimento Web. Tecnologia em Análise e Desenvolvimento de Sistemas PIM PROGRAMA DE INTEGRAÇÃO COM O MERCADO GUIA DE CURSO Tecnologia em Sistemas de Informação Tecnologia em Desenvolvimento Web Tecnologia em Análise e Desenvolvimento de Sistemas Tecnologia em Sistemas

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

INF1403 - Introdução a Interação Humano-Computador (IHC)

INF1403 - Introdução a Interação Humano-Computador (IHC) INF1403 - Introdução a Interação Humano-Computador (IHC) Turma 3WB Professor: Alberto Barbosa Raposo 09/04/2012 Departamento de Informática, PUC-Rio Testes com usuários Como avaliar? inspeção (por especialistas)

Leia mais

Gestão de T.I. GESTÃO DE T.I. ITIL. José Luís Padovan jlpadovan@gmail.com

Gestão de T.I. GESTÃO DE T.I. ITIL. José Luís Padovan jlpadovan@gmail.com GESTÃO DE T.I. José Luís Padovan jlpadovan@gmail.com 1 Information Technology Infrastructure Library 2 O que é o? Information Technology Infrastructure Library é uma biblioteca composta por sete livros

Leia mais

definido por um documento de padronização. A Fig. 1 representa a organização dos Grupos de Processos juntamente com os documentos exigidos.

definido por um documento de padronização. A Fig. 1 representa a organização dos Grupos de Processos juntamente com os documentos exigidos. A GESTÃO DE PROJETOS EXISTENTE NA NORMA DO-178B Matheus da Silva Souza, matheusdasilvasouza@gmail.com Prof. Dr. Luiz Alberto Vieira Dias, vdias@ita.br Instituto Tecnológico de Aeronáutica Praça Marechal

Leia mais

Sistemas Integrados de Gestão Empresarial

Sistemas Integrados de Gestão Empresarial Universidade Federal do Vale do São Francisco Curso de Administração Tecnologia e Sistemas de Informação - 05 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti

Leia mais

Conceitos de Banco de Dados

Conceitos de Banco de Dados Conceitos de Banco de Dados Autor: Luiz Antonio Junior 1 INTRODUÇÃO Objetivos Introduzir conceitos básicos de Modelo de dados Introduzir conceitos básicos de Banco de dados Capacitar o aluno a construir

Leia mais

Comparando as metodologias Lean Enterprise, Six Sigma e de Gestão da Qualidade

Comparando as metodologias Lean Enterprise, Six Sigma e de Gestão da Qualidade Página 1 de 6 NOTÍCIAS CARREIRAS & GESTÂO CURSOS & SEMINÁRIOS LIVROS DANÇA DAS CADEIRAS PESQUISAS COMPRAS ENTREVISTAS EM VÍDEO LAZER & TURISMO HOME Artigos Comparando as metodologias Lean Enterprise, Six

Leia mais

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA RESUMO Ricardo Della Libera Marzochi A introdução ao Service Component Architecture (SCA) diz respeito ao estudo dos principais fundamentos

Leia mais

LEVANTAMENTO DE REQUISITOS SEGUNDO O MÉTODO VOLERE

LEVANTAMENTO DE REQUISITOS SEGUNDO O MÉTODO VOLERE LEVANTAMENTO DE REQUISITOS SEGUNDO O MÉTODO VOLERE RESUMO Fazer um bom levantamento e especificação de requisitos é algo primordial para quem trabalha com desenvolvimento de sistemas. Esse levantamento

Leia mais

Governança de TI com COBIT, ITIL e BSC

Governança de TI com COBIT, ITIL e BSC {aula #2} Parte 1 Governança de TI com melhores práticas COBIT, ITIL e BSC www.etcnologia.com.br Rildo F Santos rildo.santos@etecnologia.com.br twitter: @rildosan (11) 9123-5358 skype: rildo.f.santos (11)

Leia mais

Figura 1 - Arquitetura multi-camadas do SIE

Figura 1 - Arquitetura multi-camadas do SIE Um estudo sobre os aspectos de desenvolvimento e distribuição do SIE Fernando Pires Barbosa¹, Equipe Técnica do SIE¹ ¹Centro de Processamento de Dados, Universidade Federal de Santa Maria fernando.barbosa@cpd.ufsm.br

Leia mais

Banco de Dados. Prof. Dr. Rogério Galante Negri

Banco de Dados. Prof. Dr. Rogério Galante Negri Banco de Dados Prof Dr Rogério Galante Negri Tradicionalmente O armazenamento dos dados utilizava arquivos individuais, sem nenhum relacionamento Cada programa utilizava seu próprio sistema de arquivo

Leia mais

Análise de Sistemas. Conceito de análise de sistemas

Análise de Sistemas. Conceito de análise de sistemas Análise de Sistemas Conceito de análise de sistemas Sistema: Conjunto de partes organizadas (estruturadas) que concorrem para atingir um (ou mais) objectivos. Sistema de informação (SI): sub-sistema de

Leia mais

QUALIDADE DE SOFTWARE. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 27 Slide 1

QUALIDADE DE SOFTWARE. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 27 Slide 1 QUALIDADE DE SOFTWARE Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 27 Slide 1 Objetivos Apresentar o processo de gerenciamento de qualidade e as atividades centrais da garantia de

Leia mais

2 Diagrama de Caso de Uso

2 Diagrama de Caso de Uso Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa

Leia mais

Notas de Aula 02: Processos de Desenvolvimento de Software

Notas de Aula 02: Processos de Desenvolvimento de Software Notas de Aula 02: Processos de Desenvolvimento de Software Objetivos da aula: Introduzir os conceitos de um processo de desenvolvimento de software Definir os processos básicos Apresentar as vantagens

Leia mais

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador> FACULDADE DE ENGENHARIA DE COMPUTAÇÃO PROJETO FINAL I e II PLANO DE TRABALHO O Trabalho de Conclusão de Curso (TCC) a ser desenvolvido

Leia mais

Introdução! 1. Modelos de Domínio! 1. Identificação de classes conceituais! 2. Estratégia para identificar classes conceituais! 2

Introdução! 1. Modelos de Domínio! 1. Identificação de classes conceituais! 2. Estratégia para identificar classes conceituais! 2 Modelo de domínio Introdução! 1 Modelos de Domínio! 1 Identificação de classes conceituais! 2 Estratégia para identificar classes conceituais! 2 Passos para a elaboração do modelo de domínio! 2 Passo 1

Leia mais

Unidade VI. Validação e Verificação de Software Teste de Software. Conteúdo. Técnicas de Teste. Estratégias de Teste

Unidade VI. Validação e Verificação de Software Teste de Software. Conteúdo. Técnicas de Teste. Estratégias de Teste Unidade VI Validação e Verificação de Software Teste de Software Profa. Dra. Sandra Fabbri Conteúdo Técnicas de Teste Funcional Estrutural Baseada em Erros Estratégias de Teste Teste de Unidade Teste de

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Introdução à Melhoria de Processos de Software baseado no MPS.BR Prof. Maxwell Anderson www.maxwellanderson.com.br Agenda Introdução MPS.BR MR-MPS Detalhando o MPS.BR nível G Introdução

Leia mais

Borland: Informatizando TI. João Carlos Bolonha jbolonha@borland.com

Borland: Informatizando TI. João Carlos Bolonha jbolonha@borland.com Borland: Informatizando TI João Carlos Bolonha jbolonha@borland.com Software Diferentes Níveis Extrair o Máximo Valor para o Negócio Eficiência Vantagem Competitiva Copyright 2007 Borland Software Corporation.

Leia mais

Módulo 4: Gerenciamento de Dados

Módulo 4: Gerenciamento de Dados Módulo 4: Gerenciamento de Dados 1 1. CONCEITOS Os dados são um recurso organizacional decisivo que precisa ser administrado como outros importantes ativos das empresas. A maioria das organizações não

Leia mais

Projeto 2.47 QUALIDADE DE SOFTWARE WEB

Projeto 2.47 QUALIDADE DE SOFTWARE WEB OBJETIVO GERAL Projeto 2.47 QUALIDADE DE SOFTWARE WEB Marisol de Andrade Maués Como objetivo geral, buscou-se avaliar a qualidade de produtos Web, tendo como base o processo de avaliação de qualidade descrito

Leia mais

SIMULADO: Simulado 3 - ITIL Foundation v3-40 Perguntas em Português

SIMULADO: Simulado 3 - ITIL Foundation v3-40 Perguntas em Português 1 de 7 28/10/2012 16:47 SIMULADO: Simulado 3 - ITIL Foundation v3-40 Perguntas em Português RESULTADO DO SIMULADO Total de questões: 40 Pontos: 0 Score: 0 % Tempo restante: 55:07 min Resultado: Você precisa

Leia mais

Guia de Modelagem de Casos de Uso

Guia de Modelagem de Casos de Uso Guia de Modelagem de Casos de Uso Sistema de e-commerce de Ações Versão 1.1 1 Histórico da Revisão. Data Versão Descrição Autor 13 de Setembro de 2008 1.0 Criação do documento Antonio Marques 28 de Setembro

Leia mais

Juciara Nepomuceno de Souza Rafael Garcia Miani. Teste de Software

Juciara Nepomuceno de Souza Rafael Garcia Miani. Teste de Software Juciara Nepomuceno de Souza Rafael Garcia Miani Teste de Software Técnicas de Teste de Software Testabilidade Operabilidade; Observabilidade; Controlabilidade; Decomponibilidade; Simplicidade; Estabilidade;

Leia mais

SISTEMA DE GESTÃO DE PROJETOS DE SOFTWARE - SGPS

SISTEMA DE GESTÃO DE PROJETOS DE SOFTWARE - SGPS SISTEMA DE GESTÃO DE PROJETOS DE SOFTWARE - SGPS Lilian R. M. Paiva, Luciene C. Oliveira, Mariana D. Justino, Mateus S. Silva, Mylene L. Rodrigues Engenharia de Computação - Universidade de Uberaba (UNIUBE)

Leia mais

Engenharia de Software. Apostila I >>> Introdução à ES - HEngholmJr

Engenharia de Software. Apostila I >>> Introdução à ES - HEngholmJr Engenharia de Software Apostila I >>> Introdução à ES - HEngholmJr Histórico de Revisões Data Versão Descrição Autor 12/08/2014 1.0 Criação da primeira versão HEngholmJr Agenda Introdução à Engenharia

Leia mais