Що таке щільність дефектів? Формула для обчислення з прикладом

⚡ Розумний підсумок

Щільність дефектів вимірює кількість підтверджених дефектів у програмному модулі, поділену на розмір цього модуля, зазвичай виражається на тисячу рядків коду, і сигналізує про готовність збірки до випуску.

  • 🔘 формула: Щільність дефектів дорівнює підтвердженій кількості дефектів, поділеній на розмір випуску, найчастіше вимірюється в KLOC.
  • ☑️ Приклад роботи: Сорок дефектів на трьох тисячах рядків коду дають 0.0133 дефектів на LOC або 13.333 дефектів на KLOC.
  • Тест: Приблизно один дефект на тисячу рядків коду широко вважається ознакою хорошої якості проєкту.
  • 🧪 Вплив: Code складність, правила підрахунку дефектів, вікно вимірювання та навички роботи команди – все це впливає на число.
  • 📊 Порівняння: Витік дефектів, ефективність усунення дефектів та індекси серйозності не можуть відповісти на питання, на які сама лише щільність дефектів не може відповісти.
  • ⚠️ Увага: Низьке значення може означати слабке тестування, а не чистий код, тому метрика ніколи не існує окремо.

Щільність дефектів

Що таке щільність дефектів?

Щільність дефектів – це кількість дефектів, підтверджених у програмному забезпеченні або модулі протягом певного періоду експлуатації або розробки, поділена на розмір цього програмного забезпечення або модуля. Це дозволяє команді вирішити, чи готове програмне забезпечення до випуску.

Щільність дефектів вимірюється на тисячу рядків коду, також відома як KLOC. Оскільки кількість нормалізується за розміром, великий модуль з багатьма дефектами та малий модуль з невеликою кількістю дефектів можна порівнювати в одному масштабі, чого ніколи не дозволяє необроблений підрахунок помилок.

Зазвичай показник повідомляється в кінці тестового циклу та tracреліз над релізом, тому він розташований поруч з рештою процес управління дефектами , життєвий цикл тестування ПЗ.

Як розрахувати щільність дефектів

Формула для вимірювання щільності дефектів:

Defect Density = Defect count/size of the release

Розмір релізу можна виміряти з точки зору рядка коду (LOC).

Три деталі визначають, чи означає отримане число щось:

  • Одиниця розміру. LOC та KLOC є найпоширенішими одиницями вимірювання. Функціональні точки використовуються там, де командам потрібна міра розміру, яка не змінюється з мовою програмування, а деякі команди натомість нормалізують за модулем або компонентом.
  • Що вважається дефектом. У чисельнику враховуються лише підтверджені дефекти. Дублікати, відхилені звіти та запити на покращення необхідно виключити, інакше число зростає без будь-якої зміни якості коду.
  • Вікно вимірювання. Дефекти, виявлені під час тестування системи, під час регресійне тестування, а після випуску описують різні речі, тому крапку потрібно вказувати разом із числом.

Приклад щільності дефектів

Припустимо, що у ваш програмний продукт інтегровано 3 модулі. У кожному модулі виявлено таку кількість помилок:

  • Модуль 1 = 10 помилок
  • Модуль 2 = 20 помилок
  • Модуль 3 = 10 помилок

Всього помилок = 10+20+10 = 40

Загальний рядок коду для кожного модуля:

  • Модуль 1 = 1000 LOC
  • Модуль 2 = 1500 LOC
  • Модуль 3 = 500 LOC

Загальна лінія Code = 1000+1500+500 = 3000

Щільність дефектів розраховується як:

Defect Density = 40/3000 = 0.013333 defects/loc = 13.333 defects/Kloc

Той самий розрахунок, застосований для кожного модуля, є кориснішим, ніж сумарний показник, як показано на діаграмі нижче: Модуль 2 містить 20 дефектів у 1500 LOC, а Модуль 3 містить 10 дефектів лише у 500 LOC, тому Модуль 3 є щільнішим та ризикованішим з двох, хоча в ньому повідомляється про менше помилок.

Стовпчаста діаграма, що порівнює кількість дефектів та рядків коду трьох модулів, що використовуються в розрахунку щільності дефектів

Стандарт щільності дефектів

Немає фіксованого стандарту для щільності дефектів. Дослідження показують, що дефект на тисячу рядків коду зазвичай вважається ознакою гарної якості проекту, і ця цифра є найчастіше цитованим емпіричним правилом у галузі.

