Három halálos bűn, amit elkövethetsz a szoftvertervezés során
A Google mérnökei szerint a leggyakoribb és legsúlyosabb tervezési hibák
■ H | K | Sze | Cs | P | Szo | V |
---|---|---|---|---|---|---|
28 | 29 | 30 | 31 | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 1 |
Talán valóban
szerencse hogy sokan be is
Sting inkvizítornak kiváló
Kb 10 percig bírtam
Hogy a 10 percre érdemben is reagáljak:
Comment témában Uncle Bob más
Én egyetértek Uncle Bob-al,
Jó comment
- függvény lezáró
}
után a fv nyitósora (pl.public function akarmi($parameter1, $parameterN)
;- és ugyanez az osztály végén.
Ezen kívül a fájl végén, hogy mit tartalmaz (általában csak egy osztályt) és melyik könyvtárban a helye.
Ezek szerintem hasznos kommentek.
Tök érdekes, mindenki osztály
Nem hagyhatod ki a teszteket,
- a kód maga, a nevek, szervezés, tartalom, a benne lévő hívási lánc stb,
- a mögötte lévő teszt.
Az a kód, aminek emellé még comment is kell, hogy érthető legyen, az rossz. Az csak a helyet foglalja, és nem élő része a kódnak, a karbantartása plusz erőforrást igényel, ezért általában meg se történik.
teszt
Extrém példával: egy
i += 2;
kommentje is lehet értékes, ha az van fölé írva, hogy "i növelése eggyel". Kevésbé sarkítva: hacsak nem egy 10 sor alatti függvényről beszélünk, ott valami algoritmus fog végrehajtódni, amihez sosem árt a fő gondolat ismertetése.A tesztnél itt nem unit
Your input doesn't currently include years, months or days that are out of range.
jó input
Szerintem az inkább a kivétel, amikor megbízhatsz a konvenciók betartásában - legalább is abban a világban ahol én dolgozom. :) Persze, minden környezetnek/területnek megvannak a maga sajátosságai, hatékony stílusa, ezt nem vitatom. Általános példának még mindig rossznak tartom, azt már leírtam, miért.
Itt az volt a szándék, hogy egy redundánsnak látszó helyzet is rávilágythat egy hibára - vagyis minél több információ áll rendelkezésre annál jobb.
Értem én az elvet, követném is nagyon szivesen, viszont ez azt feltételezi, hogy kiforrott könyvtárakkal/eszközökkel dolgozol, amikből nem "csak azt írtuk meg ami most kell".
Példa: egy XML alapú formátumból kell 2-3 féle kérdést megválaszolnod. A) Megírod a funkciókat amik a DOM-ban mászkálva kikeresik az információt: hosszú, rosszul tesztelhető metódusok; B) Írsz egy értelmezőt a formátumhoz: soksok kód, amire nem biztos, hogy szükséged lesz.
Lehet ezüst golyókat keresni, de a jó döntés az lesz, amit az idő is igazol - vagyis ha sikerül megsejtened a jövő követelményeit. Lesz amikor az a megoldás lesz a nyerő, ami magán hordozza az éppen kárhoztatott jegyeket.
Szerintem celravezetobb az,
Ha ezt sikerul szem elott tartani es betartani gyorsabban fogsz haladni es szep kodot fogsz magad mogott hagyni (nem tokeletes de kelloen letisztult kodot).
Nem kell megsejtened a jovot, csak ugy megirnod a jelenlegi kovetelmenyekhez levo kodot, hogy bovitheto legyen.
Egyetértek
Az a kód, aminek emellé még
A kommentek nem arra valók, hogy megértsd, mit csinál a kód, hanem hogy megértsd, mi volt a szándéka annak, aki írta, ez pedig a függvénynevekből nem fog kiderülni. Előfordul, hogy mást következne a kommentből, és mást csinál a kód valójában, és akkor tudod, hogy ez egy javítható hiba, míg ha nem lenne ott a komment, akkor nem tudnád mihez viszonyítani a helyességét, és nem mernéd kijavítani. A unit és egyéb tesztek bizonyos fokig át tudják venni ezt a funkciót, de megvannak a korlátaik.
Válasszuk ketté a dolgot. Van
Ezek miatt írunk rövid metódusokat, szeparáljuk a felelősségi köröket stb. Így tudjuk biztosítani, hogy kifejező metódusneveket tudjunk választani, a kód olvasható és tesztelhető legyen, ami a létező legjobb dokumentáció. Az ilyen elvek mentén szerveződő kód nem igényel plusz commenteket.
Vagyis a comment az utolsó eszköz kell legyen a programozó számára, amivel ki tudja fejezni hogy működik az algoritmusa. Vagy hogy mi volt vele a szándéka, egyre megy. Amikor ehhez kell nyúlni, az jellemzően valami nem triviális eset. Pl amikor egy külső függőség paraméterezését kell indokolni (pl XY rendszer itt 42-t vár). Vagy ahol tényleg nagyon komplex algoritmust kell megvalósítani. De ezek az esetek egy átlagos programnak igen kis részét teszik ki.
És akkor van az apidoc, ahol szintén igen ritka, hogy nagyon magyarázni kéne.
A kulcs az SRP. Ahol ez teljesül, ott nem nagyon van mit magyarázni. Ellenpéldákat lehet erre hozni, én is tudnék, de a téma indító általánosságokról szólt.
Ajanlok neked egy konyvet:
A sok komment azt jelzi, hogy ben eleg egyertelmu es magyarazo a fuggveny vagy osztaly neve, lehet hogy tul sok mindent csinal.
A szelso ertekek kezelesenek leirasara meg ot vannak a tesztek, amik dokumentaljak a mukodest, es sosem lesznek outdatedek, mint pl a kommentek.
Annal nincs koltsegesebb ha olyan dolgokat fejlesztesz le amik nem is kellenek...ha jol van megirva, nem lesz sokkal tobb energia megirni a maradekot ha tenyleg kell...altalaban nem
A jol megirt teszteknel nem gyuruzik tovabb a hiba, ha unit tesztekrol beszelunk, mert azokat izolacioban teszteljuk. Integracios teszteknel ez elofordulhat.
Ezekkel mind