Desenvolvimento guiado por testes e ferramentas xunit

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

Download "Desenvolvimento guiado por testes e ferramentas xunit"

Transcrição

1 Desenvolvimento guiado por testes e ferramentas xunit Carlos Eduardo Santin 1 1 Instituto de Informática Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal Porto Alegre RS Brazil cesantin@inf.ufrgs.br Abstract. This paper presents an overview about one of the development ways appeared in the methodology Extreme Programming (XP), the TDD (Test Driven Development). This methodology besides improving the software s quality through the application of tests, also aids in the system s development because the creation of tests before the development does the developer think about the classes that should be created as well as its methods and attributes. The TDD methodology is based on unit tests creation, which are small and independents, allowing on this way the fast location of bugs in the system and easy maintenance of this tests when necessary. Based on this idea appeared the concept xunit, which define how a test s tool should be implemented. This concept led off the development of unit tests tools for several programming languages as SUnit for SmallTalk, JUnit for Java, NUnit for.net, and several others. Resumo. Este artigo apresenta um visão geral sobre uma das formas de desenvolvimento surgidas na metodologia Extreme Programming (XP), o desenvolvimento guiado por testes (TDD - Test-Driven Development). Esta metodologia além de melhorar a qualidade do software através da aplicação de testes, também auxilia no desenvolvimento do sistema pois a criação de testes antes do desenvolvimento faz com que o desenvolvedor reflita sobre as classes que deverão ser criadas bem como seus métodos e atributos. A metodologia TDD baseia-se na aplicação de testes de unidade, testes estes pequenos e independentes permitindo desta forma a localização rápida de bugs no sistema e a fácil manutenção dos testes quando necessário. Baseado nesta idéia surgiu o conceito xunit, que define como uma ferramenta de testes de unidade deve ser implementada. Este conceito deu início ao desenvolvimento de ferramentas de testes de unidade para diversas linguagens de programação como a SUnit para SmallTalk, JUnit para Java, NUnit para.net, e diversas outras. 1. Introdução Atualmente as empresas desenvolvedoras de softwares para garantirem a sua permanência no mercado devem apresentar um certo grau de qualidade nos seus produtos. Uma das técnicas utilizadas para garantir esta qualidade é a aplicação de testes no software desenvolvido a fim de verificar se ele está satisfazendo completamente os requisitos do usuário e se não apresenta erros de codificação. No entanto, a aplicação de testes não é uma tarefa que visa apenas a busca de erros no código escrito, ela também pode servir como uma ferramenta para conduzir a implementação do software. Neste trabalho são exibidas as principais idéias do desenvolvimento guiado por testes e algumas ferramentas que possibilitam a execução dos testes criados, ferramentas da família xunit. Com este objetivo o

2 texto está organizado da seguinte forma: na seção 2 é dado uma breve explicação sobre o que é a tarefa de teste de software e como ela é realizada. Na seção 3 é explicada a metodologia de desenvolvimento guiado por testes e alguns exemplos de codificação são apresentados para uma melhor compreensão. Na seção 4 é mostrado o funcionamento dos testes de unidade através da descrição de algumas ferramentas utilizadas para este propósito. Na seção 5 são exibidos alguns dos principais benefícios ao ser adotada a metodologia TDD. Na seção 6 é dada uma explicação de como deve ser feita a migração de um processo de desenvolvimento para o TDD. Na seção 7 são apresentadas as conclusões do trabalho. 2. Teste de Software Teste de software é um processo utilizado para identificar defeitos no software e verificar se o sistema realmente satisfaz seus clientes em termos de efetividade e uso. Geralmente um software pode apresentar problemas devido a deficiências nas especificações ou deficiências no código do software. Desta forma, os testes podem ser vistos como um processo para descobrir erros e eliminá-los antes da entrega do sistema ao usuário. O teste de produtos de software envolve basicamente quatro etapas: planejamento de testes, projeto de casos de teste, execução e avaliação dos resultados dos testes [Pressman 1997, Myers 1979, Beizer 1990]. Em geral essas atividades concretizam-se em três fases de teste: de unidade, de integração e de sistema. O teste de unidade concentrase na menor unidade do projeto, ou seja, em cada módulo do software, separadamente. O teste de integração visa detectar erros associados às interfaces entre os módulos. Já o teste de sistema visa identificar erros de funções e características de desempenho que não estejam de acordo com a especificação. No entando, os testes nem sempre são aplicados de maneira correta e os principais motivos são os seguintes: Os testes geralmente são aplicados após toda a escrita do código ou após o programador que está realizando a escrita ser movido para outra tarefa. Quando você não está efetivamente envolvido com o código, leva mais tempo e mais trabalho retornar a estudar o código e trabalhar com os possíveis problemas existentes. Geralmente os testes não são criados pelo programador que escreveu o código. Desta forma o criador dos testes pode não entender todos os detalhes do código e conseqüentemente esquecer de criar testes importantes. Caso o responsável pela escrita dos testes se baseie em documentações ou outros artefatos para criá-los e não no código, uma desatualização nestes artefatos pode gerar problemas nos testes a serem criados. Se os testes não são automatizados eles podem não ser executados com freqüencia ou não serem executados da mesma maneira todas as vezes. Para evitar que ocorram estes problemas foi proposto por Kent Beck [Beck 2002] uma metodologia na qual o desenvolvimento do software é auxiliado através da geração e execução de testes, esta metodologia chama-se Desenvolvimento guiado por testes (TDD - Test-Driven Development), este é o tema da próxima seção. 3. Desenvolvimento guiado por testes (TDD - Test-Driven Development) Para a implementação de uma porção de um sistema, milhares de decisões devem ser tomadas e é muito difícil que essas decisões sejam tomadas de forma correta antes do

3 início da escrita do código. O desenvolvimento guiado por testes (TDD) é uma metodologia que como o nome já diz, faz uso de testes para auxiliar os desenvolvedores a tomarem as decisões corretas no tempo correto. Desta forma, o TDD não pode ser visto como uma ferramenta para testes mas sim como a utilização de testes para a criação de software de uma maneira simples e incremental. Portanto além de melhorar a qualidade do software também simplifica o processo de desenvolvimento. O TDD evita que os testes sejam aplicados de maneira incorreta, principalmente pelos seguintes motivos [Astels 2003]: O programador é quem cria os testes, trabalhando neles enquanto o código do software ainda está bem presente em sua mente. Os testes são automatizados, garantindo uma maior freqüência na sua execução e garantindo também que o teste executado em um determinado momento será idêntico nas demais vezes em que ele for executado. O desenvolvimento guiado por testes é uma das principais práticas existentes em Extreme Programming (XP) [XP 2006] e sua idéia é que sistemas complexos podem ser desenvolvidos em pequenos passos incrementais através da utilização de testes para guiar o projeto e a implementação do software. A principal dificuldade na utilização do TDD está em modificar a forma de pensar do desenvolvedor, que não deve mais projetar para ter uma estrutura de como o código será gerado mas sim criar testes que definam como pequenas partes do sistema devem funcionar. Basicamente o TDD é um estilo de desenvolvimento onde [Astels 2003]: Nenhum código do sistema é escrito sem que haja um teste associado a ele; Escrevem-se os testes antes do código do sistema; Os testes determinam que código é necessário escrever. A metodologia de desenvolvimento guiado por testes é basicamente composta dos seguintes passos: 1. Escreva uma teste que defina como você pensa que uma pequena parte do sistema deve funcionar; 2. Faça o teste funcionar da forma mais rápida possível que você puder. Não se preocupe com detalhes de como implementar da maneira mais correta, apenas faça o teste funcionar; 3. Limpe o código. Agora que o teste está funcionando retorne e realize um refactoring do código gerado. Refactoring é o processo de realizar alterações na estrutura do código sem alterar o seu comportamento externo. O TDD é um processo iterativo portanto estes 3 passos anteriormente citados devem ser repetidos até que o desenvolvedor esteja satisfeito com o novo código gerado. A forma que o TDD trabalha é decompor os requerimentos do sistema em um conjunto de comportamentos necessários para cumprir estes requerimentos, sendo que para cada comportamento do sistema a primeira coisa a ser feita é escrever um teste de unidade para testá-lo. Por exemplo, supondo que deve ser escrito um software para uma academia de musculação para obter o peso dos clientes em uma determinada data e obter a média dos pesos de todos os clientes em uma determinada data. Pensando nas necessidades do sistema, chegamos aos seguintes comportamentos necessários: O software deve ser capaz de identificar cada cliente;

