Numărul de linii de cod

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 19 ianuarie 2020; verificările necesită 2 modificări .

Numărul de linii de cod ( ing.  Source Lines of Code - SLOC ) este o metrică software utilizată pentru a măsura volumul său prin numărarea numărului de linii din textul codului sursă . De regulă [1] [2] , acest indicator este utilizat pentru a prezice costurile forței de muncă pentru dezvoltarea unui program specific într-un limbaj de programare specific sau pentru a evalua productivitatea muncii după ce programul a fost scris.

Numărarea numărului de linii de cod

În mod tradițional, se consideră că are sens să se compare dimensiunile proiectelor doar până la un ordin de mărime . Dintre întreaga varietate de metode de calcul a acestei metrici, majoritatea surselor disting două principale: numărarea liniilor fizice și logice [3] .

Liniile fizice sunt toate liniile care nu sunt goale ale unui fișier text . Liniile goale sunt luate în considerare dacă în unele secțiuni numărul lor nu depășește 25%. În caz contrar, liniile goale care depășesc pragul de 25% sunt ignorate.

Măsurând liniile logice de cod, se încearcă numărarea numărului de instrucțiuni reale din program, dar, desigur, definiția lor depinde de limbajul de programare specific. De exemplu, cel mai simplu mod de a număra numărul de linii logice de cod în limbaje similare C și Pascal este să numărați numărul de puncte și virgulă care se termină cu instrucțiunile.

Liniile fizice de cod sunt mai intuitive și mai ușor de citit. Cu toate acestea, rezultatele calculului depind în esență de regulile de formatare și formatare a codului sursă, la care sunt supuse liniile logice de cod într-o măsură mult mai mică.

Luați în considerare următorul exemplu C:

pentru ( i = 0 ; i < 100 ; ++ i ) printf ( "bună ziua" ); // Câte linii de cod sunt?

În acest caz, avem:

  • 1 linie fizică de cod
  • 2 linii logice de cod ( pentru instrucțiunea buclă și instrucțiunea de apelare a funcției printf )
  • 1 rând de comentariu

Pentru un alt programator, aceeași bucată de cod poate fi scrisă în mai multe rânduri:

pentru ( i = 0 ; i < 100 ; ++ i ) { printf ( "bună ziua" ); } // Câte linii de cod sunt?

În acest exemplu, vom avea:

  • 5 linii fizice de cod
  • 2 linii logice de cod
  • 1 rând de comentariu

Istorie

Se crede că ideea de a folosi linii de cod ca măsurătoare pentru dimensiunea programelor de calculator datează din anii 1950 , când Fortran , Assembler și Cobol erau limbajele cele mai frecvent utilizate . Principalul mecanism de introducere a programelor într-un computer a fost cardurile perforate și banda perforată , iar o linie de cod a fost codificată pe o cartelă (un cadru de bandă perforată). Fiind un obiect al lumii fizice, ele (cartele perforate/cadrele de bandă perforată și, în consecință, liniile de cod) erau ușor de numărat. În plus, pachetul de carduri perforate care compunea programul avea un volum foarte vizibil, prin care managerii puteau judeca productivitatea programatorilor .

Folosind metrica

Rezultatele bazate pe numărul de linii de cod sunt adesea inconsecvente, mai ales atunci când sunt utilizate incorect. Prin urmare, utilizarea acestei metrici în procesul de evaluare a costurilor cu forța de muncă pare justificată. Cu toate acestea, corelația cu funcționalitatea nu mai este atât de clară. Programatorii experimentați tind să scrie mai puțin cod, obținând același rezultat. Și dacă diferența în clasa de dezvoltatori poate fi nivelată la evaluarea performanței unei echipe suficient de mari, atunci utilizarea acestei metrici pentru a evalua performanța unui individ pare inadecvată.

Mărimea aceluiași program scris în diferite limbaje de programare poate varia semnificativ (vezi KAELOC  - tehnica de conversie a șirurilor de echivalente a asamblatorului ). Exemplul de mai jos compară programul „Hello world” în C și Cobol (cunoscut pentru „verbositatea sa”)

