SlideShare a Scribd company logo
1 of 77
Download to read offline
@dchohfiwifi: nu-guest / senha: visitando o nubank
Qualidade da aplicação
e tranquilidade na loja
1
@dchohfiwifi: nu-guest / senha: visitando o nubank
Diego Chohfi Turini
2
@dchohfi
@dchohfiwifi: nu-guest / senha: visitando o nubank
Como softwares eram entregues a 10 anos?
3
@dchohfiwifi: nu-guest / senha: visitando o nubank
Como softwares eram entregues a 10 anos?
3
@dchohfiwifi: nu-guest / senha: visitando o nubank
Nós até que temos
sorte!
4
@dchohfiwifi: nu-guest / senha: visitando o nubank
Como garantir a qualidade de um
app?
5
@dchohfiwifi: nu-guest / senha: visitando o nubank
Como garantir a qualidade de um
app?
5
• processo de submissão
• regras aleatórias impostas pela nave mãe
• 7 dias de aprovação (se a Apple ajudar)
• Apple não aceita os aplicativos pq é fresca mesmo.
@dchohfiwifi: nu-guest / senha: visitando o nubank
O que temos controle?
6
@dchohfiwifi: nu-guest / senha: visitando o nubank
O que temos controle?
6
Código que
escrevemos
@dchohfiwifi: nu-guest / senha: visitando o nubank
O que temos controle?
6
Código que
escrevemos
@dchohfiwifi: nu-guest / senha: visitando o nubank
O que temos controle?
6
Código que
escrevemos
teoricamente
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mas sinceramente, seu
APP hoje em dia funciona?
7
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mas sinceramente, seu
APP hoje em dia funciona?
7
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mas sinceramente, seu
APP hoje em dia funciona?
7
@dchohfiwifi: nu-guest / senha: visitando o nubank
O que fazemos antes de
subir o app pra loja?
8
@dchohfiwifi: nu-guest / senha: visitando o nubank
Se testamos manualmente,
o que somos?
9
@dchohfiwifi: nu-guest / senha: visitando o nubank
Se testamos manualmente,
o que somos?
9
@dchohfiwifi: nu-guest / senha: visitando o nubank
Se testamos manualmente,
o que somos?
9
@dchohfiwifi: nu-guest / senha: visitando o nubank
Se testamos manualmente,
o que somos?
9
@dchohfiwifi: nu-guest / senha: visitando o nubank
#nãosomosmacacos
10
códigos que testam código!
@dchohfiwifi: nu-guest / senha: visitando o nubank 11
@dchohfiwifi: nu-guest / senha: visitando o nubank 12
Contatos nubank
@dchohfiwifi: nu-guest / senha: visitando o nubank 12
Contatos nubank
@dchohfiwifi: nu-guest / senha: visitando o nubank 12
Contatos nubank
@dchohfiwifi: nu-guest / senha: visitando o nubank 12
Contatos nubank
@dchohfiwifi: nu-guest / senha: visitando o nubank 12
Contatos nubank
@dchohfiwifi: nu-guest / senha: visitando o nubank
Testes unitários
13
Além de garantir que a lógica
está correta
Mostra se o código é “bom" ou
não
@dchohfiwifi: nu-guest / senha: visitando o nubank
ViewController Megazord
14
@dchohfiwifi: nu-guest / senha: visitando o nubank
ViewController Megazord
14
@dchohfiwifi: nu-guest / senha: visitando o nubank
ViewController Megazord
14
• requisição web
• parser de dados
• tratamento de erro
• envio de email
@dchohfiwifi: nu-guest / senha: visitando o nubank 15
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
specta
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
specta
Quick
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
specta
Quick
cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
specta
https://github.com/kiwi-bdd/Kiwi
Quick
cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
specta
https://github.com/kiwi-bdd/Kiwi
https://github.com/specta/specta
Quick
cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
specta
https://github.com/kiwi-bdd/Kiwi
https://github.com/specta/specta
Quick
cedar
https://github.com/pivotal/cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco)
vamos testar o que fizemos
16
XCTestCase
Kiwi
specta
https://github.com/kiwi-bdd/Kiwi
https://github.com/specta/specta
Quick
cedar
https://github.com/pivotal/cedar
https://github.com/Quick/Quick
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@interface NUPersonTests : XCTestCase
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@interface NUPersonTests : XCTestCase
- (void)setUp {}
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@interface NUPersonTests : XCTestCase
- (void)setUp {}
- (void)testBlah {}
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@interface NUPersonTests : XCTestCase
- (void)setUp {}
- (void)testBlah {}
@dchohfiwifi: nu-guest / senha: visitando o nubank
E como testar requests http?
18
OHHTTPStubs
Nocilla
https://github.com/luisobo/Nocilla
https://github.com/AliSoftware/OHHTTPStubs
VCRURLConnection
https://github.com/dstnbrkr/VCRURLConnection
Stubs!
@dchohfiwifi: nu-guest / senha: visitando o nubank
Problema :(
19
Como testar coisas assíncronas?
O método acabou antes de ser validado
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
- (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout
handler:(XCWaitCompletionHandler)handlerOrNil;
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
- (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout
handler:(XCWaitCompletionHandler)handlerOrNil;
[expectation fulfill];
@dchohfiwifi: nu-guest / senha: visitando o nubank
Como testar apresentação?
21
@dchohfiwifi: nu-guest / senha: visitando o nubank
ViewModels!
22
WTF?!
@dchohfiwifi: nu-guest / senha: visitando o nubank
ViewModels!
22
WTF?!
@dchohfiwifi: nu-guest / senha: visitando o nubank
Comos testar a
ViewController?
23
• Quando a tela for carregada
• Precisamos tentar carregar os contatos
• Exibir um loading enquanto carrega
• Depois que carregar, exibir mensagem de sucesso
• Preencher a tabela com os contatos
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?
Ou como ela mostra o sucesso?
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?
Ou como ela mostra o sucesso?
Ou como a tabela monta os resultados?
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?
Ou como ela mostra o sucesso?
Ou como a tabela monta os resultados?
NÃO! Precisamos apenas ter certeza que
serão feitas.
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mocks
25
São objetos que simulam o comportamento de outros
@dchohfiwifi: nu-guest / senha: visitando o nubank 26
ocmock
OCMockito
https://github.com/jonreid/OCMockito
http://ocmock.org/
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
OCMExpect([contactsControllerMock getContactsWithBlock:
[OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) {
obj(self.contacts, nil);
return YES;
}]]);
Expect
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
OCMExpect([contactsControllerMock getContactsWithBlock:
[OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) {
obj(self.contacts, nil);
return YES;
}]]);
Expect
Verifica
OCMVerifyAll(contactsControllerMock);
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
OCMExpect([contactsControllerMock getContactsWithBlock:
[OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) {
obj(self.contacts, nil);
return YES;
}]]);
Expect
Verifica
OCMVerifyAll(contactsControllerMock);
Cancelar Mock
[contactsControllerMock stopMocking];
@dchohfiwifi: nu-guest / senha: visitando o nubank
Testes funcionais
28
KIF
calabash
Frank
Subliminal
appium https://github.com/kif-framework/KIF
https://github.com/calabash/calabash-ios
https://github.com/inkling/Subliminal
http://appium.io/
https://github.com/TestingWithFrank/Frank
@dchohfiwifi: nu-guest / senha: visitando o nubank
KIF
29
@interface NUContactsFunctionalTests : KIFTestCase
Atores agindo na sua aplicação
#define tester KIFActorWithClass(KIFUITestActor)
macro tester
@dchohfiwifi: nu-guest / senha: visitando o nubank
Evitar repetição do tester
30
@dchohfiwifi: nu-guest / senha: visitando o nubank
Testing pixel-perfect
31
@dchohfiwifi: nu-guest / senha: visitando o nubank
LELA, by KIF
32
@dchohfiwifi: nu-guest / senha: visitando o nubank
Thank you <3
33
@dchohfiwifi: nu-guest / senha: visitando o nubank
Thank you <3
33