4 Deve permitir a entrada de dados do cliente para obtenção das informações requeridas; Deve permitir obter o peso de um determinado cliente numa determinada data; Deve permitir obter a média de peso de todos os clientes numa determinada data. Desta forma, podemos escrever o seguinte teste de unidade: //Obtém o cliente Carlos Cliente carlos = ClienteLista.getCliente( Carlos ); //Adiciona o peso do cliente Carlos no dia 01/01/2006 carlos.addpeso( 01/01/2006,73.0); //Adiciona o peso do cliente Carlos no dia 01/02/2006 carlos.addpeso( 01/02/2006,70.0); //Obtém o cliente Joao Cliente joao = ClienteLista.getCliente( Joao ); //Adiciona o peso do cliente Joao no dia 01/01/2006 joao.addpeso( 01/01/2006,78.0); //Adiciona o peso do cliente Joao no dia 01/02/2006 joao.addpeso( 01/02/2006,74.0); //Obtem o peso de Carlos no dia 01/02/2006 float pesocarlos = carlos.getpeso( 01/02/2006 ); //Obtem a media de pesos dos clientes no dia 01/02/2006 float mediapesos = ClienteLista.getMediaPesos( 01/02/2006 ); //Verifica se o retorno do peso de Carlos esta sendo feito de forma correta assertequals(70.0, pesocarlos); //Verifica se o retorno do peso médio dos clientes esta sendo feito de forma correta assertequals(72.0, mediapesos); Devido a escrita deste teste de unidade, agora sabemos que devemos ter uma classe ClienteLista e uma classe Cliente. A classe ClienteLista deverá possuir os métodos get- Cliente() e getmediapesos(), e a classe Cliente deverá possuir os métodos addpeso() e getpeso(). Além de descobrirmos as classes que devem ser implementadas e os métodos delas, também sabemos os parâmetros de entrada de cada método e seus tipos, bem como os parâmetros de saída e seus tipos. Desta forma um teste de unidade não apenas ajuda a verificar se o código esta corretamente implementado como também ajuda a definir as classes e métodos que devem ser implementados para determinado comportamento. Após a escrita do teste devemos executá-lo, é claro que o teste falhará pois não possuimos as classes Cliente e ClienteLista implementadas, mas este é um passo importante do teste pois ele nos fará ver que o teste de unidade está funcionando corretamente. Então, após a execução do teste e após obtermos a falha devemos implementar as classes necessárias e re-executar o teste para garantir que a implementação do software está se comportando como o esperado. A metodologia TDD ressalta que devemos realizar pequenos passos para chegarmos a um teste que realmente verifique o comportamento do sistema. No exemplo da academia, o primeiro passo que deve ser tomado após obtermos a mensagem de erro da execução do teste é implementar a classe Cliente. Logo implementaremos o seguinte código: public class Cliente{ }

5 Em seguida devemos implementar a classe ClienteLista: public class ClienteLista{ } Neste momento não teremos mais os erros devido a inexistência das classes mas ainda temos os erros devido aos métodos que não foram implementados, portanto o próximo passo é implementar os métodos getcliente() e getmediapesos() na classe ClienteLista, e os métodos addpeso() e getpeso() na classe Cliente: public Cliente getcliente(){ } return new Cliente(); public float getmediapesos(){ } return 72.0; public void addpeso(float peso){} public float getpeso(){ } return 70.0; Nos métodos criados muitas coisas não foram implementadas e podemos perceber que os métodos get estão retornando sempre o mesmo valor, mas esta é a idéia do TDD, devemos implementar de forma que o teste consiga obter sucesso, quando conseguimos isso então retornamos ao código, implementamos o que está faltando e alteramos o que deve ser alterado. Após este ciclo podemos passar para o próximo comportamento. Desta maneira os testes vão guiando o desenvolvimento do sistema através de uma forma simples e incremental, e esta metodologia de desenvolvimento garante que todo o código escrito está relacionado a algum comportamento e não teremos códigos que nunca serão utilizados. Durante a implementação do teste utilizamos o método assertequals para verificar a igualdade de dois parâmetros, estes métodos de afirmação de uma expressão são definidos na arquitetura xunit, uma arquitetura para implementação de softwares para testes de unidades proposto por Kent Beck, assunto da próxima secção. 4. Arquitetura xunit O conceito xunit foi criado por Kent Beck, que fez sua primeira implementação no início dos anos 90 usando a linguagem de programação SmallTalk, esta implementação ficou conhecida como SUnit. A versão original do SUnit baseava-se na criação de pequenos testes, um para cada classe, para que caso algum erro ocorresse durante a implementação, este fosse rapidamente detectado e corrigido. E devido a essa característica, de os testes serem implementados por classe, a alteração em uma determinada classe resulta na alteração do teste relacionado apenas aquela classe e não dos demais. Os testes realizados pelo xunit baseiam-se na comparação do resultado obtido ao se executar uma função com o resultado esperado. Atualmente a idéia do xunit foi adotada para testes em diversas linguagens, a seguir citaremos algumas das principais implementações realizadas, explicações sobre outras ferramentas xunit podem ser encontradas em [xunit 2006].

6 4.1. CPPUnit O CPPUnit [CPPUnit 2006] é um framework para testes de unidade em C++. A função principal existente neste framework é o CPPUNIT ASSERT, que recebe como parâmetro qualquer expressão que possua uma valor booleano e retorna se esta expressão é ou não verdadeira. Através desta função a maioria dos testes podem ser implementados. Além desta função, também estão presentes neste framework a função setup() para inicilização de variáveis e teardown() para liberação de qualquer recurso alocado no método setup(). Este framework também permite a criação de suites onde vários testes podem ser alocados e executados em conjunto DUnit DUnit [DUnit 2006] é um framework de testes para os programas desenvolvidos em Borland Delphi, suportando as versões superiores ou iguais ao Delphi 4. Este framework provê duas opções para execução dos testes: uma interface gráfica (Figura 4.2) que permite selecionar testes individuais ou grupos de testes a serem executados, e uma aplicação para execução em terminais. Figure 1. Ambiente gráfico para execução de testes da ferramente DUnit. Os testes de unidade a serem criados utilizando o DUnit devem utilizar a unit TestFrameWork que permite registrar os testes a serem executados, e devem estender a unit TTestCase que apresenta os métodos para verificação dos resultados. Basicamente os testes implementados devem fazer uso do método Check existente na unit TTestCase para fazer a comparação de resultados. Esse método recebe dois parâmetros, o primeiro é uma expressão que retorna um valor booleano e o segundo é uma String contendo uma mensagem a ser exibida no caso do teste falhar. Ao executar os testes, o DUnit cria instâncias separadas da classe para cada método existente nela, logo, os métodos não podem compartilhar dados. Para poder criar uma variável que poderá ser acessada por diferentes métodos da classe devemos fazer

