Slide 1

Slide 1 text

Does Your Code Measure Up? By: Adam Culp Twitter: @adamculp https://joind.in/15185

Slide 2

Slide 2 text

2 Does Your Code Measure Up? ● About me – PHP 5.3 Certified – Consultant at Zend Technologies – Organizer SoFloPHP (South Florida) – Organized SunshinePHP (Miami) – Long distance (ultra) runner – Judo Black Belt Instructor

Slide 3

Slide 3 text

3 Does Your Code Measure Up? ● Fan of iteration – Pretty much everything requires iteration to do well: ● Long distance running ● Judo ● Development ● Evading project managers ● Code Quality!

Slide 4

Slide 4 text

4 Does Your Code Measure Up? ● How To Measure? – Not productive

Slide 5

Slide 5 text

5 Does Your Code Measure Up? ● Bad Music – Not a song writer

Slide 6

Slide 6 text

6 Does Your Code Measure Up? ● How To Measure? – More accurate, quantifiable

Slide 7

Slide 7 text

7 Does Your Code Measure Up? ● Why Measure? – Highlight bugs

Slide 8

Slide 8 text

8 Does Your Code Measure Up? ● Why Measure? – Highlight bugs – Improve quality ● Easier onboarding ● Less reading, more writing ● Testable

Slide 9

Slide 9 text

9 Does Your Code Measure Up? ● Why Measure? – Highlight bugs – Improve quality ● Easier onboarding ● Less reading, more writing ● Testable – Satisfied customers ● Faster development ● Less broken

Slide 10

Slide 10 text

10 Does Your Code Measure Up? ● Why Measure? – Highlight bugs – Improve quality ● Easier onboarding ● Less reading, more writing ● Testable – Satisfied customers ● Faster development ● Less broken – Personal pride

Slide 11

Slide 11 text

11 Does Your Code Measure Up? ● Why Measure? – Highlight bugs – Improve quality ● Easier onboarding ● Less reading, more writing ● Testable – Satisfied customers ● Faster development ● Less broken – Personal pride – Higher salary

Slide 12

Slide 12 text

12 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity ● “The count of the number of linearly independent paths through the source code.” - wikipedia ● Decision points ● Less than 10 (personally less than 6)

Slide 13

Slide 13 text

13 Does Your Code Measure Up? ● Cyclomatic Complexity Example

Slide 14

Slide 14 text

14 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code ● Rule of 3

Slide 15

Slide 15 text

15 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes ● Less than 1,000 lines ● Classes solve a (1) problem

Slide 16

Slide 16 text

16 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes – Class Complexity ● Less than 50

Slide 17

Slide 17 text

17 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes – Class complexity – Long methods ● Less than 100 (personally less than 20) ● Method should do one thing

Slide 18

Slide 18 text

18 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes – Class complexity – Long methods – Unused variables

Slide 19

Slide 19 text

19 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes – Class complexity – Long methods – Unused variables – Lack or overuse of comments ● Clear, concise, not explain bad code

Slide 20

Slide 20 text

20 Does Your Code Measure Up? ● Comment Example

Slide 21

Slide 21 text

21 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes – Class complexity – Long methods – Unused variables – Lack or overuse of comments – Heavy global usage

Slide 22

Slide 22 text

22 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes – Class complexity – Long methods – Unused variables – Lack or overuse of comments – Heavy global usage – Npath complexity ● Possible paths through code ● Less than 200 paths

Slide 23

Slide 23 text

23 Does Your Code Measure Up? ● What To Measure? – Cyclomatic complexity – Duplicate code – Long classes – Class complexity – Long methods – Unused variables – Lack or overuse of comments – Heavy global usage – Npath complexity – Much, much, more ● Code smells

Slide 24

Slide 24 text

24 Does Your Code Measure Up? ● Code “smells” – What are “smells”? ● Indications of spoiled code nearby ● Not conclusive ● The “smell” is not bad

Slide 25

Slide 25 text

25 Does Your Code Measure Up? ● Common Code “smells” – “Smells” hinting a refactor may be needed: ● Duplicate Code (rule of 3) ● Long Methods ● Large Class ● Long Parameter (argument) List ● Switch Statements – sacrifice polymorphism ● Temporary Field/Variable ● Comments – where comments cover bad code