More Related Content

Viewers also liked

Ideias Todo Mundo Tem
Ideias Todo Mundo TemIdeias Todo Mundo Tem
Ideias Todo Mundo Tempublirp
 
Manga Port 20110829
Manga Port 20110829Manga Port 20110829
Manga Port 20110829carolfurness
 
L’acqua - didattica differenziata
L’acqua - didattica differenziataL’acqua - didattica differenziata
L’acqua - didattica differenziataIacopo Pappalardo
 
Xamarin e Azure - Mobile e Cloud First
Xamarin e Azure - Mobile e Cloud FirstXamarin e Azure - Mobile e Cloud First
Xamarin e Azure - Mobile e Cloud FirstStudyxnet
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsCesar Augusto Nogueira
 
Desafios da tecnologia para escritórios contábeis
Desafios da tecnologia para escritórios contábeisDesafios da tecnologia para escritórios contábeis
Desafios da tecnologia para escritórios contábeisMarcelo dos Santos
 
Como escalamos Agile na Globo.com
Como escalamos Agile na Globo.comComo escalamos Agile na Globo.com
Como escalamos Agile na Globo.comGlaucia Peres
 
Webinar seo moip + núvem shop rosana amaral vfinal
Webinar seo moip + núvem shop   rosana amaral vfinalWebinar seo moip + núvem shop   rosana amaral vfinal
Webinar seo moip + núvem shop rosana amaral vfinalMoip
 
