On 03/24/2013 11:53 PM, Thiago A. Corrêa wrote:
Olá,
Na verdade, diz o artigo:
"Everyone here has 100% unit test coverage", he joked, but running
whatever tests are available, and creating new ones is useful.
Tem razão, li errado...
Que é algo como:
"Todo mundo aqui tem 100% de cobertura de testes unitários", disse
brincando, mas rodar qualquer teste disponivel e criar novos é útil.
Para muitas coisas realmente é dificil de escrever um teste.
Att.
Thiago A. Correa
2013/3/24 Caio <caiorc...@gmail.com>:
Boa noite senhores,
comecei a programar em C++ há uns 6 meses.
Antes disso desenvolvi majoritariamente em Java, Python e R.
Eu sempre fui muito adepto a práticas ágeis expecialmente TDD (Test Driven
Development) - não consigo confiar em um código que eu não tenho um conjunto
de testes que o valide.
Em geral, eu estou conseguindo escrever programas C++ usando TDD, mas com
uma boa dose de dificuldade, especialmente quando se trata de alguns
programas de baixo nível.
Eu estava conformado com a dificuldade, e até a aparente impossibilidade, de
testar certas funcionalidades até que eu li um artigo [1] falando sobre o
uso de linux em aplicações espaciais no qual relata-se que os programas
desenvolvidos pela empresa possuem 100% de cobertura por testes
automatizados.
Com base nisso, gostaria de saber se há aqui na lista quem desenvolva em C++
seguindo TDD e, caso haja, que frameworks utiliza, técnicas, conselhos,
mandingas, etc.
Eu, particularmente, tenho utilizado googletest e googlemock (não sei se com
muito sucesso, =)).
Abs,
Caio
[1] http://lwn.net/Articles/540368/
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para
ccppbrasil-unsubscribe@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
--
Antes de enviar um e-mail para o grupo leia: http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-unsubscribe@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
O maior problema mesmo (no meu caso) é que o sistema não foi concebido utilizando o TDD, alem disso tinha poucos testes unitários, o sistema também usa muitas bibliotecas gráficas e engines externas (libs, dlls), tentar reproduzir essas dependências em Mocks as vezes é uma tarefa árdua, outro problema também é mudar a cultura dos programadores que não reconhecem o verdadeiro valor do TDD. Meu problema não ta em nível de framework (TDD) e sim em contexto de engenharia de software em geral..
--
Quaaase... a minha equipe aqui da lista! Eu ponho a tarefa aqui na lista e espero vcs entregarem....
---------- Forwarded Message ----------
From: redmine
To:
Date: Today 18:30:00
Subject: [TDD - Feature #112] (New) Criar How-To completo
Issue #112 has been reported by Nasus Maximos.
----------------------------------------
Bug #112: Criar How-To completo
Ah... não é tão difícil assim. Eu comecei a pouco tempo usar testes unitários
(ainda não TDD, só 'D' e depois 'T' mesmo) e me acostumei rápido (por
influência do Caio mesmo).
Acho que o que falta é ter o processo bem definido. Ter um 'How-To' de boas
práticas do processo todo; de como fazer o design, depois testes,
desenvolver+documentar, validar e então colocar no profiler. Usando UML, Git,
CMake[0]/Make/QMake[1]/QBS[2], GCC, Doxygen[3], Valgrind[4]+memtool,
Valgrind+callgrind[5], Jenkins[6].
Basicamente, um exemplo de um processo usando todos esses caras.
[1] https://qt-project.org/doc/qt-4.8/qmake-manual.html
[2] https://qt-project.org/wiki/Qbs-Quick-Reference
[3] http://www.stack.nl/~dimitri/doxygen/
[5] http://kcachegrind.sourceforge.net/html/Shot3.html
[6] https://en.wikipedia.org/wiki/Jenkins_%28software%29
----------------------------------------
You have received this notification because you have either subscribed to it,or are involved in it.
To change your notification preferences, please click here: http://hostname/my/account
Mudar a cultura realmente é a parte mais difícil do desenvolvimento agil em C++. Me espanta que muitas empresas adotam o Scrum mas esquecem de incentivar práticas ágeis para implementação em sí. Nem falo em TDD mas ter uma boa cobertura de testes. E o que mais me espanta ainda é que muitas vezes venham dos próprios programadores esse preconceito.
Testing by itself does not improve software quality. Test results are an indicator of quality, but in and of themselves, they don’t improve it. Trying to improve software quality by increasing the amount of testing is like trying to lose weight by weighing yourself more often. What you eat before you step onto the scale determines how much you will weigh, and the software development techniques you use determine how many errors testing will find. If you want to lose weight, don’t buy a new scale; change your diet. If you want to improve your software, don’t test more; develop better.
— Steve McConnell Code Complete
Já me deparei inúmeras vezes com testes inadequados e qua não testam nada e que portanto dão a impressão errada de que tudo está ok antes de comitar. Testes na minha opinião tem que ser o mínimo que garanta o funcionamento (e não menos que o mínimo).
Marcelo
--
��� A minha opini�o � diferente. Acredito que um dos pontos positivos do
enfoque �gil � a import�ncia atribu�da aos testes e a �nfase no ponto
que eles devem ser feitos o mais cedo poss�vel.
� Pelo menos no tipo de software que eu escrevo, os testes ajudam sim
a melhorar a qualidade, tanto sob o ponto de vista de diminui��o de
bugs idiotas como na detec��o de problemas no design. N�o chego
ao ponto de escrever os testes antes, pois considero exagero, mas
acredito que o desenvolvimento e execu��o de testes durante a
programa��o s�o ben�ficos.
� Para mim � claro tamb�m que o fator limitante � mesmo o programador.
Testes feitos por algu�m que faz isto por mera obriga��o ou aceita��o
de dogmas ter�o os problemas apontados pelo Marcelo. Se o programador
n�o tiver consci�ncia do que est� fazendo ent�o n�o adianta testar antes,
no meio ou depois. Na verdade, n�o adianta nem programar...
��������������� walter.
On Thursday, March 28, 2013 7:23:29 AM UTC-3, mzimbres wrote:
Vou citar aqui a opini�o de um desenvolvedor com a qual simpatizo:Testing by itself does not improve software quality. Test results are an indicator of quality, but in and of themselves, they don�t improve it. Trying to improve software quality by increasing the amount of testing is like trying to lose weight by weighing yourself more often. What you eat before you step onto the scale determines how much you will weigh, and the software development techniques you use determine how many errors testing will find. If you want to lose weight, don�t buy a new scale; change your diet. If you want to improve your software, don�t test more; develop better.
��������� Steve McConnell Code Complete
J� me deparei in�meras vezes com testes inadequados e qua n�o testam nada e que portanto d�o a impress�o errada de que tudo est� ok antes de comitar. Testes na minha opini�o tem que ser o m�nimo que garanta o funcionamento (e n�o menos que o m�nimo).
Marcelo
Em 28 de mar�o de 2013 06:11, Walter Mascarenhas <walter.ma...@gmail.com> escreveu:
� A cultura � certamente um problema. Infelizmente experi�ncias
como a do Pedro acontecem bastante.
�
� Por�m, me espanta tamb�m a confus�o entre m�todos �geis
e testes. Sob o meu ponto de vista dinoss�urico, testes s�o
FUNDAMENTAIS desde sempre. Quando comecei a programar
a s�rio, em 1988, eu observava um grande programador (Mike McKeena)
que trabalhava em uma velha Lisp machine do lado da minha.
Para cada linha de c�digo ele escrevia umas quatro ou cinco
de testes.
� A companhia onde trabalh�vamos (Thinking Machines) faliu e hoje
� parte da hist�ria da computa��o em paralelo, mas desde daqueles
tempos bons programadores, em qualquer linguagem, sabem
da import�ncia de testes.
� Outra coisa � a religi�o �gil, com seus mitos e cren�as. H�
muitos pontos positivos em agilidade, mas as vezes falta
um pouco de senso cr�tico ao pessoal que defende com
unhas e dentes esta linha de pensamento. Isto pode ser
uma das fontes de resist�ncia � agilidade.
� De qualquer forma, seria saud�vel que os jovens �geis
lessem pelo menos os livros do Doug Rosenberg, como
Design Driven Testing: Test Smarter, Not Harder�
e vissem o v�deo hil�rio (o cara fala a s�rio!!!).
�http://www.ted.com/talks/bruce_feiler_agile_programming_for_your_family.html
� A partir da considera��o sem preconceito das crit�cas � agilidade me
parece que� ficaria mais f�cil convencer os demais sobre o que� elas
tem realmente de bom. Ou melhor, focar no
que elas tem de bom e evitar o que elas tem de rid�culo.
��������� walter.
On Wednesday, March 27, 2013 10:24:39 PM UTC-3, Ot�vio Basso Gomes wrote:Mudar a cultura realmente � a parte mais dif�cil do desenvolvimento agil em C++. Me espanta que muitas empresas adotam o Scrum mas esquecem de incentivar pr�ticas �geis para implementa��o em s�. Nem falo em TDD mas ter uma boa cobertura de testes. E o que mais me espanta ainda � que muitas vezes venham dos pr�prios programadores esse preconceito.
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais op��es, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
�
�
�
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais op��es, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
�Acho que a discuss�o pode se manter produtiva se tentarmos evitar pontua��es evangel�sticas.
�
�
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
Caro Walter, creio que não fui suficientemente claro. Por "sair do nível da discussão do café" não me limitei aos argumentos contra práticas ágeis, mas me referi também aos a favor.
Em geral essas discussões sobre práticas ágeis se baseiam em achismos e ninguém acaba citando um estudo que olhe de forma crítica e imparcial para o problema.
Vou citar aqui a opinião de um desenvolvedor com a qual simpatizo:Testing by itself does not improve software quality. Test results are an indicator of quality, but in and of themselves, they don’t improve it. Trying to improve software quality by increasing the amount of testing is like trying to lose weight by weighing yourself more often. What you eat before you step onto the scale determines how much you will weigh, and the software development techniques you use determine how many errors testing will find. If you want to lose weight, don’t buy a new scale; change your diet. If you want to improve your software, don’t test more; develop better.
— Steve McConnell Code Complete
Já me deparei inúmeras vezes com testes inadequados e qua não testam nada e que portanto dão a impressão errada de que tudo está ok antes de comitar. Testes na minha opinião tem que ser o mínimo que garanta o funcionamento (e não menos que o mínimo).
Porém, me espanta também a confusão entre métodos ágeis
e testes. Sob o meu ponto de vista dinossáurico, testes são
FUNDAMENTAIS desde sempre.
Caro Walter, creio que não fui suficientemente claro. Por "sair do nível da discussão do café" não me limitei aos argumentos contra práticas ágeis, mas me referi também aos a favor.
Caro Caio,
Você foi muito claro, tanto que insiste na superioridade da sua sapiência na sua resposta:
Em geral essas discussões sobre práticas ágeis se baseiam em achismos e ninguém acaba citando um estudo que olhe de forma crítica e imparcial para o problema.
Ou seja, nestas discussões NINGUÉM além de você pensa de forma crítica e imparcial.
Para você, os outros apenas "acham", pois não leram além do abstract do artigo maravilhoso
que você achou.
Quando eu tiver tempo eu leio o resto do artigo que você achou e te digo o que eu acho.
walter.
Eu citei um artigo que faz justamente isso. Se vc ler mais do que o abstract do artigo verá que ele colabora com a discussão mostrando pontos de sucesso e de fracasso,
pontos fortes e fracos, sobre o uso de métodos ágeis, mostrando que esses métodos e práticas não são um santo graal, e que podem ser ruins para determinadas empresas.
Não sou um evangelista ágil, sou pragmático. Se surgirem os métodos espaciais e eles de fato melhorarem o processo de desenvolvimento então eu serei um programador espacial.
Para mim, não importa se é ágil, cascata, ponto de função, code and fix, etc.
O que importa é se funciona.
[]s
Caio
--
On Thursday 28 March 2013 08:20:53 Walter Mascarenhas wrote:
[...snip...]
O que me incomoda é a sua suposição quanto ao que eu,
e outros membros desta lista sabemos ou deixamos de
saber ou lemos ou deixamos de ler. Você não faz idéia do
que eu já estudei e dos projetos práticos de que participei,
assim como eu não faço idéia do que você estudou e da
sua experiência prática.
[...snip...]
Cara, não foi isso que foi dito. Nem próximo disso. Você está seriamente descaracterizando o que o Caio disse, que foi de formas beeem gerais, e fazendo parecer que o Caio estava falando exclusivamente de você.
A ideia era sair do teórico e começar a discutir a prática. Se você não concorda com os métodos ágeis ou algo assim, abstênha-se da discussão... Isso que você falou foi desnecessário, não acrescentou nada, descaracterizou o contexo de 'em termos gerais' em um suposto ataque ad-hominem... enfim, só atrapalha.
--
Alguém já usou TDD aqui com o framework QT?
Mais respeito com o melhor framework do mundo ;-P /troll
2013/3/28 André Luis Pereira <an...@bsrpar.com>Alguém já usou TDD aqui com o framework QT?Excelente pergunta.Estava com essa dúvida também, já que o Jav.. digo, Qt oferece muitos recursos de "reflection".
--
Pô P., será que não existe a possiblidade do Thiago ter
encontrado algo mais no "code coverage" do VC++? Vai
saber, as vezes, por questões comerciais ou sobrenaturais,
as pessoas escolhem nomes inesperados para as coisas.
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
Você desenvolve que tipo de software?
No meu caso não há tanta necessidades dos .o's pois
de longe a maior parte do código que uso é templatizado.
As poucas libs são coisas tipo lapack. Além disso,
a maioria do meu código são algoritmos mesmo, com
entradas e saídas muito claras. Por isso eu talvez não
veja tanta diferença entre C++ e linguagens dinâmicas.
Quanto à "teoria", não sei bem se ela vai muito além
do bom senso. Há alguém aqui na lista que conheça
uma referência não trivial sobre este assunto, que vá
além dos Kent Back's? Alguém tem uma referência
top, daquelas que você lê e fala: tai algo que valeu
a pena ter lido?
walter.
Você desenvolve que tipo de software?
No meu caso não há tanta necessidades dos .o's pois
de longe a maior parte do código que uso é templatizado.
As poucas libs são coisas tipo lapack. Além disso,
a maioria do meu código são algoritmos mesmo, com
entradas e saídas muito claras. Por isso eu talvez não
veja tanta diferença entre C++ e linguagens dinâmicas.
Quanto à "teoria", não sei bem se ela vai muito além
do bom senso. Há alguém aqui na lista que conheça
uma referência não trivial sobre este assunto, que vá
além dos Kent Back's? Alguém tem uma referência
top, daquelas que você lê e fala: tai algo que valeu
a pena ter lido?
para programação de calculo em C++, é geralmente bem
simples construir "mocks" ou verificar a corretude dos
resultados, pois os objetos são apenas modelos dos
concepts requeridos pelos algoritmos. Substitui-los significa
apenas implementar ou adaptar outro modelo para o mesmo
concept, geralmente com pouca intrusividade (ao contrário do
requerimento normal de OO de se herdar de determinada
classe). E também geralmente os algoritmos fazem uso
de equality reasoning das propriedades salientes de cada
abstração, o que trás uma forte ferramenta de reasoning everificação. Eu gostaria muito que fosse assim também
em outros domínios.
Para mim a melhor referência no assunto é o livro do Kent Beck mesmo [1].
Mas, particularmente, não acho que seja necessário muita leitura para entender TDD.
É realmente muito simples. Talvez fique mais claro como é simples vendo algum tutorial ou vídeo
de alguém escrevendo um aplicação em TDD. Como já falei, estou planejando fazer isso, mas por hora
está corrido.
Caio,
Antes de mais nada, um pedido de desculpas: eu
me excedi nas respostas anteriores a você e acabei
dizendo o que náo deveria ter dito (ou pensado).
Com certeza (dada a minha natureza) eu voltarei a
te contrariar logo logo. Não tome minhas
afirmações como ataques pessoais. São apenas
questionamentos das suas idéias, e, por favor,
pode ficar muito a vontade para questionar as
minhas também (e eu me esforço para não
cruzar a linha do razoável de novo)
--
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
Caros, não tenho duvidas quanto ao TDD, mas sim com relação aos testes e como e quais devem ser formulados para ampliar as garantias de qualidade dos produtos entregues.
Por exemplo, no exemplo do Caio, como eu posso garantir que a música está sendo tocada corretamente? Qual o nível de modularidade que devo adotar? Quais as unidades a serem consideradas? Testes de Integração?
Caros, não tenho duvidas quanto ao TDD, mas sim com relação aos testes e como e quais devem ser formulados para ampliar as garantias de qualidade dos produtos entregues.Por exemplo, no exemplo do Caio, como eu posso garantir que a música está sendo tocada corretamente? Qual o nível de modularidade que devo adotar? Quais as unidades a serem consideradas? Testes de Integração?Com relação ao que foi dito sobre os templates, concordo que eles simplificam muito a questão da ferramenta, o problema são para produtos grandes e com UI a solução não parece ser escalável.
E apenas como relato de experiência pessoal com o google-mock ... é muito difícil mockar a sobrecarga de operadores ... deve ter uma saida, mas eu não achava, acabei criando um método para tal.
Apenas como referencia, achei este material sobre testes que achei interessante pela organização: http://www.codeproject.com/Articles/5772/Advanced-Unit-Test-Part-V-Unit-Test-PatternsAtt,
On Saturday 30 Mar 2013 12:36:48 André Luis Pereira wrote:
> TDD. Na verdade em uma fase anterior ao TDD, já que essa fase inicial seria
> a "preparação" para o TDD que é automatizado por natureza.
OK. Mas e se eu tiver que refatorar a classe que toca o áudio? Então eu preciso refazer os testes que exigem intervenção humana.
Só dizer que as intervenções humanas são parte da preparação ao TDD que é o que eu questiono. Vejo como uma boa solução ter alguns testes, o mais isolados que for possível, que usem intervenção humana para passarem.
Sim, ter automatizado fica melhor, mais rápido e tudo mais. Mas há casos que não serve. Só para estes ter intervenção humana é obrigatório.
A vantagem então em incluir esses testes como parte integral do TDD, é ao final que uma fase, rodar todos os testes automatizados, inclusive os que exigem intervenção humana, de uma forma organizada e metódica.
--
On Saturday 30 Mar 2013 13:45:34 André Luis Pereira wrote:
> E deve ser anterior ao TDD.
Então... não. Meu ponto foi exatamente o oposto disso. Eu acho que não precisa ser anterior; poderia ser parte integral, sendo repetido durante todo o desenvolvimento. Essa era a minha pergunta/sugestão original...
--
Best Regards,
Wander Lairson Costa
--
On Saturday 30 Mar 2013 14:21:41 André Luis Pereira wrote:
> Ou você faz os testes manuais antes ou depois do TDD. Se for durante,
> ocorrerá a violação do princípio do TDD.
É isso que eu questiono! Em casos onde não se pode fazer testes totalmente automatizados, por que não criar uma forma padronizada de se fazer os testes com intervenção humana?
Se não é o tradicional ou for uma violação aos princípios, dane-se! Se a forma tradicional não atende neste caso, vamos evoluir e criar uma forma de incluir uma forma nova para estes casos.
Tradições foram feitas para serem quebradas! É assim que a humanidade evoluí! :-D
Calma! hehe... Acho um pouco precipitado essa conversa. Perfeito seu argumento de não confundir os nomes ou quebrar padrões, etc.
Só que eu ainda nem sei se a ideia tem sentido... queria antes propor o abandono de tradições, dogmas e etc para nos dar liberdade de pensar. Ao fim desse exercício vamos ver se sobre algo que vale a pena. Daí a gente dá um nome.
O problema de dar um nome agora, é já supor que é a resposta (TDD 2.0 ou algo assim). Quem sabe a resposta é outra? TDD tradicional + testes contínuos. O TDD moldca o desenvolvimento (daí o Driven), os testes contínuos só ajudam a validar, e não guiam o desenvolvimento... Quem sabe não, quem sabe realmente vira um TDD 2.0....
--
Pensei em algumas coisas também. Ao contrário de testes de aceitação ou etc,
os testes com IH (intervenção humana) usados em TDD deveriam:
1 - Ser TODOS binários. Algo acontece (toca um som) e o programa faz um
pergunta ao usuário verdadeiro/falso. Testes de IH nunca podem ser
subjetivos.
2 - A resposta pedida ao usuário deve ser sempre de duas opções, entradas pelo
teclado, usando teclas aleatórias. Tipo:
Ouviu o som? Tecle '5' p/ sim, 'a' p/ não.
Cada vez que o teste for rodado estas teclas devem mudar. Assim, o usuário é
forçado a pensar, e não só teclar sempre a mesma coisa. A pergunta porém,
nunca pode mudar. Isso poderia confundir e se digitar o oposto do desejado.
--
Estou acompanhando esta "thread" e imagino que uma boa maneira de implementar testes unitários automatizados seria através de scripts que fariam uma varredura nas classes públicas e construí-se diversas combinações de aplicações em função da ordem de chamada dos métodos e dos argumentos destes.