7 uso do método SetUp(), para criar a variável, e do método TearDown() para liberar as variáveis criadas. O DUnit permite também a execução de uma seqüência de testes implementados em classes diferentes de forma automática. Para isso ele suporta a criação de test suites, que são testes que podem conter outros testes ou mesmo outros test suites JUnit JUnit é um framework para teste de softwares desenvolvidos em Java. Foi desenvolvido por Kent Beck e Erich Gamma, sendo um dos maiores sucessos entre os frameworks da família xunit. A figura 2 exibe um diagrama de alto nível do pacote framework, o pacote central do JUnit. Figure 2. Diagrama do pacote junit.framework A interface Test é a interface que todas classes de teste devem implementar. Atualmente no framework existem apenas duas dessas classes: a TestCase e a TestSuite. testes. TestCase é a classe que deve ser estendida quando queremos escrever os nossos TestSuite tem o propósito de juntar testes (classes que estendem TestCase) ou Test- Suites, para realização de execução em conjunto. Assert é a superclasse de TestCase que provê os métodos que estarão disponíveis para o programador criar seus testes.

8 A classe TestFailure encapsula os erros e falhas que ocorram durante a execução do teste. A classe TestResult acumula o resultado da execução dos testes, ela é a responsável por informar as partes interessadas do início e fim dos testes, bem como de qualquer erro ou falha ocorrida. Esta classe permite a interface gráfica exibir os resultados dos testes. TestListener é a interface que é implementada pelas classes que desejam controlar o progresso dos testes. Para a escrita de testes devemos fazer uso dos métodos assert existentes na classe TestCase, estes métodos possuem sempre duas versões: uma que recebe como parâmetro um String contendo a mensagem a ser exibida em caso de falha e outro sem este String. Os métodos asserttrue e assertfalse verificam respectivamente quando uma expressão é verdadeira ou falsa. Por exemplo, o teste a seguir teria sucesso em sua execução: asserttrue((1 + 1) == 2); assertfalse((1+1) == 3); Os métodos assertnull e assertnotnull verificam respectivamente quando uma expressão retorna um valor nulo e não nulo. Por exemplo, no seguinte teste teriamos sucesso em sua execução: String str1 = null; String str2 = new String(); assertnull(str1); assertnotnull(str2); Os métodos assertsame e assertnotsame são utilizados para a comparação de dois objetos. Por exemplo: String str1 = new String( str ); String str2 = new String( str ); assertsame(str1,str1); assertnotsame(str1, str2); O método assertequals ao invés de comparar a igualdade entre dois objetos, como é o caso do assertsame, compara a igualdade dos valores de dois objetos. Por exemplo, o teste a seguir seria executado com sucesso: String str1 = new String( str ); String str2 = new String( str ); assertequals(str1,str2); Para a execução dos testes criados este framework disponibiliza uma interface gráfica contida na classe junit.swingui.testrunner (figura 4.3). Esta interface facilita a execução e análise dos resultados obtidos. No entanto, também é possível executar os testes criados a partir de um terminal. A classe que permite esta execução é a junit.textui.testrunner. 5. Benefícios do desenvolvimento guiado por testes O desenvolvimento guiado por testes apresenta uma grande quantidade de benefícios entre eles [Gold et al. 2005]:

9 Figure 3. Ambiente gráfico para execução de testes da ferramente JUnit. Desenvolvimento simples e incremental: um dos principais benefícios desta abordagem é que temos um software funcionando quase que imediatamente. A primeira iteração do software é simples e não tem muita funcionalidade, porém a funcionalidade irá melhorando conforme o desenvolvimento for progredindo. É uma abordagem menos arriscada do que tentar construir um sistema que somente funcionará quando colocarmos todas as partes dele juntas. Desenvolvimento menos estressante: Os desenvolvedores que utilizam TDD precisam se preocupar apenas em ter o próximo teste executado com sucesso. O desenvolvedor foca sua atenção em pequenas partes do software, faz com que ele funcione e parte para outra parte. As decisões de projeto e implementação vão sendo tomadas aos poucos, conforme os testes são criados. Testes constantes de regressão: No desenvolvimento de software muitas vezes passamos pelo efeito dominó, onde uma simples alteração num módulo do sistema pode ocasionar conseqüências nas demais partes do sistema. Na metodologia TDD a cada alteração realizada no código são executados todos os testes gerados para o sistema até o momento, desta forma qualquer alteração que ocasione um efeito indesejado em outras partes do código é detectado imediatamente. Outra vantagem é que a cada iteração sempre temos o código funcionando. Melhora da comunicação: Muitas vezes é difícil expressar em palvras como deve ser o funcionamento de uma parte do software. Os testes de unidade servem como uma linguagem que pode ser usada para comunicar o comportamento exato de uma parte do software. Melhora da compreensão do comportamento requerido do software: A escrita de testes de unidade antes da escrita do código ajuda a focar e entender o comportamento requerido do software. Centralização do conhecimento: Muitas empresas costumam deixar o desenvolvimento dos módulos de um software para uma única pessoa, desta forma todo o conhecimento a respeito da implementação daquele código está na cabeça de

10 um único funcionário. A documentação e a implementação de um código limpo permite que outros programadores entendam como o código foi implementado, porém nem sempre isto é realizado. Com TDD, os testes de unidade constituem um repositório que provê informações sobre as decisões que foram tomadas para o projeto do módulo. 6. Como migrar o processo de desenvolvimento para TDD A mudança de um processo de desenvolvimento para o TDD deve ser feito de uma maneira controlada [Gold et al. 2005]. Se tentarmos mudar de um processo para outro de uma forma muito rápida, o processo de desenvolvimento se tornará um caos e será muito difícil recuperá-lo. Antes de executar a mudança de processo, é necessário perder um pouco de tempo pensando em como o TDD será usado no projeto atual. Devemos decidir coisas do tipo: Quais ferramentas e frameworks de testes serão usados; Como os desenvolvedores irão obter habilidades necessárias para aplicação do TDD; Como os testes serão organizados; Como os testes serão executados; Quais mudanças serão necessárias no processo atual para o uso do TDD; Como a inclusão do TDD afetará o processo atual de desenvolvimento. Algumas das decisões tomadas antes do início da prática do TDD podem mudar após, no entanto é interessante pensar a respeito antes de aplicar o TDD para ter um ambiente de desenvolvimento mais organizado. Antes de realizar a transição é necessário entender a fundo o funcionamento do TDD. O primeiro passo para obter este conhecimento é entender como utilizar o framework de testes escolhido para criação de testes de unidade efetivos. O segundo passo é entender como usar o processo TDD para guiar o desenvolvimento do software. A melhor maneira para obter este conhecimento é através da prática. Para entender o funcionamento de um framework de testes, a melhor maneira é ler a documentação existente para ele e executar os exemplos existentes. Desta forma o usuário do framework aprende como escrever e executar os testes, além de configurar o framework para o ambiente de desenvolvimento. Assim que o usuário tiver a confiança de que entendeu o funcionamento do framework, ele pode começar a escrever pequenos testes para o projeto de software que está atualmente sendo desenvolvido. A compreensão de como utilizar o processo TDD para guiar o desenvolvimento do projeto atual é um pouco mais complicado que a compreensão do funcionamento do framework de testes. Uma coisa que pode facilitar a compreensão do processo é ter um bom conhecimento sobre refactoring, pois esta é uma das práticas importantes aplicadas no TDD. Antes de começarmos a utilizar o TDD, temos que ter em mente que este processo é altamente iterativo, então não temos que obter o código correto na primeira iteração. Devemos deixar os testes nos mostrar como projetar o código e a descoberta disto deve ser feita em passos lentos e incrementais.

