calidad de código en chamilo: behat, travis-ci y scrutinizer-ci

37
Behat, Travis & Scrutinizer Calidad en PHP con el proyecto Chamilo Yannick Warnier @ywarnier

Upload: yannick-warnier

Post on 22-Jan-2018

306 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Behat, Travis & Scrutinizer

Calidad en PHPcon el proyecto Chamilo

Yannick Warnier@ywarnier

Page 2: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Caso Chamilo

● Sistema de gestión del aprendizaje (LMS)

● Claroline→Dokeos→Chamilo / Moodle / Canvas

● Código abierto

● https://github.com/chamilo

● https://github.com/chamilo/chamilo-lms/

Page 3: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Herramientas

Dispositivos móviles

Page 4: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Gestión de competencias, insignias, evaluaciones de desempeño, ...

Page 5: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI
Page 6: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Para mejorar la calidad de Chamilo, necesitamos…

- pruebas- sistema de build automático- sistema de análisis de código

Page 7: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Behat

● Sistema de pruebas

● Behaviour Driven Development

● Formulación en lenguaje “común”

● Software libre

● https://github.com/Behat/Behat

● http://docs.behat.org/en/latest/

Page 8: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Travis-CI

● Portal de servicios de integración continua

● Travis/Jenkins←Hudson

● Código abierto (parcialmente)

● https://github.com/travis-ci

● https://docs.travis-ci.com/user/for-beginners

Page 9: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer-CI

● Portal de análisis de código

● Clover/phploc/phpmd/… → Scrutinizer

● Código abierto (parcialmente)

● https://github.com/scrutinizer-ci

● https://scrutinizer-ci.com/docs/

Page 10: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Behat vs PHPUnit

public function testLs(){    mkdir('/tmp/test');    touch('/tmp/test/foo');    $ls = @exec('ls /tmp/test');    $this assertContains($ls, 'foo');→}

Page 11: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Behat vs PHPUnit

Page 12: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Mink (compañero web)

Page 13: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Behat.yml

default:    extensions:        Behat\MinkExtension\Extension:            base_url: http://my.chamilo110.net            goutte: ~            selenium2: ~

    paths:        features: features        bootstrap: %behat.paths.features\                                   %/bootstrap

Page 14: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Estructura Behat

Page 15: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Archivo de prueba# features/login.feature

@common

Feature: User login

  In order to log in

  As any registered user

  I need to be able to enter my details in the form and get in

  Scenario: Login as admin user successfully

    Given I am a platform administrator

    Then I should not see an ".alert­danger" element

  Scenario: Login as student user successfully

Page 16: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

FeatureContext.php<?php

use Behat\Behat\Context\ClosuredContextInterface,

    Behat\Behat\Context\TranslatedContextInterface,

    Behat\Behat\Context\BehatContext,

    Behat\Behat\Context\Step,

    Behat\Behat\Context\Step\Given,

    Behat\Behat\Exception\PendingException,

    Behat\Behat\Event\SuiteEvent;

use Behat\Gherkin\Node\PyStringNode,

    Behat\Gherkin\Node\TableNode;

use Behat\MinkExtension\Context\MinkContext;

Page 17: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

FeatureContext.phpclass FeatureContext extends MinkContext

