Diff-cover: тестове покриття для комітів Git

23 грудня 2013 | за

Протягом останніх 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. Коли він не виступає за тестову розробку чи оптимізацію кластера Дженкінса, йому подобається бігати вздовж річок і зводити до мінімуму кількість речей у своїй квартирі.

Loading

Час для більшого? Перегляньте статті нижче.

Оголошення представників спільноти Open edX® TOC 2026 року
Розширення можливостей нації: Як Україна масштабувала національну онлайн-школу за допомогою платформи Open edX®
Виступ на конференції Open edX 2026 – Запрошуємо доповідачів!
Як NASA розширила освіту з відкритої науки до 20 000 дослідників за допомогою платформи Open edX
Приєднуйтесь до конференції Open edX 2026!

На конференції Open edX 2026 року будуть представлені інноваційні сценарії використання однієї з найкращих у світі систем керування онлайн-навчанням з відкритим кодом, платформи Open edX, а також відкриються останні досягнення в дизайні навчання, групі курсів і методах роботи та розширення платформи Open edX. , включаючи проривні технології, такі як генеративний ШІ.