Quality in PHP projects beyond Unittests
  International PHP Conference 2008
  October 30th 2008 | Thorsten Rinne
Introduction


❙ Thorsten Rinne
❙ 31 years old
❙ Senior Developer and Team Lead at Mayflower GmbH
   ❙ Reporting applicati...
Introduction


❙ Warm up
❙ Quality Criterias
❙ Quality Metrics
❙ Testing
❙ PHP Source Code Quality
❙ Questions and answers...
Who are you?


❙ What's your profession?
❙ Software company or agency?
❙ What's your team size?
❙ Who develops using Unitt...
Quality Criterias



                    Quality in PHP projects
                    beyond Unittests

                   ...
Quality criterias:
Understandability

❙ Availability of documentation
❙ Good documentation quality
❙ Complexity of softwar...
Quality criterias:
Completeness

❙ Everything is already there
   ❙ Your application is fully implemented
   ❙ No mockups ...
Quality criterias:
Conciseness

❙ No unneeded, overlong documentation
   ❙ Especially auto-generated documentation
❙ No un...
Quality criterias:
Portability

❙ Easy to configure in new environments
❙ Few OS and webserver dependencies
❙ Few, documen...
Quality criterias:
Consistency

❙ Predictability
   ❙ Directory paths and filenames
   ❙ Class and method names
   ❙ Varia...
Quality criterias:
Maintainability

❙ Easy to install and easy to upgrade
❙ Tests and debug logs to help to locate bugs
❙ ...
Quality criterias:
Testability

❙ Known acceptence criteria
❙ Adequate separation of concerns
❙ Easy to use interfaces for...
Quality criterias:
Reliability

❙ The criteria formerly known as „robustness“
❙ Fault tolerance
❙ Graceful degradation
❙ E...
Quality criterias:
Usability

❙ Learnability: Easyness of first time usage
❙ Efficiency: Overall speed of usage per task
❙...
Quality Metrics



                  Quality in PHP projects
                  beyond Unittests

                  © MAYFL...
Quality Metrics:
Defect Density Metrics

❙ Code-based metric
   ❙ Defects per KSSI (1000 shipped source instructions) for
...
Quality Metrics:
Customer Problem Metrics

❙ PUM: Problems per user month
❙ Defects per month / number of installations
❙ ...
Quality Metrics:
Customer Satisfaction Metrics

❙ You only get them by survey
❙ for
   ❙ Functionality
   ❙ Usability
   ❙...
Quality Metrics:
When are bugs detected?

❙ Number of pre-release bugs found while testing
❙ Number of post-release bugs
 ...
Quality Metrics:
How are defects fixed?

❙ Average Time to fix a bug
❙ Average Time for bugfix release
   ❙ that‘s the tim...
Quality Metrics:
Defect Impact

❙ was the defect visible to the user?
❙ has a monetary transaction been touched?
❙ has sen...
Quality Metrics:
Testing Efficiency

❙ Found bugs before release / found bugs post release
❙ Found bugs by qa team / found...
„We do PHPUnit!“ !== Testing



                               Quality in PHP projects
                               beyo...
Unit Testing


❙ For PHP: PHPUnit or SimpleTest
❙ Focussing on testing a single unit of work
   ❙ solves depencies using m...
Acceptence Testing


❙ originally user acceptance testing
    ❙ one of the final testing stages
❙ change to automated blac...
SOA / Service Testing


❙ in multi-tier environments every service can have several
  consumers
❙ black box test for the s...
Integration Testing


❙ tests the application with all parts
❙ needed for multi-tier applications
❙ tests the interaction ...
Load Testing


❙ Simulates high load situations
   ❙ to detect the current platform abilities
   ❙ to detect resource bott...
Usability Testing


❙ How does the user work with the application?
❙ Efficiency: time to fulfill a basic task
❙ Accuracy: ...
Regression Testing


❙ originally: if you find a bug, fix it and write a test
❙ PHP itself does it
❙ now often written by ...
Security Testing


❙ Blackbox: Penetration Test done by external auditor just
  before release
❙ Graybox: using tools like...
A lot more ...


❙ Compability testing for maintainability
❙ Volume testing for bigger amounts of data
❙ Stress testing fo...
PHP Source Code Quality



                          Quality in PHP projects
                          beyond Unittests

 ...
Documentation


❙ We have different forms of documentation:
   ❙ Inline documentation
   ❙ API documentation
   ❙ Develope...
Coding Style / Formatting


❙ Coding style is defined in the developer documentation
❙ All developers have to write their ...
Naming Conventions


❙ Naming conventions are very important
   ❙ NonamespacesbeforePHP5.3
   ❙ Easier for __autoload()
❙ ...
Code Complexity


❙ Complexity costs time and money if you don‘t need it
❙ KISS principle: Keep it simple and stupid
❙ Com...
Anti Patterns


❙ An antipattern is a design pattern that appears obvious but
  is ineffective or far from optimal in prac...
Anti Pattern Examples