11 A aquisição do conhecimento necessário para aplicação da metodologia TDD pode acarretar temporariamente numa redução na velocidade do desenvolvimento, mas isto não pode ser visto como uma perda de tempo mas sim como um investimento futuro. Caso a equipe de desenvolvimento seja muito grande, é aconselhável que esta equipe seja dividida em pequenos grupos e estes obtenham o conhecimento necessário em tempos diferentes, evitando que o desenvolvimento do software atual seja totalmente interrompido. 7. Conclusão A tarefa de teste de software é algo que deve estar presente em qualquer processo para desenvolvimento de software, pois ela é uma peça fundamental para garantir a qualidade do produto final. Por mais que tenhamos uma modelagem muito bem feita do sistema, alguns erros podem surgir como por exemplo no momento da codificação e este tipo de erro pode ser facilmente detectado através da criação e execução de testes apropriados. Os testes podem ser basicamente aplicados de duas formas diferentes: podemos criá-los e executá-los após a escrita do código do sistema, para garantir que o código foi implementado de maneira correta, ou podemos criá-los antes da implementação e executálos conforme formos escrevendo o código, idéia que é a base da metodologia TDD. Como vimos na seção 5, a metodologia TDD e a aplicação de testes de unidades podem trazer uma série de benefícios no processo de desenvolvimento de software. No entanto a migração de um processo de desenvolvimento para o TDD não pode ser realizado de uma hora para outra, alguns passos devem ser seguidos para que os desenvolvedores adquiram o conhecimento necessário e evitem que o processo de desenvolvimento se transforme num caos. Por se tratar de uma prática derivada da metodologia XP, o desenvolvimento guiado por testes não é indicado para o desenvolvimento de projetos complexos que envolvam uma equipe muito grande pois geralmente neste tipo de projeto há a necessidade de uma extensa e detalhada documentação para a redução de riscos, porém em equipes menores os testes de unidade em conjunto com o código escrito para o sistema podem servir por si só como uma boa documentação para a compreensão das decisões tomadas para o projeto do software. References Astels, D. (2003). Test-Driven Development: A Pratical Guide. Prentice Hall PTR. Beck, K. (2002). Test-Driven Development By Example. Addison Wesley. Beizer, B. (1990). Software Testing Techniques. Van Nostrand Reinhold Company, New York, 2nd edition. CPPUnit (2006). Cppunit - a unit test framework for c++. Disponível em: cookbook.html/ Acesso em: 15 abr DUnit (2006). Dunit - unit test for borland delphi. Disponível em: Acesso em: 15 abr Gold, R., Hammel, T., and Snyder, T. (2005). Test-Driven Development: A J2EE Example. Apress.

12 Myers, G. J. (1979). The Art of Software Testing. Wiley, New York. Pressman, R. S. (1997). Software Engineering A Practitioners Approach. McGraw-Hill, 4th edition. XP (2006). Extreme programming. Disponível em: Acesso em: 15 abr xunit (2006). xunit - wikipedia. Disponível em: Acesso em: 15 abr

Desenvolvimento guiado por testes e ferramentas xunit

Desenvolvimento guiado por testes e ferramentas xunit Desenvolvimento guiado por testes e ferramentas xunit Carlos Eduardo Santin Disciplina de Engenharia de Software Universidade Federal do Rio Grande do Sul - UFRGS 1 de Maio de 2006 Roteiro 1 Teste de Software

Leia mais

JUnit: framework de testes unitários. Fred Lopes

JUnit: framework de testes unitários. Fred Lopes JUnit: framework de testes unitários Fred Lopes Agenda Parte 1 - teoria Testes unitários JUnit Introdução Arquitetura API resumida Boas práticas Exemplos de uso Parte 2 prática (Eclipse) Criando testes

Leia mais

ENGENHARIA DE SOFTWARE

ENGENHARIA DE SOFTWARE ENGENHARIA DE SOFTWARE Teste de Software Verificação e validação Testes de desenvolvimento Testes de release Testes de usuário Desenvolvimento dirigido a testes Kele Teixeira Belloze kelebelloze@gmail.com

Leia mais

INF1013 MODELAGEM DE SOFTWARE

INF1013 MODELAGEM DE SOFTWARE INF1013 MODELAGEM DE SOFTWARE Departamento de Informática PUC-Rio Ivan Mathias Filho ivan@inf.puc-rio.br Programa Capítulo 1 O Paradigma Orientado a Objetos A Linguagem UML Descrição da Arquitetura 1 Programa

Leia mais

SUnit Referências. SUnit. Jefferson Serafim Ascaneo, Suzana de Siqueira Santos

SUnit Referências. SUnit. Jefferson Serafim Ascaneo, Suzana de Siqueira Santos Jefferson Serafim Ascaneo Suzana de Siqueira Santos Departamento de Ciência da Computação Instituto de Matemática e Estatística Universidade de São Paulo Abril de 2013 Agenda 1 2 3 2/ 30 Agenda História

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Ciência da Computação Prof. Elias Ferreira Elaborador por: Ana Claudia Bastos Loureiro Monção JUNIT Teste de Software Processo de Software Um processo de software pode ser visto como o conjunto de atividades,

Leia mais

especificação por meio de exemplos não é garantia de corretude, mas a experiência mostra que tende a ser melhor do que o estado da prática hoje

especificação por meio de exemplos não é garantia de corretude, mas a experiência mostra que tende a ser melhor do que o estado da prática hoje 1 Introdução Testar é o conjunto de tarefas ou passos executados para verificar se um produto ou serviço atende à sua proposta. Dessa forma, a execução de testes em um programa contribui para a melhoria

Leia mais

Extreme Programming: Valores e Práticas

Extreme Programming: Valores e Práticas Programação Extrema Extreme Programming: Valores e Práticas Prof. Mauro Lopes 1-31 34 Objetivos Anteriormente trabalhamos os conceitos do Desenvolvimento Tradicional e do Desenvolvimento Ágil. Trouxemos

Leia mais

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo. Engenharia de Software Aula 21 Revisão da Prova 2 Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo dcc603@dcc.ufmg.br 16 Maio 2018 Aula 16: POO Um programa OO é geralmente constituído de várias classes

Leia mais

Extreme Programming. Projeto de. Desenvolvimento. Software. Prof.: Ari Oliveira

Extreme Programming. Projeto de. Desenvolvimento. Software. Prof.: Ari Oliveira Projeto de Desenvolvimento Software Extreme Programming Prof.: Ari Oliveira O Extreme Programming (XP) é uma metodologia de desenvolvimento de software que auxilia na produção de sistemas de maior qualidade,

Leia mais

Resolução de Problemas com Computador. Resolução de Problemas com Computador. Resolução de Problemas com Computador

Resolução de Problemas com Computador. Resolução de Problemas com Computador. Resolução de Problemas com Computador Prof. Araken Medeiros araken@ufersa.edu.br O processo de resolução de um problema com um computador leva à escrita de um algoritmo ou programa e à sua execução. Mas o que é um algoritmo? Angicos, RN 15/9/2009

Leia mais

Community. .com. Introdução ao T D

Community. .com. Introdução ao T D Community Introdução ao T D D Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Meu sistema

Leia mais

XP EXTREME PROGRAMMING. AGO106 - Gestão

XP EXTREME PROGRAMMING. AGO106 - Gestão XP EXTREME PROGRAMMING AGO106 - Gestão de Processos de Desenvolvimento de Software DESENVOLVIMENTO TRADICIONAL Sequencial: Análise, Design, Implementação, Teste, Implantação e Manutenção Características:

Leia mais

Testes Automatizados. Cursos de Verão 2007 IME/USP Dairton Bassi & Paulo Cheque

Testes Automatizados. Cursos de Verão 2007 IME/USP   Dairton Bassi & Paulo Cheque Testes Automatizados Cursos de Verão 2007 IME/USP www.agilcoop.org.br Dairton Bassi & Paulo Cheque Roteiro 1) Motivação 2) Introdução a Testes 3) Testes de Unidade 4) Testes de Aceitação 5) Testes de Integração

Leia mais

