SlideShare a Scribd company logo
Tool Up Your LAMP Stack
About Me

 • Lorna Mitchell

 • Web Development Consultant

 • Speaker and Author

 • Website: http://lornajane.net

 • Twitter: @lornajane




                                   2
LAMP




       3
LAMP

 • Linux

 • Apache

 • MySQL

 • PHP (or Perl, or Python)




                              4
Technology and Agile
Technology is not the
     problem



                        6
Technology is not the
     solution



                        7
Technology

 • We need good tools




                        8
Technology

 • We need good tools

 • They enable our workflow




                             8
Technology

 • We need good tools

 • They enable our workflow

 • They facilitate our achievements




                                      8
Technology

 • We need good tools

 • They enable our workflow

 • They facilitate our achievements

 • They allow us to meet our deadlines




                                         8
Technology

 • We need good tools

 • They enable our workflow

 • They facilitate our achievements

 • They allow us to meet our deadlines

 • They are not the silver bullet (sorry)




                                            8
Iterative Development




            develop     deploy




                                 9
The Main Ingredients

Preparation time: some years

Ingredients:

   • Source control

   • Development platforms

   • Task tracking

   • Automated testing

   • Static analysis

   • Automated deployment

   • Continuous integration




                               10
Source Control
Source Control: Key Ingredient

  • Central, canonical version

  • Collaboration point

  • Historical information

      • what changed
      • when
      • by whom

  • Can include its own config




                                 12
Source Control Tools

  • Subversion http://subversion.apache.org/

  • Git http://git-scm.com/

  • Mercurial http://mercurial.selenic.com/




                                               13
Branching Strategies

Common patterns:

  • Feature branches

  • Version branches

  • Live/integration branches




                                14
Traditional Centralised Source Control




                       repo



    checkout         checkout            checkout




                                                    15
Distributed Source Control

                     repo


                            repo


              repo


                                   repo


                     repo                 16
Database Version Control

No silver bullet to keep code and database schema in sync

Strategies:

   • All db changes done via script

   • Scripts are numbered

   • Database knows what numbers it already has


Tools:

   • homespun scripts

   • DbDeploy http://dbdeploy.com/

   • Liquibase http://www.liquibase.org/



                                                            17
Development Platforms
Development Platforms

Requirements:

  • Safe area "sandpit" for developers to work

  • All software as-live

  • Isolated




                                                 19
Task Tracking
Task Tracking

Once called ’bug tracking’.

We can track what status everything is in.




                                             21
Task Tracking

Once called ’bug tracking’.

We can track what status everything is in.

Developers understand bug trackers, bug trackers understand your
workflow.




                                                                   21
Workflow


          Backlog    Sprint




                     Active




          Blocked    Verify




                    Complete



                               22
Task Tracking Tools

  • Pivotal Tracker http://www.pivotaltracker.com/

  • GreenHopper
   http://www.atlassian.com/software/greenhopper/

  • Trac http://trac.edgewall.org/




                                                     23
Automated Testing
How do you test a website
           ?




                            25
How do you test a website
       repeatedly
           ?


                            26
Automated Testing

Gives repeatable results

TDD Test-Driven Development

BDD Behaviour-Driven Development




                                   27
Automated Testing Tools

 • Selenium: browser-based record and play of tests

     • Selenium IDE http://seleniumhq.org/projects/ide/
     • Selenium RC
       http://seleniumhq.org/projects/remote-control/

 • PHPUnit: unit testing and automation

     • http://phpunit.de
     • Also generates code coverage graphs




                                                          28
My First Unit Test

require_once '../src/models/MathUtilModel.php';

class MathUtilModelTest extends PHPUnit_Framework_TestCase {
    public function testAddNumbersWithNumbers() {
        $util = new MathUtilModel();
        $result = $util->addNumbers(3,5);
        $this->assertEquals(8, $result);
    }
}




                                                               29
Running One Test

To run our tests, from the tests directory do:
phpunit models/MathUtilModel

Output:
PHPUnit 3.5.13 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 3.00Mb

OK (1 test, 1 assertion)




                                                 30
Testable Code

 • Testable code is clean and modular

 • Need to be able to separate elements to test

 • Each function does one thing

 • Not too many paths through the code

 • Dependencies are dangerous




                                                  31
Dependency Injection

