77
@dchohfi wifi: nu-guest / senha: visitando o nubank Qualidade da aplicação e tranquilidade na loja 1

Code quality and automated tests on iOS Application

Embed Size (px)

Citation preview

@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

escrevemosteoricamente

@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

XCTestCaseKiwi

@dchohfiwifi: nu-guest / senha: visitando o nubank

Agora que refatoramos (um pouco) vamos testar o que fizemos

16

XCTestCaseKiwi

specta

@dchohfiwifi: nu-guest / senha: visitando o nubank

Agora que refatoramos (um pouco) vamos testar o que fizemos

16

XCTestCaseKiwi

spectaQuick

@dchohfiwifi: nu-guest / senha: visitando o nubank

Agora que refatoramos (um pouco) vamos testar o que fizemos

16

XCTestCaseKiwi

spectaQuick cedar

@dchohfiwifi: nu-guest / senha: visitando o nubank

Agora que refatoramos (um pouco) vamos testar o que fizemos

16

XCTestCaseKiwi

spectahttps://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

XCTestCaseKiwi

spectahttps://github.com/kiwi-bdd/Kiwihttps://github.com/specta/specta

Quick cedar

@dchohfiwifi: nu-guest / senha: visitando o nubank

Agora que refatoramos (um pouco) vamos testar o que fizemos

16

XCTestCaseKiwi

spectahttps://github.com/kiwi-bdd/Kiwihttps://github.com/specta/specta

Quick cedarhttps://github.com/pivotal/cedar

@dchohfiwifi: nu-guest / senha: visitando o nubank

Agora que refatoramos (um pouco) vamos testar o que fizemos

16

XCTestCaseKiwi

spectahttps://github.com/kiwi-bdd/Kiwihttps://github.com/specta/specta

Quick cedarhttps://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

Nocillahttps://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

ocmockOCMockito

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 calabashFrank

Subliminalappium 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