
Αντιλαμβάνομαι ότι δεν υπάρχει σίγουρα «σωστή» απάντηση στο ερώτημα αυτό, αλλά όταν οι άνθρωποι μιλούν για γραμμές κώδικα, τι σημαίνουν; Στη C ++, για παράδειγμα, δεν θα μετράνε κενές γραμμές; σχόλια? γραμμές με μόνο ένα ανοικτό ή κοντά στήριγμα;


Ξέρω ότι μερικοί άνθρωποι χρησιμοποιούν Γραμμής Ελέγχου ως μέτρο της παραγωγικότητας, και αναρωτιέμαι αν υπάρχει ένα πρότυπο συνεδριακό εδώ. Επίσης, νομίζω ότι υπάρχει ένας τρόπος για να πάρετε διάφορες μεταγλωττιστές για να μετρήσει τις γραμμές του κώδικα - είναι μια τυπική σύμβαση εκεί;

 
Τι είναι μια γραμμή κώδικα;
===========================



Όχι, δεν υπάρχει πρότυπο σύμβασης, καθώς και κάθε εργαλείο που μετράει τους θα είναι λίγο διαφορετική.


Αυτό μπορεί να σας κάνει να ρωτήσω, «Γιατί τότε θα μπορώ να χρησιμοποιήσω ποτέ LOC ως μέτρο παραγωγικότητας;» και η απάντηση είναι, επειδή δεν έχει τόση σημασία το πώς θα μετρήσετε μια γραμμή κώδικα, για όσο διάστημα μπορείτε να υπολογίζετε συνέπεια μπορείτε να πάρετε μια ιδέα για το γενικό μέγεθος του έργου σε σχέση με τους άλλους.

 

Ρίξτε μια ματιά στο [άρθρο της Wikipedia](http://en.wikipedia.org/wiki/Source_lines_of_code) , ειδικά το « [Μέτρηση SLOC](http://en.wikipedia.org/wiki/Source_lines_of_code#Measuring_SLOC) ενότητα»:



> 
> Υπάρχουν δύο κύριοι τύποι των μέτρων SLOC: φυσική SLOC και λογική SLOC. Ειδικοί ορισμοί των δύο αυτών μέτρων ποικίλλει, αλλά το πιο κοινό ορισμό της φυσικής SLOC είναι ο αριθμός των γραμμών στο κείμενο του πηγαίου κώδικα του προγράμματος συμπεριλαμβανομένων των γραμμών σχόλιο. Οι κενές γραμμές περιλαμβάνονται επίσης, εκτός εάν οι γραμμές κώδικα σε ένα τμήμα αποτελείται από κενές γραμμές περισσότερο από 25%. Σε αυτή την περίπτωση κενές γραμμές σε περίσσεια του 25% δεν προσμετρούνται προς γραμμές κώδικα.
> 
> 
> Λογική SLOC μέτρα προσπαθούν να μετρήσουν τον αριθμό των «δηλώσεις», αλλά οι ειδικοί ορισμοί τους δεμένα σε συγκεκριμένες γλώσσες υπολογιστή (ένα απλό λογικό μέτρο SLOC για το C-όπως γλώσσες προγραμματισμού είναι ο αριθμός των ερωτηματικά δήλωση τερματισμού). Είναι πολύ πιο εύκολο να δημιουργηθούν εργαλεία που μετρούν φυσικές SLOC, και η φυσική τους ορισμούς SLOC είναι πιο εύκολο να εξηγηθεί. Ωστόσο, τα φυσικά μέτρα SLOC είναι ευαίσθητα σε λογικά άσχετο μορφοποίηση και το στυλ των συμβάσεων, ενώ η λογική SLOC είναι λιγότερο ευαίσθητη στις μορφοποίηση και το στυλ συμβάσεις. Δυστυχώς, τα μέτρα SLOC συχνά αναφέρεται χωρίς να δώσει τον ορισμό τους, και λογικό SLOC μπορεί συχνά να είναι σημαντικά διαφορετική από τη φυσική SLOC.
> 
> 
> Εξετάστε αυτό το απόσπασμα κώδικα C ως παράδειγμα της ασάφειας που συναντώνται κατά τον καθορισμό SLOC:
> 
> 
> 
> ```
> for (i=0; i<100; ++i) printf("hello");   /* How many lines of code is this? */
> 
> ```
> 
> Σε αυτό το παράδειγμα έχουμε:
> 
> 
> * 1 Φυσική γραμμές κώδικα LOC
> * 2 Λογική Γραμμές του Κώδικα Lloc (για δήλωση και δήλωση printf)
> * 1 Σχόλιο Γραμμή
> 
> 
> [...]
> 
> 
> 

 

θα έλεγα


* σχόλια μετράνε
* κενές γραμμές μετράνε, επειδή είναι σημαντικό για την αναγνωσιμότητα, αλλά όχι περισσότερο από ένα συνεχόμενα
* γραμμές με τιράντες μετράνε πάρα πολύ, αλλά εφαρμόζουν τον ίδιο κανόνα και για κενές γραμμές - δηλαδή 5 ένθετα τιράντες χωρίς κωδικό μεταξύ τους μετρά ως μία γραμμή.


Είχα, επίσης, ταπεινά δείχνουν ότι κάθε μέτρο παραγωγικότητας, η οποία βασίζεται στην πραγματικότητα σε μια τιμή Γραμμής Ελέγχου είναι κουκέτα :)

 