Очікування змінюються разом із сферою застосування. Для критично важливого для безпеки та регульованого програмного забезпечення, такого як авіоніка та медичні прилади, цільовий показник є значно нижчим за один дефект на KLOC, тоді як звичайні бізнес-додатки зазвичай перевищують цей показник. Оскільки правила підрахунку, одиниці вимірювання розміру та глибина тестування відрізняються залежно від організації, контрольний показник, взятий з опублікованого дослідження, можна порівняти лише з проектом, який вимірює його однаково. Тому практичне використання метрики є внутрішнім: порівняйте реліз з попереднім релізом того ж продукту, виміряним ідентично.

Фактори, що впливають на щільність дефектів

Одна й та сама кодова база може створювати дуже різні показники щільності дефектів залежно від таких факторів:

  • Code складність. Глибоко вкладена логіка та високий цикломатична складність створюють більше дефектів на рядок, ніж простий код.
  • Тип дефектів, що враховуються. Враховуючи лише функціональні дефекти, або включаючи зручність використання, документацію та нефункціональний висновки, суттєво змінює чисельник.
  • Врахований часовий проміжок. Показник, виміряний протягом двотижневого тестового циклу, не можна порівняти з показником, виміряним протягом шести місяців використання у виробничих умовах.
  • Навички розробника та тестувальника. Досвідчені розробники впроваджують менше дефектів, а досвідчені тестувальники знаходять більше існуючих, тому ці два ефекти впливають на метрику в протилежних напрямках.
  • Тестове покриття. Дефекти, які ніколи не шукалися, ніколи не враховуються, тому покриття тесту мовчки обмежує, наскільки високо може піднятися виміряна щільність.

Щільність дефектів порівняно з іншими показниками дефектів

Щільність дефектів відповідає на одне питання: наскільки концентровані відомі дефекти. Три супутні метрики дають відповіді на питання, на які вона не може відповісти, і більшість команд повідомляють про них разом.

Metric Що він вимірює Питання, на яке воно відповідає
Щільність дефектів Підтверджені дефекти, поділені за розміром (KLOC або функціональні бали) Які модулі мають найбільше дефектів для свого розміру?
Дефект Витік Дефекти, виявлені після випуску, як частка від усіх дефектів Скільки матеріалу вийшло з процесу тестування та дійшло до користувачів?
Ефективність усунення дефектів Дефекти, усунені до випуску, як частка від усіх дефектів Наскільки ефективним було тестування у своєчасному виявленні дефектів?
Індекс серйозності дефектів Дефекти, зважені за тяжкістю, а не враховані порівну Наскільки шкідливими є дефекти, а не просто скільки?

Разом ці чотири приклади дають повнішу картину: низька щільність дефектів з високою витоком дефектів вказує на поверхневе тестування, а не на чистий код, що є саме тим неправильним тлумаченням, про яке попереджає наступний розділ.

Переваги щільності дефектів

Нижче наведено переваги щільності дефектів:

  • Це допомагає виміряти ефективність тестування.
  • Це допомагає розрізняти концентрацію дефектів між компонентами та програмними модулями.
  • Це корисно для визначення областей, які потребують виправлення або покращення.
  • Це корисно для вказівки на компоненти високого ризику, що безпосередньо впливає на тестування на основі ризику.
  • Це допомагає визначити потреби різних ресурсів у навчанні.
  • Це може бути корисним для оцінки зусиль на тестування та переробку, спричинених дефектами.
  • Він може оцінити залишки дефектів у програмному забезпеченні.
  • Перед випуском це допомагає визначити, чи достатньо проведеного наразі тестування.
  • Це створює історичну базову лінію, з якою можна порівнювати пізніші релізи.

Обмеження щільності дефектів

Цей показник легко розрахувати та легко неправильно інтерпретувати. Наступні обмеження визначають, яку вагу він має при прийнятті рішення про випуск:

  • Невиявлені дефекти непомітні. Чисельник містить лише ті дефекти, які фактично виявили в результаті тестування, тому слабо протестований модуль показує задовільну цифру.
  • Серйозність ігнорується. Один дефект, який пошкоджує платіж, та одна косметична проблема вирівнювання враховуються однаково, тому разом з ними потрібен підхід з урахуванням серйозності.
  • Визначення дефектів різняться. Дві команди, які рахують по-різному, дають цифри, які неможливо порівняти навіть в межах однієї організації.
  • Рядки коду є слабким показником розміру. Багатослівний код знижує щільність, нічого не покращуючи, а одиницю вимірювання не можна порівнювати між мовами програмування.
  • Цю метрику можна підібрати. Відхилення пограничних звітів або завищення кількості рядків покращують показник, не покращуючи продукт.

