This document discusses experiences with Test Driven Development (TDD) in a corporate environment. It describes challenges with current development practices that lead to bugs and difficulties, benefits of TDD like secure development and reduced bugs, and a case study of successful TDD adoption on a large project. Common myths about TDD are also addressed.
23. Sonho
Fim das coincidências
Apresentar funcionalidades mais rapidamente
24. Sonho
Fim das coincidências
Apresentar funcionalidades mais rapidamente
Fim do medo
25. Sonho
Fim das coincidências
Apresentar funcionalidades mais rapidamente
Fim do medo
Não usar o debug :)
26. Sonho
Fim das coincidências
Apresentar funcionalidades mais rapidamente
Fim do medo
Não usar o debug :)
Dormir em paz antes da apresentação :))))))))))
32. // if the guess is correct
if ([guess isEqualToString:[correctAnswer convertToDisplayName]]) {
// make the text color a medium green
answerLabel.textColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.0 alpha:1.0];
TDD significa:
answerLabel.text = @"Correct!"; // set the text in the label
// get the correct answer from the correct file name
NSString *correct = [correctAnswer convertToDisplayName];
Código autoexplicativo
// loop through each bar
for (UISegmentedControl *bar in bars) {
bar.enabled = NO; // don't let the user choose another answer
// loop through the bar segments
for (int i = 0; i < 3; i++) {
// get the segment's title
NSString *title = [bar titleForSegmentAtIndex:i];
// if this segment does not have the correct choice
// disable segment
if (![title isEqualToString:correct]) [bar setEnabled:NO forSegmentAtIndex:i];
} // end for
} // end for
++numCorrect;
.
.
.
56. Caso de sucesso - WebCNIS
Documentação compilável
Código autoexplicativo
57. Caso de sucesso - WebCNIS
Documentação compilável
Código autoexplicativo
Integração contínua
58. Caso de sucesso - WebCNIS
Documentação compilável
Código autoexplicativo
Integração contínua
Sistema compreensível para novos integrantes
59. Caso de sucesso - WebCNIS
Fácil adaptação às mudanças de requisitos
60. Caso de sucesso - WebCNIS
Fácil adaptação às mudanças de requisitos
Fácil adaptação às mudanças de serviços
61. Caso de sucesso - WebCNIS
Fácil adaptação às mudanças de requisitos
Fácil adaptação às mudanças de serviços
PD baseado nas experiências do WebCNIS
62. Caso de sucesso - WebCNIS
Fácil adaptação às mudanças de requisitos
Fácil adaptação às mudanças de serviços
PD baseado nas experiências do WebCNIS
Adoção de TDD por outros projetos
63. Caso de sucesso - WebCNIS
Fácil adaptação às mudanças de requisitos
Fácil adaptação às mudanças de serviços
PD baseado nas experiências do WebCNIS
Adoção de TDD por outros projetos
Tempo de manutenção reduzido
71. #ComoFaz?
- Metodologia, + Filosofia
Testes Unitários + Testes de Integração
Ferramentas (xUnit, RSpec...) não bastam
72. #ComoFaz?
- Metodologia, + Filosofia
Testes Unitários + Testes de Integração
Ferramentas (xUnit, RSpec...) não bastam
Nada é tão simples que não mereça ser testado
76. describe "failure" do
#ComoFaz?
before(:each) do
@attr = { :name => "", :email => "", :password => "", :password_confirmation => "" }
end
it "should not create a user" do
lambda do
post :create, :user => @attr
end.should_not change(User, :count)
end
it "should have the right title" do
post :create, :user => @attr
response.should have_selector("title", :content => "Sign up")
end
it "should have the 'new' page" do
post :create, :user => @attr
response.should render_template('new')
end
end
77. describe "success" do
before(:each) do
@attr = { :name => "New User",
:email => "user@example.com",
:password => "foobar",
:password_confirmation => "foobar" }
end
#ComoFaz?
it "should create a user" do
lambda do
post :create, :user => @attr
end.should change(User, :count).by(1)
end
it "should redirect to the user show page" do
post :create, :user => @attr
response.should redirect_to(user_path(assigns(:user)))
end
it "should have a welcome message" do
post :create, :user => @attr
flash[:success].should =~ /welcome/i
end
it "should sign the user in" do
post :create, :user => @attr
controller.should be_signed_in
end
end
end