Тестуємо Joomla!

Тестування програмного забезпечення завжди було непростим завданням. І більшу частину цього завдання складає проста математика умовних операторів if/then. Простіше кажучи, кожен оператор if створює два можливі шляхи виконання програми. А значення можливих шляхів дорівнює 2, зведене в n-ступінь (2n), де n - це кількість операторів. УJoomla використовується близько 12,000 умовних операторів if. Це означає, що існує неймовірна кількість можливих комбінацій, які теоретично ми могли б протестувати в Joomla , але це зайняло б кілька тисяч років. І це не зважаючи на те, що Joomla використовується в різних середовищах (Linux, Windows, Apache, IIS, MySQL, SQL Server і т.д.). Цього достатньо, щоб сказати, що тестуванняJoomla - це велика робота.
Але не варто зневірятися. Не все так погано, як здається на перший погляд. Наприклад, використовуючи принципи об'єктно-орієнтованого програмування під час написання коду дляJoomla, ми зменшуємо взаємозалежність між різними частинами пакета. Відповідно ми можемо протестувати безліч частин програми незалежно від інших частин. Це значно зменшує кількість можливих тестів. Але навіть у цьому випадку, ми все ще набагато більше теоретичних тестів, ніж ми могли б протестувати.
Але якщо немає можливості протестувати кожен можливий шлях виконання та середовище виконання, як ми тестуємоJoomla і намагаємося зробити її вільною від багів наскільки це можливо? Відповідь така: ми використовуємо кілька різних стратегій тестування. Це надає не тільки механізм для постійного покращення, але й високий ступінь довіри тому, що релізи Joomla , які ми відправляємо в плавання, будуть працювати так, якзаплановано.
Автоматичне юніт-тестування
Юніт-тестування можна назвати самою науковою формою тестування. Тут ми пишемо тестові програми, які тестують специфічні рядки коду у пакеті. УJoomla юніт-тестування застосовується переважно для платформи, де кожна програма робить специфічну низькорівневу роботу. Автоматичні юніт-тести виконуються досить часто і негайно звітують, якщо зміни в програмі призводять до невиконання тесту. Коли це трапляється, зміни відкочуються назад і не застосовуються доти, доки не вирішиться проблема. Це значно зменшує шанс того, що зміна породить новий баг. Крім того, коли до платформи додаються нові програми, для них у той самий час необхідно додавати автоматичні тести.
За допомогою юніт-тестування ми фактично можемо виміряти точну кількість рядків коду, яка була протестована. Щодо написання тестів, то на даний момент автоматичні тести тестують близько 40% коду платформи. Кодери добровольці постійно працюють над написанням, і відсоток зростає. Юніт-тестування є важливою частиною стратегії тестуванняJoomla і чим більше коду ми можемо протестувати за його допомогою, тим менше у нас буде багів.
Якби ми могли досягти 100%, чи означало б це, що багів більше немає? Ви, швидше за все, вже здогадалися, відповідь - ні. Навіть якби ми могли протестувати весь код платформи, завжди є людський фактор помилки у тестах. І якщо програми платформи працюють саме тому, що сконструйовані, то іноді вони мають конструктивні недоліки, які є причиною багів. Плюс, програми платформи можуть бути некоректно використані десь уJoomla. Тим не менш, юніт-тестування значно зменшуєймовірність появи багів.
Автоматичне тестування системи
Системні тести - це програми, які слідують тестовому скрипту точно як інструкції. Замість друкуючої та клікаючої людини, системні тести посилають у браузер симулюючі натискання клавіш та кліки мишки у різних сценаріях використання. Потім ми можемо автоматично перевірити сторінку і переконатися, що результати відповідають тому, що ми очікували.
В даний час ми маємо 57 системних тестів, які відпрацьовують приблизно протягом 40 хвилин і перевіряють приблизно 3400 умов. Це еквівалентно кільком годинам перевірки людиною. Системні тести запускаються автоматично щоночі і відразу ж повідомляють нам, якщо внесені зміни породжують помилку. З того часу, як ми почали використовувати системні тести, вони довели свою спроможність у затриманні багів безпосередньо перед їх релізом.
У поточному використанні системні тестиJoomla не намагаються протестувати кожен сценарій використання або кожне розширення ядра. Вони більше схожі на “перевірку реальності”, коли необхідно впевнитись, що основні системні функції працюють як належить. Ми із задоволенням хотіли б мати більше системних тестів для тестування більшої функціональності ядра та з більшою детальністю. Це сфера, де ми могли б використовувати допомогу, і вам не треба бути супер досвідченим програмістом, щоб писати системні тести.
Тестування багів
Автоматичне юніт-тестування та системне тестування допомагають нам запобігти появі багів перед їх релізом та допомагають переконатися, що баги залишаються виправленими. Однак, як ми всі знаємо, найважливіший тест будь-якого програмного забезпечення відбувається під час його безпосереднього використаннякористувачами. Особливо це стосується такої програми як Joomla , яка використовується більш ніж на мільйонах сайтів, і часто таким чином, яким розробники програми і уявити собі не могли. Тому баги, про які повідомляють користувачі, відіграють дуже важливу роль у підтримці та покращенні якості Joomla.
Коли хтось повідомляє про баг, ми створюємо проблему (issue) у трекері проблем (Issue Tracker). Перед тим як додати запропоноване виправлення в основний код, як правило, дві людини (не ті, що виправляли баг) тестують запропоноване виправлення і дивляться, щоб воно працювало коректно і не було причиною інших багів. Точний метод тестування залежить від природи бага. У деяких випадках, коли проблема надто складна і може викликати появу інших проблем, нам може знадобитися більше часу на тестування перед внесенням виправлення.
Важливо розуміти, що процес працює лише тоді, коли спільнота знаходить час для повідомлення про баги. Повідомлення про баги є найбільш простою, але в той же час найважливішою річчю, які користувачіJoomla можуть зробити для проекту. Якщо не буде повідомлення про баг, то з великою ймовірністю він так і не буде виправлений.
Тестування релізу
Коли ми готові випустити нову версію Joomla , ми робимо спеціальне тестування релізу. Ми тестуємо доступність пакетів, що скачуються, і автоматичне оновлення. Також ми запускаємо системні тести, щоб переконатися, що при складанні пакетів все пройшло без помилок. Ці тести зазвичай проводять добровольці із Bug Squad.
Тестування розширень
В ідеальному світі оновлення Joomla ніколи не конфліктували б зі сторонніми розширеннями. Однак, як тільки ми вносимо зміни до ядра Joomla існуєможливість того, що ці зміни стануть причиною виникнення проблем із розширеннями. В ідеалі розробники розширень повинні періодично перевіряти, що їх розширення коректно виконуються на основі поточного коду. Таким чином, якщо зміна породжує проблему, про неї може бути повідомлено і вона може бути виправлена перед релізом. Якщо це неможливо, то можна протестувати розширення, використовуючи запропоновані реліз пакети, які створюються за кілька днів до кожного релізу.
Це та сфера, де ми активно працюємо над покращенням тестування. Було сформовано нову групу, яка займається тестуванням запропонованих релізів та сторонніх розширень.
Як ви можете допомогти?
Joomla - це проект, заснований на спільноті. Весь кодинг та тестування здійснюється добровольцями. Існує безліч варіантів того, як ви можете допомогти Joomla стати ще краще. Ось кілька із них:
Як ви вже зрозуміли, тестування це велике завдання, і ми використовуємо кілька різних стратегій тестування. Безліч добровольців, які допомагають у тестуванні уможливлюють підтримку та покращення якостіJoomla. Я закликаю вас приєднатися до їхніх зусиль.