{

    public function __construct(array $parameters) { //… }

    /**

     * @Given /^I am a platform administrator$/

     */

    public function iAmAPlatformAdministrator()

    {

        return array(

            new Given('I am on "/index.php?logout=logout"'),

            new Given('I am on homepage'),

            new Given('I fill in "login" with "admin"'),

            new Given('I fill in "password" with "admin"'),

            new Given('I press "submitAuth"')

        );

    }

Page 18: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Resultados

Page 19: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Resultados

Page 20: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Travis-CI

● ¿Tienes tu proyecto en Github?

● Usa tu cuenta Github para abrir cuenta travis-ci.org

● Carga tus repos

● Define un .travis.yml en tu proyecto

Page 21: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

.travis.yml (1/3)language: php

php:

  ­ 5.5

  ­ 5.6

  ­ 7.0

before_install:

  ­ sudo apt­get update ­qq

  ­ sudo apt­get install ­qq mysql­server

  ­ sudo apt­get install ­qq apache2 libapache2­mod­fastcgi

  ­ sudo cp ~/.phpenv/versions/$(phpenv version­name)/etc/php­fpm.conf.default ~/.phpenv/versions/$(phpenv version­name)/etc/php­fpm.conf

  ­ sudo a2enmod rewrite actions fastcgi alias

  ­ echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version­name)/etc/php.ini

  ­ echo "memory_limit = 2G" >> ~/.phpenv/versions/$(phpenv version­name)/etc/php.ini

  ­ echo "phar.readonly = 0" >> ~/.phpenv/versions/$(phpenv version­name)/etc/php.ini

  ­ echo "date.timezone = Europe/Paris" >> ~/.phpenv/versions/$(phpenv version­name)/etc/php.ini

  ­ ...

Page 22: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

.travis.yml (2/3)

before_script:

  ­ composer update

  ­ phpenv config­add tests/travis­php­config.ini

  ­ php ­v

  ­ cd /home/travis/build/chamilo/chamilo­lms

  ­ ...comando de instalación…

Page 23: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

.travis.yml (3/3)script:

  ­ cd tests && ../vendor/behat/behat/bin/behat ­v

notifications:

  irc: "irc.freenode.org#chamilodev"

Page 24: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Travis-CI● PHP-CLI = 5.3 por defecto

● Doctrine depende de >=5.4!

– Para evitarlo, agregar, en “before_install”:– sudo cp ~/.phpenv/versions/$(phpenv version­name)/etc/php­fpm.conf.default 

~/.phpenv/versions/$(phpenv version­name)/etc/php­fpm.conf

Page 25: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Travis-CI: Resultados

Page 26: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Travis-CI: Resultados

Page 27: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer-CI

● ¿Tienes tu proyecto en Github?

● Usa tu cuenta Github en scrutinizer-ci.org

● Carga tus repos

● Define un .scrutinizer.yml en tu proyecto

Page 28: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

.scrutinizer.yml (1/2)build:

    environment:

        mysql: 5.5

        php:

            version: 5.6.0

            ini:

                'date.timezone': 'US/Pacific'

                'phar.readonly': false

        hosts:

            my.chamilo110.net: '127.0.0.1'

    dependencies:

        override:

            ­ true

        before:

            ­ php ­d memory_limit=2G /usr/bin/composer.phar ­v update

Page 29: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

.scrutinizer.yml (2/2)filter:

    excluded_paths:

        ­ tests/*

        ­ app/cache/*

        ­ app/logs/*

        ­ web/*

        ­ vendor/*

checks:

    php:

        code_rating: true

        duplication: true

Page 30: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer: método● “Mejores prácticas”

● ISO-25010?

– International Standard for Software Product Quality

● No siempre corresponde a PSR

● Score: solo cuenta la parte “Code”, y no “Issues”

● Chamilo

– 6.3M líneas totales

– 4.9M es código (78%)

Page 31: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer: resultados

Nota para la sección “Code”

Page 32: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer: resultados

Evolución de la calidad del código(tendencia en baja por inclusión de más código de baja calidad)

Cantidad de “Issues” en baja de 4200 a 2200 durante el mismo periodo (calidad y issues son dos indicadores distintos)

Page 33: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer: resultadosSe muestran los cambios de “issues” a cada commit (o PR) en Github

Page 34: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer: resultados

Basada en estándares de calidad, esta clasificación es laque establece el score global (inicia con los peores scripts)

Page 35: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer: resultadosLos “issues” se agrupan por categoría y gravedad.Un “bug” en este caso puede ser el envío de un parámetro enteroA una función que define (en PHPDoc) que tiene que ser de otro tipo

Page 36: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

Scrutinizer: resultados

Page 37: Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI

BeezNest

Miraflores - Lima - Perú[email protected]

@beeznestla