Programröta eller kodlukt (engelskan: code smell) är ett symptom i ett programs källkod som indikerar underliggande brister i systemets design eller arkitektur.

Bakgrund och innebörd Termen myntades ursprungligen av mjukvaruutvecklaren Kent Beck på slutet av 1990-talet och populariserades kort därefter av Martin Fowler i hans tongivande bok Refactoring: Improving the Design of Existing Code.

En kodlukt är i regel inte en renodlad bugg; programmet kan tekniskt sett fungera felfritt och producera korrekta resultat för slutanvändaren. Istället rör det sig om svagheter i kodens interna struktur som gör den svår att förstå, underhålla och vidareutveckla. Förekomsten av programröta är därmed en stark indikator på att systemet har dragit på sig en ohållbar teknisk skuld och är i behov av systematisk refaktorisering för att förhindra framtida problem.

Typer av programröta Inom mjukvaruutveckling kategoriseras programröta ofta i olika etablerade mönster, så kallade antimönster, för att underlätta identifiering i stora kodbaser. Ofta hänger dessa mönster tätt samman med relaterade fenomen som spaghettikod.

Bloaters Ett vanligt problemområde är så kallade "bloaters". Detta innefattar kod som över tid vuxit sig för stor för att hanteras logiskt. Exempel på detta är oproportionerligt långa metoder, klasser med för stort ansvarsområde (så kallade "God objects") eller orimligt långa parameterlistor.

Överflödig komplexitet En annan kategori rör onödig komplexitet och överflödig kod. Detta kan yttra sig som duplicerad logik på flera ställen i koden, obrukad kod (dead code) eller överdriven användning av kommentarer. Kommentarer i sig är ofta bra, men de utgör en kodlukt om de primärt används som "deodorant" för att maskera och förklara en logik som från början är onödigt rörig.

Hinder för vidareutveckling Viss programröta kännetecknas av att den aktivt motarbetar framtida anpassningar av kodbasen. Ett klassiskt antimönster inom denna kategori är "hagelgevärskirurgi" (shotgun surgery), där systemets delar är så tätt sammanflätade att en enskild modifiering kräver en mängd små ingrepp tvärs över helt andra moduler.

Identifiering och analys För att systematiskt upptäcka och mäta programröta används i modern utveckling ofta automatiserade mjukvaruverktyg för statisk kodanalys. Dessa verktyg granskar källkoden och flaggar kontinuerligt misstänkta mönster under arbetets gång, vilket gör det enklare för utvecklare att refaktorisera koden i tid.

Referenser Noter

Kategori:Antimönster Kategori:Programmering