Протягом останніх 10 місяців розробники edX наполегливо працювали, щоб збільшити охоплення автоматизованих тестів. Наші 2,491 одиничні тести Python наразі охоплюють 87% рядків у репозиторії платформи edx. Ці тести разом із нашими тестами прийняття Selenium і модульними тестами JavaScript виконуються для кожного запиту на отримання, що дозволяє нам швидко перевіряти запропоновані зміни коду.
Як ми збільшили охоплення тестами з менш ніж 50% до 87% лише за 10 місяців? Частиною відповіді є інструмент під назвою диф-обкладинка.
У типовому робочому процесі розробник, який працює у великому проекті, може зробити запит на отримання, який змінює кілька десятків рядків коду. До зміни охоплення тестом могло становити 72%; потім це все ще може бути 72%. Через розмір проекту важко побачити ефект від одного запиту. Diff-cover дозволяє зосередитися на показниках якості окремого запиту на отримання, а не на проекті в цілому.
Diff-cover вимірює рядки коду в git diff. Для запропонованої зміни коду буде показано, які зі змінених рядків не мають покриття. Це проста ідея, але вона має серйозні наслідки:
- Для розробників diff-cover забезпечує чітку та досяжну метрику: якщо ви торкаєтеся рядка коду, він повинен бути покритий.
- Для рецензентів коду diff-cover полегшує перевірку того, що розробники пишуть тести для всіх змін коду.
Зосереджуючись на охопленні різниць, розробники можуть зробити невеликі помітні кроки до покращення глобального охоплення. Окремий комміт може збільшитися в цілому покриття лише на частки відсотка, але все одно має 95% різниця покриття. Повільно, але впевнено, коли розробники писали тести для змін коду, глобальне охоплення також почало збільшуватися. У результаті ми змогли виявити певні види помилок швидше.
Що ще важливіше, інші розробники почали робити внесок у сам diff-cover і володіти інструментом. Наприклад, Cale узагальнив інструмент для підтримки додаткових перевірок «якості», а Sarina розширив його, щоб повідомляти про порушення pep8 і Pylint у diff. Багато інших розробників надали відгуки та пропозиції під час початкового бета-тестування diff-cover. Інструмент став відправною точкою для перегляду наших стандартів перевірки коду та тестування, що призвело до реальних змін у нашій культурі тестування.
Звичайно, вимірювання покриття все ще має деякі важливі обмеження. Зокрема, високе охоплення диф НЕ гарантія відсутності помилок у коді: у тісно пов’язаній системі зміна одного компонента може мати далекосяжні та непередбачені наслідки для інших частин системи — навіть якщо змінений код покривається на 100%. У таких випадках інтеграційні тести можуть виявити помилки, які модульні тести можуть пропустити.
Якщо ви вважаєте, що diff-cover може бути вам корисним, перегляньте проект — він із відкритим кодом і доступно на GitHub. Код розроблений таким чином, щоб його можна було розширювати до інших систем контролю версій і засобів перевірки якості, тож не соромтеся додавати функції та робити запити на отримання!
Вілл Дейлі — інженер-випробувач в edX. Коли він не виступає за тестову розробку чи оптимізацію кластера Дженкінса, йому подобається бігати вздовж річок і зводити до мінімуму кількість речей у своїй квартирі.
![]()