RUP RATIONAL UNIFIED PROCESS. Prof. Fabiano Papaiz IFRN

RUP RATIONAL UNIFIED PROCESS. Prof. Fabiano Papaiz IFRN RUP RATIONAL UNIFIED PROCESS Prof. Fabiano Papaiz IFRN Criado por três engenheiros de software: Booch, Jacobson e Rumbaugh. Conhecidos na área como Os 3 Amigos, também foram os criadores da UML (Unified

Leia mais

Teste Unitários com NUnit. Anderson Martiniano da Rocha

Teste Unitários com NUnit. Anderson Martiniano da Rocha Teste Unitários com NUnit Anderson Martiniano da Rocha martiniano@dcc.ufba.br Sumário Conceito de teste unitário Vantagens da utilização de testes unitários NUnit (Características, Atributos, Ferramentas)

Leia mais

Introdução a Teste de Software

Introdução a Teste de Software Universidade Católica de Pelotas Tecnólogo em Análise e Desenvolvimento de Sistemas Disciplina de Qualidade de Software Introdução a Teste de Software Prof. Luthiano Venecian 1 Conceitos Teste de software

Leia mais

Teste de Software. Proj. Desenvolvimento de Software. Prof. Cleverton Hentz. 30 de agosto de Material Apresentado

Teste de Software. Proj. Desenvolvimento de Software. Prof. Cleverton Hentz. 30 de agosto de Material Apresentado Teste de Software Proj. Desenvolvimento de Software Prof. Cleverton Hentz cleverton.hentz@ifrn.edu.br 30 de agosto de 2017 Material Apresentado Sumário de Aula 1 Introdução 2 Níveis de Teste 3 Terminologia

Leia mais

Processos de software

Processos de software Processos de software 1 Processos de software Conjunto coerente de atividades para especificação, projeto, implementação e teste de sistemas de software. 2 Objetivos Introduzir modelos de processos de

Leia mais

Desenvolvimento de Software. Testes de Software. Tópicos da Aula. Onde estamos... Verificação x Validação. Testes de Software

Desenvolvimento de Software. Testes de Software. Tópicos da Aula. Onde estamos... Verificação x Validação. Testes de Software Engenharia de Software Aula 17 Desenvolvimento de Software Testes de Software Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo dcc603@gmail.com 7 Maio 2012 1. Especificação de requisitos 2. Projeto

Leia mais

Design Dirigido ao Domínio - DDD

Design Dirigido ao Domínio - DDD Design Dirigido ao Domínio - DDD Daniel Alcântara Cordeiro, Frederico A. Lima Junior, Saulo Mendonça Universidade Salvador (Unifacs) Edf. Civil Empresarial. Rua Doutor José Peroba, nº 251, STIEP, Salvador

Leia mais

JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge

JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge JUnit Alexandre Menezes Silva alexandre_crvg@hotmail.com Eduardo Manuel de Freitas Jorge emjorge1974@gmail.com 0 Sumário O que é?... 2 Pra que serve?... 2 Arquitetura... 2 Método de comparação assertequals...

Leia mais

Programação Extrema na Prática

Programação Extrema na Prática Programação Extrema na Prática Engenharia de Software Conference - 13:40-15:00 maio/09 São Paulo Dairton Bassi - dbassi@gmail.com Assuntos de Hoje Métodos Ágeis Valores Ágeis Programação Extrema Princípios

Leia mais

Proposta do desenvolvimento de um software para apoio ao ensino da disciplina de programação orientada a objetos

Proposta do desenvolvimento de um software para apoio ao ensino da disciplina de programação orientada a objetos Anais do I Simpósio Interdisciplinar de Tecnologias na Educação [SInTE] IFSP Câmpus Boituva 24 a 26 de junho de 2015 Boituva SP Capital Nacional do Paraquedismo Proposta do desenvolvimento de um software

Leia mais

3 Trabalhos Relacionados

3 Trabalhos Relacionados 3 Trabalhos Relacionados Neste capítulo são apresentados trabalhos relacionados a esta dissertação. Todos eles pretendem acrescentar formas que garantem a qualidade de agentes de software desenvolvidos.

Leia mais

JUnit. Facilitando o desenvolvimento e execução de testes unitários em código java. Peterson Rodrigues

JUnit. Facilitando o desenvolvimento e execução de testes unitários em código java. Peterson Rodrigues JUnit Facilitando o desenvolvimento e execução de testes unitários em código java. Peterson Rodrigues Roteiro Teste Unitário: O que? Por quê? Quando? Quem? O que testar? Teste Funcional: O que é? JUnit:

Leia mais

Teste de software. Engenharia de software Profª karine sato da silva

Teste de software. Engenharia de software Profª karine sato da silva Teste de software Engenharia de software Profª karine sato da silva Mais sobre o TDD Test Driven Development (TDD); TDD reivindica um desenvolvimento incremental do código que inicia com testes, incluindo

Leia mais

Rational Unified Process (RUP)

Rational Unified Process (RUP) Rational Unified Process (RUP) A Rational é bem conhecida pelo seu investimento em orientação em objetos. A empresa foi à criadora da Unified Modeling Language (UML), assim como de várias ferramentas que

Leia mais

TESTES DE SOFTWARE Unidade 1 Importância do Teste de Software. Luiz Leão

TESTES DE SOFTWARE Unidade 1 Importância do Teste de Software. Luiz Leão Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 1.1 - O teste nas fases de vida e de desenvolvimento de um software. 1.2 - O teste na engenharia de sistemas e na engenharia de

Leia mais

Engenharia de Software Processo de Desenvolvimento. Ciclo de Vida - Modelo Cascata

Engenharia de Software Processo de Desenvolvimento. Ciclo de Vida - Modelo Cascata Processo de Desenvolvimento Também chamado de ciclo de vida do software Reflete os passos necessários para se construir um produto de software Existem vários modelos de ciclo de vida Cascata (1956) Iterativo

Leia mais

Teste Automatizado POO. Prof. Marcio Delamaro

Teste Automatizado POO. Prof. Marcio Delamaro Teste Automatizado POO Prof. Marcio Delamaro 1/51 Teste Ato de executar um programa e verificar se os resultados produzidos estão corretos Manual: realizado passando-se os parâmetros e olhando se o resultado

Leia mais

Aula 10 Especificação de Requisitos

Aula 10 Especificação de Requisitos Aula 10 Especificação de Requisitos Alessandro Garcia LES/DI/PUC-Rio Setembro 2016 Especificação Objetivos dessa aula Apresentar a importância e o que são especificações de requisitos, bem como conceitos

Leia mais

ENGENHARIA DE SOFTWARE

ENGENHARIA DE SOFTWARE CURSO TÉCNICO DE INFORMÁTICA Módulo A ENGENHARIA DE SOFTWARE Processos de Software O PROCESSO É LENTO... Todo software deve ser construído de forma organizada, através de processos. Um processo pode ser

Leia mais

Teste de Software. Objetivo: Executar software para revelar erros/falhas ainda não descobertos. Pode gastar 40% do esforço de desenvolvimento

Teste de Software. Objetivo: Executar software para revelar erros/falhas ainda não descobertos. Pode gastar 40% do esforço de desenvolvimento Teste de Software 3 Teste de Software Objetivo: Executar software para revelar erros/falhas ainda não descobertos Pode gastar 40% do esforço de desenvolvimento 2 Teste de Software Defeito (fault, defects)

Leia mais

Teste de Software. Estratégias de Teste. Rosemary Silveira Filgueiras Melo

Teste de Software. Estratégias de Teste. Rosemary Silveira Filgueiras Melo Teste de Software Estratégias de Teste Rosemary Silveira Filgueiras Melo rosesfmelo@hotmail.com 1 Agenda Estratégias de Teste Tipos de Estratégias de Teste 2 Estratégias de teste Define as fases em que

Leia mais

ENGENHARIA DE SOFTWARE. Aula 12 Testes de software

ENGENHARIA DE SOFTWARE. Aula 12 Testes de software ENGENHARIA DE SOFTWARE Aula 12 Testes de software OBJETIVOS Compreender os estágios de teste durante o desenvolvimento para os testes de aceitação por parte dos usuários de sistema; Apresentar as técnicas

Leia mais

3 Ferramenta Proposta 3.1. Objetivos

3 Ferramenta Proposta 3.1. Objetivos 3 Ferramenta Proposta 3.1. Objetivos O objetivo deste trabalho é a criação de um framework de testes que incorpore algumas das novas idéias encontradas na literatura. Sua principal característica deve

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Processos de Software Professor: Charles Leite O processo de software Um conjunto estruturado de atividades, procedimentos, artefatos e ferramentas necessários para o desenvolvimento

Leia mais

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

Processos de Software 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

Princípios da Engenharia de Software aula 03

Princípios da Engenharia de Software aula 03 Princípios da Engenharia de Software aula 03 Prof.: José Honorato Ferreira Nunes Material cedido por: Prof.: Franklin M. Correia Na aula anterior... Modelos de processos de software: Evolucionário Tipos

Leia mais

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini   / Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini E-mail: prof.andre.luis.belini@gmail.com / andre.belini@ifsp.edu.br MATÉRIA: QUALIDADE DE SOFTWARE Tema: Teste de Software:

Leia mais

RUP RATIONAL UNIFIED PROCESS PRÁTICAS RECOMENDADAS. Prof. Fabiano Papaiz IFRN

RUP RATIONAL UNIFIED PROCESS PRÁTICAS RECOMENDADAS. Prof. Fabiano Papaiz IFRN RUP RATIONAL UNIFIED PROCESS PRÁTICAS RECOMENDADAS Prof. Fabiano Papaiz IFRN O RUP recomenda as seguintes práticas que devem ser utilizadas no desenvolvimento de um software: 1. Desenvolver de forma iterativa

Leia mais

PROJETO DE PROGRAMAS. Projeto de Programas PPR0001

PROJETO DE PROGRAMAS. Projeto de Programas PPR0001 PROJETO DE PROGRAMAS Projeto de Programas PPR0001 Desenvolvimento de Software 2 3 Desenvolvimento de Software Análise de Requisitos Distinguir e dividir o sistema em componentes: Analisar os componentes

Leia mais

Teste de Software. Prof. Camila. Pedro de Assis Sobreira Jr.

Teste de Software. Prof. Camila. Pedro de Assis Sobreira Jr. Teste de Software Prof. Camila Pedro de Assis Sobreira Jr. 2 Técnicas de Testes Técnica de Teste Funcional Técnica de Teste Estrutural 3 Testes Funcionais Teste de Especificação de Requisitos. Teste de

Leia mais

1. A função DevOps, que se concentra principalmente em Produtos & Serviços:

1. A função DevOps, que se concentra principalmente em Produtos & Serviços: Questões de múltipla escolha 1. A função DevOps, que se concentra principalmente em Produtos & Serviços: a) Desenvolvimento Ágil b) Melhoria Contínua c) Automatizar tudo d) Centralizar o Desenvolvimento

