В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Исходные строки кода ( SLOC ), также известные как строки кода ( LOC ), — это программная метрика , используемая для измерения размера компьютерной программы путем подсчета количества строк в тексте исходного кода программы . SLOC обычно используется для прогнозирования объема усилий, которые потребуются для разработки программы, а также для оценки производительности программирования или удобства обслуживания после создания программного обеспечения.
Многие полезные сравнения включают только порядок величины строк кода в проекте. Использование строк кода для сравнения проекта из 10 000 строк с проектом из 100 000 строк гораздо полезнее, чем сравнение проекта из 20 000 строк с проектом из 21 000 строк. Хотя вопрос о том, как именно измерять строки кода, является спорным, расхождения порядка величины могут быть четкими индикаторами сложности программного обеспечения или человеко-часов .
Существует два основных типа мер SLOC: физический SLOC (LOC) и логический SLOC (LLOC). Конкретные определения этих двух мер различаются, но наиболее распространенное определение физического SLOC — это количество строк в тексте исходного кода программы, исключая строки комментариев. [1]
Логический SLOC пытается измерить количество исполняемых «операторов», но их конкретные определения привязаны к конкретным компьютерным языкам (одна простая логическая мера SLOC для языков программирования типа C — это количество точек с запятой, завершающих оператор). Гораздо проще создать инструменты, которые измеряют физический SLOC, а физические определения SLOC легче объяснить. Однако физические меры SLOC более чувствительны к логически нерелевантным соглашениям по форматированию и стилю, чем логический SLOC. Однако меры SLOC часто указываются без указания их определения, и логический SLOC часто может существенно отличаться от физического SLOC.
Рассмотрим этот фрагмент кода на языке C как пример неоднозначности, возникающей при определении SLOC:
for ( i = 0 ; i < 100 ; i ++ ) printf ( "hello" ); /* Сколько здесь строк кода? */
В этом примере мы имеем:
В зависимости от программиста и стандартов кодирования, указанная выше «строка» кода может быть записана на многих отдельных строках:
/* Сколько же здесь строк кода? */ for ( i = 0 ; i < 100 ; i ++ ) { printf ( "hello" ); }
В этом примере мы имеем:
Даже «логические» и «физические» значения SLOC могут иметь большое количество различных определений. Роберт Э. Парк (во время работы в Институте программной инженерии ) и другие разработали структуру для определения значений SLOC, чтобы позволить людям тщательно объяснять и определять меру SLOC, используемую в проекте. Например, большинство программных систем повторно используют код, и определение того, какой (если таковой имеется) повторно используемый код следует включить, важно при сообщении меры.
В то время, когда SLOC был представлен как метрика, наиболее часто используемые языки, такие как FORTRAN и язык ассемблера , были строчно-ориентированными языками. Эти языки были разработаны в то время, когда перфокарты были основной формой ввода данных для программирования. Одна перфокарта обычно представляла одну строку кода. Это был один дискретный объект, который легко подсчитывался. Это был видимый вывод программиста, поэтому для менеджеров имело смысл подсчитывать строки кода как измерение производительности программиста, даже ссылаясь на такие « изображения карт ». Сегодня наиболее часто используемые компьютерные языки предоставляют гораздо больше свободы для форматирования. Текстовые строки больше не ограничены 80 или 96 столбцами, и одна строка текста больше не обязательно соответствует одной строке кода.
This article contains weasel words: vague phrasing that often accompanies biased or unverifiable information. (September 2013) |
Меры SLOC несколько спорны, особенно в том, как они иногда неправильно используются. Эксперименты неоднократно подтверждали, что усилия тесно связаны с SLOC [ требуется цитата ] , то есть программы с большими значениями SLOC требуют больше времени для разработки. Таким образом, SLOC может быть эффективным при оценке усилий. Однако функциональность менее тесно связана с SLOC: опытные разработчики могут разрабатывать ту же функциональность с гораздо меньшим количеством кода, поэтому одна программа с меньшим SLOC может демонстрировать большую функциональность, чем другая похожая программа. Подсчет SLOC в качестве меры производительности имеет свои оговорки, поскольку разработчик может разработать всего несколько строк и при этом быть гораздо более продуктивным с точки зрения функциональности, чем разработчик, который в итоге создает больше строк (и, как правило, тратит больше усилий). Хорошие разработчики могут объединять несколько модулей кода в один модуль, улучшая систему, но при этом кажущуюся отрицательной производительность, поскольку они удаляют код. Кроме того, неопытные разработчики часто прибегают к дублированию кода , что крайне нежелательно, поскольку оно более подвержено ошибкам и требует больших затрат на поддержку, но приводит к более высокому SLOC.
Подсчет SLOC демонстрирует дополнительные проблемы с точностью при сравнении программ, написанных на разных языках, если не применяются корректирующие факторы для нормализации языков. Различные компьютерные языки по-разному балансируют краткость и ясность; в качестве крайнего примера, большинству языков ассемблера потребовались бы сотни строк кода для выполнения той же задачи, что и несколько символов в APL . Следующий пример показывает сравнение программы "hello world", написанной на BASIC , C и COBOL (язык, известный своей особой многословностью).
БАЗОВЫЙ | С | КОБОЛ |
---|---|---|
ПЕЧАТЬ "привет, мир" | #include <stdio.h> int main () { printf ( "привет, мир \n " ); } | идентификация разделение . идентификатор-программы . привет . процедура разделение . отображение "привет, мир" вернуться . конец программы привет . |
Строки кода: 1 (без пробелов) | Строки кода: 4 (без учета пробелов) | Строки кода: 6 (без учета пробелов) |
Еще одной все более распространенной проблемой при сравнении метрик SLOC является разница между автоматически сгенерированным и написанным вручную кодом. Современные программные инструменты часто обладают способностью автоматически генерировать огромные объемы кода несколькими щелчками мыши. Например, графические конструкторы пользовательского интерфейса автоматически генерируют весь исходный код для графических элементов управления, просто перетаскивая значок на рабочее пространство. Работа, необходимая для создания этого кода, не может быть разумно сравнима с работой, необходимой для написания драйвера устройства, например. По той же причине, вручную закодированный пользовательский класс GUI может легко оказаться более требовательным, чем простой драйвер устройства; отсюда и недостаток этой метрики.
Существует несколько моделей оценки стоимости, графика и усилий, которые используют SLOC в качестве входного параметра, включая широко используемую серию моделей Constructive Cost Model ( COCOMO ) Барри Боэма и др., PRICE Systems True S и SEER-SEM Галората . Хотя эти модели показали хорошую предсказательную силу, они хороши лишь настолько, насколько хороши оценки (в частности, оценки SLOC), которые им подаются. Многие [2] выступали за использование функциональных точек вместо SLOC в качестве меры функциональности, но поскольку функциональные точки тесно связаны с SLOC (и не могут быть измерены автоматически), это не является общепринятым мнением.
По словам Винсента Марайи [3] , значения SLOC для различных операционных систем в линейке продуктов Windows NT компании Microsoft следующие:
Год | Операционная система | SLOC (млн.) |
---|---|---|
1993 | Windows NT 3.1 | 4–5 [3] |
1994 | Windows NT 3.5 | 7–8 [3] |
1996 | Windows NT 4.0 | 11–12 [3] |
2000 | Виндовс 2000 | более 29 [3] |
2001 | Windows XP | 45 [4] [5] |
2003 | Windows Server 2003 | 50 [3] |
Дэвид А. Уилер изучил дистрибутив операционной системы Linux Red Hat и сообщил, что версия Red Hat Linux 7.1 [6] (выпущенная в апреле 2001 г.) содержала более 30 миллионов физических SLOC. Он также предположил, что если бы она была разработана обычными фирменными средствами, то потребовалось бы около 8000 человеко-лет усилий по разработке и стоила бы более 1 миллиарда долларов (в долларах США 2000 года).
Аналогичное исследование было позже проведено для Debian GNU/Linux версии 2.2 (также известной как «Potato»); эта операционная система была первоначально выпущена в августе 2000 года. Это исследование показало, что Debian GNU/Linux 2.2 включала более 55 миллионов SLOC, и если бы она разрабатывалась обычным проприетарным способом, то потребовала бы 14 005 человеко-лет и стоила бы 1,9 миллиарда долларов США на разработку. Более поздние запуски используемых инструментов сообщают, что следующий выпуск Debian имел 104 миллиона SLOC, а по состоянию на 2005 год [update]новейший выпуск будет включать более 213 миллионов SLOC.
Год | Операционная система | SLOC (млн.) |
---|---|---|
2000 | Дебиан 2.2 | 55–59 [7] [8] |
2002 | Дебиан 3.0 | 104 [8] |
2005 | Дебиан 3.1 | 215 [8] |
2007 | Дебиан 4.0 | 283 [8] |
2009 | Дебиан 5.0 | 324 [8] |
2012 | Дебиан 7.0 | 419 [9] |
2009 | OpenSolaris | 9.7 |
FreeBSD | 8.8 | |
2005 | Mac OS X 10.4 | 86 [10] [н 1] |
1991 | Ядро Linux 0.01 | 0,010239 |
2001 | Ядро Linux 2.4.2 | 2.4 [6] |
2003 | Ядро Linux 2.6.0 | 5.2 |
2009 | Ядро Linux 2.6.29 | 11.0 |
2009 | Ядро Linux 2.6.32 | 12.6 [11] |
2010 | Ядро Linux 2.6.35 | 13,5 [12] |
2012 | Ядро Linux 3.6 | 15.9 [13] |
2015-06-30 | Ядро Linux до версии 4.2 | 20.2 [14] |
This section possibly contains original research. (April 2011) |
В документальном фильме PBS «Триумф ботаников » руководитель Microsoft Стив Балмер раскритиковал использование подсчета строк кода:
В IBM есть религия в программном обеспечении, которая гласит, что нужно считать K-LOC, а K-LOC — это тысяча строк кода. Насколько большой это проект? О, это своего рода проект на 10K-LOC. Это проект на 20K-LOC. А это на 50K-LOC. И IBM хотела сделать это своего рода религией того, как нам платят. Сколько денег мы заработали на OS/2 , сколько они сделали. Сколько K-LOC вы сделали? И мы продолжали пытаться убедить их — эй, если у нас есть — у разработчика есть хорошая идея, и он может что-то сделать за 4K-LOC вместо 20K-LOC, должны ли мы заработать меньше денег? Потому что он сделал что-то меньше и быстрее, меньше K-LOC. K-LOC, K-LOC, вот методология. Тьфу! В любом случае, это всегда заставляет мою спину просто сжиматься при мысли обо всем этом.
По данным Музея компьютерной истории, в 1982 году разработчик Apple Билл Аткинсон обнаружил проблемы с этой практикой:
Когда команда Lisa стремилась завершить свое программное обеспечение в 1982 году, менеджеры проектов начали требовать от программистов еженедельно отправлять формы, отчитывающиеся о количестве написанных ими строк кода. Билл Аткинсон посчитал это глупым. За неделю, в течение которой он переписал процедуры расчета областей QuickDraw, чтобы они стали в шесть раз быстрее и на 2000 строк короче, он поставил «-2000» в форме. Еще через несколько недель менеджеры перестали просить его заполнять форму, и он с радостью подчинился. [16] [17]
86 миллионов строк исходного кода, которые были перенесены для работы на совершенно новой архитектуре без каких-либо сбоев.