Slide 26

Slide 26 text

26 Does Your Code Measure Up? ● Tools – PHPqatools.org

Slide 27

Slide 27 text

27 Does Your Code Measure Up? ● Tools – PHPqatools.org ● PHPLoc

Slide 28

Slide 28 text

28 Does Your Code Measure Up? ● PHPLoc Results

Slide 29

Slide 29 text

29 Does Your Code Measure Up? ● Tools – PHPqatools.org ● PHPLoc ● PHP_Depend

Slide 30

Slide 30 text

30 Does Your Code Measure Up? ● PHP_Depend Result – Graphs and XML output ANDC AHH NOP NOC NOM LOC CYCLO NOM CALLS FANOUT 9891 96646 66812 395815 23359 342 3192 0.585 0.442 9.333 7.318 16.945 0.169 0.102 4.137 Generated by PHP_Depend Low Average High

Slide 31

Slide 31 text

31 Does Your Code Measure Up? ● Tools – PHPqatools.org ● PHPLoc ● PHP_Depend ● PHP Copy/Paste Detector

Slide 32

Slide 32 text

32 Does Your Code Measure Up? ● PHP Copy/Paste Detector Result

Slide 33

Slide 33 text

33 Does Your Code Measure Up? ● Tools – PHPqatools.org ● PHPLoc ● PHP_Depend ● PHP Copy/Paste Detector ● PHP Mess Detector – Codesize

Slide 34

Slide 34 text

34 Does Your Code Measure Up? ● PHP Mess Detector Result (codesize)

Slide 35

Slide 35 text

35 Does Your Code Measure Up? ● Tools – PHPqatools.org ● PHPLoc ● PHP_Depend ● PHP Copy/Paste Detector ● PHP Mess Detector – Codesize – Unused

Slide 36

Slide 36 text

36 Does Your Code Measure Up? ● Tools – PHPqatools.org ● PHPLoc ● PHP_Depend ● PHP Copy/Paste Detector ● PHP Mess Detector – Codesize – Unused ● PHP Dead Code Detector – Searches for code no longer used

Slide 37

Slide 37 text

37 Does Your Code Measure Up? ● Tools – PHPqatools.org – PHPMetrics ● http://phpmetrics.org

Slide 38

Slide 38 text

38 Does Your Code Measure Up? ● PHPMetrics Results

Slide 39

Slide 39 text

39 Does Your Code Measure Up? ● Tools – PHPqatools.org – PHPMetrics – PHP_Codesniffer ● Create rules/sniffs to ensure standards are followed ● From CLI, IDE, or via SCM hooks

Slide 40

Slide 40 text

40 Does Your Code Measure Up? ● Tools – PHPqatools.org – PHPMetrics – PHP_Codesniffer – Code Climate ● Build from Git/Github repo – Open = free – Private = $ ● GPA – like in high school, simple

Slide 41

Slide 41 text

41 Does Your Code Measure Up? ● Scrutinizer – Not free

Slide 42

Slide 42 text

42 Does Your Code Measure Up? ● Tools – PHPqatools.org – PHPMetrics – PHP_Codesniffer – Code Climate – Zend Server and Z-Ray ● Debugging, Code tracing, Error reporting

Slide 43

Slide 43 text

43 Does Your Code Measure Up? ● Realtime profiling – Z-Ray

Slide 44

Slide 44 text

44 Does Your Code Measure Up? ● Tools – PHPqatools.org – PHPMetrics – PHP_Codesniffer – Code Climate – Zend Server and Z-Ray – Apache Bench (apache2-utils in apt) ● How much traffic can you handle?

Slide 45

Slide 45 text

45 Does Your Code Measure Up? ● Apache Bench Result

Slide 46

Slide 46 text

46 Does Your Code Measure Up? ● Conclusion – Measure all the things! – Don't fear results, share them – Reduce complexity – Leave code cleaner than you got it – Learn to “smell” problems – Use refactoring to fix shortcomings – Love iteration!

Slide 47

Slide 47 text

47 ● Thank you! – http://phpqatools.org – http://phpmetrics.org – http://zend.com – http://codeclimate.com – Please rate at: https://joind.in/15185 Adam Culp http://www.geekyboy.com http://RunGeekRadio.com Twitter @adamculp