Κάθε μέρα που μπορώ να τελειώσω με λιγότερες γραμμές κώδικα, αλλά την ίδια ή μεγαλύτερη εργατική λειτουργικότητα ... είναι μια καλή ημέρα. Να είσαι σε θέση να αφαιρέσει εκατοντάδες γραμμές κώδικα και να περατωθεί με κάτι που είναι εξίσου λειτουργικό και πιο διατηρήσιμη, είναι ένα θαυμάσιο πράγμα.


Τούτου λεχθέντος, αν δεν έχετε πολύ αυστηρές κατευθυντήριες οδηγίες κωδικοποίησης της ομάδας σας, σωματική γραμμές κώδικα είναι ένα άχρηστο στατιστικό στοιχείο. Λογική γραμμές κώδικα εξακολουθεί να είναι άχρηστη, αλλά τουλάχιστον δεν είναι επικίνδυνα παραπλανητική.

 

Εάν χρησιμοποιείτε LOC ως μέτρο της παραγωγικότητας, θα βρείτε ξαφνικά προγραμματιστές σας γράφοντας πολύ περισσότερο με λεπτομέρειες στο «παιχνίδι του συστήματος». Είναι ένα ηλίθιο μέτρο και μόνο ηλίθιοι άνθρωποι το χρησιμοποιούν για τίποτα περισσότερο από δικαιώματα κομπορρημοσύνη.

 

Ό, τι «wc -l» επιστρέφει είναι ο αριθμός μου.

 

1 γραμμή = 4 δευτερόλεπτα ανάγνωση. Εάν χρειάζεται περισσότερο από αυτό για να καταλάβω τι λέω σε αυτή τη γραμμή, η γραμμή είναι πολύ μεγάλη.

 

«Γραμμές κώδικα» θα πρέπει να περιλαμβάνει τα πάντα θα πρέπει να διατηρηθεί. Αυτό περιλαμβάνει σχόλια, αλλά αποκλείει κενό.


Εάν χρησιμοποιείτε αυτό ως μια μέτρηση της παραγωγικότητας, βεβαιωθείτε ότι έχετε κάνει λογικές συγκρίσεις. Μια γραμμή της C ++ δεν είναι το ίδιο με μια γραμμή του Ruby.

 

Η έννοια της LOC είναι μια προσπάθεια να ποσοτικοποιηθούν όγκο κώδικα. Όπως επισημαίνεται σε άλλες απαντήσεις, δεν έχει σημασία αυτό που εσείς ονομάζετε συγκεκριμένα μια γραμμή κώδικα, αρκεί να είναι συνεπείς. Διαισθητικά, φαίνεται ότι ένα πρόγραμμα 10 γραμμή μικρότερο από ένα πρόγραμμα 100 γραμμή, η οποία είναι μικρότερη από ένα πρόγραμμα 1000 γραμμών και ούτω καθεξής. Θα περίμενε κανείς ότι παίρνει λιγότερο χρόνο για να δημιουργήσει, deubg, και να διατηρήσει ένα πρόγραμμα 100 γραμμή από ένα πρόγραμμα 1000 γραμμών. Ανεπίσημα, τουλάχιστον, μπορείτε να χρησιμοποιήσετε LOC για να δώσει μια γενική ιδέα για το ποσό της εργασίας που απαιτείται για τη δημιουργία, τον εντοπισμό σφαλμάτων, και να διατηρήσει ένα πρόγραμμα ενός συγκεκριμένου μεγέθους.