Leia mais

Testes Automatizados. Paulo Cheque. 27/01/2009 Verão 2009

Testes Automatizados. Paulo Cheque. 27/01/2009 Verão 2009 Testes Automatizados Paulo Cheque 27/01/2009 Verão 2009 Erros de Software Causam prejuízos de aproximadamente $59.5 bi na economia dos Estados Unidos Fonte: NIST/2002 http://www.nist.gov 2 Estratégias

Leia mais

Teste de Software. Roberta Coelho

Teste de Software. Roberta Coelho Teste de Software Roberta Coelho Agenda Desafios do Teste de Software Atividades Realizadas em 2014 Atividades Planejadas Agenda Desafios do Teste de Software Atividades Realizadas em 2014 Atividades Planejadas

Leia mais

Teste de Software. Competência: Entender as técnicas e estratégias de testes de Software

Teste de Software. Competência: Entender as técnicas e estratégias de testes de Software Teste de Software Competência: Entender as técnicas e estratégias de testes de Software Conteúdo Programático Introdução O que é teste de software? Por que é necessário testar um software? Qual a causa

Leia mais

PROGRAMAÇÃO EXTREMA - XP

PROGRAMAÇÃO EXTREMA - XP PROGRAMAÇÃO EXTREMA - XP Hoje em dia o maior problema para a entrega de um projeto, é a quantidade de riscos que podem ocorrer com o mesmo, como atraso na entrega, sistema que está sendo entregue não é

Leia mais

Testes com JUnit. Treinamento ALESP SPL. Danilo Toshiaki Sato.

Testes com JUnit. Treinamento ALESP SPL. Danilo Toshiaki Sato. Testes com JUnit Danilo Toshiaki Sato dtsato@ime.usp.br Treinamento ALESP SPL Agenda 1. Introdução 2. Por que usar JUnit? 3. Quando escrever um teste? 4. Como escrever um teste? 5. Como rodar um teste?

