Кодтың бастапқы жолдары - Source lines of code

Кодтың бастапқы жолдары (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-тан айтарлықтай өзгеше болуы мүмкін.

SL кодын анықтаған кезде кездесетін түсініксіздіктің мысалы ретінде C кодының осы үзіндісін қарастырайық:

үшін (мен = 0; мен < 100; мен++) printf(«Сәлеметсіз бе»); / * Бұл кодтың қанша жолы? * /

Бұл мысалда бізде:

  • 1 физикалық код сызығы (LOC),
  • 2 логикалық код жолдары (LLOC) (үшін мәлімдеме және printf мәлімдеме),
  • 1 түсініктеме жолы.

Бағдарламалаушыға және кодтау стандарттарына байланысты жоғарыдағы «код сызығы» көптеген бөлек жолдарда жазылуы мүмкін:

/ * Енді бұл кодтың қанша жолы? * /үшін (мен = 0; мен < 100; мен++){    printf(«Сәлеметсіз бе»);}

Бұл мысалда бізде:

  • 4 физикалық код жолдары (LOC): жақшаларды орналастыру бағалауға бола ма?
  • 2 логикалық кодтық сызық (LLOC): барлық жұмыс туралы мәлімдеме емес жолдарды жазу туралы не айтуға болады?
  • 1 түсініктеме жолы: құралдар түсініктемелердің орналасуына қарамастан барлық кодтар мен ескертулерді ескеруі керек.

SLOC «логикалық» және «физикалық» мәндерінің өзінде әртүрлі анықтамалардың саны көп болуы мүмкін. Роберт Э. (кезінде Бағдарламалық жасақтама институты ) және басқалары адамдарға жобада қолданылатын SLOC шараларын мұқият түсіндіруге және анықтауға мүмкіндік беру үшін SLOC мәндерін анықтайтын негіз құрды. Мысалы, бағдарламалық жасақтама жүйелерінің көпшілігі кодты қайта пайдаланады және қайсысы қолданылатын кодты (бар болса) қосу керектігін анықтау шара туралы есеп беру кезінде маңызды болып табылады.

Шығу тегі

Сол уақытта адамдар SLOC-ны метрика ретінде қолдана бастады, мысалы, ең көп қолданылатын тілдер FORTRAN және құрастыру тілі, сызыққа бағытталған тілдер болды. Бұл тілдер сол кезде дамыған перфокарталар бағдарламалау үшін мәліметтерді енгізудің негізгі формасы болды. Бір перфокарта әдетте кодтың бір жолын бейнелейтін. Бұл оңай есептелетін бір дискретті объект болды. Бұл бағдарламашының көрінетін нәтижесі болды, сондықтан менеджерлерге код сызықтарын бағдарламашының өнімділігін өлшеу ретінде санау мағынасы болды, тіпті «карта кескіндері «. Бүгінгі күні компьютерлердің ең көп қолданылатын тілдері форматтауға көп мүмкіндік береді. Мәтін жолдары енді 80 немесе 96 бағанмен шектелмейді, ал мәтіннің бір жолы кодтың бір жолына сәйкес келмейді.

SLOC шараларын қолдану

SLOC шаралары біршама қарама-қайшылықты, әсіресе оларды кейде дұрыс қолданбау тәсілімен. Эксперименттер күш-жігердің SLOC-пен өте байланысты екенін бірнеше рет растады[дәйексөз қажет ], яғни SLOC мәндері үлкен бағдарламалардың дамуы көп уақытты алады. Осылайша, SLOC күш-жігерді бағалауда тиімді болуы мүмкін. Алайда, функционалдылық SLOC-пен онша байланыссыз: білікті әзірлеушілер бірдей функцияны әлдеқайда аз кодпен дамыта алады, сондықтан SLOC саны аз бір бағдарлама басқа ұқсас бағдарламаға қарағанда көп функционалдылықты көрсете алады. SLOC-ті өнімділік өлшемі ретінде санаудың ерекшеліктері бар, өйткені әзірлеуші ​​бірнеше сызықтарды ғана дамыта алады, бірақ функционалдылығы жағынан әлдеқайда өнімді болып, көп сызықтар жасайтын (және көбіне көп күш жұмсайтын) дамытушыға қарағанда әлдеқайда тиімді болады. Жақсы әзірлеушілер бірнеше кодтық модульдерді бір модульге біріктіре алады, бұл жүйені жетілдіреді, бірақ олар кодты алып тастайтындықтан, өнімділігі теріс болып көрінеді. Сонымен қатар, тәжірибесіз әзірлеушілер жиі жүгінеді кодтың қайталануы, бұл өте қауіпті, себебі ол қателіктерге бейім және оны ұстау қымбатқа түседі, бірақ бұл SLOC жоғарылауына әкеледі.

SLOC санау әр түрлі тілдерде жазылған бағдарламаларды салыстыру кезінде дәлдіктің басқа мәселелерін көрсетеді, егер тілдерді қалыпқа келтіру үшін түзету коэффициенттері қолданылмаса. Әр түрлі компьютерлік тілдер әр түрлі тәсілдермен баланстың қысқалығы мен айқындылығын; экстремалды мысал ретінде құрастыру тілдері бірнеше символдармен бірдей тапсырманы орындау үшін жүздеген кодтар жолын қажет етеді APL. Келесі мысалда а-ны салыстыру көрсетілген «сәлем әлем» бағдарламасы жазылған C, және сол бағдарламада жазылған COBOL - ерекше сөйлеу тілімен танымал.

CCOBOL
# қосу int негізгі() {    printf(" nСәлем Әлем n");}
      сәйкестендіру бөлімі. бағдарлама идентификаторы. Сәлеметсіз бе . рәсімді бөлу. «сәлем әлемі» гобакты көрсету. бағдарлама сәлем.
Код жолдары: 4
(бос кеңістікті қоспағанда)
Код жолдары: 6
(бос кеңістікті қоспағанда)

SLOC көрсеткіштерін салыстырудың тағы бір жиі кездесетін проблемасы - автоматты түрде жасалынатын және қолмен жазылған кодтардың арасындағы айырмашылық. Қазіргі заманғы бағдарламалық жасақтама құралдары тінтуірді бірнеше рет шерту арқылы өте көп кодты автоматты түрде жасау мүмкіндігіне ие. Мысалы, графикалық интерфейсті құрастырушылар а үшін барлық бастапқы кодтарды автоматты түрде жасайды графикалық басқару элементтері белгішені жұмыс кеңістігіне апару арқылы. Бұл кодты жасауға қатысты жұмысты, мысалы, құрылғы драйверін жазу үшін қажет жұмыспен салыстыруға болмайды. Сол негізде қолдан кодталған GUI класы қарапайым құрылғы драйверіне қарағанда оңай талап етілуі мүмкін; осы көрсеткіштің жетіспеушілігі.

SLOC-ті кіріс параметрі ретінде пайдаланатын шығындар, кесте және күш-жігерді бағалаудың бірнеше модельдері бар, соның ішінде кең қолданылатын конструктивті шығындар моделі (КОКОМО ) модельдер сериясы Барри Боэм т.б., PRICE жүйелері Шынайы S және Галораттың SEER-SEM. Бұл модельдер болжау күшін жақсы көрсеткенімен, олар берілген бағалаулармен (әсіресе SLOC бағалауымен) ғана жақсы. Көптеген[2] қолдануды жақтады функция нүктелері функционалдылық өлшемі ретінде SLOC орнына, бірақ функционалдық нүктелер SLOC-пен өте байланысты (және оларды автоматты түрде өлшеу мүмкін емес) болғандықтан, бұл жалпыға бірдей көзқарас емес.

Мысал

Винсент Мараианың айтуынша,[3] in түрлі операциялық жүйелер үшін SLOC мәндері Microsoft Келіңіздер Windows NT өнім желісі келесідей:

ЖылОперациялық жүйеSLOC (миллион)
1993Windows NT 3.14–5[3]
1994Windows NT 3.57–8[3]
1996Windows NT 4.011–12[3]
2000Windows 200029-дан көп[3]
2001Windows XP45[4][5]
2003Windows Server 200350[3]

Дэвид А. Уиллер зерттеді Қызыл қалпақ бөлу Linux операциялық жүйесі, және Red Hat Linux 7.1 нұсқасы туралы хабарлады[6] (2001 жылдың сәуірінде шығарылды) құрамында 30 миллионнан астам физикалық SLOC болды. Ол сондай-ақ, егер оны әдеттегі меншіктік құралдармен жасаған жағдайда, шамамен 8000 адам-жылдық даму күшін қажет етеді және $ 1 миллиардтан асады (2000 АҚШ долларында) деп экстраполяция жасады.

Осындай зерттеу кейінірек жасалған Debian GNU / Linux 2.2 нұсқасы («Картоп» деп те аталады); бұл операциялық жүйе 2000 жылы тамызда шығарылған. Зерттеу нәтижесінде Debian GNU / Linux 2.2-де 55 миллионнан астам SLOC бар екендігі анықталды, ал егер әдеттегі меншіктік тәсілмен жасалынса, 14 005 адам-жыл қажет болып, оны дамытуға 1,9 миллиард АҚШ доллары қажет болды. Кейінірек қолданылған құралдар, Debian-дің келесі шығарылымында 104 миллион SLOC болғанын және 2005 жылға сәйкес келетіндігін хабарлады, ең жаңа шығарылымға 213 миллионнан астам SLOC кіреді.

ЖылОперациялық жүйеSLOC (миллион)
2000Debian 2.255–59[7][8]
2002Debian 3.0104[8]
2005Debian 3.1215[8]
2007Debian 4.0283[8]
2009Debian 5.0324[8]
2012Debian 7.0419[9]
2009OpenSolaris9.7
FreeBSD8.8
2005Mac OS X 10.486[10][n 1]
1991Linux ядросы 0.010.010239
2001Linux ядросы 2.4.22.4[6]
2003Linux ядросы 2.6.05.2
2009Linux ядросы 2.6.2911.0
2009Linux ядросы 2.6.3212.6[11]
2010Linux ядросы 2.6.3513.5[12]
2012Linux ядросы 3.615.9[13]
2015-06-30Linux ядросы 4.2 дейінгі20.2[14]

Утилита

Артықшылықтары

  1. Есептеуді автоматтандыру аясы: код жолдары жеке тұлға болғандықтан, санау процесін автоматтандыру арқылы қолмен санау күшін жоюға болады. Бағдарламада LOC санау үшін шағын утилиталар жасалуы мүмкін. Алайда, белгілі бір тілге арнап жасалған логикалық кодты есептеу құралы тілдер арасындағы синтаксистік және құрылымдық айырмашылықтарға байланысты басқа тілдер үшін қолданыла алмайды. Алайда LOC физикалық санауыштары шығарылды, олар ондаған тілдерді есептейді.
  2. Интуитивті метрика: код сызығы бағдарламалық жасақтаманың өлшемін өлшеуге арналған интуитивті метрика ретінде қызмет етеді, өйткені оны көруге болады және оның әсерін елестетуге болады. Жұмыс нүктелері физикалық объект ретінде елестетуге болмайтын объективті метрика, ол тек логикалық кеңістікте болады дейді. Осылайша, LOC тәжірибесі төмен бағдарламашылар арасында бағдарламалық жасақтаманың көлемін көрсетуге ыңғайлы.
  3. Барлық жерде қолданылатын шара: LOC шаралары бағдарламалық жасақтаманың алғашқы күндерінен бастап қолданылып келеді.[15] Осылайша, LOC деректері кез-келген басқа өлшемге қарағанда көбірек қол жетімді екендігі даулы.

Кемшіліктері

  1. Есеп берудің жоқтығы: кодтық өлшем кейбір негізгі проблемалардан зардап шегеді. Кейбіреулер[ДДСҰ? ] Жобаның өнімділігін тек кодтау кезеңінің нәтижелерін қолдану арқылы өлшеу пайдалы емес деп ойлаймын, бұл жалпы күштің тек 30% -дан 35% -на дейін келеді.[дәйексөз қажет ]
  2. Функционалдылықпен үйлесімділіктің болмауы: тәжірибелер болса да[кім? ] күш LOC-пен өте тәуелді болғанымен, функционалдылық LOC-пен онша байланыссыз екенін бірнеше рет растады. Яғни, білікті әзірлеушілер бірдей функционалдылықты әлдеқайда аз кодпен дамыта алады, сондықтан LOC аз бір бағдарлама басқа ұқсас бағдарламаға қарағанда көп функционалдылықты көрсете алады. Атап айтқанда, LOC - бұл жеке адамдардың өнімділігінің нашар өлшемі, өйткені бірнеше сызықтарды ғана дамытатын әзірлеуші ​​көптеген код жолдарын жасаушыға қарағанда әлдеқайда өнімді болуы мүмкін - одан да көп: құтылу үшін «шығарып алу әдісі» сияқты жақсы қайта өңдеу артық код және оны таза ұстау көбінесе код жолдарын азайтады.
  3. Бағалауға жағымсыз әсер: №1 тармақта келтірілгендіктен, кодтық сызықтарға негізделген бағалау, мүмкін, қате жіберуі мүмкін.
  4. Әзірлеушінің тәжірибесі: нақты логиканың орындалуы әзірлеушінің тәжірибесі деңгейіне байланысты ерекшеленеді. Демек, код жолдарының саны әр адамға әр түрлі болады. Тәжірибелі әзірлеуші ​​белгілі бір функцияны басқа тілде қолданғанымен, салыстырмалы түрде аз тәжірибелі басқа жасаушыға қарағанда азырақ код жолында орындай алады.
  5. Тілдердегі айырмашылық: бірдей функционалдылықты қамтамасыз ететін екі қосымшаны қарастырыңыз (экрандар, есептер, мәліметтер базасы). Қосымшалардың бірі C ++ тілінде, ал екіншісі COBOL сияқты тілде жазылған. Функционалды нүктелердің саны дәл бірдей болады, бірақ қосымшаның аспектілері басқаша болар еді. Қосымшаны әзірлеуге қажет код жолдары, әрине, бірдей болмас еді. Нәтижесінде қосымшаны әзірлеуге жұмсалатын күштің мөлшері әр түрлі болады (әр функция нүктесіне сағаттар). Код жолдарынан айырмашылығы, функция нүктелерінің саны тұрақты болып қалады.
  6. Келу GUI құралдары: GUI-ге негізделген бағдарламалау тілдерінің пайда болуымен және сияқты құралдармен Visual Basic, бағдарламашылар салыстырмалы түрде аз код жаза алады және функционалдылықтың жоғары деңгейіне жетеді. Мысалы, GUI құралы бар пайдаланушы терезе құруға және батырма салуға арналған программа жазудың орнына компоненттерді жұмыс кеңістігіне орналастыру үшін апарып тастау және басқа амалдар қолдана алады. Автоматты түрде GUI құралымен жасалатын код LOC өлшеу әдістерін қолдану кезінде ескерілмейді. Бұл тілдер арасындағы өзгеріске әкеледі; бір тілде кодтың бір жолында (немесе кодтың мүлдем жоқ) орындалуы мүмкін бір тапсырма басқа тілде бірнеше кодтық жолдарды қажет етуі мүмкін.
  7. Бірнеше тілге қатысты мәселелер: бүгінгі бағдарламалық жасақтама сценарийінде бағдарламалық жасақтама көбінесе бірнеше тілде жасалады. Көбіне күрделілігі мен талаптарына байланысты бірқатар тілдер қолданылады. Өнімділік пен ақаулық деңгейлерін қадағалау және есеп беру бұл жағдайда күрделі мәселе туғызады, өйткені ақауларды жүйені біріктіргеннен кейін белгілі бір тілге жатқызуға болмайды. Функция нүктесі бұл жағдайда өлшемнің ең жақсы өлшемі болып табылады.
  8. Есептеу стандарттарының жетіспеушілігі: код сызығы деген стандартты анықтама жоқ. Пікірлер есептеле ме? Мәліметтер туралы декларациялар енгізілген бе? Егер тұжырым бірнеше жолға созылса, не болады? - Бұл сұрақтар жиі туындайды. SEI және IEEE сияқты ұйымдар санауды стандарттау мақсатында кейбір нұсқаулықтарды жариялағанымен, оларды іс жүзінде жыл сайын енгізілетін жаңа және жаңа тілдер жағдайында қолдану қиын.
  9. Психология: өнімділігі код жолдарымен өлшенетін бағдарламашы қажетсіз көп мағыналы код жазуға ынталандырады. Менеджмент код сызықтарына көбірек назар аударған сайын, бағдарламашы өз кодын қажетсіз күрделілікпен кеңейтуге ынталандырады. Бұл жағымсыз, өйткені күрделіліктің жоғарылауы техникалық қызмет көрсету құнының жоғарылауына және қателерді түзету үшін қажетті күш-жігерге әкелуі мүмкін.

Ішінде PBS деректі Нердтердің салтанаты, Microsoft атқарушы Стив Балмер санақ кодтарының қолданылуын сынға алды:

IBM-де бағдарламалық жасақтамада K-LOC-ті санау керек деген дін бар, ал K-LOC - кодтың мың жолдары. Бұл қаншалықты үлкен жоба? О, бұл 10K-LOC жобасы. Бұл 20K-LOCer. Және бұл 50K-LOCs. IBM компаниясы біздің қалай жалақы алатындығымызды дінге айналдырғысы келді. Біз қанша ақша таптық OS / 2, олар қанша жасады. Сіз қанша K-LOC жасадыңыз? Біз оларды сендіруге тырыстық - Эй, егер бізде болса - әзірлеуші ​​жақсы идеяға ие және ол 20K-LOC орнына 4K-LOC-да бірдеңе істей алады, аз ақша табуымыз керек пе? Ол кішірейіп, жылдамырақ, аз K-LOC жасап шығарды. K-LOCs, K-LOCs, бұл әдістеме. Уф! Қалай болғанда да, бұл әрдайым менің бәрімді ойлаған кезде артымды қысып жібереді.

Ұқсас шарттар

  • KLOC /ˈклɒк/ ҚАЙ- қарағым: 1000 жолдық код
    • KDLOC: 1000 жеткізілген код жолдары
    • KSLOC: кодтың 1000 бастапқы жолдары
  • MLOC: кодтың 1000000 жолдары
  • GLOC: 100000000 код жолдары

Сондай-ақ қараңыз

Ескертулер

  1. ^ Мүмкін тек iLife жиынтығын ғана емес, тек амалдық жүйені және әдетте қосымшаларды қосады.

Әдебиеттер тізімі

  1. ^ Ву Нгуен; София Дидс-Рубин; Томас Тан; Барри Боэм (2007), SLOC санау стандарты (PDF), Оңтүстік Калифорния университеті, жүйелер және бағдарламалық жасақтама орталығы
  2. ^ IFPUG «Функционалды нүктелерді пайдаланудың артықшылықтарын сандық бағалау»
  3. ^ а б c г. e f «Windows-та қанша жол бар?» (Ғалымдарды іздеу). Білу.NET. 6 желтоқсан 2005 ж. Алынған 2010-08-30.
    Бұл өз кезегінде Винсент Мараианың мысалын келтіреді Құрылыс шебері ақпарат көзі ретінде.
  4. ^ «Windows XP-де қанша жол бар?». Microsoft. 2011 жылғы 11 қаңтар.
  5. ^ «Windows тарихы». Microsoft.
  6. ^ а б Дэвид А. Уилер (2001-06-30). «Гигабуктан гөрі: GNU / Linux өлшемін бағалау».
  7. ^ Гонсалес-Барахона, Хесус М., Мигель А. Ортуно Перес, Педро де лас Херас Кирос, Хосе Сентено Гонсалес және Висенте Мателлан Оливера. «Картоп санау: Debian 2.2 өлшемі». debian.org. Архивтелген түпнұсқа 2008-05-03. Алынған 2003-08-12.CS1 maint: бірнеше есімдер: авторлар тізімі (сілтеме)
  8. ^ а б c г. e Роблес, Грегорио. «Дебиандық санау». Архивтелген түпнұсқа 2013-03-14. Алынған 2007-02-16.
  9. ^ Debian 7.0 2013 жылдың мамырында шығарылды. Бұл сан - 2012-02-13 ж.ж., Debian 7.0 болатын кодтық базаны қолданумен, Дэвид А. Уилер жариялаған мәліметтермен бірдей бағдарламалық жасақтама әдісін қолданып, жарияланған. Джеймс Бромбергер. «Debian Wheezy: 19 миллиард АҚШ доллары. Сіздің бағаңыз ... ТЕГІН!». Архивтелген түпнұсқа 2014-02-23. Алынған 2014-02-07.
  10. ^ Джобс, Стив (тамыз 2006). «Live from WWDC 2006: Стив Джобс Негізгі». Алынған 2007-02-16. 86 миллион жолдық бастапқы код, ол мүлдем жаңа архитектурада нөлдік хикуптармен жұмыс істеуге арналған.
  11. ^ «Linux 2.6.32-де қандай жаңалықтар бар». 2013-12-19 аралығында түпнұсқадан мұрағатталған. Алынған 2009-12-24.CS1 maint: BOT: түпнұсқа-url күйі белгісіз (сілтеме)
  12. ^ Грег Кроах-Хартман; Джонатан Корбет; Аманда Макферсон (сәуір 2012). «Linux ядроларын дамыту: қаншалықты жылдам, оны кім жасайды, олар не істеп жатыр және кім демеушілік етеді». Linux қоры. Алынған 2012-04-10.
  13. ^ «Жиынтық, болжам, статистика - H ашық: жаңалықтар мен ерекшеліктер». 2013-12-19 аралығында түпнұсқадан мұрағатталған. Алынған 2012-10-08.CS1 maint: BOT: түпнұсқа-url күйі белгісіз (сілтеме). 2014-05-13 аралығында алынды.
  14. ^ http://heise.de/-2730780
  15. ^ IFPUG «кодтар тізбегінің (тарихының) қысқаша тарихы»

Әрі қарай оқу

Сыртқы сілтемелер