Sörétespuska-sebészet

Ez a közzétett változat, ellenőrizve: 2024. április 21.

A sörétespuska sebészet (az angol shotgun surgery közelítő fordítása) a számítógép-programozás egy antimintája. Azt jelenti, hogy egy fejlesztő új képességeket ad egy kódbázishoz, ami számos kliens módosítását követeli meg. Sok helyzetben gyakori, hogy az új képesség kifejlesztése sok programozási erőfeszítést igényel. Néha sok helyen kell egy kicsit módosítani, hogy az új képesség működjön. Ennek eredményeként a kód nagyjából úgy néz ki, mint korábban. A kereskedelmi szoftverfejlesztés által diktált ütemben nincs mindig idő a refaktorálásra és újramodellezésre, hogy a rendszer magától értetődőebben támogassa az új képességeket. Ennek eredményeként megjelenik a másolásos programozás, amikor kódszakaszokat másolnak, és helyben módosítanak. A refaktoráló közösség ezt az egyszer és csak egyszer elvének megsértéseként értékeli. Bármely hiba, ami az új funkcionalitáshoz kapcsolódik, több helyen jelenik meg, emiatt nehezebb javítani, még másolás nélkül is. A programozásnak ez a módja rövid idejű javulást vásárol a hosszú távú karbantarthatóság és stabilitás árán.

This visualizes a shotgun surgery
Vadászpuska-sebészetről beszélhetünk akkor is, ha egy „A osztály” módosítása több kisebb módosítást okoz egy szoftverrendszer más osztályaiban.

Az általános példa a naplózás, ami hasonló kódot ad az egyes függvényekhez:

Eredeti állapot:
void MyFunc()
{
	...
}

void MyFunc2()
{
	...
}

...

void MyFuncN()
{
	...
}
Módosított állapot:
void MyFunc()
{
	printf("Entering MyFunc()\n");
	...
}

void MyFunc2()
{
	printf("Entering MyFunc2()\n");
	...
}

...

void MyFuncN()
{
	printf("Entering MyFuncN()\n");
	...
}

Bármely további változás, ami a naplózásra vonatkozik, például a sorok számozása, most már sok helyen követelne meg változást. Nem ugyanaz, mint a másolásos programozás. A másolgatást a véghez vezető útnak tekintik, a sörétespuska-sebészet viszont maga a vég.

Következményei

szerkesztés

A sörétespuska-sebészet tekinthető úgy is, mint duplikáció a rendszerben. A logika nem marad egy helyen, hanem sok helyre terül szét. Egyes költségek mérhetőek, mások nem, vagy nem triviális. Azonban van néhány bizonyíték arra, hogy ez az antiminta növeli a hibalehetőséget.[1]

A következők bármilyen kombinációja várható:

  • Megnövekedett erőfeszítés, de gyengébb eredmény
  • Megnövekedett költségek
  • Pszichológiai következmények, a kód elhanyagolása

Ezek közül a pszichológiai következmények a legsúlyosabbak (lásd „Betört ablak”-elv), amik lassan, de biztosan rontják a kód minőségét, ami miatt az végül karbantarthatatlanná válik, és teljesen újra kell írni.

A sörétespuska-sebészet által megoldani kívánt problémán segíthet az aspektusorientált programozás. Ennek kódja szószátyár formát ölt, és aspektusszövéssel bekerül minden megadott helyre. Egy másik módszer, hogy tartományspecifikus nyelvre bízzák a duplikált kód generálását. Mindkettő beletartozik a kódgenerálásba és automatizálásba.

  1. An Investigation of Bad Smells in Object-Oriented Design - IEEE Conference Publication (amerikai angol nyelven). ieeexplore.ieee.org . (Hozzáférés: 2018. május 24.)