Φυσικά, υπάρχουν μέρη όπου αυτό δεν κρατήσει ψηλά. Για παράδειγμα, ένα σύνθετο αλγόριθμο που παρασχέθηκαν σε 1000 γραμμές μπορεί να είναι πολύ πιο δύσκολο να αναπτύξουν ό, τι, ας πούμε, ένα απλό πρόγραμμα βάσης δεδομένων που καταναλώνει 2500 γραμμές.


Έτσι, LOC είναι χονδρόκοκκη μέτρο του όγκου κώδικα που επιτρέπει στους διαχειριστές να πάρετε μια λογική understading το μέγεθος του προβλήματος.

 

Θα πρέπει να σκέφτεται «γραμμές κώδικα *πέρασε* », δεν είναι «γραμμές κώδικα *που παράγεται* ».


Τα πράγματα πρέπει να είναι όσο το δυνατόν πιο απλό, δημιουργώντας έτσι ένα θετικό σημείο αναφοράς με βάση την ποσότητα των γραμμών είναι ενθαρρυντική κακό κώδικα.


Επιπλέον, κάποια πράγματα που είναι πολύ δύσκολο να καταλήξουν να επιλυθεί με πολύ λίγο κώδικα, και μερικά πράγματα που είναι πολύ εύκολο (κωδικός στερεότυπο όπως getters και setters για παράδειγμα) μπορεί να προσθέσει πολλές γραμμές σε πολύ λίγο χρόνο.


Όσον αφορά το αρχικό ερώτημα, αν επρόκειτο να μετρήσει τις γραμμές, θα ήθελα να περιλαμβάνει κάθε γραμμή, εκτός από διαδοχικές κενές γραμμές. Θα περιλαμβάνουν σχόλια, καθώς, δεδομένου ότι είναι (ελπίζουμε) χρήσιμο τεκμηρίωση.

 

Δεν υπάρχει σωστή απάντηση.


Για την άτυπη εκτιμήσεις, μπορώ να χρησιμοποιήσω wc -l.


Αν έπρεπε να μετρήσει κάτι αυστηρά, θα μετρήσει εκτελέσιμο δηλώσεις. Λίγο πολύ, τίποτα με έναν τερματισμού δήλωση (συνήθως ερωτηματικό), ή να τελειώνει με ένα μπλοκ. Για την ένωση δηλώσεις, θα ήθελα να μετράνε κάθε substatement.


Ετσι:



```
int i = 7;                  # one statement terminator; one (1) statement
if (r == 9)                # count the if as one (1) statement
  output("Yes");      # one statement terminator; one (1) statement; total (2) for the if
while (n <= 14) {    # count the while as one (1) statement
  output("n = ", n);  # one statement terminator; one (1) statement
  do_something();   # one statement terminator; one (1) statement
  n++                       # count this one, one statement (1), even though it doesn't need a statement terminator in some languages
}                              # brace doesn't count; total (4) for the while

```

Αν μου το έκαναν στο σχήμα ή Lisp, θα ήθελα να μετράνε εκφράσεις.


Όπως είπαν και άλλοι, αυτό που έχει μεγαλύτερη σημασία είναι ότι η μέτρηση σας είναι συνεπής. Έχει σημασία επίσης αυτό που χρησιμοποιείτε αυτό για. Αν απλά θέλετε να αφήσετε μια πιθανή νέα μίσθωση ξέρετε πόσο μεγάλο έργο σας, χρησιμοποιήστε wc -l. Αν θέλουν να κάνουν το σχεδιασμό και την εκτίμηση, τότε ίσως να θέλετε να πάρετε πιο επίσημη. Δεν θα πρέπει σε καμία περίπτωση να χρησιμοποιούν LOC αποζημίωση προγραμματιστής βάση για.

 

LOC είναι μια εμφανώς διφορούμενη μετρική. Για μια λεπτομερή σύγκριση, είναι έγκυρη μόνο κατά τη σύγκριση κώδικα που έχει γραφτεί στην ίδια γλώσσα, με το ίδιο στυλ, από την ίδια ομάδα.


Ωστόσο, το ότι παρέχει μια ορισμένη αντίληψη της πολυπλοκότητας, όταν κοίταξε με μια ιδέα σειρά-of-μεγέθους. Ένα πρόγραμμα 10000-line είναι πολύ πιο περίπλοκη από ό, τι ένα πρόγραμμα 100-line.


