Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Joomla Code Quality Control [Automated Tools]

Joomla Code Quality Control [Automated Tools]

This was presented at Joomla Day India 2011, Pune. Presented by Shyam (@ssv445), CEO of Ready Bytes Software Labs Pvt. Ltd. (@readybytes)

Shyam Verma

March 11, 2011
Tweet

More Decks by Shyam Verma

Other Decks in Programming

Transcript

  1. Shyam S. Verma Founder & CEO Ready Bytes Software Labs

    Pvt. Ltd. Joomla Code Quality Control [Automated Tools]
  2. Agenda • Software Quality Assurance • Code Testing • Code

    Analysis • Continous Integration • Quick Demo of QA
  3. 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
  4. Benefit of SQA? • early detection of issues • cleaner

    & consistent code • knowledge about the codebase • increase of confidence • enables frequent releases, refactoring
  5. Agenda • Software Quality Assurance • Code Testing • Code

    Analysis • Continous Integration • Quick Demo of QA
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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.
  12. >> 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.
  13. Agenda • Software Quality Assurance • Code Testing • Code

    Analysis • Continous Integration • Quick Demo of QA
  14. 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
  15. 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
  16. 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
  17. 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) ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  18. 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
  19. 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.
  20. 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
  21. 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 $>>
  22. php documentation generator • PHPDocumentator – creates automated API documentation

    based on inline code blocks • Installation – pear install PhpDocumentor
  23. 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
  24. >> 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.
  25. Profiling • Xdebug's built-in profiler • Finds bottlenecks in your

    script • Output can be visualized by external tools such as KCacheGrind or WinCacheGrind.
  26. Agenda • Software Quality Assurance • Code Testing • Code

    Analysis • Continous Integration (Automation) • Quick Demo of QA
  27. phing • automated build tool – like Apache Ant –

    integrates well with other PHP tools • Installation – pear channel-discover pear.phing.info – pear install phing/phing
  28. 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>
  29. 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
  30. phpUnderControl • Customization of CruiseControl that caters to the needs

    of PHP projects – PHPUnit – PHPDocumentor – PHP_CodeSniffer – PHP_Depend – phpmd – phpcpd
  31. Agenda • Software Quality Assurance • Code Testing • Code

    Analysis • Continous Integration • Quick Demo of QA