95
1

Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 2: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Ogres, onions and layers story about tests at scale

Ewa Ludwiczak & Kamil PyćTestCon Moscow 2018

Page 3: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

3

Ewa LudwiczakSenior Software Test [email protected]

@ewabielskapoz

Kamil PyćSenior iOS [email protected]

@KamilPyc

Page 4: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

4

Allegro application in Poland

Page 5: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

5

Allegro application in Poland

Page 6: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

6

Allegro application in Poland

Page 7: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

7

Tests are like onions

Page 8: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

8

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 9: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Web

9

instant updates

Backend Browsers

Why we bother?

Page 10: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Web

Mobile

10

instant updates

~2 days ~7 days

Browsers

App Store Review Devices

Backend

Why we bother?

Page 11: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

11

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 12: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

12

Problem 1:

Page 13: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

13

Problem 1: Complex code

Page 14: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

14

Page 15: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

15

Problem 1: Complex codeSolution: SwiftLint

https://github.com/realm/SwiftLint

Page 16: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

16

Problem 1: Complex codeSolution: SwiftLint

Page 17: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

17

Problem 1: Complex codeSolution: SwiftLint

too short constant name

Page 18: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

18

Problem 1: Complex codeSolution: SwiftLint

too long variable name

too short constant name

Page 19: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

19

Problem 1: Complex codeSolution: SwiftLint

too long variable name

too short constant name

Page 20: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

20

Problem 1: Complex codeSolution: SwiftLint

Page 21: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

21

Problem 1: Complex codeSwiftFormat + SwiftLint

https://github.com/nicklockwood/SwiftFormat

Page 22: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

22

Problem 1: Complex codeSwiftFormat + SwiftLint

Page 23: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

23

Problem 1: Complex codeSolution: SwiftLint remarks

use the same versions of formatter & linter

Page 24: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

run locally after each build

24

Problem 1: Complex codeSolution: SwiftLint remarks

use the same versions of formatter & linter

Page 25: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

format obvious rules, lint less trivial

run locally after each build

25

Problem 1: Complex codeSolution: SwiftLint remarks

use the same versions of formatter & linter

Page 26: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

format obvious rules, lint less trivial

run locally after each build

26

Problem 1: Complex codeSolution: SwiftLint remarks

apply to production code and tests

use the same versions of formatter & linter

Page 27: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

27

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 28: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

28

Problem 2:

Page 29: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

29

Problem 2: Evergreen unit tests

Page 30: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

30

Problem 2: Evergreen unit testsSolution: Mutation testing

function

Page 31: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

31

Problem 2: Evergreen unit testsSolution: Mutation testing

function mutant

mutation

Page 32: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

32

Problem 2: Evergreen unit testsSolution: Mutation testing

function mutant

mutation

Page 33: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

33

Problem 2: Evergreen unit testsSolution: Mutation testing

change function logic

Page 34: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

34

Problem 2: Evergreen unit testsSolution: Mutation testing

negate conditions

Page 35: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

35

Problem 2: Evergreen unit testsSolution: Mutation testing

change mathematical operators

Page 36: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

36

Problem 2: Evergreen unit testsSolution: Mutation testing remarks

code coverage says little about test quality

Page 37: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

37

Problem 2: Evergreen unit testsSolution: Mutation testing remarks

code coverage says little about test quality

use manual mutation in non-trivial test cases

Page 38: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

code coverage says little about test quality

not all mutations add value

use manual mutation in non-trivial test cases

38

Problem 2: Evergreen unit testsSolution: Mutation testing remarks

Page 39: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

code coverage says little about test quality

not all mutations add value

use manual mutation in non-trivial test cases

39

Problem 2: Evergreen unit testsSolution: Mutation testing remarks

automated mutation testing

Problem 2: Evergreen unit testsSolution: Mutation testing

https://github.com/mull-project/mull

Page 40: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

40

Page 41: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

41

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 42: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

42

Problem 3: Simple mistakesSolution: Code review

Page 43: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

43

Problem 3: Simple mistakesSolution: Snapshot tests in code review

Page 44: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

44

Problem 3: Simple mistakesSolution: Snapshot tests in code review

reference image recorded image

diff

Page 45: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

45

Problem 3: Simple mistakesSolution: Snapshot tests in code review

Page 46: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

value your time

involve testers and designers into review

spot visual mistakes on code review level

46

Problem 3: Simple mistakesSolution: Snapshot tests in code review

Page 47: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

47

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 48: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

48

Problem 4: Predicting consequences of change

Page 49: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

49

Problem 4: Predicting consequences of change

Page 50: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

50

Problem 4: Predicting consequences of change

Page 51: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

51

Problem 4: Predicting consequences of changeSolution: End-to-end UI tests

https://github.com/kif-framework/KIF

Backend

Page 52: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

52