Passing things in or looking them up.
function getData() {
    $db = new MyDatabaseObject();
    // sql and query
}




function getData($db) {
    // sql and query
}




                                        32
Code Coverage

What percentage of your code is tested?

  • Summary view

  • Drill in to see which lines are run by tests

  • Beware: 100% code coverage does not mean fully tested


Use phpunit -coverage-html and specify where PHPUnit should
write the report files
Examples from http://jenkins.joind.in




                                                              33
Code Coverage




                34
Code Coverage




                35
Static Analysis
Static Analysis

Evaluating code without running it

Allows us to check for quality, commenting, coding standards




                                                               37
Static Analysis Tools

  • PHP Code Sniffer: checks for coding standards

      • http://pear.php.net/PHP_CodeSniffer

  • PHP Mess Detector: detects ’bad smells’

      • http://phpmd.org/

  • PHP Lines of Code: project size, class count

      • https://github.com/sebastianbergmann/phploc




                                                      38
phploc Sample Output (joind.in)

Directories:                                 32
Files:                                      213

Lines of Code (LOC):                       21339
  Cyclomatic Complexity / Lines of Code:    0.10
Comment Lines of Code (CLOC):               4908
Non-Comment Lines of Code (NCLOC):         16431

Namespaces:                                   0
Interfaces:                                   0
Classes:                                     87
  Abstract:                                   1 (1.15%)
  Concrete:                                  86 (98.85%)
  Average Class Length (NCLOC):             116
Methods:                                    532
  Scope:
    Non-Static:                             532 (100.00%)
    Static:                                   0 (0.00%)
  Visibility:
    Public:                                 501 (94.17%)
    Non-Public:                              31 (5.83%)
  Average Method Length (NCLOC):             18             39
API Documentation

Another form of static analysis is to generate documentation

  • Commented documentation in each file, class, function

  • Automatically generate into readable documents

  • Tools:

       • PHPDocumentor http://www.phpdoc.org/
       • DocBlox http://www.docblox-project.org/




                                                               40
API Documentation




                    41
PHPCS Examples

Install:
pear install PHP_CodeSniffer

Run:
phpcs --standard=PEAR example.php

Examples taken from http://bit.ly/kedQrU




                                           42
PHPCS Examples

Source code:
class recipe
{

    protected $_id;

    public $name;

    public $prep_time;

    function getIngredients() {
        $ingredients = Ingredients::fetchAllById($this->_id);
        return $ingredients;
    }
}




                                                                43
PHPCS Examples

Sniffer output:
FILE: /home/lorna/phpcs/recipe.class.php
----------------------------------------------------------------------
FOUND 8 ERROR(S) AND 0 WARNING(S) AFFECTING 5 LINE(S)
----------------------------------------------------------------------
  2 | ERROR | Missing file doc comment
  3 | ERROR | Class name must begin with a capital letter
  3 | ERROR | Missing class doc comment
  6 | ERROR | Protected member variable "_id" must not be prefixed wit
    |       | underscore
 12 | ERROR | Missing function doc comment
 12 | ERROR | Opening brace should be on a new line
 13 | ERROR | Line indented incorrectly; expected at least 8 spaces, f
 13 | ERROR | Spaces must be used to indent lines; tabs are not allowe
----------------------------------------------------------------------




                                                                   44
Automated Deployment
Automated Deployment

 • How many times do you deploy an agile project?




                                                    46
Automated Deployment

 • How many times do you deploy an agile project?

 • Fast

 • Hardened

 • Painless

 • Repeatable




                                                    46
Automated Deployment Tools

 • Phing/Ant: easy automated build scripts

     • http://phing.info/
     • http://ant.apache.org/

 • Capistrano (or Webistrano): scripted releases (with web interface)

     • https://github.com/capistrano/capistrano




                                                                        47
Automating Deployment: Why

 • Minimise mistakes

 • Save time on each deploy

 • Better than documentation

 • Reliable process - use for different platforms

 • Scope for rollback




                                                    48
Automating Deployment: What

 • Application code

     • minimal downtime or time in an inconsistent state
     • easy rollback
     • additional setup steps (upload files, etc) also automated

 • Database

     • apply database patches
     • include rollback patches

 • Config changes

     • useful for large or complex sites
     • config deploys separately, can update quickly and easily



                                                                  49