Xamarin Introdução
Xamarin IntroduçãoXamarin Introdução
Xamarin Introduçãoakamud
 
Conta Azul: de Joinville a Silicon Valley
Conta Azul: de Joinville a Silicon ValleyConta Azul: de Joinville a Silicon Valley
Conta Azul: de Joinville a Silicon ValleyStartupi
 
Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!
Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!
Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!Modulo Security
 
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...Vinicius Jarina
 
Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...
Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...
Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...Felipe Perlino
 
APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4
APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4
APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4Larissa Candido
 

Viewers also liked (18)

Android - FLISoL 2016
Android - FLISoL 2016Android - FLISoL 2016
Android - FLISoL 2016
 
MIMO + Spotify
MIMO + SpotifyMIMO + Spotify
MIMO + Spotify
 
Ideias Todo Mundo Tem
Ideias Todo Mundo TemIdeias Todo Mundo Tem
Ideias Todo Mundo Tem
 
Manga Port 20110829
Manga Port 20110829Manga Port 20110829
Manga Port 20110829
 
L’acqua - didattica differenziata
L’acqua - didattica differenziataL’acqua - didattica differenziata
L’acqua - didattica differenziata
 
Xamarin e Azure - Mobile e Cloud First
Xamarin e Azure - Mobile e Cloud FirstXamarin e Azure - Mobile e Cloud First
Xamarin e Azure - Mobile e Cloud First
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcps
 
Desafios da tecnologia para escritórios contábeis
Desafios da tecnologia para escritórios contábeisDesafios da tecnologia para escritórios contábeis
Desafios da tecnologia para escritórios contábeis
 
Como escalamos Agile na Globo.com
Como escalamos Agile na Globo.comComo escalamos Agile na Globo.com
Como escalamos Agile na Globo.com
 
Trabalhos Variados F | Estúdio 196 Branding & Design
Trabalhos Variados F | Estúdio 196 Branding & DesignTrabalhos Variados F | Estúdio 196 Branding & Design
Trabalhos Variados F | Estúdio 196 Branding & Design
 
Webinar seo moip + núvem shop rosana amaral vfinal
Webinar seo moip + núvem shop   rosana amaral vfinalWebinar seo moip + núvem shop   rosana amaral vfinal
Webinar seo moip + núvem shop rosana amaral vfinal
 