❙ if(<EXPR>) {<empty>}
❙ if(<EXPR>) {<EXPR>} else {<empty>}
❙ try(<EXPR>) {<empty>}
❙ try(<EXPR>) ...
Questions?



             Quality in PHP projects
             beyond Unittests

             © MAYFLOWER GmbH 2008 40
Thank you very much!

  Thorsten Rinne
  Mayflower GmbH
  Mannhardtstr. 6
  80538 München
  +49 (89) 24 20 54 - 31
  thors...
Upcoming SlideShare
Loading in …5
×

Quality in PHP projects beyond Unittests.pdf

1,339 views
1,289 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,339
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Quality in PHP projects beyond Unittests.pdf

  1. 1. Quality in PHP projects beyond Unittests International PHP Conference 2008 October 30th 2008 | Thorsten Rinne
  2. 2. Introduction ❙ Thorsten Rinne ❙ 31 years old ❙ Senior Developer and Team Lead at Mayflower GmbH ❙ Reporting applications ❙ Rating applications ❙ PHP consulting for QA and migration problems ❙ PHP software development since 1999 ❙ Founder and main developer of open source FAQ management software phpMyFAQ since 2001 ❙ Zend Certified Engineer (PHP 5) Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 2
  3. 3. Introduction ❙ Warm up ❙ Quality Criterias ❙ Quality Metrics ❙ Testing ❙ PHP Source Code Quality ❙ Questions and answers Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 3
  4. 4. Who are you? ❙ What's your profession? ❙ Software company or agency? ❙ What's your team size? ❙ Who develops using Unittests? ❙ Who uses QA supporting tools? ❙ What's your test coverage? ❙ Even for legacy code? :-) Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 4
  5. 5. Quality Criterias Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 5
  6. 6. Quality criterias: Understandability ❙ Availability of documentation ❙ Good documentation quality ❙ Complexity of software ❙ Code commenting and formatting ❙ Understandable naming Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 6
  7. 7. Quality criterias: Completeness ❙ Everything is already there ❙ Your application is fully implemented ❙ No mockups or temporary solutions left ❙ External interfaces are usable ❙ All needed data is available Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 7
  8. 8. Quality criterias: Conciseness ❙ No unneeded, overlong documentation ❙ Especially auto-generated documentation ❙ No unused libraries ❙ No dead code ❙ No duplicate code ❙ No code inside loops that could be outside Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 8
  9. 9. Quality criterias: Portability ❙ Easy to configure in new environments ❙ Few OS and webserver dependencies ❙ Few, documented version dependencies ❙ Language version ❙ Database version ❙ External libraries ❙ Able to survice environment updates Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 9
  10. 10. Quality criterias: Consistency ❙ Predictability ❙ Directory paths and filenames ❙ Class and method names ❙ Variable and constant names ❙ Documentation style and language ❙ Coding style Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 10
  11. 11. Quality criterias: Maintainability ❙ Easy to install and easy to upgrade ❙ Tests and debug logs to help to locate bugs ❙ Few dependencies hiding the bug ❙ No complex dependencies or effects on the platform ❙ Easy to understand and navigate source code Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 11
  12. 12. Quality criterias: Testability ❙ Known acceptence criteria ❙ Adequate separation of concerns ❙ Easy to use interfaces for tests ❙ No limiting dependencies Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 12
  13. 13. Quality criterias: Reliability ❙ The criteria formerly known as „robustness“ ❙ Fault tolerance ❙ Graceful degradation ❙ Exception handling exists ❙ Is method input checked? Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 13
  14. 14. Quality criterias: Usability ❙ Learnability: Easyness of first time usage ❙ Efficiency: Overall speed of usage per task ❙ Memorabilty: Time to re-establish usage knowledge after absence ❙ Errors: Frequency of usage errors ❙ Satisfaction: Fun to use the software Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 14
  15. 15. Quality Metrics Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 15
  16. 16. Quality Metrics: Defect Density Metrics ❙ Code-based metric ❙ Defects per KSSI (1000 shipped source instructions) for product quality ❙ Defects per KCSI (1000 changed source instructions) for development quality ❙ (Hard to measure) ❙ Statistic needed ❙ easier for products Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 16
  17. 17. Quality Metrics: Customer Problem Metrics ❙ PUM: Problems per user month ❙ Defects per month / number of installations ❙ Maintainance metric: Number of bugs closed / number of bugs arrived ❙ The customer does not care how big or how complicated the software is :-) Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 17
  18. 18. Quality Metrics: Customer Satisfaction Metrics ❙ You only get them by survey ❙ for ❙ Functionality ❙ Usability ❙ Reliability ❙ Performance ❙ Maintainability ❙ Service ❙ Levels: Very Satisfied, Satisfied, Neutral, Dissatisfied, Very Dissatisfied Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 18
  19. 19. Quality Metrics: When are bugs detected? ❙ Number of pre-release bugs found while testing ❙ Number of post-release bugs ❙ found by customer ❙ found by testing Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 19
  20. 20. Quality Metrics: How are defects fixed? ❙ Average Time to fix a bug ❙ Average Time for bugfix release ❙ that‘s the time relevant for the customer ❙ Average engineering hours / fixed defect Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 20
  21. 21. Quality Metrics: Defect Impact ❙ was the defect visible to the user? ❙ has a monetary transaction been touched? ❙ has sensitive data been touched? ❙ are there security implications? ❙ has there been a marketing/image effect ❙ did data / user work get lost? Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 21
  22. 22. Quality Metrics: Testing Efficiency ❙ Found bugs before release / found bugs post release ❙ Found bugs by qa team / found bugs by customer ❙ Number of bugs found by QA Team / time Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 22
  23. 23. „We do PHPUnit!“ !== Testing Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 23
  24. 24. Unit Testing ❙ For PHP: PHPUnit or SimpleTest ❙ Focussing on testing a single unit of work ❙ solves depencies using mock objects ❙ should not depend on database ❙ perfect and easy to automate ❙ Reason for all refactoring Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 24
  25. 25. Acceptence Testing ❙ originally user acceptance testing ❙ one of the final testing stages ❙ change to automated black box testing in agile environments ❙ used to test user stories ❙ often contractual requirement Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 25
  26. 26. SOA / Service Testing ❙ in multi-tier environments every service can have several consumers ❙ black box test for the service api ❙ can easily be automated ❙ a lot of tools for SOAP Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 26
  27. 27. Integration Testing ❙ tests the application with all parts ❙ needed for multi-tier applications ❙ tests the interaction paths ❙ intersection with load testing: user simulation Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 27
  28. 28. Load Testing ❙ Simulates high load situations ❙ to detect the current platform abilities ❙ to detect resource bottlenecks (Database, CPU, Network) ❙ to detect concurreny bottlenecks (locking jams, caching effects) ❙ Scalability testing: scale up or scale out? Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 28
  29. 29. Usability Testing ❙ How does the user work with the application? ❙ Efficiency: time to fulfill a basic task ❙ Accuracy: how many mistakes happened? ❙ Recall: does the user recall the usage after a period of time? ❙ Emotional response: does the user feel lucky, confident or stressed about the task? Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 29
  30. 30. Regression Testing ❙ originally: if you find a bug, fix it and write a test ❙ PHP itself does it ❙ now often written by the test team to assure the expected default behavior ❙ modern: automated test generation Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 30
  31. 31. Security Testing ❙ Blackbox: Penetration Test done by external auditor just before release ❙ Graybox: using tools like fuzzers and scanners before release or while development ❙ Whitebox: internal or external source code audit, static code analysis while development Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 31
  32. 32. A lot more ... ❙ Compability testing for maintainability ❙ Volume testing for bigger amounts of data ❙ Stress testing for degrade and failover processes ❙ Installation testing for maintenance ❙ Recovery testing to check recovery behavior Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 32
  33. 33. PHP Source Code Quality Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 33
  34. 34. Documentation ❙ We have different forms of documentation: ❙ Inline documentation ❙ API documentation ❙ Developer documentation ❙ Security documentation ❙ Administration documentation ❙ End-user documentation Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 34
  35. 35. Coding Style / Formatting ❙ Coding style is defined in the developer documentation ❙ All developers have to write their code formatted in the given coding style ❙ Can be checked by CodeSniffer tools ❙ Coding style should be based on your main used libraries ❙ If you build your application on top of the Zend Framework, use the ZF coding style ❙ With IDEs like Eclipse you can format old code autpmatically Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 35
  36. 36. Naming Conventions ❙ Naming conventions are very important ❙ NonamespacesbeforePHP5.3 ❙ Easier for __autoload() ❙ Examples ❙ Class names: ❙ class HTML_Template_ITX2 ❙ Directory: include/PEAR2/HTML/Template/ITX2.php ❙ Function names in camel caps: ❙ public function blockExists($blockname) Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 36
  37. 37. Code Complexity ❙ Complexity costs time and money if you don‘t need it ❙ KISS principle: Keep it simple and stupid ❙ Complexity checks by CodeSniffer metrics ❙ Important for good code coverage and unittests ❙ Examples ❙ Too high number of linearly independent paths through a program's source code ❙ Too long class and method names ❙ Too many properties ❙ Too many parameters ❙ Too many methods inside a class Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 37
  38. 38. Anti Patterns ❙ An antipattern is a design pattern that appears obvious but is ineffective or far from optimal in practice ❙ Examples ❙ Unnecessary abstraction ❙ God objects ❙ Spaghetti code ❙ Too short or too long variable names Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 38
  39. 39. Anti Pattern Examples ❙ if(<EXPR>) {<empty>} ❙ if(<EXPR>) {<EXPR>} else {<empty>} ❙ try(<EXPR>) {<empty>} ❙ try(<EXPR>) {<EXPR>} catch(Exception $e) {<empty>} ❙ define('SOME_NAME', $var) ❙ include[_once]|require[_once]|readfile| virtual|file_get_contents|fopen|file| mysql_query($_GET|$_POST|$_REQUEST) Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 39
  40. 40. Questions? Quality in PHP projects beyond Unittests © MAYFLOWER GmbH 2008 40
  41. 41. Thank you very much! Thorsten Rinne Mayflower GmbH Mannhardtstr. 6 80538 München +49 (89) 24 20 54 - 31 thorsten.rinne@mayflower.de

×