Suivi qualité avec sonar pour php

43
Suivi qualité avec Sonar pour PHP Gabriele Santini PHPTour Lille - 25/11/2011

description

Talk given at PHP Tour Lille 2011

Transcript of Suivi qualité avec sonar pour php

  • 1. Suivi qualitavec Sonar pour PHPGabriele SantiniPHPTour Lille - 25/11/2011

2. WhoAmI Gabriele Santini Consultant Architecte Logiciel Indpendant -> Zend Technologies Sonar pour PHP Passions professionnelles- Modlisation mtier - Bonnes pratiques- Suivi qualit 3. (Ex) PlanDuTalk Prendre un applicatif de mauvaise qualit Le placer sous surveillance Sonar Utiliser Sonar comme guide qualit Amliorer la qualit de lapplicatif Suivre les progrs avec Sonar 4. PlanDuTalk Prendre un applicatif de mauvaise qualit Le placer sous surveillance Sonar Montrer Sonar Prparer lapplicatif pour le refactoring Paramtrer Sonar pour le refactoring Dbut du refactoring Afficher les amlioration dans Sonar 5. (Ex) ButsDuTalk Introduire Sonar pour PHP Parler bonnes pratiques XP Montrer des techniques pour le legacy code 6. (Ex) ButsDuTalk Introduire Sonar pour PHP Parler bonnes pratiques XP Montrer des techniques pour le legacy code samuser avec lexemple de revamping 7. ButsDuTalk Introduire Sonar pour PHP Parler bonnes pratiques XP Montrer des techniques pour le legacy code samuser avec lexemple de revamping 8. Exemple Petit projet (3-6k LOC) Vieux code ( la PHP3/4 ) Recherche Sourceforge de projets sarretant ~2006 Intressant pour moi And the winner is 9. PHPRiSK ! 10. Dmo 11. OpeningTheBoxclass class_mysql{ // PSR0 ? function class_mysql() {global $CONFIG;$this->host = $CONFIG[mysql][host];$this->user = $CONFIG[mysql][user];$this->pass = $CONFIG[mysql][pass];$this->dbase = $CONFIG[mysql][dbase];return true;}function db_con(){$db = mysql_connect($this->host, $this->user, $this->pass)or die ("verbindung $this->user@$this->host fehlgeschlagen"); 12. DidYouSayDecoupled?#status 0: Offline# ...# status: 10 Running Gameclass class_risk{ function get_soapobject() { global $CONFIG; require_once SOAP/Client.php; // aucun rpertoire SOAP function soapUpdateNumOnline($numonline) { global $CONFIG; 13. DidYouSaySRP?Mthodes de class_risk : 7 mthodes contenant soap 21 mthodes contenant display ~15 mthodes daction 4 mthodes contenant By 57 mthodes au total 1648 LOC au total 14. DidYouSaySoC?function display_win() { $cdb = new class_mysql; $cdb->select("SELECT CurrentGame FROM risk_config"); $row = $cdb->fetchArray(); if ($row[CurrentGame] != "Complete") {header("Location: index.php"); } $cdb->select("SELECT username, color FROM risk_players WHERE status=10"); $row = $cdb->fetchArray(); $r = "Game Over




".$row[username]."wins!


"; return $r;} 15. DidYouSaySecure?function display_gameManager() {global $PHP_SELF, $CONFIG;[]Heureusement nous sommes en PHP 5 16. DidYouSayNormalizedDB?CREATE TABLE `risk_players` ( `num` smallint(5) unsigned NOT NULL auto_increment, `username` varchar(16) NOT NULL default , `password` varchar(32) NOT NULL default ,)INSERT INTO `risk_players` VALUES(1, Allies, 2e970e822e1a8834203d06abb60f59ec, , 1, , 0, 0, 0, NULL, NULL, 1, 1, 0, 0, 0, 0, 0, notmyturn.php, 0, 0); 17. BoxOpened 18. Moralit Qualit externe!= Qualit interne 19. EnterSonar Install ! 2 minutes cot Sonar (Ok, + tlchargement de Java) http://docs.codehaus.org/display/SONAR/Install+Sonar#InstallSonar-The2minutestutorial Localhost:9000 2 minutes cot PHP ( tester)> pear config-set auto_discover 1> pear install pear.phpqatools.org/phpqatools 30 secs Plugin Sonar pour PHP via lUI Sonar Update Center => Available Plugins 20. SonarDontImpliesMaven Depuis la 2.6, Java Runner Installation en 2 minuteshttp://docs.codehaus.org/display/SONAR/Analyse+with+a+simple+Java+Runner Fichier sonar-project.properties# required metadatasonar.projectKey=my:risksonar.projectName=PHP Risksonar.projectVersion=0.3# path to source directories (required)sources=source# path to test source directories (optional)tests=test# The value of the property must be the key of the languagesonar.language=php# PHP plugin specific parameterssonar.phpUnit.shouldRun=falsesonar.dynamicAnalysis=false 21. FirstSonarRun Lancer sonar-runner la racine du projet Le projet apparait dans linterface web 22. FirstVerdict 23. AutomaticDeployment 24. FunctionalCasting 25. FastFunctionalTestingAu dbut le calque remplacera les TUADans le cycle TDD!Doit tre RAPIDESelenium ne convient pasLes solutions spcifiques un framework non plus 26. BehatMinkBehat : Framework BDD (style Cucumber)Mink : Framework pour les tests de recette Abstraction du navigateur et du driver Drivers disponibles : Goutte (headless HTTP) Sahi, Selenium (navigateur) Zombie (headless javascript!) 27. GoutteScenario Feature: Register In order to play the risk game when I want As a site visitor I need to become a site user Scenario: Register as a new user Given I am on "register.php" When I fill in "username" with "blacksun" And I fill in "password" with "password" And I fill in "confirmpassword" with "password" And I fill in "email" with "[email protected]" And I press "Register" Then I should see "added" 28. ZombieScenario Feature: Register In order to play the risk game when I want As a site visitor I need to become a site user @mink:zombie Scenario: Register as a new user Given I am on "register.php" When I fill in "username" with "blacksun" And I fill in "password" with "password" And I fill in "confirmpassword" with "password" And I fill in "email" with "[email protected]" And I press "Register" Then I should see "added" 29. CodeCoveragePHP_CodeCoverage dans PHPUnitAucune solution prte lemploi en TFAIl est trs important pour diriger la couverture=> Je fais excuter Behat dans PHPUnit 30. PHPCodeCoverageASolutionPHPCC init or deserializeStart cc Tests loopStop ccPHPCC serializePHPCC deserialize, merge and report 31. PHPRiskInitialDemo 32. DynamicAnalysis Retour sur sonar-project.properties# required metadatasonar.projectKey=my:risksonar.projectName=PHP Risksonar.projectVersion=0.3# path to source directories (required)sources=source# path to test source directories (optional)tests=test# The value of the property must be the key of the languagesonar.language=php# PHP plugin specific parameterssonar.phpUnit.mainTestClass=test/functional/BehatTest.phpsonar.dynamicAnalysis=true 33. Adjusting Je fixe les EOL dans class_risk.php Je spare le composant xajax dans un rpertoire xajax/ Je mets les contrleurs de page et les assets dans www/ 34. SonarImprove 35. SonarDelta 36. Components&Treeview PHPRiskPHPRisk > [root] 37. SourcesDetail Coverage pour xajaxFunctionsDefinition.php 38. WhatNowDemoUn example : les Hotspots 39. SonarPHPStateVersion 0.6 : hier ! Introduction des profils par dfaut Prise en compte de toute proprit PHPCSVersion 0.7 : dcembre Prise en compte de toute rgle PHPCS et PHPMD Correction dun problme trs gnant sur le nommagedes fichiers Automatisation Import/Export des rgles 40. BarackObamaFeaturesVersion 1.0 et + Gestion des fichiers plats Synchronisation avec Eclipse (plugin Eclipse) Compatibilit avec dautres plugins Sonar Utilisation automatique avec un service ci-clould Nemo pour php 41. SonarPHPPointers Les documents dinstallation dj cits Documentation officielle du plugin http://docs.codehaus.org/display/SONAR/PHP+Plugin Billets de blog et articles (certains historiques ) Continuous Integration with Sonar S. Marek php|architect Avril 2011 http://www.phparch.com/magazine/2011-2/april/ http://www.blacksun.fr/2009/12/sonar-for-php-is-on-its-way/ http://akrambenaissi.wordpress.com/2011/02/23/le-plugin-sonar-php http://criticallog.thornet.net/2010/11/22/sonar-for-php-coming/ 42. PHPRiskState?Court terme Continuer le refactoring (en faire la prsentation) Publier Amliorer lusabilitMoyen terme? Plus de paramtres (rgles, cartes, ) Nouvelles mappes Plusieurs AI Les AI peuvent jouer distance via REST 43. Thank you