C COBOL
#include <stdio.h> int main ( void ) { printf ( "Bună ziua, lume" ); returnează 0 ; } 000100 DIVIZIUNEA IDENTIFICARE. 000200 PROGRAM-ID. SALUT LUME. 000300 000400* 000500 DIVISIA MEDIU. 000600 SECȚIUNEA CONFIGURARE. 000700 SURSA-CALCULATOR. RM-COBOL. 000800 OBIECTUL-CALCULATOR. RM-COBOL. 000900 001000 DIVIZIUNEA DE DATE. 001100 SECȚIUNEA DOSAR. 001200 100000 DIVIZIUNEA PROCEDURA. 100100 100200 SECTIUNEA PRINCIPALA-LOGICA. 100300 ÎNCEPE. 100400 AFIȘARE " " LINIA 1 POZIȚIE 1 ȘTERGERE EOS. 100500 DISPLAY „Bună lume!” LINIA 15 POZIȚIA 10. 100600 STOP RUN. 100700 PRINCIPALA-LOGIC-EXIT. 100800 EXIT.
Linii de cod: 5
(excluzând cele goale)
Linii de cod: 17
(excluzând cele goale)

Relativ recent, a apărut un alt aspect al acestei probleme - diferența dintre codul programului scris manual și generat automat. Instrumentele moderne de dezvoltare oferă destul de des capacitatea de a genera automat cantități mari de cod cu doar câteva clicuri de mouse . Cel mai proeminent reprezentant al acestor sisteme sunt instrumentele pentru dezvoltarea vizuală a unei interfețe grafice cu utilizatorul . Cantitatea de muncă implicată în crearea unui astfel de cod nu este în niciun fel comparabilă cu cantitatea de muncă, de exemplu, scrierea unui driver de dispozitiv . Pe de altă parte, se poate dovedi că scrierea manuală a unei componente specializate a interfeței cu utilizatorul cu un comportament complex poate fi mult mai consumatoare de timp decât scrierea unui driver simplu.

Exemple

Dimensiunile codurilor sursă ale sistemelor de operare ale familiei Microsoft Windows NT nu sunt cunoscute cu exactitate, dar, conform sursei [4] , acestea sunt:

An Versiune Linii de cod, milioane
1993 Windows NT 3.1 4-5
1994 Windows NT 3.5 7-8
1996 Windows NT 4.0 11-12
2000 Windows 2000 >29
2001 Windows XP 45

Dimensiunile codurilor sursă ale nucleului Linux , împreună cu driverele de dispozitiv incluse acolo, pot fi calculate exact:

An Versiune Linii de cod
1991 Nucleul Linux 0.1 10 239
1994 Nucleul Linux 1.0.0 176 250
1995 Nucleul Linux 1.2.0 310 950
1996 Nucleul Linux 2.0.0 777 956
1999 Nucleul Linux 2.2.0 1 800 847
2001 Nucleul Linux 2.4.0 3 377 902
2003 Nucleul Linux 2.6.0 5 929 913
2009 Nucleul Linux 2.6.32 12 606 910 [5]
2012 Nucleul Linux 3.6 15 868 036 [6]
2017 Nucleul Linux 4.11.7 18 373 471 [7]

Dimensiunile altor sisteme:

An Versiune Linii de cod
PostgreSQL 775 000
1C 3.000.000
2008 1C-Bitrix 762 854

Vezi și

Note

  1. Prezentare generală a modelului COCOMO . Consultat la 8 iunie 2010. Arhivat din original pe 27 februarie 2010.
  2. Lines Of Code pe C2 wiki . Consultat la 8 iunie 2010. Arhivat din original pe 5 februarie 2010.
  3. Code Metrics și implementarea lor practică în Subversion și Clearcase. Partea 1 - Valori (link indisponibil) . Consultat la 19 februarie 2009. Arhivat din original pe 13 septembrie 2011. 
  4. Numărarea liniilor sursă de cod (SLOC) . Consultat la 21 februarie 2009. Arhivat din original pe 11 februarie 2009.
  5. Ce este nou în Linux 2.6.32 (downlink) . Data accesului: 23 mai 2011. Arhivat din original la 19 decembrie 2013. 
  6. Ce este nou în Linux 3.6
  7. Liniile de cod ale versiunilor Linux Kernel . Consultat la 29 iunie 2017. Arhivat din original la 17 aprilie 2017.