SlideShare a Scribd company logo
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 
● Monitoring and Evalution can be done 
automatically via tools called QA tools 
● Not a Rocket Science, but heavily depends on 
the proejct
Benefit of SQA? 
● early detection of issues 
● cleaner & consistent code 
● knowledge about the codebase 
● increase of confidence 
● enables frequent releases, refactoring
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 
● Tests need to be repeated when the application 
changes
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
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
Joomla Code Quality Control and Automation Testing
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
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
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.
>> 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.
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) 
– Non-Comment Lines of Code (NCLOC) 
– Executable Lines of Code (ELOC) 
● Ratios can be interesting 
– CLOC / (E)LOC
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
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
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) 
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
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
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.
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
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 
$>>
pdepend 
pdepend ­­overview­pyramid=./ 
pdepend.svg libraries/joomla/
php documentation generator 
● PHPDocumentator 
– creates automated API documentation based on 
inline code blocks 
● Installation 
– pear install PhpDocumentor
Dynamic Analysis
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
>> 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.
Profiling 
● Xdebug's built-in profiler 
● Finds bottlenecks in your script 
● Output can be visualized by external tools such 
as KCacheGrind or WinCacheGrind.
Joomla Code Quality Control and Automation Testing
Agenda 
● Software Quality Assurance 
● Code Testing 
● Code Analysis 
● Continous Integration (Automation) 
● Quick Demo of QA
Automation
phing 
● automated build tool 
– like Apache Ant 
– integrates well with other PHP tools 
● Installation 
– pear channel-discover pear.phing.info 
– pear install phing/phing
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>
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
Screenshots
phpUnderControl 
● Customization of CruiseControl that caters to 
the needs of PHP projects 
– PHPUnit 
– PHPDocumentor 
– PHP_CodeSniffer 
– PHP_Depend 
– phpmd 
– phpcpd
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/spriebsch
Thanks... 
Find us at : 
● http://twitter.com/joomlaxi 
● http://facebook.com/joomlaxi 
● shyam@readybytes.in

More Related Content

PPT
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
PDF
Tool Up Your LAMP Stack
PDF
Effective code reviews
PDF
Effective code reviews
PDF
Pragmatic Code Coverage
PPT
Code Review
PDF
Code Review
PPT
SoftTest Ireland: Model Based Testing - January 27th 2011
[ENGLISH] TDC 2015 - PHP Trail - Tests and PHP Continuous Integration Enviro...
Tool Up Your LAMP Stack
Effective code reviews
Effective code reviews
Pragmatic Code Coverage
Code Review
Code Review
SoftTest Ireland: Model Based Testing - January 27th 2011

What's hot (20)

PDF
Hidden Dragons of CGO
PDF
Code Review with Sonar
PDF
Refactoring Legacy Code
PDF
Distributed and Scalable JMeter
PPT
Code Review
PDF
Model-based Testing: Taking BDD/ATDD to the Next Level
PDF
The why and how of moving to php 8
PPTX
PVS-Studio and static code analysis technique
PDF
The why and how of moving to php 7
ODP
Java code coverage with JCov. Implementation details and use cases.
PDF
Parasoft fda software compliance part2
PPTX
IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자
PPTX
Improving Code Quality Through Effective Review Process
PDF
ATDD Using Robot Framework
PDF
Code-Review-Principles-Process-and-Tools (1)
PDF
Robot Framework :: Demo login application
PPTX
Top 10 static code analysis tool
PDF
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
PDF
Presentation slides: "How to get 100% code coverage"
PDF
JavaCro'14 - Test Automation using RobotFramework Libraries – Stojan Peshov
Hidden Dragons of CGO
Code Review with Sonar
Refactoring Legacy Code
Distributed and Scalable JMeter
Code Review
Model-based Testing: Taking BDD/ATDD to the Next Level
The why and how of moving to php 8
PVS-Studio and static code analysis technique
The why and how of moving to php 7
Java code coverage with JCov. Implementation details and use cases.
Parasoft fda software compliance part2
IoT 개발자를 위한 Embedded C에서 Test Coverage를 추출해보자
Improving Code Quality Through Effective Review Process
ATDD Using Robot Framework
Code-Review-Principles-Process-and-Tools (1)
Robot Framework :: Demo login application
Top 10 static code analysis tool
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Presentation slides: "How to get 100% code coverage"
JavaCro'14 - Test Automation using RobotFramework Libraries – Stojan Peshov
Ad

Similar to Joomla Code Quality Control and Automation Testing (20)

