67
LEVERAGING XCODE CODE COVERAGE SIMONE CIVETTA - THURSDAY, 8TH OCTOBER

Couverture de code

Embed Size (px)

Citation preview

Page 1: Couverture de code

LEVERAGING XCODE

CODE COVERAGESIMONE CIVETTA -

THURSDAY, 8TH OCTOBER

Page 2: Couverture de code
Page 3: Couverture de code
Page 4: Couverture de code

ENTRETEMPS...

Page 5: Couverture de code
Page 6: Couverture de code
Page 7: Couverture de code
Page 8: Couverture de code
Page 9: Couverture de code
Page 10: Couverture de code

CODE COVERAGE

Page 11: Couverture de code

WHAT IS CODE COVERAGE?

Page 12: Couverture de code

TESTING

Page 13: Couverture de code

METRIC THAT MEASURES THE

VALUEOF YOUR

TESTS

Page 14: Couverture de code

CODE COVERAGE DETECTS

> Which code is executing when we're running the tests> Which code is untested

Page 15: Couverture de code

HOW DOES IT WORK?> The information is gathered in two steps

1. compile time 2. runtime

> Tools count each expression that is executed

Page 16: Couverture de code

CODE COVERAGE ON IOS

Page 17: Couverture de code

CODE COVERAGE ON IOSUNTIL LAST MONTH

Page 18: Couverture de code
Page 19: Couverture de code

OBJECTIVE-C

Page 20: Couverture de code

SWIFT

Page 21: Couverture de code
Page 22: Couverture de code
Page 23: Couverture de code

HOW IT WORKED

Page 24: Couverture de code

1. LLVM CREATES ANNOTATION FILES.gcno

gcc -ftest-coverage

Page 25: Couverture de code

2. LLVM CREATES DATA FILES.gcda

gcc -fprofile-arcs

Page 26: Couverture de code

HOW TO ENABLE IN XCODE

Page 27: Couverture de code
Page 28: Couverture de code
Page 29: Couverture de code

HOW TO ENABLEVIA COMMAND LINE

Page 30: Couverture de code

GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES xcodebuild [...] test

Page 31: Couverture de code

TOOLS

Page 32: Couverture de code

TOOLS

> Coverstory> gcovr

> lcov> Slather

Page 33: Couverture de code

SLATHER

Exports to: - HTML

- Gutter JSON- Cobertura XML

github.com/venmo/Slather

Page 34: Couverture de code

BUT, ALSO

Page 35: Couverture de code

SWIFTCOV

swiftcovgithub.com/realm/SwiftCov

> Supports gcov format> Uses breakpoints to gather coverage data

Page 36: Couverture de code
Page 37: Couverture de code

CODE COVERAGE ON IOS

Page 38: Couverture de code

CODE COVERAGE ON IOSSINCE LAST MONTH

Page 39: Couverture de code
Page 40: Couverture de code

OBJECTIVE-C

Page 41: Couverture de code

SWIFT

Page 42: Couverture de code

A NEW FORMAT> gcov

> profdata

Page 43: Couverture de code

XCODE GENERATES profdata FILES FOR

> Swift> ...and Objective-C

Page 44: Couverture de code

HOW TO ENABLE IN XCODE

Page 45: Couverture de code
Page 46: Couverture de code
Page 47: Couverture de code
Page 48: Couverture de code

HOW TO ENABLEVIA COMMAND LINE

Page 49: Couverture de code

xcodebuild [...] test -enableCodeCoverage YES

Page 50: Couverture de code

xcodebuild -scheme MoDevByProject -destination "name=iPhone 6,OS=latest" -enableCodeCoverage YES test

Page 51: Couverture de code

EXPLOITING THE DATA> llvm-cov

> llvm-cov show

Page 52: Couverture de code

HOW TO USE LLVM-COV$XCODE_PATH/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-cov show -instr-profile MY_PROJECT_PROFDATA MY_PROJECT_BINARY_FILE

Page 53: Couverture de code
Page 54: Couverture de code

TOOLS

Page 55: Couverture de code

TOOLS

> Slather> Xcode Server

Page 56: Couverture de code

SLATHER

github.com/venmo/slather/pull/92

Page 57: Couverture de code

XCODE SERVER

Page 58: Couverture de code
Page 59: Couverture de code
Page 60: Couverture de code

SUMMING UP

Page 61: Couverture de code

DOESN'T TELL YOU IF YOUR CODE IS

BAD...

Page 62: Couverture de code
Page 63: Couverture de code

DOESN'T TELL YOU IF YOUR CODE IS

BADBUT CAN HELP WRITING

BETTER CODE

Page 64: Couverture de code

YOU'RE JUSTMINUTES AWAY

FROM COLLECTINGCODE COVERAGE

INFO FOR SWIFTSTART SOON!

Page 65: Couverture de code

THANK YOU

Page 66: Couverture de code

Simone Civetta@viteinfinite

Page 67: Couverture de code

XEBICON