Ніщо з цього не робить щільність дефектів марною. Це робить її показником тенденції для одного продукту, який вимірюється постійно, а не балом для порівняння команд одна з одною.

Як зменшити щільність дефектів

Зниження щільності дефектів насправді, а не на папері, означає запобігання дефектам раніше та виявлення решти до випуску продукту. Наведені нижче практики повторюються в опублікованих рекомендаціях:

  • Перенесіть тестування раніше. Залучення тестувальників на етапі вимог та проектування виявляє неоднозначність ще до того, як вона стане кодом, а саме там, де дефекти найдешевше усунути.
  • Revпереглянути код перед його об'єднанням. Експертна оцінка виявляє логічні помилки, неправильно прочитані вимоги та недоліки дизайну, яких немає одиничне випробування було написано для пошуку.
  • Автоматизуйте набір регресійних алгоритмів. Виконання перевірок кожного коміту через безперервна інтеграція запобігає поверненню старих дефектів під час написання нового коду.
  • Спочатку напишіть тести. Розробка на основі тестування змушує кожну поведінку бути визначеною до її реалізації, та тестування на мутації тоді можна підтвердити, що отримані тести дійсно щось стверджують.
  • Використовуйте статичний аналіз. Автоматизоване сканування коду виявляє розіменування null, витоки ресурсів та гарячі точки складності перед запуском одного тесту.
  • Рефакторинг щільних модулів. Після того, як метод щільності дефектів визначив найгірші компоненти, їх розділення та спрощення зазвичай зменшує як складність, так і кількість дефектів.
  • Поверніть дефекти назад у процес. Аналіз першопричин під час ретроспектив перетворює окремі дефекти на виправлення процесу, а не на одноразові латки.

Tracреліз KED над релізом поряд методи тестування програмного забезпечення та дані про покриття, щільність дефектів стає системою раннього попередження, а не звітною карткою.

Поширені запитання

Більшість команд розраховують його після завершення тестування системи, коли звіти про дефекти були проаналізовані та підтверджені. Вимірювання в середині циклу занижує показник, оскільки звіти все ще відкриті, а вимірювання лише після релізу перетворює його на показник витоку.

Ні. Враховуйте лише код, який написала команда і може змінити. Включення згенерованих файлів, бібліотек постачальників або тестового коду завищує знаменник і штучно знижує щільність, що приховує модулі, які дійсно потребують уваги.

Так. Команди зазвичай повідомляють про другу цифру, обмежену критичними та високосерйозними дефектами. Модуль із помірною загальною щільністю, але кількома критичними дефектами, становить більший ризик релізу, ніж той, що має багато косметичних проблем.

Так, з іншим знаменником. Спритні команди часто нормалізують дефекти для кожної користувацької історії, для кожної точки історії або для кожної наданої функції. Одиниця має менше значення, ніж послідовне використання однієї й тієї ж одиниці в усіх спринтах.

Моделі прогнозування дефектів вивчають історичні показники коду та процесу, такі як складність, відтік та кількість дефектів у минулому, щоб ранжувати файли з найбільшою ймовірністю дефектів. Потім тестувальники зосереджують зусилля на модулях з найвищим рівнем ризику, перш ніж проводити оцінку збірки.

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

Керівник тестування або менеджер з контролю якості зазвичай повідомляє про це, але правила підрахунку повинні бути спочатку узгоджені з розробником та керівником проекту. Без узгодженого визначення підтвердженого дефекту та коду, що підлягає підрахунку, ця кількість не є обґрунтованою на нараді щодо релізу.

Не обов'язково. Пік часто означає, що тестування нарешті досягло модуля, який раніше не використовувався, що є гарною новиною, виявленою пізно. Перш ніж розглядати це як провал якості, уважно прочитайте інформацію разом з висвітленням та тенденцією дефектів.

Підсумуйте цей пост за допомогою: