O documento fornece dicas para trabalhar com código legado, incluindo refatorar código acoplado para permitir testes unitários, desacoplar métodos para torná-los testáveis e quebrar códigos complexos em partes menores até que possam ser testadas.
O documento apresenta 4 frameworks para testes unitários em C/C++: Check, MinUnit, GoogleTest e Cgreen. Cada um é descrito brevemente com suas principais características e como escrever testes usando macros.
O documento discute padrões de projeto de software relacionados à criação de objetos, como Fábrica Simples, Método Fábrica e Fábrica Abstrata. Estes padrões permitem encapsular a lógica de criação de objetos e tornar o código mais flexível a alterações no futuro.
O documento descreve um exemplo de programação orientada a testes (TDD) para fatorar números em primos utilizando testes automatizados. O programa gera números primos e decompõe um número fornecido em seus fatores primos correspondentes. Os testes verificam se a sequência gerada de primos e a decomposição de um número específico estão corretas.
O documento apresenta uma introdução ao framework JUnit para testes automatizados em Java. Ele discute por que usar JUnit, quando escrever testes, como escrever testes utilizando asserções, fixtures e testando exceções, e como rodar testes usando a interface gráfica ou linha de comando no Eclipse.
O documento introduz conceitos básicos de lógica de programação, como definição de programa, algoritmo e variáveis. Também apresenta exemplos de código em C# para impressão de texto, uso de variáveis e estruturas condicionais.
1) O documento apresenta conceitos básicos de programação em C, incluindo estruturas de controle de fluxo como tomada de decisão (if/else) e laços (while, for, do-while);
2) São apresentados exemplos de códigos que lêem números do usuário e verificam se são pares ou ímpares, ou calculam o fatorial de um número;
3) As estruturas de controle permitem controlar o fluxo de execução do programa de acordo com condições ou repetições.
O documento apresenta uma introdução ao uso da biblioteca padrão STL do C++ para resolução de problemas de programação competitiva, destacando que a STL possui diversas estruturas e algoritmos implementados que podem ajudar a escrever menos código e obter melhores resultados. É apresentado o uso de vetores, strings, pilhas, filas, mapas, conjuntos e classes básicas, assim como algoritmos de ordenação, busca e geração de permutações.
O documento apresenta 4 frameworks para testes unitários em C/C++: Check, MinUnit, GoogleTest e Cgreen. Cada um é descrito brevemente com suas principais características e como escrever testes usando macros.
O documento discute padrões de projeto de software relacionados à criação de objetos, como Fábrica Simples, Método Fábrica e Fábrica Abstrata. Estes padrões permitem encapsular a lógica de criação de objetos e tornar o código mais flexível a alterações no futuro.
O documento descreve um exemplo de programação orientada a testes (TDD) para fatorar números em primos utilizando testes automatizados. O programa gera números primos e decompõe um número fornecido em seus fatores primos correspondentes. Os testes verificam se a sequência gerada de primos e a decomposição de um número específico estão corretas.
O documento apresenta uma introdução ao framework JUnit para testes automatizados em Java. Ele discute por que usar JUnit, quando escrever testes, como escrever testes utilizando asserções, fixtures e testando exceções, e como rodar testes usando a interface gráfica ou linha de comando no Eclipse.
O documento introduz conceitos básicos de lógica de programação, como definição de programa, algoritmo e variáveis. Também apresenta exemplos de código em C# para impressão de texto, uso de variáveis e estruturas condicionais.
1) O documento apresenta conceitos básicos de programação em C, incluindo estruturas de controle de fluxo como tomada de decisão (if/else) e laços (while, for, do-while);
2) São apresentados exemplos de códigos que lêem números do usuário e verificam se são pares ou ímpares, ou calculam o fatorial de um número;
3) As estruturas de controle permitem controlar o fluxo de execução do programa de acordo com condições ou repetições.
O documento apresenta uma introdução ao uso da biblioteca padrão STL do C++ para resolução de problemas de programação competitiva, destacando que a STL possui diversas estruturas e algoritmos implementados que podem ajudar a escrever menos código e obter melhores resultados. É apresentado o uso de vetores, strings, pilhas, filas, mapas, conjuntos e classes básicas, assim como algoritmos de ordenação, busca e geração de permutações.
O documento discute a complexidade ciclomática no código legado e como manter o código simples através de princípios como Orientação a Objetos, padrões de projeto e o princípio KISS. É destacado o princípio Strategy e a importância de funções fazerem uma única coisa e serem pequenas.
O documento discute o conceito de "Truck Factor" em desenvolvimento de software, que é a medida de quanto conhecimento uma equipe depende de uma pessoa, e propõe estratégias como programação pareada, revisão técnica e rotatividade para aumentar o "Truck Factor" e distribuir melhor o conhecimento pela equipe.
Trenton Doyle Hancock is an artist born in 1974 in Oklahoma City who creates surreal and fantastical works that blend elements of his family history and childhood experiences growing up in Texas. His pieces often take the form of interconnected stories and characters represented as drawings, prints, and felt collages. Hancock's works reference biblical tales and balance moral dilemmas with humor and stylized language and colors to explore psychological themes. He has exhibited widely including at the Whitney Biennial at a young age and lives and works in Houston.
O documento discute a eficiência em sistemas legados na empresa Overstress. Apresenta definições de sistemas legados e descreve como a Overstress melhorou a gestão e integração de seus sistemas legados através da instalação de ferramentas de configuração e mudança, e integração contínua.
O documento discute estratégias para modernizar sistemas legados, incluindo reescrever completamente o código (big bang rewrite), abordagem gradual chamada strangler e validação do strangler usando replay de tráfego em ambientes de teste.
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
- TDD: Red – Green – Refactor
- Testes de Unidade x Testes de Integração
- Ports and Adapters Pattern
- Business Domain versus Technical Domain
- Testes de Unidade com JMock
- Coverage Tests
- Logging Tests
The document discusses techniques for working with legacy code, including breaking dependencies, adding tests, and refactoring code in small incremental changes to introduce improvements.
This document discusses unit testing and integration testing. It begins by stating that the author hates unit testing because it doesn't catch many bugs, integration tests are still needed, and it wastes time. It then asks if integration testing means testing at the integration level. Finally, it advocates writing good focused unit tests and using collaboration and contract tests, and notes that refactoring is important when writing unit tests.
This document summarizes a study of CEO succession events among the largest 100 U.S. corporations between 2005-2015. The study analyzed executives who were passed over for the CEO role ("succession losers") and their subsequent careers. It found that 74% of passed over executives left their companies, with 30% eventually becoming CEOs elsewhere. However, companies led by succession losers saw average stock price declines of 13% over 3 years, compared to gains for companies whose CEO selections remained unchanged. The findings suggest that boards generally identify the most qualified CEO candidates, though differences between internal and external hires complicate comparisons.
O documento introduz a linguagem de programação Ruby, discutindo sua criação, popularidade, vantagens e desvantagens. Também lista empresas que usam Ruby e Rails e apresenta brevemente conceitos básicos da linguagem como números, strings, arrays, hashes e comentários.
O documento resume algumas funcionalidades pouco conhecidas do Java, como inicialização de mapas usando classes internas anônimas, métodos que retornam subclasses, e o uso de exceções não checadas.
Aqui são apresentados as técnicas de Desenvolvimento Dirigido a Testes. Simples e prático.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento descreve recursos pouco conhecidos da linguagem Java, incluindo inicialização de mapas usando Double BraceInitialization, lançar exceções de métodos sem declaração e acessar membros privados usando reflexão.
O documento discute as vantagens da linguagem Scala em relação a Java ao migrar uma plataforma de Ruby para Java. Apresenta exemplos de código em Scala e Java demonstrando o uso de closures, coleções e iteradores. Defende que Scala oferece uma melhor experiência de programação funcional preservando a compatibilidade com código Java existente.
This is the presentation I'll make in JUG Valle about Android Testing. It's in Brazilian portuguese.
Essa é a apresentação que eu estarei apresentando sobre Testes em Android na JUG Valle este final de semana.
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
Escrever um bom código, legível, eficiente e seguro, é uma competência necessária para codificar em qualquer linguagem. O objetivo é abordar técnicas de refatoração, boas práticas, código seguro e testes, utilizando exemplos com a linguagem Java. A bibliografia indicada é Refatoração, do Martin Fowler, e Effective Java do Joshua Bloch.
Palestra sobre Javascript realizada no primeiro ciclo do Plano de Geração de Conhecimento realizado em outubro de 2013, no LEMAF - Universidade Federal de Lavras.
O Plano de geração de conhecimento é um trabalho realizado para tutoria de desenvolvedores com estagiários no estudo de tecnologias, com o objetivo de disseminação de conhecimento.
Palestra ministrada por Fernando Simeone, Carlos Eduardo Chessi Melo, Eduardo Assis da Silva e José Henrique Santos Andrade .
### Atualização 20/02/2015
Palestra melhorada, com algumas correções. Reapresentada por Fernando Simeone e Carlos Eduardo Chessi Melo na SETI (Semana de Tecnologia da Informação) na Universidade Federal de Lavras.
Como usar a biblioteca SimpleTest do PHP para ganhar tempo resolvendo os problemas mas simples do dia-a-dia. Essa apresentação foi elaborada para o PHPConference2008 que aconteceu em Osasco, SP Brasil.
O documento discute as vantagens de testes automatizados e desenvolvimento guiado por testes (TDD) para projetos Django. Apresenta diversas ferramentas para teste em Django como nose, django-nose e django-test-utils e discute técnicas como testes unitários, de integração e de regressão. Defende que testes automatizados trazem tranquilidade para refatoração e que TDD, apesar de inicialmente lento, torna-se mais rápido com o tempo.
Testes com python: como fazer uma refatoração seguraValberto Carneiro
O documento discute testes e refatoração de código em Python. Ele apresenta um caso de estudo de um módulo de diárias e passagens, discute como começar a testar e refatorar de forma segura, conceitos de teste de software, dicas para testar e refatorar, e exemplos de testes em Django.
O documento discute práticas ágeis como Test Driven Development (TDD) e como escrever testes automatizados para o framework Django. Apresenta dicas como usar ferramentas como nosetests, django-nose e django-test-utils para facilitar a escrita e execução de testes. Defende que testes são essenciais para refatorar código com tranquilidade e que TDD, embora inicialmente demorado, torna-se mais rápido com a prática.
O documento discute a complexidade ciclomática no código legado e como manter o código simples através de princípios como Orientação a Objetos, padrões de projeto e o princípio KISS. É destacado o princípio Strategy e a importância de funções fazerem uma única coisa e serem pequenas.
O documento discute o conceito de "Truck Factor" em desenvolvimento de software, que é a medida de quanto conhecimento uma equipe depende de uma pessoa, e propõe estratégias como programação pareada, revisão técnica e rotatividade para aumentar o "Truck Factor" e distribuir melhor o conhecimento pela equipe.
Trenton Doyle Hancock is an artist born in 1974 in Oklahoma City who creates surreal and fantastical works that blend elements of his family history and childhood experiences growing up in Texas. His pieces often take the form of interconnected stories and characters represented as drawings, prints, and felt collages. Hancock's works reference biblical tales and balance moral dilemmas with humor and stylized language and colors to explore psychological themes. He has exhibited widely including at the Whitney Biennial at a young age and lives and works in Houston.
O documento discute a eficiência em sistemas legados na empresa Overstress. Apresenta definições de sistemas legados e descreve como a Overstress melhorou a gestão e integração de seus sistemas legados através da instalação de ferramentas de configuração e mudança, e integração contínua.
O documento discute estratégias para modernizar sistemas legados, incluindo reescrever completamente o código (big bang rewrite), abordagem gradual chamada strangler e validação do strangler usando replay de tráfego em ambientes de teste.
TDD - Algumas lições aprendidas com o livro GOOSFábio Miranda
- TDD: Red – Green – Refactor
- Testes de Unidade x Testes de Integração
- Ports and Adapters Pattern
- Business Domain versus Technical Domain
- Testes de Unidade com JMock
- Coverage Tests
- Logging Tests
The document discusses techniques for working with legacy code, including breaking dependencies, adding tests, and refactoring code in small incremental changes to introduce improvements.
This document discusses unit testing and integration testing. It begins by stating that the author hates unit testing because it doesn't catch many bugs, integration tests are still needed, and it wastes time. It then asks if integration testing means testing at the integration level. Finally, it advocates writing good focused unit tests and using collaboration and contract tests, and notes that refactoring is important when writing unit tests.
This document summarizes a study of CEO succession events among the largest 100 U.S. corporations between 2005-2015. The study analyzed executives who were passed over for the CEO role ("succession losers") and their subsequent careers. It found that 74% of passed over executives left their companies, with 30% eventually becoming CEOs elsewhere. However, companies led by succession losers saw average stock price declines of 13% over 3 years, compared to gains for companies whose CEO selections remained unchanged. The findings suggest that boards generally identify the most qualified CEO candidates, though differences between internal and external hires complicate comparisons.
O documento introduz a linguagem de programação Ruby, discutindo sua criação, popularidade, vantagens e desvantagens. Também lista empresas que usam Ruby e Rails e apresenta brevemente conceitos básicos da linguagem como números, strings, arrays, hashes e comentários.
O documento resume algumas funcionalidades pouco conhecidas do Java, como inicialização de mapas usando classes internas anônimas, métodos que retornam subclasses, e o uso de exceções não checadas.
Aqui são apresentados as técnicas de Desenvolvimento Dirigido a Testes. Simples e prático.
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento descreve recursos pouco conhecidos da linguagem Java, incluindo inicialização de mapas usando Double BraceInitialization, lançar exceções de métodos sem declaração e acessar membros privados usando reflexão.
O documento discute as vantagens da linguagem Scala em relação a Java ao migrar uma plataforma de Ruby para Java. Apresenta exemplos de código em Scala e Java demonstrando o uso de closures, coleções e iteradores. Defende que Scala oferece uma melhor experiência de programação funcional preservando a compatibilidade com código Java existente.
This is the presentation I'll make in JUG Valle about Android Testing. It's in Brazilian portuguese.
Essa é a apresentação que eu estarei apresentando sobre Testes em Android na JUG Valle este final de semana.
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
Escrever um bom código, legível, eficiente e seguro, é uma competência necessária para codificar em qualquer linguagem. O objetivo é abordar técnicas de refatoração, boas práticas, código seguro e testes, utilizando exemplos com a linguagem Java. A bibliografia indicada é Refatoração, do Martin Fowler, e Effective Java do Joshua Bloch.
Palestra sobre Javascript realizada no primeiro ciclo do Plano de Geração de Conhecimento realizado em outubro de 2013, no LEMAF - Universidade Federal de Lavras.
O Plano de geração de conhecimento é um trabalho realizado para tutoria de desenvolvedores com estagiários no estudo de tecnologias, com o objetivo de disseminação de conhecimento.
Palestra ministrada por Fernando Simeone, Carlos Eduardo Chessi Melo, Eduardo Assis da Silva e José Henrique Santos Andrade .
### Atualização 20/02/2015
Palestra melhorada, com algumas correções. Reapresentada por Fernando Simeone e Carlos Eduardo Chessi Melo na SETI (Semana de Tecnologia da Informação) na Universidade Federal de Lavras.
Como usar a biblioteca SimpleTest do PHP para ganhar tempo resolvendo os problemas mas simples do dia-a-dia. Essa apresentação foi elaborada para o PHPConference2008 que aconteceu em Osasco, SP Brasil.
O documento discute as vantagens de testes automatizados e desenvolvimento guiado por testes (TDD) para projetos Django. Apresenta diversas ferramentas para teste em Django como nose, django-nose e django-test-utils e discute técnicas como testes unitários, de integração e de regressão. Defende que testes automatizados trazem tranquilidade para refatoração e que TDD, apesar de inicialmente lento, torna-se mais rápido com o tempo.
Testes com python: como fazer uma refatoração seguraValberto Carneiro
O documento discute testes e refatoração de código em Python. Ele apresenta um caso de estudo de um módulo de diárias e passagens, discute como começar a testar e refatorar de forma segura, conceitos de teste de software, dicas para testar e refatorar, e exemplos de testes em Django.
O documento discute práticas ágeis como Test Driven Development (TDD) e como escrever testes automatizados para o framework Django. Apresenta dicas como usar ferramentas como nosetests, django-nose e django-test-utils para facilitar a escrita e execução de testes. Defende que testes são essenciais para refatorar código com tranquilidade e que TDD, embora inicialmente demorado, torna-se mais rápido com a prática.
O documento apresenta um resumo sobre Java, incluindo: (1) Uma introdução sobre o que é Java e sua história; (2) As vantagens da linguagem como portabilidade, compatibilidade e reuso; (3) Uma breve explicação sobre como funcionam os programas em Java.
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
O documento resume uma palestra sobre Test Driven Development (TDD). Aborda o que é TDD, seus benefícios e padrões, como escrever testes e refatorar código mantendo os testes verdes. O objetivo é ensinar como aplicar TDD de forma efetiva para construir software de qualidade.
O documento discute vários aspectos importantes do teste de software, incluindo: (1) escrever testes antes de codificar para melhorar o design e a testabilidade do código; (2) evitar acoplamentos que dificultam os testes, como dependências externas e referências estáticas; (3) dividir responsabilidades em unidades menores para facilitar a criação de cenários de teste.
1) O documento discute técnicas de teste de software, especificamente o uso de mocks para isolar unidades de teste e tornar os testes menos frágeis.
2) Vários problemas em testes são identificados, como testes com muitas dependências, testes frágeis e escondidos, e propostas de como mocks podem ajudar a resolver esses problemas.
3) Diferentes estilos de teste, como behavior driven development, são apresentados como forma de criar testes mais declarativos.
1) O documento discute a criação de métodos em Java, apresentando seus principais tipos e características.
2) São apresentados exemplos de métodos sem retorno, com parâmetros e retorno de valores.
3) Também são abordados recursividade, sobrecarga de métodos e acesso a métodos de outras classes.
1) O documento apresenta os detalhes de uma aula sobre programação orientada a objetos com Java, incluindo avaliação, conteúdo da prova e agenda.
2) A agenda inclui tópicos como operador ternário, enums, varargs, autoboxing/unboxing, definindo e sobrecarregando construtores e uso do método this.
3) Exemplos de código são fornecidos para ilustrar esses tópicos.
10. Crie Regions
public int RotinaAcoplada(boolean teste){
if (! teste){
var dao = new UsuarioDAO();
...
...
...
return dao.listarUsuarios().Count;
}
return 0;
}
11. Crie Regions
public int RotinaAcoplada(boolean teste){
if (! teste){
var dao = new UsuarioDAO();
#region Quantidade de Usuarios
...
#endregion
return dao.listarUsuarios().Count;
}
return 0;
}
12. Crie um metodo vazio com o nome da Region
public int QuantidadeUsuarios(){
var dao = new UsuarioDAO();
return dao.listarUsuarios().Count;
}
13. Copie o código da Region para o Método
public int QuantidadeUsuarios(){
var dao = new UsuarioDAO();
return dao.listarUsuarios().Count;
}
14. Neste momento o código não
compila e isso agora é bom.
Porque?
15. Chame o novo metodo no lugar
public int RotinaAcoplada(boolean teste){
if (! teste){
var dao = new UsuarioDAO();
#region Quantidade de Usuarios
...
#endregion
return dao.listarUsuarios().Count;
}
return 0;
}
16. Chame o novo metodo no lugar
public int RotinaAcoplada(bool teste){
if (!teste) {
return QuantidadeUsuarios();
return 0;
}
19. Como o Tiago não tá vendo vou
dar uma dica.
Passe as necessidades do código
como parametro da função, o
codigo fica mais limpo inclusive.
20. Desacoplando o código
public int RotinaAcoplada(bool teste){
if (!teste) {
return QuantidadeUsuarios();
return 0;
}
RotinaAcoplada(false);
21. Desacoplando o código
public int RotinaAcoplada(bool teste,
Func<int> query){
if (!teste) {
return query();
return 0;
}
RotinaAcoplada(false, QuantidadeUsuarios);
23. O código pode não funcionar, se
acontecer não tente descobrir o
que houve, dá revert e começa
novamente. É mais seguro.
24. Código legado é aquele que não
tem testes, neste caso é como uma
rocha, que deve ser quebrada em
pedaços até ser possível testar,
caso ainda não consiga fazer
testes, continue quebrando até
conseguir.