Deo zbornika Principi razvoja softvera
Softverski anti-obrasci
Ako je debagovanje proces uklanjanja bagova, onda programiranje mora biti proces njihovog umetanja.
– Edsger W. Dijkstra
Anti-obrazac ili anti-šablon (anti-pattern) je dokazano loša tehnika ili arhitektonska praksa koje gotovo izvesno stvara probleme u razvoju softvera. Anti-obrazac je suprotan obrascu dizajna.
Anti-obrazac može delovati kao rešenje za određeni problem, ali nanosi više štete nego koristi jer usporava razvoj, otežava održavanje, povećava složenost i uzrokuje druge probleme u sistemu.
Termin anti-pattern je skovao Andrew Koenig 1995. godine, koji ga je opisao na sledeći način: “Anti-obrazac je isto kao obrazac, samo što umesto rešenja daje nešto što površno izgleda kao rešenje, ali to nije.”
Prepoznavanje anti-obrazaca je od suštinskog značaja za razvoj softvera, kao i poznavanje obrazaca. Indikator mogućeg problema u kodu naziva se kodni zapah (code smell).
Uzroci javljanja
Anti-obrasci se često javljaju zbog neiskustva, brzopletosti ili nedostatka razumevanja posledica određenih odluka u razvoju softvera. Programeri nekad i svesno biraju lakša i privremena rešenja da bi ubrzali isporuku koda. Ona imaju tendenciju da postanu trajna i akumuliraju tehnički dug.
Neki antiobrasci su počeli kao legitimni obrasci dizajna, a kasnije proglašeni anti-obrascima.
Poznati anti-obrasci
Poznati programerski anti-obrasci uključuju:
- Špageti kod – Nepregledan, slabo struktuiran kod sa zavisnostima na sve strane.
- Božanski objekat ili božanska klasa obrađuje previše stvari. Tipično, služi kao centralni entitet koji mnoge klase nasleđuju ili koriste unutar aplikacije. To je klasa koja sve zna i upravlja svime u sistemu. S druge strane, to je takođe klasa koju niko ne želi da ažurira, jer pokvari aplikaciju svaki put kada je dodirne.
- Zlatni čekić – Prekomerna upotreba jednog alata ili tehnike za svaki problem.
- Copy-paste programiranje – Dupliranje koda umesto pravljenja generičkih rešenja.
- Magični brojevi – Brojevi u kodu bez objašnjenja šta znače.
- Jo-jo problem (yo-yo problem) – Previše slojeva apstrakcije koji otežavaju razumevanje koda.
- Poltergeist – Objekti koji postoje samo da bi prosledili podatke drugima.
- Tok lave (lava flow) – Stari, beskoristan kod ostavljen u aplikaciji, koji niko ne sme da ukloni. - Mrtav kod – Kod koji se nikada ne izvršava, ali nije uklonjen.
- Kod za bacanje (throwaway code) - privremeni kod napravljen kao pokazno rešenje ili prototip, bez brige o kvalitetu ili efikasnosti, s namerom da se kasnije zameni. Međutim, takav kod često postane trajan. Kod prototipa, cilj je da se dokaže koncept, ali često završi preopterećen dodacima za impresivnu demonstraciju.
- Samo neka radi (keeping it working) je nastojanje da se projekat održava u funkcionalnom stanju, bez razmišljanja o dugoročnom održavanju i arhitekturi. Ovo se redovno događa kada je fokus na kratkoročnim popravkama i dodavanju novih funkcija, zanemarujući refaktorisanje i tehnički dug. To dovodi do težeg održavanja, sporijeg razvoja i gomilanja grešaka u aplikaciji.
Svaki od anti-obrazaca komplikuje održavanje i čitanje koda, pa ih treba izbegavati.
Velika lopta od blata
Gradimo naše računarske sisteme kao što gradimo naše gradove: tokom vremena, bez plana, na vrhu ruševina.
– Ellen Ullman
Velika lopta od blata (big ball of mud) je arhitektonski anti-obrazac u kojem je softverski sistem neorganizovan, haotičan i bez jasne arhitekture. Ovaj antiobrazac odlikuju:
- Loša modularnost i razdvajanje odgovornosti.
- Isprepletene zavisnosti između delova koda.
- Nepoštovanje osnovnih dizajnerskih principa.
Razlozi nastanka velike blatnjave lopte u softveru su stihijski razvoj bez planiranja. Posledice uključuju otežano održavanje, produženo vreme za ispravljanje grešaka i dodavanje novih funkcionalnosti.
Literatura
- Jeff Atwood, The Big Ball of Mud and Other Architectural Disasters
- Bruce M. Van Horn II, Real-World Implementation of C# Design Patterns, 2022
- Addy Osmani, Learning Javascript Design Patterns, 2023.
- Carl-Hugo Marcotte, Architecting ASP.NET Core Applications, 2024.