Το πλεονέκτημα της LOC είναι ότι wc -l επιστρέφει, και δεν υπάρχει πραγματική fancyness που εμπλέκονται στην κατανόηση ή τον υπολογισμό αυτό, σε αντίθεση με πολλές άλλες μετρήσεις λογισμικού.

 

Χρησιμοποιώντας LOC να μετρήσει μια παράσταση προγραμματιστές είναι σαν να κρίνουμε την ποιότητα ενός πίνακα από το μέγεθός του. μόνο «αξία» LOC του όσο αφορά εγώ είναι να εντυπωσιάσει τους πελάτες σας και να τρομάξει τον ανταγωνισμό σας.


Τούτου λεχθέντος, θα ήθελα να πιστεύω ότι ο αριθμός των συντάξει οδηγίες θα είναι το λιγότερο διφορούμενη. Παρόλα αυτά, η κακή προγραμματιστές έχουν το πλεονέκτημα ότι έχουν την τάση να γράφουν χωρίς λόγο λεπτομερή κώδικα. Θυμάμαι μια φορά που αντικαθιστά 800 + γραμμές πολύ άσχημα κώδικα με 28 γραμμές. Μήπως αυτό με κάνει ένας τεμπέλης; 


Κάθε διαχειριστής έργου που χρησιμοποιεί LOC ως κύρια μέτρηση των επιδόσεων είναι ηλίθιος που αξίζει κακό προγραμματιστές. 

 

**Στον κόσμο .NET** φαίνεται να είναι μια παγκόσμια συμφωνία που υπάρχει **μια γραμμή κώδικα (LOC) είναι ένα σημείο ακολουθία εντοπισμού σφαλμάτων** . Ένα σημείο αλληλουχία είναι μια μονάδα εντοπισμού σφαλμάτων, είναι το τμήμα κώδικα επισημαίνεται με σκούρο κόκκινο χρώμα όταν βάζοντας ένα σημείο καμπής. Με την ακολουθία μπορούμε να μιλάμε για **λογική Γραμμής Ελέγχου** , και αυτή η μέτρηση μπορεί να συγκριθεί σε διάφορες .NET γλώσσες. Η λογική μετρικό κωδικός Γραμμής Ελέγχου υποστηρίζεται από τα περισσότερα εργαλεία .NET συμπεριλαμβανομένου του κώδικα VisualStudio μετρικό, NDepend ή NCover.


Μία μέθοδος 8 Γραμμής Ελέγχου (αρχίζοντας και τελειώνοντας σημεία αλληλουχία αγκύλες δεν λαμβάνονται υπόψη):