Problem 4: Predicting consequences of changeSolution: End-to-end UI tests

separate test target

Page 53: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

53

Problem 4: Predicting consequences of changeSolution: End-to-end UI tests

separate test target

flaky test

Page 54: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

54

Problem 4: Predicting consequences of changeSolution: End-to-end UI tests

Backend

Page 55: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Functional UI tests with mocked API

55

JSON responses

Backend

Page 56: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Scheme validation

56

JSON files

JSON scheme

Page 57: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Scheme validation

57

JSON files

JSON scheme

Configuration file

Page 58: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Scheme validation

58

JSON files

JSON scheme

Configuration file

Backend request

Page 59: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Scheme validation

59

JSON files

JSON scheme

Configuration file

Backend request

Remote validation

Page 60: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Scheme validation

60

Configuration file

Remote validation

JSON scheme

API response

JSON file

Page 61: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Scheme validation

61

Configuration file

Remote validation

JSON scheme

API response

JSON file

Page 62: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 4: Predicting consequences of changeSolution: Scheme validation

62

Configuration file

Remote validation

JSON file

JSON scheme

API response

Page 63: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

63

Problem 4: Predicting consequences of changeSolution: Functional UI tests with mocked API

faster, more reliable UI tests

Page 64: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

64

Problem 4: Predicting consequences of changeSolution: Functional UI tests with mocked API

faster, more reliable UI tests

relatively slow test coverage progress

Page 65: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

65

Problem 4: Predicting consequences of changeSolution: Functional UI tests with mocked API

faster, more reliable UI tests

relatively slow test coverage progress

tests not critical to merge

Page 66: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

66

Problem 4: Predicting consequences of changeSolution: UI tests improvements

More bugs detected10%comparison of 10 real API and mocked API UI test runs

Less flaky tests70%comparison of 10 real API and mocked API UI test runs

Page 67: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

67

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 68: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

68

Problem 5: Late feedbackSolution: Continuous integration

Page 69: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 5: Late feedbackSolution: Continuous integration

69

Page 70: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Problem 5: Late feedbackSolution: Continuous integration

70

Page 71: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Get as many tester as possible

Automate your beta releases

Highlight what should be checked

71

Problem 5: Late feedbackSolution: Continuous integration

https://github.com/fastlane/fastlane

Page 72: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

72

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 73: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

73

Problem 6: Testing in laboratory condition

XXX

“Application doesn’t start after the update”

Page 74: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

74

Problem 6: Testing in laboratory conditionSolution: Phased release

Page 75: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

There are situations you cannot predict

Prepare for failure

75

Remote configuration

Problem 6: Testing in laboratory conditionSolution: Phased release

Page 76: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

76

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 77: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

77

Problem 7: Testing effectiveness

BUY NOW BUY NOW

Page 78: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

78

Problem 7: Testing effectivenessSolution: AB Tests

Page 79: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

79

Problem 7: Testing effectivenessSolution: AB Tests

Page 80: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

80

https://motherboard.vice.com/en_us/article/8x8wp4/why-navigation-bar-looks-different-facebook

Page 81: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

81

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onions

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 82: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

82

Problem 8:

Application release

Page 83: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

83

Problem 8:

https://fabric.io/kits/ios/crashlytics

Application release

Stable version

Page 84: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

84

Problem 8:

Application release

Stable version

Comment on App Store

3

Page 85: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

85

Problem 8:

“Where is categories button? I can’t find it!”

Page 86: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

86

Problem 8:

“Where is categories button? I can’t find it!”

Page 87: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

87

Problem 8: Decision making

“Where is categories button? I can’t find it!”

Page 88: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

88

Problem 8: Decision makingSolution: Make use of app analytical data

Page 89: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

89

Problem 8: Decision makingSolution: Make use of app analytical data

Page 90: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Data-based decisions

90

Problem 8: Decision makingSolution: Make use of app analytical data

Page 91: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Data-based decisions

Bug priority and severity

91

Problem 8: Decision makingSolution: Make use of app analytical data

Page 92: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Data-based decisions

Bug priority and severity

92

Analyze and plan your reaction

Problem 8: Decision makingSolution: Make use of app analytical data

Page 93: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

93

1. Static analysis

2. Mutation testing

3. Snapshot tests

4. Functional tests

Tests are like onionshttps://bit.ly/2EWg91Y

5. Continuous integration

6. Phased release

7. AB Tests

8. Application analytics

Page 94: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

94

Thank you for your attention!

Q&A

Page 95: Ogres, onions and layers - TestCon Moscow...Solution: SwiftLint remarks use the same versions of formatter & linter format obvious rules, lint less trivial run locally after each build

Ewa LudwiczakSenior Software Test [email protected]

@ewabielskapoz

Kamil PyćSenior iOS [email protected]

@KamilPyc