Xamarin Introdução
Xamarin IntroduçãoXamarin Introdução
Xamarin Introdução
 
Conta Azul: de Joinville a Silicon Valley
Conta Azul: de Joinville a Silicon ValleyConta Azul: de Joinville a Silicon Valley
Conta Azul: de Joinville a Silicon Valley
 
Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!
Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!
Webinar: Centro de Gestão Integrada: Sua empresa ainda vai ter um!
 
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
 
Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...
Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...
Não aguenta mais investir no Google? A solução pode estar no seu Suporte ao C...
 
APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4
APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4
APRESENTACAO - ITAÚ – FEITO PARA VOCÊ - LARISSA CANDIDO_v4
 
Facebook Empresas
Facebook EmpresasFacebook Empresas
Facebook Empresas
 

Similar to Code quality and automated tests on iOS Application

Curso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoCurso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoVinicius Quaiato
 
Tecnologias e processo de desenvolvimento na Codeminer42 e Locaweb
Tecnologias e processo de desenvolvimento na Codeminer42 e LocawebTecnologias e processo de desenvolvimento na Codeminer42 e Locaweb
Tecnologias e processo de desenvolvimento na Codeminer42 e LocawebTiago Freire
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
TDC2016SP - Trilha BigData
TDC2016SP - Trilha BigDataTDC2016SP - Trilha BigData
TDC2016SP - Trilha BigDatatdc-globalcode
 
QCon 2019 - Kubernetes Deepdive
QCon 2019 -  Kubernetes DeepdiveQCon 2019 -  Kubernetes Deepdive
QCon 2019 - Kubernetes DeepdiveRicardo Katz
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Aplicações Web Realtime
Aplicações Web RealtimeAplicações Web Realtime
Aplicações Web RealtimeGabriel Gularte
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
NoSQL Onde Vivem e Como se Alimentam ?
NoSQL Onde Vivem e Como se Alimentam ? NoSQL Onde Vivem e Como se Alimentam ?
NoSQL Onde Vivem e Como se Alimentam ? Alvaro Viebrantz
 

Similar to Code quality and automated tests on iOS Application (14)

Curso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius QuaiatoCurso ASP.NET MVC 3 - Vinicius Quaiato
Curso ASP.NET MVC 3 - Vinicius Quaiato
 
Tecnologias e processo de desenvolvimento na Codeminer42 e Locaweb
Tecnologias e processo de desenvolvimento na Codeminer42 e LocawebTecnologias e processo de desenvolvimento na Codeminer42 e Locaweb
Tecnologias e processo de desenvolvimento na Codeminer42 e Locaweb
 
TDC 2015 Florianopolis
TDC 2015 FlorianopolisTDC 2015 Florianopolis
TDC 2015 Florianopolis
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 
TDC2016SP - Trilha BigData
TDC2016SP - Trilha BigDataTDC2016SP - Trilha BigData
TDC2016SP - Trilha BigData
 
Debug de cabo a rabo
Debug de cabo a raboDebug de cabo a rabo
Debug de cabo a rabo
 
QCon 2019 - Kubernetes Deepdive
QCon 2019 -  Kubernetes DeepdiveQCon 2019 -  Kubernetes Deepdive
QCon 2019 - Kubernetes Deepdive
 
Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6Uma Olhada no Netbeans 6
Uma Olhada no Netbeans 6
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Aplicações Web Realtime
Aplicações Web RealtimeAplicações Web Realtime
Aplicações Web Realtime
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
NoSQL Onde Vivem e Como se Alimentam ?
NoSQL Onde Vivem e Como se Alimentam ? NoSQL Onde Vivem e Como se Alimentam ?
NoSQL Onde Vivem e Como se Alimentam ?
 

