Показники вихідного коду для вимірювання стабільності коду?


17

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

Наприклад, можна побачити, що протягом перших шести місяців проекту середнє становило 200 рядків коду на день, тоді як протягом останнього місяця це було 50 рядків коду на день та протягом останнього тижня (безпосередньо перед DVD-кодом продукту були відправлені), рядки коду взагалі не були змінені (заморозка коду). Це лише приклад, і залежно від процесу розробки, прийнятого певною командою, можуть з'являтися різні закономірності.

У будь-якому випадку, чи є які-небудь кодові показники (будь-яка література про них?), Які використовують кількість модифікованих рядків коду за одиницю часу для вимірювання стійкості бази коду? Чи корисні вони, щоб мати відчуття, якщо проект десь іде або якщо він ще далеко не готовий до випуску? Чи є інструменти, які можуть витягувати цю інформацію з системи контролю версій та створювати статистику?



4
"По-друге, механізм є абстрактним, його виробництво задумане в його дизайн. У цьому відношенні програма схожа на вірш: не можна написати вірш, не написавши його. Проте люди говорять про програмування, як ніби це виробничий процес і міра". продуктивність програміста "з точки зору" кількості вироблених рядків коду ". При цьому вони записують це число на неправильній стороні книги: ми завжди повинні посилатися на" кількість рядків витраченого коду "." - Плоди нерозуміння , Edsger W. Dijkstra.
янніс

3
@ Янніс Різос: Я ні в якому разі не пропоную оцінювати продуктивність чи складність коду в LOC, тому що я знаю, що це не дуже вдалий показник. З іншого боку, якби за два дні до перевезення було змінено 300 рядків коду, я як менеджер мав би на увазі велику лампу "ЧЕРВЕНА АЛЕРТА" (якщо це не було заплановано і є результатом дуже ретельної оцінки ризиків ). Загалом, я б припустив, що код, який використовувався (і перевірявся), не змінюючись протягом тривалого часу, є "стабільнішим", ніж код, в якому щодня змінюються 100 рядків.
Джорджіо

2
@ Джорджіо Аргу, мене перервали (тут посеред робочого дня), коли я публікував ще один коментар (потрапив до межі чару в першому). Це не означало, що ви говорили про продуктивність, цитата "Дейкстра" просто прийшла до тями, і я подумав, що це буде цікаво. У будь-якому випадку, показники кодового скорочення наближаються до того, що ви шукаєте, і про них є багато літератури. Щодо інструментів, то FishEye Atlassian вражаючий.
янніс

@Yannis Rizos: Це дійсно дуже цікаве читання. Що стосується FishEye, ми використовуємо його на своєму робочому місці (для оглядів), тому я одразу загляну в посібник і побачу, яку статистику ми можемо надати.
Джорджіо

Відповіді:


17

Один з заходів, який описав Майкл Перо, - " Активний набір класів ".

Він вимірює кількість класів, доданих проти "закритих". Описується закриття класу як:

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

Він використовує ці заходи для створення таких діаграм: Діяльна схема занять

Чим менше число проміжків між двома лініями, тим краще.

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


4

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

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

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

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

Якщо ви використовуєте git або svn, а версія вашого ресурсу> = 0,39, це так само просто, як запуск gource в папці проекту.


gource також здається чудовим інструментом! (+1)
Джорджо

1
Я натрапив на цю відповідь, а потім провів наступні шість годин, граючи з Gource. Я не впевнений, чи заслуговує це +1 або -1, але чорт, це один класний інструмент.
RonU

@RonU: Ви можете використовувати gource для візуалізації стану сховища у спеціальному часовому діапазоні. Сенс її в тому, що з часом він візуалізує активність на вашій кодовій базі. Наскільки просто інтерпретувати інформацію залежить від багатьох факторів, як я пояснив у своїй відповіді вище. Так, це чудовий інструмент, якщо ви хочете "великої картини", тому я думаю, що це заслуговує +1;)
Карл

Так, коли я сказав "шість годин", я не мав на увазі, що я запустив один Gource sim для того часу ... просто, що я грав навколо себе з великою кількістю опцій, передавав його на ffmpeg, можливо, додав епічний саундтрек тощо. була досить кроляча нора. :)
RonU

Леме здогадка. Саундтреком став петель Harlem Shuffle;)
Карл

0

Використання частоти модифікованих ліній як індикатора стабільності коду є принаймні сумнівним.

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

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

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


"Це залежить від майстерності розробника та від якості дизайну.": Але вам потрібно хоча б трохи часу, щоб перевірити зміни, щоб ви мали достатньо впевненості, що ви не ввели жодних помилок. Навіть найдосвідченіші розробники можуть робити помилки введення тексту, наприклад, якщо вони перебувають під тиском, зробили занадто багато понаднормових або мало сну. Також, якщо ви застосовуєте принцип відкритого / закритого, через деякий час кількість змін (виправлення помилок) має зменшитися. У будь-якому випадку я чітко зазначив у своєму питанні, що результат такого вимірювання може змінюватися відповідно до процесу розробки.
Джорджіо

До речі, код може бути нестабільним не тому, що розробники погані, а тому, що вимоги не зрозумілі, і проект все ще знаходиться на етапі прототипування.
Джорджіо

@Giorgio: Звичайно, ти маєш рацію. Але саме це я написав: кількість модифікованих рядків сильно залежить від занадто багатьох факторів. Деякі з них стосуються стабільності коду, деякі - ні. Це як спробувати обчислити, скільки людей займаються сексом, вимірюючи електричну потужність, за припущенням - менше потужності - менше світла - більше сексу. Хоча доведено, що рівень народжуваності зростає після великих чорних аутів. ;)
johnfound

-1

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

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

Міцність вимірюється за допомогою тестів. Одиничні випробування, димові випробування, автоматизовані регресійні тести; тести, тести, тести!

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

Будь ласка, перегляньте належні тестові джгути та уникайте містичного коду.

Найкращі побажання.


3
Я чітко заявив, що не пропонував LoC як міру складності коду. Я пропонував зміни коду як міри стабільності коду: чи фрагмент коду має стабільні функціональні вимоги та стабільну перевірену реалізацію, яка відповідає цим вимогам?
Джорджіо

Я не хочу сперечатися з вами, але з повагою відводять вас від глупоти безглуздості кодової метрики. Я перечитав ваше запитання, і всі ваші приклади вказують на бажання зробити висновок про зміну між рядками коду, що змінюються, та отриманою надійністю цього. Я розумію, що чим більше введених слів, тим більше шансів навести помилку. Але я так проти принципу в тому, що ви просите, що я повинен рішуче висловитися на користь того, щоб ви відмовились від пошуків таким чином. Хороша практика тестування = хороша ймовірність надійності.
Sassafras_wot

"Гарні методи тестування = хороша ймовірність надійності".: Я повністю згоден. Ось чому я припускаю, що фрагмент коду, який був нещодавно змінений, потрібно перевірити ще раз, перш ніж ми зможемо бути впевнені, що він правильний.
Джорджіо

Існує кілька визначень стабільності, і одне з них - це те, про що ви сперечаєтесь. Це інша смислова інтерпретація до тієї, яку я зробив. Я вважав стабільним, що означає, що він "не піддається надзвичайним змінам", а не "стійкий до змін"
Дейв Хілліє
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.