Successfully reported this slideshow.
Your SlideShare is downloading. ×

Joomla Code Quality Control and Automation Testing

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 42 Ad
Advertisement

More Related Content

Slideshows for you (20)

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

Advertisement

Recently uploaded (20)

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

×