Code quality and automated tests on iOS Application

856 visualizações

Publicada em

Palestra realizada no CocoaHeads SP no dia 25 de agosto, abordando assuntos como refatoração, testes unitários, funcionais e validação de interface pixel perfect.

Código da apresentação:
https://github.com/dchohfi/cocoaheads-sp-contacts

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
856
No SlideShare
0
A partir de incorporações
0
Número de incorporações
10
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Code quality and automated tests on iOS Application

  1. 1. @dchohfiwifi: nu-guest / senha: visitando o nubank Qualidade da aplicação e tranquilidade na loja 1
  2. 2. @dchohfiwifi: nu-guest / senha: visitando o nubank Diego Chohfi Turini 2 @dchohfi
  3. 3. @dchohfiwifi: nu-guest / senha: visitando o nubank Como softwares eram entregues a 10 anos? 3
  4. 4. @dchohfiwifi: nu-guest / senha: visitando o nubank Como softwares eram entregues a 10 anos? 3
  5. 5. @dchohfiwifi: nu-guest / senha: visitando o nubank Nós até que temos sorte! 4
  6. 6. @dchohfiwifi: nu-guest / senha: visitando o nubank Como garantir a qualidade de um app? 5
  7. 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. 8. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6
  9. 9. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6 Código que escrevemos
  10. 10. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6 Código que escrevemos
  11. 11. @dchohfiwifi: nu-guest / senha: visitando o nubank O que temos controle? 6 Código que escrevemos teoricamente
  12. 12. @dchohfiwifi: nu-guest / senha: visitando o nubank Mas sinceramente, seu APP hoje em dia funciona? 7
  13. 13. @dchohfiwifi: nu-guest / senha: visitando o nubank Mas sinceramente, seu APP hoje em dia funciona? 7
  14. 14. @dchohfiwifi: nu-guest / senha: visitando o nubank Mas sinceramente, seu APP hoje em dia funciona? 7
  15. 15. @dchohfiwifi: nu-guest / senha: visitando o nubank O que fazemos antes de subir o app pra loja? 8
  16. 16. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  17. 17. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  18. 18. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  19. 19. @dchohfiwifi: nu-guest / senha: visitando o nubank Se testamos manualmente, o que somos? 9
  20. 20. @dchohfiwifi: nu-guest / senha: visitando o nubank #nãosomosmacacos 10 códigos que testam código!
  21. 21. @dchohfiwifi: nu-guest / senha: visitando o nubank 11
  22. 22. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  23. 23. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  24. 24. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  25. 25. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  26. 26. @dchohfiwifi: nu-guest / senha: visitando o nubank 12 Contatos nubank
  27. 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. 28. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewController Megazord 14
  29. 29. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewController Megazord 14
  30. 30. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewController Megazord 14 • requisição web • parser de dados • tratamento de erro • envio de email
  31. 31. @dchohfiwifi: nu-guest / senha: visitando o nubank 15
  32. 32. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16
  33. 33. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase
  34. 34. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi
  35. 35. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta
  36. 36. @dchohfiwifi: nu-guest / senha: visitando o nubank Agora que refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta Quick
  37. 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. 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. 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. 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. 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. 42. @dchohfiwifi: nu-guest / senha: visitando o nubank 17
  43. 43. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase
  44. 44. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase - (void)setUp {}
  45. 45. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase - (void)setUp {} - (void)testBlah {}
  46. 46. @dchohfiwifi: nu-guest / senha: visitando o nubank 17 @interface NUPersonTests : XCTestCase - (void)setUp {} - (void)testBlah {}
  47. 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. 48. @dchohfiwifi: nu-guest / senha: visitando o nubank Problema :( 19 Como testar coisas assíncronas? O método acabou antes de ser validado
  49. 49. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona
  50. 50. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
  51. 51. @dchohfiwifi: nu-guest / senha: visitando o nubank XCTestExpectation 20 Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
  52. 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. 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. 54. @dchohfiwifi: nu-guest / senha: visitando o nubank Como testar apresentação? 21
  55. 55. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewModels! 22 WTF?!
  56. 56. @dchohfiwifi: nu-guest / senha: visitando o nubank ViewModels! 22 WTF?!
  57. 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. 58. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24
  59. 59. @dchohfiwifi: nu-guest / senha: visitando o nubank Porém 24 Temos que testar a conexão?
  60. 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. 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. 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. 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. 64. @dchohfiwifi: nu-guest / senha: visitando o nubank Mocks 25 São objetos que simulam o comportamento de outros
  65. 65. @dchohfiwifi: nu-guest / senha: visitando o nubank 26 ocmock OCMockito https://github.com/jonreid/OCMockito http://ocmock.org/
  66. 66. @dchohfiwifi: nu-guest / senha: visitando o nubank 27
  67. 67. @dchohfiwifi: nu-guest / senha: visitando o nubank 27 id contactsControllerMock = OCMClassMock([NUContactsController class]); Mock
  68. 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. 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. 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. 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. 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. 73. @dchohfiwifi: nu-guest / senha: visitando o nubank Evitar repetição do tester 30
  74. 74. @dchohfiwifi: nu-guest / senha: visitando o nubank Testing pixel-perfect 31
  75. 75. @dchohfiwifi: nu-guest / senha: visitando o nubank LELA, by KIF 32
  76. 76. @dchohfiwifi: nu-guest / senha: visitando o nubank Thank you <3 33
  77. 77. @dchohfiwifi: nu-guest / senha: visitando o nubank Thank you <3 33

×