Code Deployment

 • Get a clean copy of code

 • Place in new directory on server

 • Perform any other preparation tasks

 • Change symlink in web directory to point to new version

 • Tools: shell script or ant/phing




                                                             50
Config Deployment

 • Exactly like code deployment

 • Application needs to be designed with this in mind

     • Default to live config
     • Environment variables set in vhost




                                                        51
Phing Example

<?xml version="1.0" encoding="UTF-8"?>
<project name="example" basedir="." default="deploy">
        <property name="builddir" value="./build" />
        <property name="appdir" value="./build/code" />
        <tstamp><format property="date" pattern="%Y%m%d-%H%M" /></tsta

       <target name="deploy" depends="clean, prepare, export, putlive

       <target name="export">
           <exec command="svn export ${repo} ${appdir}/${date}" />
       </target>

       <target name="putlive">
           <exec command="scp -r ${appdir}/${date} ${destination}
               > ${builddir}/logs/scp.log" />
       </target>




                                                                     52
Phing Example Cont’d

        <target name="clean">
                <delete dir="${builddir}" />
        </target>

        <target name="prepare">
                <mkdir dir="${builddir}" />
                <mkdir dir="${builddir}/logs" />
        </target>
</project>

Phing can also handle upload directories, database versioning, other
deployment recipe steps and post deploy tasks




                                                                       53
Continuous Integration
Continuous Integration

The glue that holds everything together!


   • Source control commit triggers:

       • Static analysis tools
       • Automated tests
       • Document generation

   • CI system centralises:

       • Deployment (to various platforms)
       • Other tasks, cron jobs

   • Centralised dashboard and reporting



                                             55
Continuous Integration Tools

  • Jenkins (née Hudson)

      • http://jenkins-ci.org/

  • PHPUnderControl (PHP-specific CruiseControl project)

      • http://phpundercontrol.org/




                                                          56
Tool Up Your LAMP Stack
The Main Ingredients for LAMP

Preparation time: some years

Ingredients:

   • Source control

   • Development platforms

   • Task tracking

   • Automated testing

   • Static analysis

   • Automated deployment

   • Continuous integration




                                58
Questions?
Thanks




 • Website: http://lornajane.net

 • Twitter: @lornajane




                                   60
Image Credits

 • LAMP http://www.flickr.com/photos/sewpixie/2059308961

 • Sandpit
   http://www.flickr.com/photos/giltastic/3159081924




                                                           61

More Related Content

PDF
Joomla Code Quality Control and Automation Testing
PPTX
Holy PowerShell, BATman! - dogfood edition
PDF
Python testing like a pro by Keith Yang
PDF
Pentester++
PDF
Unit Testing from Setup to Deployment
PDF
An Abusive Relationship with AngularJS by Mario Heiderich - CODE BLUE 2015
PPTX
We Make Debugging Sucks Less
PPTX
Attack on the Core
Joomla Code Quality Control and Automation Testing
Holy PowerShell, BATman! - dogfood edition
Python testing like a pro by Keith Yang
Pentester++
Unit Testing from Setup to Deployment
An Abusive Relationship with AngularJS by Mario Heiderich - CODE BLUE 2015
We Make Debugging Sucks Less
Attack on the Core

What's hot (20)

