42
Shyam S. Verma Founder & CEO Ready Bytes Software Labs Pvt. Ltd. Joomla Code Quality Control [Automated Tools]

Joomla Code Quality Control and Automation Testing

Embed Size (px)

DESCRIPTION

Joomla Day, Pune 2011

Citation preview

Page 1: Joomla Code Quality Control and Automation Testing

Shyam S. VermaFounder & CEO

Ready Bytes Software Labs Pvt. Ltd.

Joomla Code Quality Control [Automated Tools]

Page 2: Joomla Code Quality Control and Automation Testing

Team JoomlaXi Develops Joomla Extensions

RBSL Develop Web Apps and Websites

Page 3: Joomla Code Quality Control and Automation Testing

Agenda

● Software Quality Assurance● Code Testing● Code Analysis● Continous Integration● Quick Demo of QA

Page 4: Joomla Code Quality Control and Automation Testing

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

Page 5: Joomla Code Quality Control and Automation Testing

Benefit of SQA?

● early detection of issues● cleaner & consistent code● knowledge about the codebase● increase of confidence● enables frequent releases, refactoring

Page 6: Joomla Code Quality Control and Automation Testing

Agenda

● Software Quality Assurance● Code Testing● Code Analysis● Continous Integration● Quick Demo of QA

Page 7: Joomla Code Quality Control and Automation Testing

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

Page 8: Joomla Code Quality Control and Automation Testing

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

Page 9: Joomla Code Quality Control and Automation Testing

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

Page 10: Joomla Code Quality Control and Automation Testing
Page 11: 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

Page 12: Joomla Code Quality Control and Automation Testing

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

Page 13: Joomla Code Quality Control and Automation Testing

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.

Page 14: Joomla Code Quality Control and Automation Testing

>> 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.

Page 15: Joomla Code Quality Control and Automation Testing

Agenda

● Software Quality Assurance● Code Testing● Code Analysis● Continous Integration● Quick Demo of QA

Page 16: Joomla Code Quality Control and Automation Testing

Static Analysis

Page 17: Joomla Code Quality Control and Automation Testing

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

Page 18: Joomla Code Quality Control and Automation Testing

Running phploc on Joomla 1.6.1Directories:                                        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

Page 19: Joomla Code Quality Control and Automation Testing

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

Page 20: Joomla Code Quality Control and Automation Testing

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)

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Page 21: Joomla Code Quality Control and Automation Testing

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

Page 22: Joomla Code Quality Control and Automation Testing

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.

Page 23: Joomla Code Quality Control and Automation Testing

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

Page 24: Joomla Code Quality Control and Automation Testing

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

$>>

Page 25: Joomla Code Quality Control and Automation Testing

pdepend

pdepend ­­overview­pyramid=./pdepend.svg libraries/joomla/

Page 26: Joomla Code Quality Control and Automation Testing

php documentation generator

● PHPDocumentator– creates automated API documentation based on

inline code blocks

● Installation– pear install PhpDocumentor

Page 27: Joomla Code Quality Control and Automation Testing

Dynamic Analysis

Page 28: Joomla Code Quality Control and Automation Testing

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

Page 29: Joomla Code Quality Control and Automation Testing

>> 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.

Page 30: Joomla Code Quality Control and Automation Testing

Profiling

● Xdebug's built-in profiler ● Finds bottlenecks in your script ● Output can be visualized by external tools such

as KCacheGrind or WinCacheGrind.

Page 31: Joomla Code Quality Control and Automation Testing
Page 32: Joomla Code Quality Control and Automation Testing

Agenda

● Software Quality Assurance● Code Testing● Code Analysis● Continous Integration (Automation)● Quick Demo of QA

Page 33: Joomla Code Quality Control and Automation Testing

Automation

Page 34: Joomla Code Quality Control and Automation Testing

phing

● automated build tool– like Apache Ant

– integrates well with other PHP tools

● Installation– pear channel-discover pear.phing.info

– pear install phing/phing

Page 35: Joomla Code Quality Control and Automation Testing

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>

Page 36: Joomla Code Quality Control and Automation Testing

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

Page 37: Joomla Code Quality Control and Automation Testing

Screenshots

Page 38: Joomla Code Quality Control and Automation Testing

phpUnderControl

● Customization of CruiseControl that caters to the needs of PHP projects

– PHPUnit

– PHPDocumentor

– PHP_CodeSniffer

– PHP_Depend

– phpmd

– phpcpd

Page 39: Joomla Code Quality Control and Automation Testing

Screenshot

Page 40: Joomla Code Quality Control and Automation Testing

Agenda

● Software Quality Assurance● Code Testing● Code Analysis● Continous Integration● Quick Demo of QA

Page 41: Joomla Code Quality Control and Automation Testing

Credits

● http://www.slideshare.net/sebastian_bergmann● http://www.slideshare.net/DragonBe● http://www.slideshare.net/spriebsch

Page 42: Joomla Code Quality Control and Automation Testing

Thanks...

Find us at :● http://twitter.com/joomlaxi● http://facebook.com/joomlaxi● [email protected]