Leia mais

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos Programação Orientada a Objetos Vagner Luz do Carmo - Vluzrmos Questão 1 Dada a seguinte classe na linguagem JAVA: public class Carro { public String retornacor(){ ; return Azul ; private String retornachassi(){

Leia mais

Ferramenta MVCASE - Estágio Atual: Especificação, Projeto e Construção de Componentes

Ferramenta MVCASE - Estágio Atual: Especificação, Projeto e Construção de Componentes Ferramenta MVCASE - Estágio Atual: Especificação, Projeto e Construção de Componentes Antônio Francisco do Prado Daniel Lucrédio e-mail: prado@dc.ufscar.br Resumo Este artigo apresenta a ferramenta CASE

Leia mais

Departamento de Sistemas de Computação Universidade de São Paulo Análise e Projeto Orientados a Objetos Aula 2 O Processo Unificado (PU)

Departamento de Sistemas de Computação Universidade de São Paulo Análise e Projeto Orientados a Objetos Aula 2 O Processo Unificado (PU) Departamento de Sistemas de Computação Universidade de São Paulo Análise e Projeto Orientados a Objetos Aula 2 O Processo Unificado (PU) Prof. Seiji Isotani (sisotani@icmc.usp.br) Modelos de Processo de

Leia mais

TESTE DE SOFTWARE COM XP. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

TESTE DE SOFTWARE COM XP. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com TESTE DE SOFTWARE COM XP Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com Contexto Inúmeros processos de software Evolução das formas/metodologias de desenvolvimento de software Dificuldades encontradas

Leia mais

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP AULA 2 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

Leia mais

RAD Rapid Application Development

RAD Rapid Application Development RAD Rapid Application Development Desenvolvimento Rápido de Aplicação Brunna Leite Rafaela Trevizan Renan Gonçalvez Samanta de Masi RAD é um modelo de processo de desenvolvimento de software iterativo

Leia mais

Capítulo 8 Teste de Software 1

Capítulo 8 Teste de Software 1 Capítulo 8 - Teste de Software Capítulo 8 Teste de Software 1 Assuntos abordados Testes de desenvolvimento Desenvolvimento orientado a testes Testes de liberação Testes com utilizadores Capítulo 8 Teste

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Metodologia XP (extreme Programming) Entre 80% e 90% dos projetos de software fracassam devido a atrasos no cronograma; falta de planejamento; inúmeros bugs; incompreensão dos requisitos

Leia mais

Informática I. Aula Aula 21-29/11/06 1

Informática I. Aula Aula 21-29/11/06 1 Informática I Aula 21 http://www.ic.uff.br/~bianca/informatica1/ Aula 21-29/11/06 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

Estrutura de Dados Funções e Procedimentos

Estrutura de Dados Funções e Procedimentos Estrutura de Dados Funções e Procedimentos Prof. Salustiano Rodrigues de Oliveira saluorodrigues@gmail.com www.profsalu.wordpress.com Java A linguagem Java utiliza o paradigma de programação orientada

Leia mais

LÓGICA DE PROGRAMAÇÃO (JAVA) CLASSES E OBJETOS. Professor Carlos Muniz

LÓGICA DE PROGRAMAÇÃO (JAVA) CLASSES E OBJETOS. Professor Carlos Muniz LÓGICA DE PROGRAMAÇÃO (JAVA) Classes Uma classe é um tipo definido pelo usuário que contém o molde, a especificação para os objetos, algo mais ou menos como o tipo inteiro contém o molde para as variáveis

Leia mais

Testes de Software. Prof. Edjandir C. Costa

Testes de Software. Prof. Edjandir C. Costa Testes de Software Prof. Edjandir C. Costa edjandir.costa@ifsc.edu.br Sumário - Processo de teste - Estágios de teste - Diferenças entre tipos de testes Processo de Teste Dois objetivos distintos: - Demonstrar

Leia mais

BEHAVIOR DRIVEN DEVELOPMENT BRUNO ROLIM MANSUR

BEHAVIOR DRIVEN DEVELOPMENT BRUNO ROLIM MANSUR BEHAVIOR DRIVEN DEVELOPMENT BRUNO ROLIM MANSUR AGENDA Motivação Processo Tradicional Processo BDD Fazer certo o certo Ciclo BDD Ferramentas Exemplo - Vídeo Rspec Vantagens e Desvantagens Referências MOTIVAÇÃO

Leia mais

Sumário. Capítulo 3 Valores do XP Feedback Comunicação... 46

Sumário. Capítulo 3 Valores do XP Feedback Comunicação... 46 Sumário Sobre o autor... 6 Revisores técnicos... 7 Agradecimentos... 9 Prefácio... 17 Introdução... 19 Capítulo 1 Extreme Programming: visão geral... 21 Valores do XP... 22 Práticas do XP... 23 Cliente

Leia mais

DESCOBERTO. (Glen Myers)

DESCOBERTO. (Glen Myers) "A ATIVIDADE DE TESTAR É O PROCESSO DE EXECUTAR UM PROGRAMA COM A INTENÇÃO DE DESCOBRIR UM ERRO. UM BOM CASO DE TESTE É AQUELE QUE TEM UMA ELEVADA PROBABILIDADE DE REVELAR UM ERRO AINDA NÃO DESCOBERTO.

Leia mais

Prof. Luiz A. Nascimento. As práticas denominadas ágeis vêm sendo cada vez mais utilizadas na gerência de projetos de software.

Prof. Luiz A. Nascimento. As práticas denominadas ágeis vêm sendo cada vez mais utilizadas na gerência de projetos de software. Prof. Luiz A. Nascimento As práticas denominadas ágeis vêm sendo cada vez mais utilizadas na gerência de projetos de software. Porque metodologias ágeis? A história dos fracassos no desenvolvimento de

Leia mais

Metodologias de Teste de Software

Metodologias de Teste de Software Metodologias de Teste de Software Fernando Magno Quintão Pereira 10 de Novembro de 2010 A espiral de testes Muitos processos de teste de software seguem a mesma espiral de desenvolvimento que vemos em

Leia mais

ICET CURSO: Ciência da Computação e Sistemas de Informação (Engenharia de Software) Campus: Data: / / Nome:

ICET CURSO: Ciência da Computação e Sistemas de Informação (Engenharia de Software) Campus: Data: / / Nome: ICET CURSO: Ciência da Computação e Sistemas de Informação (Engenharia de Software) Estudos Disciplinares Campus: Data: / / Nome: RA: Turma: Questão 1: Assinale a função correta de engenharia de requisitos:

Leia mais

Processo Unificado (PU) Unified Process

Processo Unificado (PU) Unified Process Processo Unificado (PU) Unified Process 10 de junho de 2011 Adonai Canêz One comment Introdução O Processo Unificado (PU) surgiu para realizar o desenvolvimento de software visando a construção de sistemas

Leia mais

Luiz Fernando Maurício de Souza Sidemar Fidelis Cezario. FDD Desenvolvimento dirigido a funcionalidades

Luiz Fernando Maurício de Souza Sidemar Fidelis Cezario. FDD Desenvolvimento dirigido a funcionalidades Luiz Fernando Maurício de Souza Sidemar Fidelis Cezario FDD Desenvolvimento dirigido a funcionalidades 2 Agenda FDD; Melhores práticas do FDD; Principais papéis; Processos. FDD Metodologia interativa e

Leia mais

Scrum e Extreme Programming

Scrum e Extreme Programming Scrum e Extreme Programming CODEX Sumário Objetivo 3 Scrum 4 Papéis de Atuação 4 Eventos do Scrum 5 Artefatos do Scrum 5 Porque Scrum? 5 Extreme Programming 6 Práticas do Extreme Programming 6 Porque XP?

Leia mais

2 Fluxos no Ciclo de Vida do Processo Unificado. O Processo Unificado consiste da repetição de uma série de ciclos durante a vida de um sistema.

2 Fluxos no Ciclo de Vida do Processo Unificado. O Processo Unificado consiste da repetição de uma série de ciclos durante a vida de um sistema. Processo Unificado Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Ciclo de Vida - Fluxos Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre

Leia mais

Modulo I Introdução ao XP

Modulo I Introdução ao XP Modulo I Introdução ao XP Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 1 Ementa Modulo VI Xtreme Programming Valores e Princípios do XP Desenvolvimento centrado

Leia mais

Ainda que muitos modelos sejam semelhantes entre os modelos de ciclo de vida, existem alguns aspectos que os diferenciam:

Ainda que muitos modelos sejam semelhantes entre os modelos de ciclo de vida, existem alguns aspectos que os diferenciam: Prof. Edson dos Santos Cordeiro 1 Tópico: Objetivo: Introdução a Ciclo de Vida do Software Conhecer os principais conceitos relacionados a ciclo de vida do software. Bibliog. Base: McCONNEL, Steve. Rapid

Leia mais

Desenvolvimento Dirigido por Testes (TDD)

Desenvolvimento Dirigido por Testes (TDD) Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão 2009 www.agilcoop.org.br Mariana Bravo O que é Desenvolvimento Dirigido por Testes? Dúvidas? Copyleft AgilCoop 2008 2 Testes a priori Conhecer

Leia mais

Classes e Objetos POO

Classes e Objetos POO Classes e Objetos POO Prof. Marcio Delamaro 1/40 POO (wikipedia) Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which are data structures that contain data,

Leia mais

Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano

Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano Linguagem de Programação 1 Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano Objetivo: Desenvolver a habilidade de comentar código adequadamente INTRODUÇÃO Até o momento

Leia mais

Testes Unitários em Java

Testes Unitários em Java Laboratório de Programação Março 2016 Testes Unitários uma unidade pode ser uma função, uma classe um package ou um sub-sistema. cada teste unitário tem como objectivo verificar uma propriedade comportamental

Leia mais

Engenharia de Software. Prof. Me. Clodoaldo Brasilino

Engenharia de Software. Prof. Me. Clodoaldo Brasilino Engenharia de Software Prof. Me. Clodoaldo Brasilino clodoaldo.neto@ifpi.edu.br Acompanhamento da Disciplina 1. Introdução à Engenharia de Software 2. Processos de Software e Projetos 3. Projeto de Software

Leia mais

Refatoração: uma introdução. Prof. André Luiz Peron Martins Lanna

Refatoração: uma introdução. Prof. André Luiz Peron Martins Lanna Refatoração: uma introdução Prof. André Luiz Peron Martins Lanna Agenda Introdução Idéias preliminares Um primeiro exemplo Conclusões Bibliografia Introdução Em DSW o assunto principal foi o Projeto de

Leia mais

A figura abaixo representa uma classe denominada Carteira. Esta classe é composta dos métodos depositar(valor) e retirar(valor) e do atributo saldo.

A figura abaixo representa uma classe denominada Carteira. Esta classe é composta dos métodos depositar(valor) e retirar(valor) e do atributo saldo. 1-Introdução à Programação Orientada a Objetos 1.1. O que é programação orientada a objetos? Programação orientada a objetos é uma metodologia de desenvolvimento de software. Sua principal vantagem é a

Leia mais

PDS. Aula 1.5 Modelos de Processo. Prof. Dr. Bruno Moreno

PDS. Aula 1.5 Modelos de Processo. Prof. Dr. Bruno Moreno PDS Aula 1.5 Modelos de Processo Prof. Dr. Bruno Moreno bruno.moreno@ifrn.edu.br Tipos de Modelos Modelo em Cascata; Prototipação; RAD; Modelo Incremental; Desenvolvimento Evolucionário; Desenvolvimento

Leia mais

Processo. Processo unificado. Principais Características do UP. Principais Características do UP RUP. Unified Process (Processo Unificado)

Processo. Processo unificado. Principais Características do UP. Principais Características do UP RUP. Unified Process (Processo Unificado) Processo UP Unified Process (Processo Unificado) Conjunto de passos que tem como objetivo atingir uma meta Processo de software na ES, processo que visa a produzir o software - de modo eficiente e previsível

Leia mais

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks 48 3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks Este capítulo apresenta uma visão geral da contribuição principal deste trabalho: uma abordagem orientada a aspectos para o

Leia mais

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima Gerência de Projetos e Qualidade de Software Prof. Walter Gima 1 OBJETIVO Compreender uma série de técnicas de testes, que são utilizadas para descobrir defeitos em programas Conhecer as diretrizes que

Leia mais

METODOLOGIA ÁGEIS FDD FEATURE DRIVEN DEVELOPMENT. Prof. Fabiano Papaiz IFRN

METODOLOGIA ÁGEIS FDD FEATURE DRIVEN DEVELOPMENT. Prof. Fabiano Papaiz IFRN METODOLOGIA ÁGEIS FDD FEATURE DRIVEN DEVELOPMENT Prof. Fabiano Papaiz IFRN Feature Driven Development = Desenvolvimento Guiado por Funcionalidades FDD é uma metodologia ágil para gerenciamento e desenvolvimento

Leia mais

Processo de Desenvolvimento. Edjandir Corrêa Costa

Processo de Desenvolvimento. Edjandir Corrêa Costa Processo de Desenvolvimento Edjandir Corrêa Costa edjandir.costa@ifsc.edu.br Processo de Desenvolvimento Definição: É um roteiro que determina quais são as tarefas necessárias e em que ordem elas devem

Leia mais

Prof. Dr. Thiago Jabur Bittar

Prof. Dr. Thiago Jabur Bittar Prof. Dr. Thiago Jabur Bittar Uma representação abstrata e simplificada do processo de desenvolvimento software, tipicamente mostrando as principais atividades e dados usados na produção e manutenção de

Leia mais

DMS - DOCUMENTO DE MODELAGEM DE SISTEMA VERSÃO: [NOME DO SISTEMA] [SIGLA] [AUTORES]

DMS - DOCUMENTO DE MODELAGEM DE SISTEMA VERSÃO: [NOME DO SISTEMA] [SIGLA] [AUTORES] DMS - DOCUMENTO DE MODELAGEM DE SISTEMA Este documento foi criado seguindo as recomendações e orientações do livro UML na Prática Do Problema ao Sistema e do modelo PRISM do MPDS (Modelo Prático para Desenvolvimento

Leia mais

Estágio II. Aula 02 Conceitos de Teste de Software. Prof. MSc. Fred Viana

Estágio II. Aula 02 Conceitos de Teste de Software. Prof. MSc. Fred Viana Estágio II Aula 02 Conceitos de Teste de Software Prof. MSc. Fred Viana Agenda Teste de Software Defeito, Erro ou Falha? Dimensões do Teste Níveis de Teste Tipos de Teste Técnicas de Teste Teste de Software

Leia mais

INTRODUÇÃO A ENGENHARIA DE SOFTWARE

INTRODUÇÃO A ENGENHARIA DE SOFTWARE Universidade Estadual Vale do Acaraú AGENDA INTRODUÇÃO A ENGENHARIA DE SOFTWARE Processos Modelos de Desenvolvimento de Software Engenharia de Requisitos Projeto de Interface com o Usuário Projeto Arquitetural

Leia mais

Dificuldades na implantação de Métodos Ágeis

Dificuldades na implantação de Métodos Ágeis Dificuldades na implantação de Métodos Ágeis Encontro Ágil 2008 IME/USP www.agilcoop.org.br Prof. Dr. Fabio Kon IME / USP Os Princípios Ágeis e as dificuldades Software funcionando... Adaptação a mudanças...

Leia mais

LIVRO ENGENHARIA DE SOFTWARE FUNDAMENTOS, MÉTODOS E PADRÕES

LIVRO ENGENHARIA DE SOFTWARE FUNDAMENTOS, MÉTODOS E PADRÕES LIVRO ENGENHARIA FUNDAMENTOS, MÉTODOS E PADRÕES WILSON PADUA PAULA FILHO CAPÍTULO REQUISITOS 1 REQUISITOS TECNICO E GERENCIAL ESCOPO (RASCUNHO) CARACTERISTICAS 2 O que são Requisitos? São objetivos ou

Leia mais

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces Professora Sheila Cáceres Polimorfismo Polimorfismo Polimorfismo é a característica única de linguagens orientadas

Leia mais

Segundo trabalho prático de implementação Sistema de reserva de assentos

Segundo trabalho prático de implementação Sistema de reserva de assentos Segundo trabalho prático de implementação Sistema de reserva de assentos 1. Descrição do problema Computação Concorrente (MAB-117) 2016/2 Prof. Silvana Rossetto 1 DCC/IM/UFRJ 17 de novembro de 2016 Um

Leia mais

Curso de Sistemas de Informação. Karla Donato Fook DESU / DComp. Modelagem de Dados UML

Curso de Sistemas de Informação. Karla Donato Fook DESU / DComp. Modelagem de Dados UML Curso de Sistemas de Informação Karla Donato Fook karladf@ifma.edu.br DESU / DComp 2017 Modelagem de Dados UML 2 1 Eduardo Bezerra Editora Campus/Elsevier Porcentagem de projetos que terminam dentro do

Leia mais

Unidade 4 Teste na Implantação do Sistema

Unidade 4 Teste na Implantação do Sistema Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 4.1 Teste de Unidade 4.2 Teste de Integração 4.3 Teste de Validação 4.4 Teste de Sistema 4.5 Teste na Migração Introdução O processo

Leia mais

Análise de Sistemas. Aula 5

Análise de Sistemas. Aula 5 Análise de Sistemas Aula 5 Prof. Emerson Klisiewicz CONTEXTUALIZAÇÃO Aula 5 Análise Orientada a Objetos Introdução a UML Histórico e Visão Geral Ferramentas CASE O Sucesso... Clientes satisfeitos Eles

Leia mais

Princípios em refatoração. Prof. André Luiz Peron Martins Lanna

Princípios em refatoração. Prof. André Luiz Peron Martins Lanna Princípios em refatoração Prof. André Luiz Peron Martins Lanna Agenda Definição de refatoração. Por que refatorar? Quando refatorar? Problemas com refatoração. Refatoração e projeto. Refatoração e performance.

Leia mais