PDF
20140406 loa days-tdd-with_puppet_tutorial
PDF
The Hunter Games: How to Find the Adversary with Event Query Language
PDF
Fantastic Red Team Attacks and How to Find Them
PPTX
ONOS System Test - ONS2016
PPTX
Invoke-Obfuscation nullcon 2017
PDF
Java-Jersey 到 Python-Flask 服務不中斷重構之旅
PDF
How to reverse engineer Android applications
PDF
2016 -11-18 OpenSCAP Workshop Coursebook
PDF
Securing Infrastructure with OpenScap The Automation Way !!
PDF
ProbeDroid - Crafting Your Own Dynamic Instrument Tool on Android for App Beh...
PPTX
PSR-7 - Middleware - Zend Expressive
PDF
The why and how of moving to php 8
PDF
AntiVirus Evasion Reconstructed - Veil 3.0
KEY
No locked doors, no windows barred: hacking OpenAM infrastructure
PPTX
Workshop: PowerShell for Penetration Testers
PDF
Process injection - Malware style
PDF
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
PPTX
PVS-Studio and static code analysis technique
PDF
The why and how of moving to php 7
PPTX
Abusing Adobe Reader’s JavaScript APIs by Abdul-Aziz Hariri & Brian Gorenc - ...
20140406 loa days-tdd-with_puppet_tutorial
The Hunter Games: How to Find the Adversary with Event Query Language
Fantastic Red Team Attacks and How to Find Them
ONOS System Test - ONS2016
Invoke-Obfuscation nullcon 2017
Java-Jersey 到 Python-Flask 服務不中斷重構之旅
How to reverse engineer Android applications
2016 -11-18 OpenSCAP Workshop Coursebook
Securing Infrastructure with OpenScap The Automation Way !!
ProbeDroid - Crafting Your Own Dynamic Instrument Tool on Android for App Beh...
PSR-7 - Middleware - Zend Expressive
The why and how of moving to php 8
AntiVirus Evasion Reconstructed - Veil 3.0
No locked doors, no windows barred: hacking OpenAM infrastructure
Workshop: PowerShell for Penetration Testers
Process injection - Malware style
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
PVS-Studio and static code analysis technique
The why and how of moving to php 7
Abusing Adobe Reader’s JavaScript APIs by Abdul-Aziz Hariri & Brian Gorenc - ...
Ad

Viewers also liked (20)

PPTX
Presentación Ciencia y Tecnología
PDF
Romania
PPTX
sistema educativo venezolano
PPT
Frank SanPietro Walking
PPTX
social interaction community garden
PPTX
Infografía
PPSX
Aprendizaje Autónomo
PPTX
Neurociencias I
PPTX
Cts gabriela
PPT
Maria gabriela
PPTX
Psicofisiología como ciencia
PPTX
floor plan
PPTX
PPTX
флейдер доклад 2013
PPT
презентация Mekruphy
PPTX
ооо экзамен медиа для конференции хабаровск -2013. ppt
PDF
Research instruments case study
PDF
fermentation process &its contribution in pharmacy.
PPTX
Дарунок П. Дорожинського у фонд бібліотеки
Presentación Ciencia y Tecnología
Romania
sistema educativo venezolano
Frank SanPietro Walking
social interaction community garden
Infografía
Aprendizaje Autónomo
Neurociencias I
Cts gabriela
Maria gabriela
Psicofisiología como ciencia
floor plan
флейдер доклад 2013
презентация Mekruphy
ооо экзамен медиа для конференции хабаровск -2013. ppt
Research instruments case study
fermentation process &its contribution in pharmacy.
Дарунок П. Дорожинського у фонд бібліотеки
Ad

Similar to Tool up your lamp stack (20)

PPTX
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...
PDF
20 PHP Static Analysis and Documentation Generators #burningkeyboards
PDF
Introduction to Chef - Techsuperwomen Summit
PDF
Bug Bounty Hunter Methodology - Nullcon 2016
PDF
[2011 CodeEngn Conference 05] Deok9 - DBI(Dynamic Binary Instrumentation)를 이용...
PDF
Developing PHP Applications Faster
KEY
Continuous Integration In A PHP World
PDF
Sensu and Sensibility - Puppetconf 2014
PPTX
Continuous Delivery - Automate & Build Better Software with Travis CI
PDF
To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016
KEY
PyCon AU 2012 - Debugging Live Python Web Applications
PDF
Goodpractice
PPTX
Northeast PHP - High Performance PHP
PDF
Behat bdd training (php) course slides pdf
PDF
Threat Modeling the CI/CD Pipeline to Improve Software Supply Chain Security ...
PPTX
Continuous feature-development
PPTX
Security research over Windows #defcon china
PDF
Demystifying Binary Reverse Engineering - Pixels Camp
PDF
Getting started with RISC-V verification what's next after compliance testing
PDF
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...
20 PHP Static Analysis and Documentation Generators #burningkeyboards
Introduction to Chef - Techsuperwomen Summit
Bug Bounty Hunter Methodology - Nullcon 2016
[2011 CodeEngn Conference 05] Deok9 - DBI(Dynamic Binary Instrumentation)를 이용...
Developing PHP Applications Faster
Continuous Integration In A PHP World
Sensu and Sensibility - Puppetconf 2014
Continuous Delivery - Automate & Build Better Software with Travis CI
To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016
PyCon AU 2012 - Debugging Live Python Web Applications
Goodpractice
Northeast PHP - High Performance PHP
Behat bdd training (php) course slides pdf
Threat Modeling the CI/CD Pipeline to Improve Software Supply Chain Security ...
Continuous feature-development
Security research over Windows #defcon china
Demystifying Binary Reverse Engineering - Pixels Camp
Getting started with RISC-V verification what's next after compliance testing
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...

