Про продуктивність та SLOC
Проблема з SLOC
Проблема метрики SLOC полягає в тому, що вона вимірює наближення кількості записаного коду, не враховуючи:
- якість коду (тобто що, якщо на кожні 100 SLOC вам доведеться додати ще 90 SLOC через помилки, але про те, що ви не знаєте на момент доставки вашого коду?)
- цілі, досягнуті за допомогою коду (тобто чи 10K SLOC обробляє всі очікувані випадки використання або історії користувачів? або лише крихітний підмножина?)
- ремонтопридатність коду (тобто вам доведеться додати на 1% або на 50% більше коду для пристосування коду до очікуваних змін, що розвиваються?).
В іншому випадку, виробництво схильного до помилок коду спагетті з великою кількістю копійованих деталей буде вважатися більш продуктивним, ніж ретельно сконструйований код багаторазового використання.
Тож SLOC, безумовно, не найкращий спосіб вимірювання продуктивності.
Яку продуктивність ми розглядаємо?
Продуктивність вимірюється для процесу. Отже, SLOC може бути ідеально вагомим показником лише для самого процесу кодування.
Якщо, наприклад, ви неправильно розумієте погані вимоги, витрачаєте п’ять місяців на виготовлення програмного забезпечення, показуєте його користувачеві, виявляєте, що це неправильно, і витрачаєте ще 5 місяців, щоб переписати його з нуля, ви б мали таку ж продуктивність у SLOC / місяць, що команда пише код прямо вперше, наприклад, тому, що вони використовували спритний процес, що зменшує непорозуміння через часті зворотні відгуки. Ця очевидна однакова продуктивність приховує величезні проблеми.
Отже, для вимірювання продуктивності розробки програмного забезпечення необхідно враховувати весь процес, включаючи аналіз вимог, проектування того, що кодувати, кодування, тестування, налагодження та перевірку того, що очікування користувачів виконані. Оскільки всі ці дії дуже різні, найкраще - це виміряти єдине, що має значення: робоче програмне забезпечення, тобто те, що програмне забезпечення виробляється для користувача .
Як виміряти результати програмного забезпечення?
Існує кілька підходів:
- Типовим підходом у класичній інженерії програмного забезпечення є Function Points (FP). Точки функціонування вимірюються виходячи з вимог, які необхідно виконати (наприклад, кількість форм, кількість полів у кожній формі тощо). Потім продуктивність вимірюється у ПП за одиницю часу та на людину. Деякі компанії навіть мають дані, які показують, скільки функціональних точок розробник може виробляти за одиницю часу на даній мові для певного домену. Проблема FP полягає в тому, що вона вимагає дуже детальних вимог наперед і це забирає багато часу.
- Більш сучасний і прагматичний підхід - це сюжетні моменти (СП). Вони використовуються для оцінки складності коду, який повинен бути вироблений, і зазвичай використовуються для оцінки швидкості роботи команд розвитку. Однак СП є оціночним показником роботи, виконаної до того, як будуть відомі всі деталі. Це не остаточний захід того, що насправді сталося. Тому потрібно бути обережним, використовуючи його як міру продуктивності, оскільки це може дати відсіч у процесі оцінки .
Про продуктивність статичного проти динамічного набору тексту
Я мушу зізнатися, що я особисто прихильник мов, що знаходяться на статичному рівні, тому що у своєму внутрішньому «я» я знаю, що це надійніше (роки кодування мені це довели).
Отже, я впевнений у тому, що мова, що набирається статичним способом, здатна запобігти набагато більше помилок / помилок під час компіляції (наприклад, помилки друку, невідповідність очікуваним типам тощо), ніж нестатичні мови. Але в усій об'єктивності я б не наважувався образливо узагальнювати це як більш високу продуктивність.
Чи правильно ваш архітектор?
Можливо, може й ні.
Але його аргументи не здаються достовірними: підвищення продуктивності статично набраної мови походить від значної кількості помилок, які випереджає компілятор.
Отже, неможливо з’ясувати цей «вищий» приріст продуктивності, дивлячись лише на SLOC, не дивлячись на переробку, необхідну для динамічно набраних мов. Тому його порівняння не може бути справедливим.
Аргумент порівнянних обставин також не відповідає. Деякі динамічно набрані мови дозволяють створювати конструкції вищого рівня, для яких потрібно менше коду, ніж те, що робити це в одній з класичних мов, що мають статичний тип. Таким чином, вам може знадобитися менше часу, написати менше коду, але додати той же аналіз, тестування та перевірку накладних витрат. Таким чином, вимірювання продуктивності за SLOC зменшило б потенційну приріст продуктивності, створивши таким чином упередження щодо динамічно набраної мови.
Будь-яке дослідження, яке підтверджує це твердження?
На цю тему існує декілька останніх наукових досліджень. Хоча деякі з них бачать перевагу статичного набору тексту, загалом це обмежується певною метою (документація, повторне використання погано задокументованого коду чи API тощо). Розсудливі формулювання також використовуються, оскільки сучасні IDE значно знизили ризики, пов'язані з динамічним набором тексту: