Alle software bevat kleine fouten ("bugs"). Joomla ook. Om die fouten te verhelpen worden verbeteringen ("patches") gemaakt en uitgebracht. Voordat die verbeteringen in de Joomla broncode terecht komen, dienen ze getest te worden. Het in teamverband testen van bugs en patches kan erg leuk ("fun") zijn. Je hebt daarvoor geen programmeerkennis nodig!
Iedereen met een beetje Joomla ervaring kan helpen met het testen van bugs en patches!
In deze sessie verteld Peter Martin hoe hij enthousiast werd over Bugs, Patches & Fun, hoe het proces van software fouten in Joomla oplossen werkt. En hoe jij zonder programmeerkennis kunt helpen om de Joomla broncode te verbeteren.
2. Joomladagen 2014Joomladagen 2014
Peter Martin
● Joomla website specialist
Marketing + Communicatie
achtergrond & technische
affiniteit
● Vrijwilliger Joomla:
– Global Moderator
– Community Leadership
Team
● Open Coffee Nijmegen
● Linux User Group Nijmegen
Interesses:
● Open Source Software
● Linux sinds 2007
(Ubuntu → Debian → Arch
Linux → Debian)
● Raspberry Pi
● Muziek (Vinyl)
● Filmhuisfilms
Website: www.db8.nl – e-mail: peter at db8.nl
LinkedIn: http://www.linkedin.com/in/pe7er – Twitter: @pe7er
5. Joomladagen 2014Joomladagen 2014
Een software bug
● Fout in een computer
programma
– Onjuist of onverwacht
resultaat, of
onbedoelde gedrag
– Door programmeur
gemaakte fouten in de
bron code (source
code) van het
programma.
6. Joomladagen 2014Joomladagen 2014
Joomla bron code
index.php regel 1-30
<?php
/**
* @package Joomla.Site
*
* @copyright Copyright (C) 2005 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
if (version_compare(PHP_VERSION, '5.3.1', '<'))
{
die('Your host needs to use PHP 5.3.1 or higher to run this version of Joomla!');
}
/**
* Constant that is checked in included files to prevent direct access.
* define() is used in the installation folder rather than "const" to not error for PHP 5.2 and lower
*/
define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php'))
{
include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
}
7. Joomladagen 2014Joomladagen 2014
Bron code – kleine bug
index.php
require_once JPATH_BASE . '/includes/framework.php';
// Mark afterLoad in the profiler.
JDEBUG ? $_PROFILER>mark('afterLoad') : null;
// Instantiate the application.
$app = Jfactory::getApplication('site');
// Initialise the application.
$app>initialise();
ug
b
g bug
u bug
bugbug b g
bug bugbug bu
bug bugbugbugbugbugbug
bug bug bugbugbugbugbugbugbugbugb
bug bug bugbugbugbugbugbugbugbugbu
bugbugbugbu gbugbugbugbugbugbugbugbugbu
bugbugbugbug
bugbugbugbu gbugbugbugbugbugbugbugbugbu
bug bug bugbugbugbugbugbugbugbugbu
bug bug gbugbugbugbugbugbugbugbugb
bug bugbugbugbugbugbug
bug bugbug bu
bugbug b g
u bug
g bug
b
ug
9. Joomladagen 2014Joomladagen 2014
Bron code – hele grote bug
index.php
// Route the application.
$app>route();
// Mark afterRoute in the profiler.
JDEBUG ? $_PROFILER>mark('afterRoute') : null;
.. ..oooo.....ooo...
.odSS4PYYYSSOOXXXXXXXXXOodbgooo.
/SSYod$$$$SSOIIPXXXXXXXXXYYP.oo.*b.
($$Yd$$$$SSSOII:XXXXXXXX:IIoSSS$$b.Y,
Yd$$$$SSSOII:XXXXXXXXXX:IIOOSSS$$$b
d$$$$SSSOOI:XP"YXXXXXXXX:IIOOSSSS$$$
Y$$$SSSOOII:XbdXXXXXP"YX:IIOOOSS$$$$)
'Y$$$SSSOI:XXXXXXXXXbodX:IIOOSS$$$$$/
"Y$$$SSSOI(PoTXXXXXTo)XXIIOOOSS$$$*'
""*Y$S(((PXXXXXXXY))dIIOSSS$$dP'
"*'()P;XXXXXXXXY)IIOSSS$P".oS,
(S'(P;XXXXXXXP;Y)XXYOP".oSSSSb
(S'(P;'XXXXXXX';Y).ooooSSSSSSSS)
(S'(P;'XXXXXXP';Y).oSSSSSSSSSSSP
(SS'Y);YXXXXX';(Y.oSSSSSSSSSSSSP
YSS'Y)'YXXX".(Y.oSSP.SSSSSSSSY
YSS'"" XXX""oooSSP.SSSSSSSSY
SSSSSS YXXX:SSSSP.SSSSSSSSY
SSSSSP Yxb:SSSP.S"SSSSSSP
S(OO)S YXb:SY )SSSSS
SSSSO )YXb.I ISSSSP
YSSSY I."YXXb Y(SS)I
)SSS( dSSo.""*b YSSSY
OooSb dSSSSP )SSS(
dSSSY OooSS
OooSP
10. Joomladagen 2014Joomladagen 2014
Bron code – “zombie bug”
index.php
// Route the application.
$app>route();
// Mark afterRoute in the profiler.
JDEBUG ? $_PROFILER>mark('afterRoute') : null;
.....
C C /
/< /
___ __________/_#__=o
/( /(_________
) )_ o
/| /| |' |
| _|
/o __
/ ' |
/ / |
/_/______|
( _( <
|
________
________
11. Joomladagen 2014Joomladagen 2014
Bron code – “ninja bug”
index.php
// Route the application.
$app>route();
// Mark afterRoute in the profiler.
JDEBUG ? $_PROFILER>mark('afterRoute') : null;
12. Joomladagen 2014Joomladagen 2014
Een software patch
● Stukje software om
probleem op te lossen
– Verhelpen van
foutmelding
– Verhelpen van
beveiligingsprobleem
– Het verbeteren van de
gebruiksvriendelijkheid of
prestaties
● .diff patch
– Een bestandje dat de
verschillen met
voorgaande versie
beschrijft
13. Joomladagen 2014Joomladagen 2014
Foutmeldingen & patches beheren
● Bijhouden van de gemelde
fouten in de software:
– Rapporteren
– Communicatie
– Patches delen
– Status van fout
– Statistieken
● git
– Versiebeheer software
● github.com
– Opslagplaats &
versiebeheer
14. Joomladagen 2014Joomladagen 2014
Joomla & Patches
● Joomla 1.5 = EOL (einde
oefening)
– Geen patches
– Geen nieuwe functies
● Joomla 2.5 = LTS (Lange
termijn ondersteuning)
– Wel patches
– Geen nieuwe functies
● Joomla 3.x = STS (Korte
termijn ondersteuning)
– Wel patches
– Ook nieuwe functies
18. Joomladagen 2014Joomladagen 2014
Het probleem aanmelden
● Niet echt een bug, wel verwarrend...
● 7 februari 2013, om 10:29 uur (en 35 seconden)
bug aangemeld
op Joomla's Issue Tracker:
http://joomlacode.org/gf/project/joomla/tracker/?
action=TrackerItemEdit&tracker_item_id=30077
20. Joomladagen 2014Joomladagen 2014
Werken aan een oplossing
● Lokale Joomla installatie van laatste 3.0 versie
● In Joomla's broncode zelf de functionaliteit
toegevoegd
● 7 februari 2013, 11:38 uur
mijn code toegevoegd als proof-of-concept:
http://joomlacode.org/gf/project/joomla/tracker/?
action=TrackerItemEdit&tracker_item_id=30077
21. Joomladagen 2014Joomladagen 2014
Werken aan een oplossing
● Februari 2013: reacties van anderen,
paar opmerkingen en suggesties
● 27 Maart 2013:
“can not download sample.php. Please zip it.”
– → Joomlacode.org accepteert uit veiligheidsoogpunt
geen .php bestanden...
● April 2013:
paar opmerkingen & suggesties
● Mei 2013:
….. niks, nada, nothing, ничего, kitu, ,لش شيء ไม่มีอะไร
23. Joomladagen 2014Joomladagen 2014
Werken aan een oplossing
Zaterdag 1 juni 2013:
Joomla Bug Squad Night
bij JandBeyond (internationaal Joomla congres)
in Noordwijkerhout, Nederland
http://www.youtube.com/watch?v=v6YdZJtzJxo
25. Joomladagen 2014Joomladagen 2014
Werken aan een oplossing
Op Joomla Bug Squad Night:
– Meest recente Joomla versie (“master branch”)
geïnstalleerd vanaf GitHub
– Keuze opties bij installatie van Joomla getest
– Mijn proof-of-concept verandering geprogrammeerd
– Een “diff patch” gemaakt (dank aan Andrea Tarr!)
– De .diff patch toegevoegd aan Joomla Issue Tracker
– Biertje gedronken
Resultaat: Zaterdag 2 juni 2013, 00:30 uur
“I've created a patch 30077.patch ready to test.”
59. Joomladagen 2014Joomladagen 2014
BT Proces: 1. Open
● Nieuwe bug?
– Probleem te
reproduceren met Joomla
“Master Branch”?
– Rapporteren: “Add new
Tracker Item”
● Category
● Status: “Open”
● Build: “master”
● How to reproduce...
● Summary & Details
(PHP / Browser /
Database
/ Webserver)
Tracker Team
60. Joomladagen 2014Joomladagen 2014
BT Proces: 2. Confirmed
● Probleem bevestigd?
– Andere gebruikers
kunnen de fout
reproduceren met de
Joomla “Master
Branch”
→ patch ontwikkelen
Coding Team
61. Joomladagen 2014Joomladagen 2014
BT Proces: 3. Pending
● Patch voor bug beschikbaar
● Moet eerst op Joomla
“Master Branch” getest
worden:
– Test bug voor installatie
patch
– Patch installeren
– Test of probleem is
opgelost
– Test of er geen nieuwe
problemen zijn ontstaan
Testing Team
62. Joomladagen 2014Joomladagen 2014
BT Proces: 4. Ready to Commit
● Patch voor bug
– Twee succesvolle tests:
● Commentaar: @test
● Commentaar: @test
– Ready To Commit
(RTC) = gereed om
aan de Joomla core
code toegevoegd te
worden
Testing Team
63. Joomladagen 2014Joomladagen 2014
BT Proces: 5. Fixed in SVN/GitHub
● RTC → Commit Patch
= samengevoegd met
Joomla “Master
Branch”
– In volgende (sub)versie
beschikbaar in de
Joomla download van
joomla.org
PL Team +
65. Joomladagen 2014Joomladagen 2014
Testen – Benodigdheden
● Lokale webserver (voor Joomla)
– XAMP/MAMP/LAMP
● Git
– Distributed revision control and source code management
(soort van “Wikipedia” voor broncode)
● Joomla “Master Branch”
– Meest recente Joomla version met alle patches & nieuwe
features
– https://github.com/joomla/joomla-cms/
● Browser
– Chrome (incl Inspector) of FireFox + FireBug addon
● (Integrated Development Environment (IDE))
67. Joomladagen 2014Joomladagen 2014
Testen – Joomla installeren
● Browser
– Ga naar je lokale Joomla map http://localhost/joomla-
cms/
– Volg normale installatie procedure, maar kies:
● Sample Data: Test English (GB) Sample Data
= voorbeeld inhoud met daarin menu's met links naar alle
Joomla componenten en modules → makkelijker testen
– Verwijder bij de laatste stap de installatie folder NIET!!
74. Joomladagen 2014Joomladagen 2014
Testen – voorbeeld
Joomlacode: [#32194] Banner model has hardcoded SQL
Patch: https://github.com/joomla/joomla-cms/pull/2200.diff
75. Joomladagen 2014Joomladagen 2014
Testen – voorbeeld
[#32194] Banner model has hardcoded SQL
● Before:
● After:
$ curl https://github.com/joomla/joomlacms/pull/2200.diff | git apply
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 691 100 691 0 0 1448 0 :: :: :: 1930
76. Joomladagen 2014Joomladagen 2014
Testen – voorbeeld – git commando's
Command line:
● Controleer & vraag informatie over patch status op:
curl https://github.com/joomla/joomla-cms/pull/2200.diff | git apply --check
● Patch uitvoeren op jouw lokale Joomla installatie
curl https://github.com/joomla/joomla-cms/pull/2200.diff | git apply
● Patch verwijderen:
curl https://github.com/joomla/joomla-cms/pull/2200.diff | git apply -R
● Controleer of patch is verwijderd:
git status
# On branch master
nothing to commit (working directory clean)
77. Joomladagen 2014Joomladagen 2014
Testen – voorbeeld – git commando's
● “Hard reset” – verwijder alle veranderingen
git reset --hard HEAD
● Informatie over de veranderingen, commits etc
git log
git log --pretty=oneline
● Joomla “Master Branch” = heel dynamisch. Importeer
de meest recente veranderingen via:
git pull