More from AgileOnTheBeach (20)

PDF
Research instruments case study
PPTX
Sullivan cuff case study
PDF
Value stream mapping
PDF
The problem solvers problem
PDF
System Error
PDF
Surfing the Agile Wave
PDF
Smart Metrics
PDF
Slow and dirty with callouts
PDF
Objective agility
PDF
Lean and lego
PDF
Ignition team - creating agile companies
PDF
First build the right thing
PDF
Embedded storycrafting
PDF
Beware sharp tools
PDF
Lean startup
PDF
Behaviour Driven Development - Beyond given when then
PDF
Sustaining Test-Driven Development
PDF
Agile in Practice
PDF
Oxford Innovation - case study
PDF
Feedback Loops in Agile Development
Research instruments case study
Sullivan cuff case study
Value stream mapping
The problem solvers problem
System Error
Surfing the Agile Wave
Smart Metrics
Slow and dirty with callouts
Objective agility
Lean and lego
Ignition team - creating agile companies
First build the right thing
Embedded storycrafting
Beware sharp tools
Lean startup
Behaviour Driven Development - Beyond given when then
Sustaining Test-Driven Development
Agile in Practice
Oxford Innovation - case study
Feedback Loops in Agile Development

Recently uploaded (20)

PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPT
Teaching material agriculture food technology
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
1. Introduction to Computer Programming.pptx
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Encapsulation theory and applications.pdf
PPTX
Tartificialntelligence_presentation.pptx
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
August Patch Tuesday
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
Approach and Philosophy of On baking technology
MIND Revenue Release Quarter 2 2025 Press Release
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Digital-Transformation-Roadmap-for-Companies.pptx
Machine learning based COVID-19 study performance prediction
Univ-Connecticut-ChatGPT-Presentaion.pdf
Teaching material agriculture food technology
Programs and apps: productivity, graphics, security and other tools
1. Introduction to Computer Programming.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Encapsulation theory and applications.pdf
Tartificialntelligence_presentation.pptx
OMC Textile Division Presentation 2021.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Mobile App Security Testing_ A Comprehensive Guide.pdf
NewMind AI Weekly Chronicles - August'25-Week II
August Patch Tuesday
Accuracy of neural networks in brain wave diagnosis of schizophrenia
Assigned Numbers - 2025 - Bluetooth® Document
Group 1 Presentation -Planning and Decision Making .pptx
Approach and Philosophy of On baking technology

