Проблема
Тестирование программного обеспечения всегда было непростой задачей. И большую часть этой задачи составляет простая математика условных операторов 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. Тем не менее, юнит-тестирование значительно уменьшает вероятность появления багов.
Автоматическое тестирование системы
Другой тип тестирования, который мы используем в Joomla - это автоматическое тестирование системы. Это очень легко понять. Представьте, что вы пишите детальную инструкцию по тестированию:
1. Зайдите в Менеджер материалов и нажмите Новый.
2. Добавьте новую статью с названием "Тест" и назначьте её категории Избранные (главная страница).
3. Зайдите на главную страницу и убедитесь, что статья появилась.
Системные тесты - это программы, которые следуют тестовому скрипту в точности как в инструкции. Вместо печатающего и кликающего человека, системные тесты посылают в браузер симулирующие нажатия клавиш и клики мышки в различных сценариях использования. Потом мы можем автоматически проверить страницу и удостовериться в том, что результаты соответствуют тому, что мы ожидали.
В настоящее время у нас есть 57 системных тестов, которые отрабатывают примерно в течении 40 минут и проверяют примерно 3400 условий. Это эквивалентно нескольким часам проверки человеком. Системные тесты запускаются автоматически каждую ночь и сразу же сообщают нам, если внесенные изменения порождают ошибку. С тех пор как мы начали использовать системные тесты, они доказали свою состоятельность в поимке багов непосредственно перед их релизом.
В текущем использовании системные тесты в Joomla не пытаются протестировать каждый сценарий использования или каждое расширение ядра. Они больше похожи на “проверку реальности”, когда необходимо удостовериться, что основные системные функции работают как положено. Мы с удовольствием хотели бы иметь больше системных тестов для тестирования большей функциональности ядра и с большей детальностью. Это сфера, где бы мы могли использовать помощь, и вам не надо быть супер опытным программистом, чтобы писать системные тесты.
Тестирование багов
Автоматическое юнит-тестирование и системное тестирование помогают нам предотвратить появление багов перед их релизом и помогают удостовериться, что баги остаются исправленными. Однако, как все мы знаем, самый важный тест любого программного обеспечения происходит во время его непосредственного использования пользователями. Особенно это касается такой программы как Joomla, которая используется более чем на миллионах сайтов, и часто таким образом, каким разработчики программы и представить себе не могли. Поэтому баги, о которых сообщают пользователи, играют очень важную роль в поддержке и улучшении качества Joomla.
Когда кто-то сообщает о баге, мы создаем проблему (issue) в трекере проблем (Issue Tracker). Перед тем как добавить предложенное исправление в основной код, как правило два человека (не те, что исправляли баг) тестируют предложенное исправление и смотрят, чтобы оно работало корректно и не было причиной других багов. Точный способ тестирования зависит от природы бага. В некоторых случаях, когда проблема слишком сложная и потенциально может вызвать появление других проблем, нам может понадобиться больше времени на тестирование перед внесением исправления.
Важно понимать, что процесс работает только тогда, когда сообщество находит время для сообщения о багах. Сообщение о багах является наиболее простой, но в тоже время наиболее важной вещью, которые пользователи Joomla могут сделать для проекта. Если не будет сообщения о баге, то с большой долей вероятности он так и не будет исправлен.
Еще один важный момент - Bug Squad (команда по тестированию багов) всегда ожидает помощи в тестировании. И вам необязательно быть программистом, чтобы состоять в Bug Squad. Если вы достаточно опытный пользователь Joomla, мы могли бы воспользоваться вашей помощью. Практически постоянно у нас есть десятки предложенных исправлений багов, которые ждут пока их кто-то протестируют. Если вы заинтересованы в том, чтобы помочь, то напишите на Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript..
Тестирование релиза
Когда мы готовы выпустить новую версию Joomla, мы делаем специальное тестирование релиза. Мы тестируем доступность скачиваемых пакетов и автоматическое обновление. Также мы запускаем системные тесты, чтобы убедиться в том, что при сборке пакетов все прошло без ошибок. Эти тесты обычно проводят добровольцы из Bug Squad.
Тестирование расширений
В идеальном мире обновления Joomla никогда бы не конфликтовали со сторонними расширениями. Однако, как только мы вносим изменения в ядро Joomla существует возможность того, что эти изменения станут причиной возникновения проблем с расширениями. В идеале разработчики расширений должны периодически проверять то, что их расширения корректно выполняются на основе текущего кода. Таким образом, если изменение порождает проблему, то о ней может быть сообщено и она может быть исправлена перед релизом. Если это невозможно, то можно протестировать расширение используя предложенные релиз пакеты, которые создаются за несколько дней до каждого релиза.
Это та сфера, где мы активно работаем над улучшением тестирования. Была сформирована новая группа, которая занимается тестированием предложенных релизов и сторонних расширений.
Как вы можете помочь?
Joomla - это проект, основанный на сообществе. Весь кодинг и тестирование осуществляется добровольцами. Существует множество вариантов того, как вы можете помочь Joomla стать ещё лучше. Вот несколько из них:
1. Если вы нашли баг, то сообщите о нем. Если не уверены, создайте тему с вопросом на форуме поддержки.
2. Если вы кодер и заинтересованы в автоматическом тестировании, станьте добровольцем и помогите с написанием юнит и системных тестов. Если вы не уверены или не знаете с чего начать, то спросите в группах Google или напишите на Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript..
3. Если вы хотите помочь в тестировании исправлений багов или релизов в Bug Squad, пошлите письмо Марку Декстеру. Запомните, вы не должны знать программирование, чтобы иметь возможность помогать в Bug Squad.
Как вы уже поняли, тестирование это большая задача и мы используем несколько разных стратегий тестирования. Множество добровольцев, которые помогают в тестировании делают возможным поддержку и улучшение качества Joomla. Я призываю вас присоединиться к их усилиям.
Полезные ссылки
Юнит-тестирование:
http://docs.joomla.org/Unit_Testing#Unit_Testing_in_Joomla
Системное тестирование:
http://docs.joomla.org/Writing_System_Tests_for_Joomla!_-_Part_1
Bug Squad:
http://docs.joomla.org/Bug_Squad