Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Joomla Code Quality Control 
[Automated Tools] 
Shyam S. Verma 
Founder & CEO 
Ready Bytes Software Labs Pvt. Ltd.
Team JoomlaXi Develops 
Joomla Extensions 
RBSL Develop Web Apps 
and Websites
Agenda 
● Software Quality Assurance 
● Code Testing 
● Code Analysis 
● Continous Integration 
● Quick Demo of QA
Software Quality Assurance (SQA) 
● Systematic Monitoring and Evaluation of the 
software engineering processes 
● Monitor...
Benefit of SQA? 
● early detection of issues 
● cleaner & consistent code 
● knowledge about the codebase 
● increase of c...
Agenda 
● Software Quality Assurance 
● Code Testing 
● Code Analysis 
● Continous Integration 
● Quick Demo of QA
Manual Testing 
● Not automated, slow and expensive 
● Complete application must be ready before it 
can be tested 
● Test...
Automated Testing 
● Test results are - 
– automatically evaluated and 
– do not have to be interpreted by a human tester ...
Selenium Testing 
● Test web applications in a web browser 
● Selenium RC 
– Automated execution of Selenium tests 
– Test...
problems 
● Complex test environments 
● Dependencies between tests 
● Running the tests is slow, thus incompatible 
with ...
What we want 
● We want to test earlier 
● We want to be able to test an incomplete 
application 
● We want a test environ...
Unit Tests 
● Executable specification 
● Automatic evaluation 
● Simple test environment 
● Instant feedback 
● Works as ...
>> phpunit BowlingGameTest 
PHPUnit 3.4.0 by Sebastian Bergmann. 
.FFFF 
Time: 0 seconds 
There were 4 failures: 
1) Bowli...
Agenda 
● Software Quality Assurance 
● Code Testing 
● Code Analysis 
● Continous Integration 
● Quick Demo of QA
Static Analysis
phploc 
● Text-based metric for code size 
● Various definitions 
– Lines of Code (LOC) 
– Comment Lines of Code (CLOC) 
–...
Running phploc on Joomla 1.6.1 
Directories: 725 
Files: 1625 
Lines of Code (LOC): 251967 
Cyclomatic Complexity / Lines ...
Php code sniffer 
● PHP_CodeSniffer 
– sniffs for coding standard violations 
– ensures code is clean and consistent 
– us...
phpcs on libraries/joomla/application 
shyam@ssv­lptp­lnx:/ 
var/www/j161$ phpcs ­s 
­­standard= 
ZEND ­­report= 
summary ...
phpcpd 
● PHP Copy/Paste Detector 
– detects code duplication 
● Installation 
– pear channel-discover pear.phpunit.de 
– ...
phpcpd on libraries/joomla (1.6.1) Found 10 exact clones with 216 duplicated lines in 13 files: 
­libraries/ 
joomla/html/...
php mess detector 
● pDepend & PHPMD 
– detects code mess 
● Installation 
– pear channel-discover pear.pdepend.org 
– pea...
phpmd on router.php 
$>> phpmd libraries/joomla/application/router.php text unusedcode 
/var/www/j161/libraries/joomla/app...
pdepend 
pdepend ­­overview­pyramid=./ 
pdepend.svg libraries/joomla/
php documentation generator 
● PHPDocumentator 
– creates automated API documentation based on 
inline code blocks 
● Inst...
Dynamic Analysis
Code Coverage 
Which statements, branches, and paths are 
executed when the tests run? 
● Statement Coverage 
● Branch Cov...
>> phpunit ­­coverage­html 
/tmp/report BankAccountTest 
PHPUnit 3.4.0 by Sebastian Bergmann. 
..... 
Time: 0 seconds 
OK ...
Profiling 
● Xdebug's built-in profiler 
● Finds bottlenecks in your script 
● Output can be visualized by external tools ...
Agenda 
● Software Quality Assurance 
● Code Testing 
● Code Analysis 
● Continous Integration (Automation) 
● Quick Demo ...
Automation
phing 
● automated build tool 
– like Apache Ant 
– integrates well with other PHP tools 
● Installation 
– pear channel-d...
Sample build file 
<?xml version="1.0" ?> 
<project name="builder" basedir="." default="build" description="Build PayPlans...
Cruise control 
Framework for a continuous build process 
● Includes, but is not limited to, plugins for email 
notificati...
Screenshots
phpUnderControl 
● Customization of CruiseControl that caters to 
the needs of PHP projects 
– PHPUnit 
– PHPDocumentor 
–...
Screenshot
Agenda 
● Software Quality Assurance 
● Code Testing 
● Code Analysis 
● Continous Integration 
● Quick Demo of QA
Credits 
● http://www.slideshare.net/sebastian_bergmann 
● http://www.slideshare.net/DragonBe 
● http://www.slideshare.net...
Thanks... 
Find us at : 
● http://twitter.com/joomlaxi 
● http://facebook.com/joomlaxi 
● shyam@readybytes.in
Joomla Code Quality Control and Automation Testing
Joomla Code Quality Control and Automation Testing
Upcoming SlideShare
Loading in …5
×

