Kontrolni seznam za dobro programiranje

Ta kontrolni seznam vam bo pomagal napisati visoko kakovostne programe.
Raphael Finkel, 17. 8. 2005

  • Identifikatorji: poskrbite, da so vsi vaši identifikatorji smiselni.
    1. Identifikatorji z enim črkami skoraj nikoli niso pomembni.
    2. Imena, kot sta zastava in temp, so redko pomembna. Namesto zastave razmislite o poimenovanju Boolovega stanja, ki ga preveri, na primer valueFound.
    3. Razmislite o več besednih identifikatorjih, na primer nameIndex. Dolgi identifikatorji (znotraj razloga) so ponavadi zelo berljivi.

 

  • Neomejeni literali: Izogibajte se številkam razen 0 in 1 in nizov, razen “” v vašem programu, razen če določite konstante.
    1. Ne uporabljajte dobesednega integerja kot vezane matrike.
    2. Ne uporabljajte dobesednega integerja kot parameter za zagon, kot je časovna omejitev ali številka vrat.
    3. Ne uporabljajte dobesednih celih števil, da bi izbrali vnose v meniju.
    4. Za merjenje velikosti niza ali nekaterih podatkov ne uporabljajte dobesednega celega števila; uporabite sizeof () in strlen () v C in C ++ ter .length () in .size v Java.
    5. Ne uporabljajte dobesednega niza za ime datoteke. Čeprav lahko ustvarite dobesedne nize.
    6. Ne uporabljajte dobesednega integerja, da bi indeksirali niz, ki vsebuje heterogene podatke.
    7. Ne razglasi identifikatorja z imenom, ki označuje dobesedno, na primer “trideset”.

 

  • Modularizacija: program je zgrajen iz interaktivnih komponent.
    1. Vse svoje kode ne postavljajte v glavno () rutino.
    2. Pravzaprav ne naredite nobene rutine preveč dela. Če je več kot 50 vrstic, je morda predolgo.
    3. Če večkrat podvojite kodo, preberite, ali bi zanka delovala bolje ali morda podprogram.
    4. Če ugotovite, da ste zelo globoko vdolženi, verjetno ne uporabljate podprogramov, ko bi morali.
    5. Ne preoblikujte knjižničnih rutin (razen če vaša naloga to zahteva). V priročnikih si oglejte sprintf () in atoi (), na primer.
    6. Uporabite datoteke glave v C in C + + (datoteke glave imajo imena, ki se končajo .h), da določite vse konstante, ki jih potrebujejo več datotek, in razglasi vse podprograme, ki se izvažajo med datotekami. Ampak v glave datotek ne dajte telesa podprogramov (z redko izjemo inline podprogramov).

 

  • Oblikovanje: program mora biti enostaven za branje.
    1. Oglejte si http://geosoft.no/development/javastyle.html za jasne predloge o oblikovanju in drugih predstavitvenih težavah. Ta sklic je posebej usmerjen v Java, vendar ima tudi vrednost za druge jezike.
    2. Poskusite omejiti vse vaše črte na 80 znakov; mnogi ljudje vidijo kodo v okencih 80 stolpcev zaradi zgodovinskih razlogov.
    3. Ne uporabljajte zavihkov in presledkov za vnos, saj vsi zavihki besedila ne ravnajo z zavihki kot natanko 8 presledkov.
    4. Ali sledite doslednemu uvajalskemu vzorcu, ki odraža kontrolno strukturo programa.
    5. Ne postavljajte veliko praznih vrstic v svoj program. Ena prazna črta med podprogrami je dovolj.
    6. Različni operacijski sistemi končajo linije na različne načine. Če se premikate med Win32 (ki uporablja \ r \ n), Unix (ki uporablja \ n) in MacOS (ki uporablja \ r), spremenite svojo datoteko, da uporabite dosledno metodo zaključevanja.
    7. Izredni bit (Unix) ne nastavite na izvorne datoteke.

 

  • Kodiranje: želite, da je kodiranje jasno, vzdržljivo in učinkovito, v tem vrstnem redu. Nekatera pravila tukaj so zelo specifična; drugi so bolj splošni.
    1. Ne uporabljajte zaporedja, če izjave, ki nimajo drugega, če se lahko ujema samo ena oseba; uporabite drugo, če.
    2. Če želite kategorizirati vnos besedila, ne navedite možnih prvih znakov.
    3. Uporabite izmenjevalce namesto množenja za izdelavo vzorcev bitov.
    4. V izjavi o stikih vedno preverite privzeti primer. Podobno tudi v zaporedju izjav if-then-else uporabite drugo.
    5. Vsi sistemski klici so lahko neuspešni. Vedno preverite povratno kodo in uporabite perror (), da prijavite napako.
    6. Boolovi morajo vedno uporabljati logično vrsto v Java, bool v C ++ in 0/1 celo število v C. Ne uporabljajte znakov t in f in ne uporabljajte -1 in 1.
    7. Uporabite zanke za inicializacijo podatkovnih struktur, če je to mogoče.
    8. Vsako spremenljivko in vsako polje strukture uporabite za točno en namen. Ne preobremenite jih, razen če obstajajo odlični razlogi za to.
    9. Ne uporabljajte istega identifikatorja za vrsto, spremenljivko in ime datoteke, tudi če spremenite velikost. Preveč je zmedeno.
    10. Če spremenite podatke s htonl () ali podobno rutino pred prenosom omrežja, ne spremenite podatkov na mestu. Zgradite drugo podatkovno strukturo.
    11. Ne uporabljajte globalnih ali nelokalnih spremenljivk. Vsako spremenljivko označite v najmanjšem možnem obsegu. Obstaja legitimna uporaba nelokalnih spremenljivk, vendar se prepričajte, da jih res potrebujete.
    12. Programi Shell, Perl in Python morajo imeti svoje #! vrstico kot prva vrstica datoteke; sicer je vrstica le komentar.
    13. Poskusite se izogniti kodiranju posebnih primerov. Pogosto lahko uporabljate psevdodatne ali druge metode podatkovne strukture, ki vam omogočajo, da v redne primere zložite posebne primere.

 

  • Prevajalniki: Naj vam pomagajo najti napake
    1. Vedno vpišite prevajalce z vsemi opozorili. Za C in C + +, uporabite oznako -Wall. Za Java uporabite -Xlint: all -deprecation in uporabite program pmd, da bi dobili predloge za boljši slog. Za Python uporabite -t-W all.
    2. Vsi programi Perl bi morali delovati z oznako -w in bi morali uporabljati strogo. Vsi Perl cgi-bin skripte bi morali imeti tudi oznako -T.

 

  • Uporabite pripomoček: uporabite ga in ga dobro uporabite.
    1. Makefile mora vedno imeti “čist” recept, ki bi moral odstraniti vse datoteke, ki jih lahko rekonstruirajo drugi recepti v makefilu, vključno z objektnimi in izvedljivimi datotekami.
    2. Če vaš projekt vsebuje več izvornih datotek, mora makefile ustvariti datoteke (.o) predmeta po potrebi in jih povezati skupaj.
    3. Makefile je treba zapisati tako, da če se zaženete naredite dvakrat zaporedoma, drugi poganjki ne znova preračunajo.
    4. Vsak recept mora ustvariti datoteko, določeno v svojem cilju.
    5. Vsak recept mora uporabiti vsako datoteko, navedeno na njenem predpogojnem seznamu.
    6. Naučite se uporabljati pravila za cilje, kot je .c.o, da bi se izognili ponavljajočim makefilom.
    7. Če imate samo eno izvorno datoteko C ali C ++, mora imeti izvršljiva datoteka isto ime (brez razširitve .c ali .cpp).
    8. Poskrbite, da boste vse datoteke .h navedli kot predpogoje, če so ti potrebni. Razmislite o uporabi makedependa, da ustvarite seznam predpogojev za vas.

 

  • Dokumentacija: Ne gre le za grederja. Pomaga vam, ko napišete program!
    1. Dodajte dokumentacijo med pisanjem programa. Vedno ga lahko spreminjate, ko spremenite načrt.
    2. Vključi zunanjo dokumentacijo: Kako program komunicira in zažene, in kaj naj bi storil? Zunanja dokumentacija je lahko v ločeni datoteki; za majhne projekte, je lahko komentar v datoteki z enim samim virom.
    3. Vključi interno dokumentacijo: Kateri algoritmi in podatkovne strukture uporabljate? Pregled je lahko v ločeni datoteki, običajno pa je interna dokumentacija postavljena na specifične rutine, deklaracije in korake, ki jih opisuje.
    4. Preverite celoten program in dokumentacijo za črkovanje napak. Neprimerno je, da spremenite napačno črkovano delo, in ne bo več pozornosti na podrobnosti.
    5. Preverite vse dokumente (in izhodna sporočila) za slovnične napake.
    6. Programi so precej bolj berljivi, če kratek komentar o zapiralju. Na primer, zapiranje zaprtega pogojnega lahko vsebuje komentar, kot je “če vrednost izgleda dobro”. Zapiralo, ki zapira zanko, ima lahko komentar, kot je “za vsako vhodno linijo”. Zapiralo, ki zaključuje postopek, ima lahko komentar, ki ga imenujemo postopek.  Zapiralo, ki zapira razred, ima lahko komentar, ki pravi »razred« in nato ime razreda.

 

Tu lahko najdete izvirno objavo v angleščini: http://www.cs.uky.edu/~raphael/checklist.html