PDF
Tool up your lamp stack
PDF
Continuous Integration In Php
PDF
PHP QA Tools
PDF
Fighting Fear-Driven-Development With PHPUnit
PPTX
Listen afup 2010
PDF
Continuous Quality Assurance
PPT
Unit testing php-unit - phing - selenium_v2
PDF
Workshop quality assurance for php projects - phpbelfast
PDF
Analysis of-quality-of-pkgs-in-packagist-univ-20171024
PDF
Debugging: Rules And Tools - PHPTek 11 Version
PDF
Workshop quality assurance for php projects - ZendCon 2013
PDF
Dynamic PHP web-application analysis
KEY
PHP Industrialization
ZIP
Test
PDF
Profiling PHP with Xdebug / Webgrind
PDF
Measuring Your Code
PDF
Measuring Your Code 2.0
PDF
Introduction to Unit Testing with PHPUnit
KEY
Php Unit With Zend Framework Zendcon09
PPTX
PHPUnit: from zero to hero
Tool up your lamp stack
Continuous Integration In Php
PHP QA Tools
Fighting Fear-Driven-Development With PHPUnit
Listen afup 2010
Continuous Quality Assurance
Unit testing php-unit - phing - selenium_v2
Workshop quality assurance for php projects - phpbelfast
Analysis of-quality-of-pkgs-in-packagist-univ-20171024
Debugging: Rules And Tools - PHPTek 11 Version
Workshop quality assurance for php projects - ZendCon 2013
Dynamic PHP web-application analysis
PHP Industrialization
Test
Profiling PHP with Xdebug / Webgrind
Measuring Your Code
Measuring Your Code 2.0
Introduction to Unit Testing with PHPUnit
Php Unit With Zend Framework Zendcon09
PHPUnit: from zero to hero
Ad

Recently uploaded (20)

PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
KodekX | Application Modernization Development
PDF
cuic standard and advanced reporting.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
DOCX
The AUB Centre for AI in Media Proposal.docx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Big Data Technologies - Introduction.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Encapsulation theory and applications.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Empathic Computing: Creating Shared Understanding
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
KodekX | Application Modernization Development
cuic standard and advanced reporting.pdf
Understanding_Digital_Forensics_Presentation.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
The Rise and Fall of 3GPP – Time for a Sabbatical?
The AUB Centre for AI in Media Proposal.docx
“AI and Expert System Decision Support & Business Intelligence Systems”
Reach Out and Touch Someone: Haptics and Empathic Computing
Big Data Technologies - Introduction.pptx
Unlocking AI with Model Context Protocol (MCP)
Encapsulation theory and applications.pdf
NewMind AI Weekly Chronicles - August'25 Week I
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
NewMind AI Monthly Chronicles - July 2025
Empathic Computing: Creating Shared Understanding

Joomla Code Quality Control and Automation Testing

  • 1. Joomla Code Quality Control [Automated Tools] Shyam S. Verma Founder & CEO Ready Bytes Software Labs Pvt. Ltd.
  • 2. Team JoomlaXi Develops Joomla Extensions RBSL Develop Web Apps and Websites
  • 3. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  • 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. Benefit of SQA? ● early detection of issues ● cleaner & consistent code ● knowledge about the codebase ● increase of confidence ● enables frequent releases, refactoring
  • 6. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  • 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. 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. 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
  • 11. 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
  • 12. 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
  • 13. 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.
  • 14. >> 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.
  • 15. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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) ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  • 21. 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
  • 22. 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.
  • 23. 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
  • 24. 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 $>>
  • 25. pdepend pdepend ­­overview­pyramid=./ pdepend.svg libraries/joomla/
  • 26. php documentation generator ● PHPDocumentator – creates automated API documentation based on inline code blocks ● Installation – pear install PhpDocumentor
  • 28. 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
  • 29. >> 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.
  • 30. Profiling ● Xdebug's built-in profiler ● Finds bottlenecks in your script ● Output can be visualized by external tools such as KCacheGrind or WinCacheGrind.
  • 32. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration (Automation) ● Quick Demo of QA
  • 34. phing ● automated build tool – like Apache Ant – integrates well with other PHP tools ● Installation – pear channel-discover pear.phing.info – pear install phing/phing
  • 35. 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>
  • 36. 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
  • 38. phpUnderControl ● Customization of CruiseControl that caters to the needs of PHP projects – PHPUnit – PHPDocumentor – PHP_CodeSniffer – PHP_Depend – phpmd – phpcpd
  • 40. Agenda ● Software Quality Assurance ● Code Testing ● Code Analysis ● Continous Integration ● Quick Demo of QA
  • 41. Credits ● http://www.slideshare.net/sebastian_bergmann ● http://www.slideshare.net/DragonBe ● http://www.slideshare.net/spriebsch
  • 42. Thanks... Find us at : ● http://twitter.com/joomlaxi ● http://facebook.com/joomlaxi ● shyam@readybytes.in