Archív

Archív pro ‘qa’ Kategorie

PHP CodeBrowser a Hudson

11.12.2009 Bez komentářů

Před časem se objevil nový reportovací nástroj, který vezme logy z PHPUnit, PHP_Codesniffer a umí je pěkně zobrazit.

Instalace je z PEAR (http://pear.phpunit.de/get/)

pear config-set preferred_state alpha
pear channel-discover pear.phpunit.de
pear install --alldeps phpunit/PHP_CodeBrowser

nebo z SVN

svn co svn://phpunit.de/phpunit/phpcb/trunk PHP_CodeBrowser

Integrace
Tento tool jde integrovat do CIE

Postup integrace do Hudsonu si ukážeme

  1. Potřebujete do Hudsonu doinstalovat plugin HTML Publisher Plugin
  2. Nastavíte build script by používal phpcb

    <target name="phpcb">
    <exec executable="phpcb" dir="${basedir}/source">
    <arg line="--log reports/logs/
    --source source/
    --output reports/phpcb/" />
    </exec>
    </target>
  3. Nastavíte HTML Publisher plugin, aby četl html, které vyrobí phpcbhudson_phpcb
    • HTML Directory to archive
      Cesta k reportům podle toho jak jste si to nastavili v build skriptu, u mne reports/phpcb/
    • Index page[s]
      Defaultně je index.html, ponechejte.
    • Report title
      Nastavte co chcete, dal jsem PHP CodeBrowser

Výsledek bude vypadat nějak takto:

hudson-phpcb-3

PHP_CodeBrowser sám o sobě nepřidává žádnou funkcionality, ale umožňuje získané výsledky pěkně a přehledně zobrazit. To se hodí a pokud jste příznivci použítí jednoduchého Hudsonu jako já, doufám že vám to bude k užitku.

PHP_CodeBrowser můžete samozřejmě použít i bez jakékoliv integrace, protože je to běžné HTML. Pokud používáte verzi z SVN jako já pozor na to, že verze pokud jí pouštíte symlinkem nefunguje úplně správně musíte být v adresáři kde máte PHP_CodeBrowser a je lepší zadat plné cesty k logům phpunit i zdrojovým kódům.

PHP Bytekit

Bytekit

Bytekit je nová extenze pro PHP, která umožňuje analyzovat PHP kód na úrovni opcodes, které generuje compiler v PHP. Také nám umožňuje pomocí disassembleru sledovat jak probíhá program na úrovni compileru. Je to další z nástrojů, které umožní zlepšit kvalitu kódu a určitě přinese řadu další analytických nástrojů. Autorem je Stefan Esser, kterého jistě každý zná. Jeho blog a příspěvky k bezpečnosti PHP jsou známy.

Bytekit-cli

Samotná extenze, ale není všechno. Abychom mohli ji dobře využít tak Sebastian Bergmann vytvořil bytekit-cli, které nám umožní ho využít.
V článku od SB jsou pěkné příklady, které doporučuji vyzkoušet. Bytekit zatím není dostupné přes PECL tak ho musíte zkompilovat ze zdrojového kódu, známým postupem (phpize, configure, make, make install) a zkompilovanou extenzi přidat do konfigurace PHP. Potom si z githubu můžete stáhnout aktuální verzi bitekit-cli a můžete si hrát.

Například otestuji jak je na tom s přímým výstupem Zend Framework.

abtris@ubuntu# bytekit --rule=DirectOutput ZendFramework/

 - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:1094

  - Direct output of variable $playlistEntries
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:906

  - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:270

  - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:276

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:796

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:797

  - Direct output of variable $photoId
    in ZendFramework/demos/Zend/Gdata/Photos.php:798

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:825

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:826

  - Direct output of variable $photoId
    in ZendFramework/demos/Zend/Gdata/Photos.php:827

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:741

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:742

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:688

  - Direct output of variable $type
    in ZendFramework/demos/Zend/WebServices/Amazon/amazon-search.php:153

  - Direct output of variable $type
    in ZendFramework/demos/Zend/WebServices/Amazon/amazon-search.php:157

  - Direct output of variable $keywords
    in ZendFramework/demos/Zend/WebServices/Flickr/flickr-composite.php:92

  - Direct output of variable $form
    in ZendFramework/demos/Zend/ProgressBar/ZendForm.php:209

  - Direct output of variable $ret
    in ZendFramework/demos/Zend/OpenId/test_server.php:264

  - Direct output of variable $id
    in ZendFramework/demos/Zend/OpenId/test_consumer.php:115

  - Direct output of variable $response
    in ZendFramework/library/Zend/Rest/Server.php:277

  - Direct output of variable $output
    in ZendFramework/library/Zend/Cache/Frontend/Class.php:226

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Page.php:280

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Output.php:101

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Output.php:65

  - Direct output of variable $output
    in ZendFramework/library/Zend/Cache/Frontend/Function.php:107

  - Direct output of variable $response
    in ZendFramework/library/Zend/Json/Server.php:198

  - Direct output of variable $data
    in ZendFramework/library/Zend/ProgressBar/Adapter/JsPull.php:111

  - Direct output of variable $output
    in ZendFramework/library/Zend/Debug.php:102

  - Direct output of variable $exceptions
    in ZendFramework/library/Zend/Controller/Response/Abstract.php:734

  - Direct output of variable $content
    in ZendFramework/library/Zend/Controller/Response/Abstract.php:546

  - Direct output of variable $output
    in ZendFramework/library/Zend/Tool/Framework/Client/Console.php:194

Používá Zend Framework někde EVAL?

abtris@ubuntu#bytekit --rule=DisallowedOpcodes:EVAL ZendFramework/
 - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:92

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:99

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:126

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:129

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:159

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:164

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:195

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:200

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:223

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:230

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:271

Závěr

Stefan Esser ve své přednášce o bezpečnosti Zend Frameworku se zmiňuje o možnosti například kontrolovat EVAL v pre-commitu tasku, obdobně jako například dnes kontroluji syntaxi php.

Koncem září se budu věnovat porovnání PHP Frameworků z hlediska nástrojů pro QA, které jsem dělal v článku pDepend a php frameworky, uvidíme jak jednotlivé frameworky za tu dobu pokročili a také si budu všímat frameworků pomocí dalších nástrojů mezi které bytekit jistě zahrnu.

Nesmím opomenout připomenout také, že je venku PHP 5.3, na které se čekalo poměrně dlouho a doufám jen, že nebude tolik plné chyb jako jeho přechůdci 5.2 a 5.1. Uvidíme zda na příchod PHP 5.3 jsou připraveny i jiné frameworky než Nette.

Categories: php, qa Tags:

pDepend a php frameworky dodatek

V příspěvku pDepend a php frameworky jsem uvedl porovnání několika frameworků pomocí PHP Depend. Do příspěvku už se nevešli Akelos, YII a Kohana. Kohana je fork CodeIgniteru, tak vás nepřekvapí podobné výsledky, jen posunuté trochu více do abtraktního pole v grafu. YII neprošel kvůli chybě:

Invalid token "{" on line 158 in file: /phpdepend/yii-read-only/framework/cli/views/shell/crud/controller.php

Ještě jsem zkoušel eZ components a to havarovalo na

Fatal error: Maximum function nesting level of '100' reached, aborting! in /usr/share/php/PHP/Depend/Metrics/NPathComplexity/Analyzer.php on line 330

Protože příspěvek měl docela dobrou čtenost chci se zeptat zda někomu tam nechyběl nějaký zajímavý php framework, který třeba neznám, rád ho zahrnu.

Pokud se zajímáte o problematiku QA tak bych vám chtěl doporučit článek a slidy Sebastian Bergmanna (Quality Assurance Tools for PHP, Quality Assurance in PHP Projects). Bergmann sice prosazuje CC a PhpUc a já jsem pro nasazení Hudson v Continues Integration, ale slidy jsou velmi zajímavé a určitě se k této problematice vrátím v nějakém dalším článku.

Kohana

http://kohanaphp.com/
kohana-jdepend
kohana-pyramid

Akelos

akelos-jdepend
akelos-pyramid

Categories: php, qa Tags:

pDepend a php frameworky

pDepend

http://www.pdepend.org

Php Depend (pDepend) patří do skupiny nástrojů QA (Quality assurance) pro kód a je odvozen od JDepend, kde je také popis části metrik, které pDepend používá. V nedávné době byla spuštěny nové stránky projektu a verzí 0.9.4 se mi zdá již velmi použitelný. Abych vyzkoušel jak to funguje vzal jsem si z SVN repozitářů několik frameworků a pustil nad nimi pDepend.

CodeIgniter

http://codeigniter.com

Nette

http://nettephp.com/

Zend Framework

http://framework.zend.com/

Symfony 1.2

http://www.symfony-project.org/

Solar

http://solarphp.com/


CakePHP

http://cakephp.org/

cake-jdepend
cake-pyramid

Prado

http://www.pradosoft.com/

prado3-jdepend
prado3-pyramid

Závěr

Nejsem expert na QA abych mohl fundovaně hovořit na základě těchto dat o kvalitě frameworků, jen mě zaujalo několik věcí. Z grafů je vidět nakolik je mezi frameworky používaná abtrakce a nakolik jsou si v konstrukci podobné Symfony a Zend a jak se liší Nette a CodeIgniter.
Z pyramid mě zaujali čísla kolem LOC (počet řádků kódu) v porodnání s počtem metod (NOM) a tříd (NOC). ANDC (průměrná hodnota odvozených tříd) nám řekne jak to framework s dědičností. AHH (průměrná výška hiarchie) je metrika která udá průměr hloubku v dědičnosti.
Podrobný popis pyramid vám odpoví na otázky co znamená, která značka a hlavně je tam tabulka referenčních hodnot jednotlivých metrik.

Bohužel jakákoliv metrika vám nikdy neřekne nic o tom, jak je který framework dobrý nebo zda vám bude vyhovovat.

Categories: php, qa Tags:

Switch to our mobile site