Як я можу оцінити тривалість строки коду?


11

Я намагаюся з'ясувати спосіб аналізу тривалості коду у проектах з відкритим кодом: тобто, наскільки довгий певний рядок коду активний та використовується.

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

  • Це відредаговано або видалено,
  • Виключено із складання,
  • Жоден код у його складанні не зберігається протягом певного періоду часу (скажімо, рік).

ПРИМІТКА. Оскільки пояснення щодо того, чому "редагування" зараховується як "смерть", відредаговані рядки вважатимуться "новим" поколінням або рядком коду. Крім того, якщо не існує простого способу зробити це, не було б обліку довголіття родоводу чи походження від предка.

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


2
"як довго певний рядок коду активний та використовується", чому ви вважаєте, що це хороший показник?
Пітер Б

Відповіді:


10

Енді Озмент дивився на OpenBSD в 2006 році з тим же запитанням: Молоко чи вино: Чи покращується безпека програмного забезпечення з віком?

Ви можете дізнатися його визначення. Це також дуже цікавий документ з цікавим висновком і той, який не був включений у систему управління програмним забезпеченням:

За період 7,5 років та п’ятнадцять випусків 62% із 140 уразливостей, про які повідомлялось у OpenBSD, були фундаментальними : вони були наявні в коді на початку дослідження.

Перше півріччя про ці основоположні уразливості було повідомлено більше двох з половиною років. Ми виявили, що 61% вихідного коду в остаточній вивченій версії є фундаментальним: він залишається незмінним від початкової версії, випущеної на 7,5 років раніше. Таким чином, швидкість повідомлення про основоположні вразливості в OpenBSD, ймовірно, продовжує сильно впливати на загальну швидкість звітування про вразливі місця.

Ми також знайшли статистично значущі докази того, що кількість звітів про фундаментальну вразливість зменшилась протягом періоду дослідження. Ми використали модель зростання надійності, щоб оцінити, що 67,6% уразливих версій у фундаментальній версії знайдено. Оцінка моделі щодо очікуваної кількості фундаментальних уразливостей, що повідомляються за день, зменшилася з 0,051 на початку дослідження до 0,024.


1
+1 @Bruce Ediger: Дивовижний, спасибі - зараз дивимось на це!
помилки

Ще раз дякую, тому єдиною інформацією, яку мені вдалося знайти, є "Ми дізнаємось, що 61% рядків коду в сьогоднішньому OpenBSD є основоположними: вони були введені до виходу початкової версії, яку ми вивчали, і не маємо з тих пір були змінені ". - які при цьому цікаві, не дуже пов’язані. Все інше, як видається, зосереджене на тому, як довго потрібно буде виправити вразливості, що знову ж таки цікаво, але нічого не говорить про фактори, які слід враховувати за тривалість життя коду. Щось мені не вистачає?
промахи

1

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

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

Це сказав, я думаю, що хороший шматок місцевих мешканців живе вічно.

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

Більше того, лише хороші програмісти прагнуть до очищення баз кодів та скорочення рядків. Усі інші схильні накопичувати місцеві локальні центри. І поки що останні виграють далеко. ;)


0

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

Поновлюючи редагування, я поставив би це запитання: чи це твердження призводить до іншого результату після зміни

Якщо відповідь "так", я б сказав, що попереднє твердження більше не доступне, інакше я все-таки вважатиму його продовженням попереднього твердження.

Приклад зміни результату:

if ( a && b )

до:

if ( a || b )

Приклад продовження тривалості життя:

foo.bar( baz );

до:

foo.prototype.bar.call( this, baz );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.