Does Your Code Measure Up? By: Adam Culp Twitter: @ adamculp - - PowerPoint PPT Presentation

does your code measure up
SMART_READER_LITE
LIVE PREVIEW

Does Your Code Measure Up? By: Adam Culp Twitter: @ adamculp - - PowerPoint PPT Presentation

Does Your Code Measure Up? By: Adam Culp Twitter: @ adamculp https://joind.in/ 13300 Does Your Code Measure Up? About me PHP 5.3 Certified Consultant at Zend Technologies Organizer SoFloPHP (South Florida) Organized


slide-1
SLIDE 1

Does Your Code Measure Up?

By:

Adam Culp

Twitter: @adamculp https://joind.in/13300

slide-2
SLIDE 2

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

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
  • Quality!
slide-4
SLIDE 4

4

Does Your Code Measure Up?

  • How To Measure?

Not productive

slide-5
SLIDE 5

5

Does Your Code Measure Up?

  • How To Measure?

More accurate, quantifiable

slide-6
SLIDE 6

6

Does Your Code Measure Up?

  • Why Measure?

Highlight bugs

slide-7
SLIDE 7

7

Does Your Code Measure Up?

  • Why Measure?

Highlight bugs

Improve quality

  • Easier onboarding
  • Less reading, more writing
  • Testable
slide-8
SLIDE 8

8

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-9
SLIDE 9

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

Personal pride

slide-10
SLIDE 10

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

Higher salary

slide-11
SLIDE 11

11

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-12
SLIDE 12

12

Does Your Code Measure Up?

  • Cyclomatic Complexity Example
slide-13
SLIDE 13

13

Does Your Code Measure Up?

  • What To Measure?

Cyclomatic complexity

Duplicate code

  • Rule of 3
slide-14
SLIDE 14

14

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-15
SLIDE 15

15

Does Your Code Measure Up?

  • What To Measure?

Cyclomatic complexity

Duplicate code

Long classes

Class Complexity

  • Less than 50
slide-16
SLIDE 16

16

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-17
SLIDE 17

17

Does Your Code Measure Up?

  • What To Measure?

Cyclomatic complexity

Duplicate code

Long classes

Class complexity

Long methods

Unused variables

slide-18
SLIDE 18

18

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-19
SLIDE 19

19

Does Your Code Measure Up?

  • Comment Example
slide-20
SLIDE 20

20

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-21
SLIDE 21

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

Npath complexity

  • Possible paths through code
  • Less than 200 paths
slide-22
SLIDE 22

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

Much, much, more

  • Code smells
slide-23
SLIDE 23

23

Does Your Code Measure Up?

  • Code “smells”

What are “smells”?

  • Indications of spoiled code nearby
  • Not conclusive
  • The “smell” is not bad
slide-24
SLIDE 24

24

Does Your Code Measure Up?

  • Code “smells”

“Smells” hinting a refactor may be needed:

  • Duplicate Code (rule of 3)
  • Long Methods
  • Large Class
  • Long Parameter (argument) List
  • Divergent Change – cascade change to accommodate another
  • Shotgun Surgery – change ripples as bugs
  • Feature Envy – method uses parts from other class
  • Switch Statements – sacrifice polymorphism
slide-25
SLIDE 25

25

Does Your Code Measure Up?

  • Code “smells”

Cont'd:

  • Lazy Class – class not doing much
  • Speculative Generality – something built for possible future
  • Temporary Field/Variable
  • Message Chains – object asking object asking object
  • Middle Man – directors in place but serve no real purpose
  • Inappropriate Intimacy – classes share private parts
  • Data Class – getters and setters, but nothing else
  • Comments – where comments cover bad code
slide-26
SLIDE 26

26

Does Your Code Measure Up?

  • Tools

PHPqatools.org

slide-27
SLIDE 27

27

Does Your Code Measure Up?

  • Tools

PHPqatools.org

  • PHPLoc
slide-28
SLIDE 28

28

Does Your Code Measure Up?

  • PHPLoc Results
slide-29
SLIDE 29

29

Does Your Code Measure Up?

  • Tools

PHPqatools.org

  • PHPLoc
  • PHP_Depend
slide-30
SLIDE 30

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

31

Does Your Code Measure Up?

  • Tools

PHPqatools.org

  • PHPLoc
  • PHP_Depend
  • PHP Copy/Paste Detector
slide-32
SLIDE 32

32

Does Your Code Measure Up?

  • PHP Copy/Paste Detector Result
slide-33
SLIDE 33

33

Does Your Code Measure Up?

  • Tools

PHPqatools.org

  • PHPLoc
  • PHP_Depend
  • PHP Copy/Paste Detector
  • PHP Mess Detector

– Codesize

slide-34
SLIDE 34

34

Does Your Code Measure Up?

  • PHP Mess Detector Result (codesize)
slide-35
SLIDE 35

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

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

37

Does Your Code Measure Up?

  • Tools

PHPqatools.org

PHPMetrics

  • http://phpmetrics.org
slide-38
SLIDE 38

38

Does Your Code Measure Up?

  • PHPMetrics Results
slide-39
SLIDE 39

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

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

41

Does Your Code Measure Up?

  • Code Climate

Build from Git/Github repo

– Open = free – Private = $

slide-42
SLIDE 42

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

43

Does Your Code Measure Up?

  • Realtime profiling

Z-Ray

slide-44
SLIDE 44

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

45

Does Your Code Measure Up?

  • Apache Bench Result
slide-46
SLIDE 46

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
  • Thank you!

Code: https://github.com/adamculp/refactoring101

http://phpqatools.org

http://phpmetrics.org

http://zend.com

http://codeclimate.com

Please rate at: https://joind.in/13300

Adam Culp http://www.geekyboy.com Twitter @adamculp