Tool up your lamp stack

  • 1. Tool Up Your LAMP Stack
  • 2. About Me • Lorna Mitchell • Web Development Consultant • Speaker and Author • Website: http://lornajane.net • Twitter: @lornajane 2
  • 3. LAMP 3
  • 4. LAMP • Linux • Apache • MySQL • PHP (or Perl, or Python) 4
  • 6. Technology is not the problem 6
  • 7. Technology is not the solution 7
  • 8. Technology • We need good tools 8
  • 9. Technology • We need good tools • They enable our workflow 8
  • 10. Technology • We need good tools • They enable our workflow • They facilitate our achievements 8
  • 11. Technology • We need good tools • They enable our workflow • They facilitate our achievements • They allow us to meet our deadlines 8
  • 12. Technology • We need good tools • They enable our workflow • They facilitate our achievements • They allow us to meet our deadlines • They are not the silver bullet (sorry) 8
  • 13. Iterative Development develop deploy 9
  • 14. The Main Ingredients Preparation time: some years Ingredients: • Source control • Development platforms • Task tracking • Automated testing • Static analysis • Automated deployment • Continuous integration 10
  • 16. Source Control: Key Ingredient • Central, canonical version • Collaboration point • Historical information • what changed • when • by whom • Can include its own config 12
  • 17. Source Control Tools • Subversion http://subversion.apache.org/ • Git http://git-scm.com/ • Mercurial http://mercurial.selenic.com/ 13
  • 18. Branching Strategies Common patterns: • Feature branches • Version branches • Live/integration branches 14
  • 19. Traditional Centralised Source Control repo checkout checkout checkout 15
  • 20. Distributed Source Control repo repo repo repo repo 16
  • 21. Database Version Control No silver bullet to keep code and database schema in sync Strategies: • All db changes done via script • Scripts are numbered • Database knows what numbers it already has Tools: • homespun scripts • DbDeploy http://dbdeploy.com/ • Liquibase http://www.liquibase.org/ 17
  • 23. Development Platforms Requirements: • Safe area "sandpit" for developers to work • All software as-live • Isolated 19
  • 25. Task Tracking Once called ’bug tracking’. We can track what status everything is in. 21
  • 26. Task Tracking Once called ’bug tracking’. We can track what status everything is in. Developers understand bug trackers, bug trackers understand your workflow. 21
  • 27. Workflow Backlog Sprint Active Blocked Verify Complete 22
  • 28. Task Tracking Tools • Pivotal Tracker http://www.pivotaltracker.com/ • GreenHopper http://www.atlassian.com/software/greenhopper/ • Trac http://trac.edgewall.org/ 23
  • 30. How do you test a website ? 25
  • 31. How do you test a website repeatedly ? 26
  • 32. Automated Testing Gives repeatable results TDD Test-Driven Development BDD Behaviour-Driven Development 27
  • 33. Automated Testing Tools • Selenium: browser-based record and play of tests • Selenium IDE http://seleniumhq.org/projects/ide/ • Selenium RC http://seleniumhq.org/projects/remote-control/ • PHPUnit: unit testing and automation • http://phpunit.de • Also generates code coverage graphs 28
  • 34. My First Unit Test require_once '../src/models/MathUtilModel.php'; class MathUtilModelTest extends PHPUnit_Framework_TestCase { public function testAddNumbersWithNumbers() { $util = new MathUtilModel(); $result = $util->addNumbers(3,5); $this->assertEquals(8, $result); } } 29
  • 35. Running One Test To run our tests, from the tests directory do: phpunit models/MathUtilModel Output: PHPUnit 3.5.13 by Sebastian Bergmann. . Time: 0 seconds, Memory: 3.00Mb OK (1 test, 1 assertion) 30
  • 36. Testable Code • Testable code is clean and modular • Need to be able to separate elements to test • Each function does one thing • Not too many paths through the code • Dependencies are dangerous 31
  • 37. Dependency Injection Passing things in or looking them up. function getData() { $db = new MyDatabaseObject(); // sql and query } function getData($db) { // sql and query } 32
  • 38. Code Coverage What percentage of your code is tested? • Summary view • Drill in to see which lines are run by tests • Beware: 100% code coverage does not mean fully tested Use phpunit -coverage-html and specify where PHPUnit should write the report files Examples from http://jenkins.joind.in 33
  • 42. Static Analysis Evaluating code without running it Allows us to check for quality, commenting, coding standards 37
  • 43. Static Analysis Tools • PHP Code Sniffer: checks for coding standards • http://pear.php.net/PHP_CodeSniffer • PHP Mess Detector: detects ’bad smells’ • http://phpmd.org/ • PHP Lines of Code: project size, class count • https://github.com/sebastianbergmann/phploc 38
  • 44. phploc Sample Output (joind.in) Directories: 32 Files: 213 Lines of Code (LOC): 21339 Cyclomatic Complexity / Lines of Code: 0.10 Comment Lines of Code (CLOC): 4908 Non-Comment Lines of Code (NCLOC): 16431 Namespaces: 0 Interfaces: 0 Classes: 87 Abstract: 1 (1.15%) Concrete: 86 (98.85%) Average Class Length (NCLOC): 116 Methods: 532 Scope: Non-Static: 532 (100.00%) Static: 0 (0.00%) Visibility: Public: 501 (94.17%) Non-Public: 31 (5.83%) Average Method Length (NCLOC): 18 39
  • 45. API Documentation Another form of static analysis is to generate documentation • Commented documentation in each file, class, function • Automatically generate into readable documents • Tools: • PHPDocumentor http://www.phpdoc.org/ • DocBlox http://www.docblox-project.org/ 40
  • 47. PHPCS Examples Install: pear install PHP_CodeSniffer Run: phpcs --standard=PEAR example.php Examples taken from http://bit.ly/kedQrU 42
  • 48. PHPCS Examples Source code: class recipe { protected $_id; public $name; public $prep_time; function getIngredients() { $ingredients = Ingredients::fetchAllById($this->_id); return $ingredients; } } 43
  • 49. PHPCS Examples Sniffer output: FILE: /home/lorna/phpcs/recipe.class.php ---------------------------------------------------------------------- FOUND 8 ERROR(S) AND 0 WARNING(S) AFFECTING 5 LINE(S) ---------------------------------------------------------------------- 2 | ERROR | Missing file doc comment 3 | ERROR | Class name must begin with a capital letter 3 | ERROR | Missing class doc comment 6 | ERROR | Protected member variable "_id" must not be prefixed wit | | underscore 12 | ERROR | Missing function doc comment 12 | ERROR | Opening brace should be on a new line 13 | ERROR | Line indented incorrectly; expected at least 8 spaces, f 13 | ERROR | Spaces must be used to indent lines; tabs are not allowe ---------------------------------------------------------------------- 44
  • 51. Automated Deployment • How many times do you deploy an agile project? 46
  • 52. Automated Deployment • How many times do you deploy an agile project? • Fast • Hardened • Painless • Repeatable 46
  • 53. Automated Deployment Tools • Phing/Ant: easy automated build scripts • http://phing.info/ • http://ant.apache.org/ • Capistrano (or Webistrano): scripted releases (with web interface) • https://github.com/capistrano/capistrano 47
  • 54. Automating Deployment: Why • Minimise mistakes • Save time on each deploy • Better than documentation • Reliable process - use for different platforms • Scope for rollback 48
  • 55. Automating Deployment: What • Application code • minimal downtime or time in an inconsistent state • easy rollback • additional setup steps (upload files, etc) also automated • Database • apply database patches • include rollback patches • Config changes • useful for large or complex sites • config deploys separately, can update quickly and easily 49
  • 56. Code Deployment • Get a clean copy of code • Place in new directory on server • Perform any other preparation tasks • Change symlink in web directory to point to new version • Tools: shell script or ant/phing 50
  • 57. Config Deployment • Exactly like code deployment • Application needs to be designed with this in mind • Default to live config • Environment variables set in vhost 51
  • 58. Phing Example <?xml version="1.0" encoding="UTF-8"?> <project name="example" basedir="." default="deploy"> <property name="builddir" value="./build" /> <property name="appdir" value="./build/code" /> <tstamp><format property="date" pattern="%Y%m%d-%H%M" /></tsta <target name="deploy" depends="clean, prepare, export, putlive <target name="export"> <exec command="svn export ${repo} ${appdir}/${date}" /> </target> <target name="putlive"> <exec command="scp -r ${appdir}/${date} ${destination} > ${builddir}/logs/scp.log" /> </target> 52
  • 59. Phing Example Cont’d <target name="clean"> <delete dir="${builddir}" /> </target> <target name="prepare"> <mkdir dir="${builddir}" /> <mkdir dir="${builddir}/logs" /> </target> </project> Phing can also handle upload directories, database versioning, other deployment recipe steps and post deploy tasks 53
  • 61. Continuous Integration The glue that holds everything together! • Source control commit triggers: • Static analysis tools • Automated tests • Document generation • CI system centralises: • Deployment (to various platforms) • Other tasks, cron jobs • Centralised dashboard and reporting 55
  • 62. Continuous Integration Tools • Jenkins (née Hudson) • http://jenkins-ci.org/ • PHPUnderControl (PHP-specific CruiseControl project) • http://phpundercontrol.org/ 56
  • 63. Tool Up Your LAMP Stack
  • 64. The Main Ingredients for LAMP Preparation time: some years Ingredients: • Source control • Development platforms • Task tracking • Automated testing • Static analysis • Automated deployment • Continuous integration 58
  • 66. Thanks • Website: http://lornajane.net • Twitter: @lornajane 60
  • 67. Image Credits • LAMP http://www.flickr.com/photos/sewpixie/2059308961 • Sandpit http://www.flickr.com/photos/giltastic/3159081924 61