Joomla Code Quality Control and Automation Testing

807 views

Published on

Joomla Day, Pune 2011

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Joomla Code Quality Control and Automation Testing

  1. 1. Joomla Code Quality Control [Automated Tools] Shyam S. Verma Founder & CEO Ready Bytes Software Labs Pvt. Ltd.
  2. 2. Team JoomlaXi Develops Joomla Extensions RBSL Develop Web Apps and Websites
  3. 3. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  4. 4. Software Quality Assurance (SQA) ● Systematic Monitoring and Evaluation of the software engineering processes ● Monitoring and Evalution can be done automatically via tools called QA tools ● Not a Rocket Science, but heavily depends on the proejct
  5. 5. Benefit of SQA? ● early detection of issues ● cleaner & consistent code ● knowledge about the codebase ● increase of confidence ● enables frequent releases, refactoring
  6. 6. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  7. 7. Manual Testing ● Not automated, slow and expensive ● Complete application must be ready before it can be tested ● Tests need to be repeated when the application changes
  8. 8. Automated Testing ● Test results are - – automatically evaluated and – do not have to be interpreted by a human tester ● Tests are repeatable – with deterministic results – without additional costs
  9. 9. Selenium Testing ● Test web applications in a web browser ● Selenium RC – Automated execution of Selenium tests – Tests can be specified in any language – One test can be executed on multiple OS/browser combinations – Tests can be triggered from PHPUnit
  10. 10. problems ● Complex test environments ● Dependencies between tests ● Running the tests is slow, thus incompatible with the agile approach ● It is not enough and/or does not scale
  11. 11. What we want ● We want to test earlier ● We want to be able to test an incomplete application ● We want a test environment that is less complex ● We want to be able to run the tests faster
  12. 12. Unit Tests ● Executable specification ● Automatic evaluation ● Simple test environment ● Instant feedback ● Works as regression test >> Unit Tests improve the confidence in your code as they detect problems as early as possible.
  13. 13. >> phpunit BowlingGameTest PHPUnit 3.4.0 by Sebastian Bergmann. .FFFF Time: 0 seconds There were 4 failures: 1) BowlingGameTest::testScoreForAllOnesIs20 Failed asserting that <integer:0> matches expected value <integer:20>. /home/sb/BowlingGameTest.php:67 2) BowlingGameTest::testScoreForOneSpareAnd3Is16 Failed asserting that <integer:0> matches expected value <integer:16>. /home/sb/BowlingGameTest.php:75 3) BowlingGameTest::testScoreForOneStrikeAnd3And4Is24 Failed asserting that <integer:0> matches expected value <integer:24>. /home/sb/BowlingGameTest.php:84 4) BowlingGameTest::testScoreForPerfectGameIs300 Failed asserting that <integer:0> matches expected value <integer:300>. /home/sb/BowlingGameTest.php:90 FAILURES! Tests: 5, Assertions: 5, Failures: 4.
  14. 14. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  15. 15. Static Analysis
  16. 16. phploc ● Text-based metric for code size ● Various definitions – Lines of Code (LOC) – Comment Lines of Code (CLOC) – Non-Comment Lines of Code (NCLOC) – Executable Lines of Code (ELOC) ● Ratios can be interesting – CLOC / (E)LOC
  17. 17. Running phploc on Joomla 1.6.1 Directories: 725 Files: 1625 Lines of Code (LOC): 251967 Cyclomatic Complexity / Lines of Code: 0.12 Comment Lines of Code (CLOC): 88959 Non­Comment Lines of Code (NCLOC): 163008 Namespaces: 0 Interfaces: 0 Classes: 1136 Abstract: 81 (7.13%) Concrete: 1055 (92.87%) Average Class Length (NCLOC): 126 Methods: 6494 Scope: Non­Static: 5710 (87.93%) Static: 784 (12.07%) Visibility: Public: 5113 (78.73%) Non­Public: 1381 (21.27%) Average Method Length (NCLOC): 22 Cyclomatic Complexity / Number of Methods: 3.44 Anonymous Functions: 10 Functions: 112 Constants: 225 Global constants: 218 Class constants: 7
  18. 18. Php code sniffer ● PHP_CodeSniffer – sniffs for coding standard violations – ensures code is clean and consistent – using standard and custom coding standards ● Installation – pear install PHP_CodeSniffer
  19. 19. phpcs on libraries/joomla/application shyam@ssv­lptp­lnx:/ var/www/j161$ phpcs ­s ­­standard= ZEND ­­report= summary ­­sniffs=" Zend.Files.LineLength.LineTooLong" ­­extensions= php libraries/joomla/application/ PHP CODE SNIFFER REPORT SUMMARY ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­FILE ERRORS WARNINGS ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­/ var/www/j161/libraries/joomla/application/application.php 4 35 /var/www/j161/libraries/joomla/application/categories.php 2 22 ...... /var/www/j161/libraries/joomla/application/component/view.php 0 15 /var/www/j161/libraries/joomla/application/pathway.php 0 2 /var/www/j161/libraries/joomla/application/router.php 0 2 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­A TOTAL OF 43 ERROR(S) AND 222 WARNING(S) WERE FOUND IN 17 FILE(S) ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­PHP CODE SNIFFER VIOLATION SOURCE SUMMARY ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­SOURCE COUNT ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­Zend. Files.LineLength.LineTooLong 222 Zend.Files.LineLength.MaxLengthExceeded 43 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­A TOTAL OF 265 SNIFF VIOLATION(S) WERE FOUND IN 2 SOURCE(S) ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  20. 20. phpcpd ● PHP Copy/Paste Detector – detects code duplication ● Installation – pear channel-discover pear.phpunit.de – pear channel-discover components.ez.no – pear install --alldeps phpunit/phpcpd
  21. 21. phpcpd on libraries/joomla (1.6.1) Found 10 exact clones with 216 duplicated lines in 13 files: ­libraries/ joomla/html/html/category.php:46­58 libraries/joomla/html/html/category.php:98­110 ­libraries/ joomla/client/ftp.php:1186­1192 libraries/joomla/client/ftp.php:1215­1221 ­libraries/ joomla/base/object.php:78­120 libraries/joomla/error/exception.php:182­224 ­libraries/ joomla/database/table/extension.php:30­44 libraries/joomla/database/table/update.php:32­46 ­libraries/ joomla/database/database/mysql.php:221­236 libraries/joomla/database/database/mysqli.php:245­260 ...... ­libraries/ joomla/form/fields/componentlayout.php:161­173 libraries/joomla/form/fields/modulelayout.php:138­150 ­libraries/ joomla/installer/adapters/component.php:263­275 libraries/joomla/installer/adapters/component.php:688­700 ­libraries/ joomla/installer/adapters/template.php:107­114 libraries/joomla/installer/adapters/plugin.php:165­172 0.30% duplicated lines out of 70925 total lines of code.
  22. 22. php mess detector ● pDepend & PHPMD – detects code mess ● Installation – pear channel-discover pear.pdepend.org – pear install pdepend/PHP_Depend – pear channel-discover pear.phpmd.org – pear install phpmd/PHP_PMD
  23. 23. phpmd on router.php $>> phpmd libraries/joomla/application/router.php text unusedcode /var/www/j161/libraries/joomla/application/router.php:247 Avoid unused parameters such as '$uri'. /var/www/j161/libraries/joomla/application/router.php:255 Avoid unused parameters such as '$uri'. /var/www/j161/libraries/joomla/application/router.php:263 Avoid unused parameters such as '$uri'. /var/www/j161/libraries/joomla/application/router.php:270 Avoid unused parameters such as '$uri'. $>> phpmd libraries/joomla/application/router.php text codesize /var/www/j161/libraries/joomla/application/router.php:26 This class has too many methods, consider refactoring it. $>> phpmd libraries/joomla/application/router.php text naming $>>
  24. 24. pdepend pdepend ­­overview­pyramid=./ pdepend.svg libraries/joomla/
  25. 25. php documentation generator ● PHPDocumentator – creates automated API documentation based on inline code blocks ● Installation – pear install PhpDocumentor
  26. 26. Dynamic Analysis
  27. 27. Code Coverage Which statements, branches, and paths are executed when the tests run? ● Statement Coverage ● Branch Coverage ● Path Coverage 100% Code Coverage is a required, but not a sufficient criteria for test completeness
  28. 28. >> phpunit ­­coverage­html /tmp/report BankAccountTest PHPUnit 3.4.0 by Sebastian Bergmann. ..... Time: 0 seconds OK (5 tests, 5 assertions) Generating code coverage report, this may take a moment.
  29. 29. Profiling ● Xdebug's built-in profiler ● Finds bottlenecks in your script ● Output can be visualized by external tools such as KCacheGrind or WinCacheGrind.
  30. 30. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration (Automation) ● Quick Demo of QA
  31. 31. Automation
  32. 32. phing ● automated build tool – like Apache Ant – integrates well with other PHP tools ● Installation – pear channel-discover pear.phing.info – pear install phing/phing
  33. 33. Sample build file <?xml version="1.0" ?> <project name="builder" basedir="." default="build" description="Build PayPlans Kit."> <target name="build" depends="config"> <phingcall target="export_from_wc" /> <phing phingfile="${project.shortform.small}.xml" inheritAll="true" target="build" /> <zip destfile="${dir.packages}/${project.shortform}­${ file.version}.$ {svn.lastrevision}.zip" basedir="${dir.tmp}" /> </target> <target name="config" description="Load configuration file"> <php expression="(PHP_OS == 'WINNT') ? '_win' :'_unix'" returnProperty="IF_OS"/> <property file="global${IF_OS}.prop" override="false" /> <property file="build${IF_OS}.prop" override="false" /> <svnlastrevision workingcopy="${dir.root}" propertyname="svn.lastrevision" /> </target> </project>
  34. 34. Cruise control Framework for a continuous build process ● Includes, but is not limited to, plugins for email notification, Apache Ant, Phing, and various source control tools ● A web interface is provided to view the details of the current and previous builds
  35. 35. Screenshots
  36. 36. phpUnderControl ● Customization of CruiseControl that caters to the needs of PHP projects – PHPUnit – PHPDocumentor – PHP_CodeSniffer – PHP_Depend – phpmd – phpcpd
  37. 37. Screenshot
  38. 38. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  39. 39. Credits ● http://www.slideshare.net/sebastian_bergmann ● http://www.slideshare.net/DragonBe ● http://www.slideshare.net/spriebsch
  40. 40. Thanks... Find us at : ● http://twitter.com/joomlaxi ● http://facebook.com/joomlaxi ● shyam@readybytes.in

×