![alt κείμενο](https://i.stack.imgur.com/56GAg.jpg)


Σε αντίθεση με τη φυσική Γραμμής Ελέγχου (που σημαίνει απλά μετρώντας τον αριθμό των γραμμών σε ένα αρχείο προέλευσης) η λογική γραμμής ελέγχου έχει το τεράστιο πλεονέκτημα να μην εξαρτάται από την κωδικοποίηση στυλ. Κωδικοποίηση στυλ, όλοι συμφωνούμε σε αυτό, μπορεί να κάνει τη φυσική καταμέτρηση Γραμμής Ελέγχου κυμαίνεται από μία τάξη μεγέθους από το ένα developer σε ένα άλλο. Έγραψα μια πιο λεπτομερή θέση blog σχετικά με το θέμα: [Πώς μπορείτε να μετρήσετε τον αριθμό των γραμμές κώδικα (LOC);](http://codebetter.com/blogs/patricksmacchia/archive/2007/10/03/how-do-you-count-your-number-of-lines-of-code-loc.aspx)

 


> 
> Ξέρω ότι μερικοί άνθρωποι χρησιμοποιούν Γραμμής Ελέγχου ως μέτρο παραγωγικότητας
> 
> 
> 


Θα μπορούσατε σας παρακαλώ να μου πείτε ποιοι είναι γι 'αυτό δεν λάθος να συνεργαστεί με (ή ακόμα χειρότερα, *για* ) τους;


Αν μπορώ να εφαρμόσουν το 1400 γραμμές χρησιμοποιώντας Haskell τι θα μπορούσα επίσης να εφαρμόσει το 2800 γραμμές χρησιμοποιώντας C, είμαι πιο παραγωγικός σε C ή Haskell; Η οποία πρόκειται να διαρκέσει περισσότερο χρόνο; Ποιο θα έχει περισσότερα σφάλματα (hint: είναι γραμμική στην καταμέτρηση LOC);


Αξίζει ενός προγραμματιστή είναι πόσο αλλάζει τον κωδικό του (συμπεριλαμβανομένων από και προς την κενή συμβολοσειρά) αυξάνει τον αριθμό στην κατώτατη γραμμή σας. Δεν γνωρίζω καμία καλός τρόπος για να μετρηθεί ή να προσεγγίζει αυτό. Αλλά ξέρω ότι κάθε λογικά μετρήσιμη η μέτρηση μπορεί να gamed και δεν αντανακλούν αυτό που πραγματικά θέλετε. Γι 'αυτό μην το χρησιμοποιούν.


Τούτου λεχθέντος, πώς θα μετράνε locs; Απλό, χρήση `wc -l`. Γιατί είναι ότι το κατάλληλο εργαλείο; Λοιπόν, ίσως δεν νοιάζονται για κάποιο συγκεκριμένο αριθμό, αλλά για γενική συνολική τάσεις (ανεβαίνει ή προς τα κάτω, και κατά πόσο), σχετικά με τις επιμέρους τάσεις (πηγαίνοντας πάνω ή κάτω, την αλλαγή κατεύθυνσης πόσο γρήγορα, ...) και περίπου σχεδόν τίποτα, εκτός από ακριβώς τον αριθμό 82763.


Οι διαφορές μεταξύ αυτού του μέτρου εργαλεία δεν είναι ίσως ενδιαφέρον. Αν δεν έχετε απόδειξη ότι ο αριθμός φτύσει από το εργαλείο σας (και *μόνο* ότι το εργαλείο) συσχετίζεται με κάτι ενδιαφέρον, να το χρησιμοποιήσετε ως ένα τραχύ σχήμα εξέδρα? οτιδήποτε άλλο εκτός από μονοτονίας θα πρέπει να λαμβάνονται όχι μόνο κόκκου, αλλά ένα κουβαδιά αλάτι.


Μετρήστε πόσες φορές `'\n'`συμβαίνει. Άλλοι ενδιαφέροντες χαρακτήρες για να μετρήσει μπορεί να είναι `';'`, `'{'`και `'/'`.

 

Χρησιμοποιώ `wc -l`για μια γρήγορη εκτίμηση της πολυπλοκότητας του χώρου εργασίας. Ωστόσο, ως παραγωγικότητα μετρική LOC είναι ***το χειρότερο*** . Εγώ γενικά ότι είναι μια πολύ παραγωγική ημέρα, αν μου αν μετράνε LOC πηγαίνει DOWN.

 

Συμφωνώ w / την αποδεκτή απάντηση από τον Craig H, ωστόσο θα ήθελα να προσθέσω ότι στο σχολείο διδάχθηκα ότι λευκό χώρο, τα σχόλια και οι δηλώσεις δεν πρέπει να υπολογίζονται ως «γραμμές κώδικα» όσον αφορά την μέτρηση των γραμμών του κώδικα που παράγεται από έναν προγραμματιστή για τους σκοπούς της παραγωγικότητας - δηλαδή κανόνα Ol»“15-γραμμών ανά ημέρα”. 

 

Συμφωνώ με τις θέσεις που λένε ότι αναφέρεται πολλούς τρόπους και δεν είναι μια σημαντική μέτρηση. Δείτε αυτό το [συνεχώς ακούμε-of-προγραμματιστές-πάρει-paid-ανά-line-of-κώδικα](https://stackoverflow.com/questions/299647/ever-hear-of-developers-getting-paid-per-line-of-code) .

 

Νομίζω ότι από το ως μια ενιαία επεξεργάσιμη δήλωση. Για παράδειγμα


(1 γραμμή) 



```
Dim obj as Object

```

(5 γραμμές)



```
If _amount > 0 Then
  _amount += 5
Else
  _amount -= 5
End If

```
 

1. **LOCphy:** σωματικά γραμμές
2. **LOCbl:** Blanklines Kommentarblocks werden als Kommentarzeile gezählt
3. **LOCPRO:** γραμμές προγραμματισμού (δηλώσεις, τους ορισμούς, τις οδηγίες και κώδικα)
4. **LOCcom:** γραμμές των σχολίων


Πολλά διαθέσιμα εργαλεία που παρέχουν πληροφορίες σχετικά με το ποσοστό των συμπληρώθηκε γραμμές και ούτω καθεξής.


Απλά πρέπει να το δει κανείς, αλλά όχι μόνο μετράνε σε αυτό.


LOC αυξάνεται μαζικά στην έναρξη ενός έργου και μειώνει συχνά μετά από σχόλια?)

 