Code quality and automated tests on iOS Application

  • 1. @dchohfiwifi: nu-guest / senha: visitando o nubank Qualidade da aplicação e tranquilidade na loja 1
  • 2. @dchohfiwifi: nu-guest / senha: visitando o nubank Diego Chohfi Turini 2 @dchohfi
  • 3. @dchohfiwifi: nu-guest / senha: visitando o nubank Como softwares eram entregues a 10 anos? 3
  • 4. @dchohfiwifi: nu-guest / senha: visitando o nubank Como softwares eram entregues a 10 anos? 3
  • 5. @dchohfiwifi: nu-guest / senha: visitando o nubank Nós até que temos sorte! 4
  • 6. @dchohfiwifi: nu-guest / senha: visitando o nubank Como garantir a qualidade de um app? 5
  • 7. @dchohfiwifi: nu-guest / senha: visitando o nubank Como garantir a qualidade de um app? 5 • processo de submissão • regras aleatórias impostas pela nave mãe • 7 dias de aprovação (se a Apple ajudar) • Apple não aceita os aplicativos pq é fresca mesmo.
  • 8. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6
  • 9. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6 Código que escrevemos
  • 10. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6 Código que escrevemos
  • 11. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6 Código que escrevemos teoricamente
  • 12. @dchohfiwifi: nu-guest / senha: visitando o nubank Mas sinceramente, seu APP hoje em dia funciona? 7
  • 13. @dchohfiwifi: nu-guest / senha: visitando o nubank Mas sinceramente, seu APP hoje em dia funciona? 7
  • 14. @dchohfiwifi: nu-guest / senha: visitando o nubank Mas sinceramente, seu APP hoje em dia funciona? 7
  • 15. @dchohfiwifi: nu-guest / senha: visitando o nubank O que fazemos antes de subir o app pra loja? 8
  • 16. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  • 17. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  • 18. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  • 19. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  • 20. @dchohfiwifi: nu-guest / senha: visitando o nubank #nãosomosmacacos 10 códigos que testam código!
  • 21. @dchohfiwifi: nu-guest / senha: visitando o nubank 11
  • 22. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  • 23. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  • 24. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  • 25. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  • 26. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  • 27. @dchohfiwifi: nu-guest / senha: visitando o nubank Testes unitários 13 Além de garantir que a lógica está correta Mostra se o código é “bom" ou não
  • 28. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewController Megazord 14
  • 29. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewController Megazord 14
  • 30. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewController Megazord 14 • requisição web • parser de dados • tratamento de erro • envio de email
  • 31. @dchohfiwifi: nu-guest / senha: visitando o nubank 15
  • 32. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16
  • 33. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase
  • 34. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi
  • 35. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta
  • 36. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta Quick
  • 37. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta Quick cedar
  • 38. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi Quick cedar
  • 39. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi https://github.com/specta/specta Quick cedar
  • 40. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi https://github.com/specta/specta Quick cedar https://github.com/pivotal/cedar
  • 41. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi https://github.com/specta/specta Quick cedar https://github.com/pivotal/cedar https://github.com/Quick/Quick
  • 42. @dchohfiwifi: nu-guest / senha: visitando o nubank 17
  • 43. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase
  • 44. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase - (void)setUp {}
  • 45. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase - (void)setUp {} - (void)testBlah {}
  • 46. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase - (void)setUp {} - (void)testBlah {}
  • 47. @dchohfiwifi: nu-guest / senha: visitando o nubank E como testar requests http? 18 OHHTTPStubs Nocilla https://github.com/luisobo/Nocilla https://github.com/AliSoftware/OHHTTPStubs VCRURLConnection https://github.com/dstnbrkr/VCRURLConnection Stubs!
  • 48. @dchohfiwifi: nu-guest / senha: visitando o nubank Problema :( 19 Como testar coisas assíncronas? O método acabou antes de ser validado
  • 49. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona
  • 50. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
  • 51. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
  • 52. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"]; - (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout handler:(XCWaitCompletionHandler)handlerOrNil;
  • 53. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"]; - (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout handler:(XCWaitCompletionHandler)handlerOrNil; [expectation fulfill];
  • 54. @dchohfiwifi: nu-guest / senha: visitando o nubank Como testar apresentação? 21
  • 55. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewModels! 22 WTF?!
  • 56. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewModels! 22 WTF?!
  • 57. @dchohfiwifi: nu-guest / senha: visitando o nubank Comos testar a ViewController? 23 • Quando a tela for carregada • Precisamos tentar carregar os contatos • Exibir um loading enquanto carrega • Depois que carregar, exibir mensagem de sucesso • Preencher a tabela com os contatos
  • 58. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24
  • 59. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24 Temos que testar a conexão?
  • 60. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24 Temos que testar a conexão? Temos que conhecer como biblioteca exibe o loading?
  • 61. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24 Temos que testar a conexão? Temos que conhecer como biblioteca exibe o loading? Ou como ela mostra o sucesso?
  • 62. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24 Temos que testar a conexão? Temos que conhecer como biblioteca exibe o loading? Ou como ela mostra o sucesso? Ou como a tabela monta os resultados?
  • 63. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24 Temos que testar a conexão? Temos que conhecer como biblioteca exibe o loading? Ou como ela mostra o sucesso? Ou como a tabela monta os resultados? NÃO! Precisamos apenas ter certeza que serão feitas.
  • 64. @dchohfiwifi: nu-guest / senha: visitando o nubank Mocks 25 São objetos que simulam o comportamento de outros
  • 65. @dchohfiwifi: nu-guest / senha: visitando o nubank 26 ocmock OCMockito https://github.com/jonreid/OCMockito http://ocmock.org/
  • 66. @dchohfiwifi: nu-guest / senha: visitando o nubank 27
  • 67. @dchohfiwifi: nu-guest / senha: visitando o nubank 27 id contactsControllerMock = OCMClassMock([NUContactsController class]); Mock
  • 68. @dchohfiwifi: nu-guest / senha: visitando o nubank 27 id contactsControllerMock = OCMClassMock([NUContactsController class]); Mock OCMExpect([contactsControllerMock getContactsWithBlock: [OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) { obj(self.contacts, nil); return YES; }]]); Expect
  • 69. @dchohfiwifi: nu-guest / senha: visitando o nubank 27 id contactsControllerMock = OCMClassMock([NUContactsController class]); Mock OCMExpect([contactsControllerMock getContactsWithBlock: [OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) { obj(self.contacts, nil); return YES; }]]); Expect Verifica OCMVerifyAll(contactsControllerMock);
  • 70. @dchohfiwifi: nu-guest / senha: visitando o nubank 27 id contactsControllerMock = OCMClassMock([NUContactsController class]); Mock OCMExpect([contactsControllerMock getContactsWithBlock: [OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) { obj(self.contacts, nil); return YES; }]]); Expect Verifica OCMVerifyAll(contactsControllerMock); Cancelar Mock [contactsControllerMock stopMocking];
  • 71. @dchohfiwifi: nu-guest / senha: visitando o nubank Testes funcionais 28 KIF calabash Frank Subliminal appium https://github.com/kif-framework/KIF https://github.com/calabash/calabash-ios https://github.com/inkling/Subliminal http://appium.io/ https://github.com/TestingWithFrank/Frank
  • 72. @dchohfiwifi: nu-guest / senha: visitando o nubank KIF 29 @interface NUContactsFunctionalTests : KIFTestCase Atores agindo na sua aplicação #define tester KIFActorWithClass(KIFUITestActor) macro tester
  • 73. @dchohfiwifi: nu-guest / senha: visitando o nubank Evitar repetição do tester 30
  • 74. @dchohfiwifi: nu-guest / senha: visitando o nubank Testing pixel-perfect 31
  • 75. @dchohfiwifi: nu-guest / senha: visitando o nubank LELA, by KIF 32
  • 76. @dchohfiwifi: nu-guest / senha: visitando o nubank Thank you <3 33
  • 77. @dchohfiwifi: nu-guest / senha: visitando o nubank Thank you <3 33