Mostanában olvasom James Gleick: Káosz című könyvét. Érdekes gondolatokat ébreszt az emberben.
A káosz természetesen, mint káoszelmélet szerepel a könyvben és az írásomban is. Csakhogy a káosz egy (eléggé elcsépelt) hétköznapi szavunk és (sajnos) elég gyakran találkozunk vele a napi rutin során. Azonban ha úgy fogalmazunk, hogy érzékenység a kiinduló feltételekre, akkor érdekes következtetésekre juthatunk.
Az itt következő leírás feltételezi, hogy legacy kódról beszélünk:
- unit és/vagy end-to-end test suite teljes vagy részleges hiánya.
- metrikák hiánya
És akkor a következtetések:
- Eddig tapasztalatom alapján a legkisebb változtatások a kódban (értsd 1-2 sor, de még inkább kevesebb, mint 10 karakter) okozhatják a legnagyobb bonyodalmat a rendszerben. Ez lehet akár elég alattomos rejtett hiba bevezetése vagy a kód komplexitása miatti, már beláthatatlan következményeket előidéző változtatás. Sok embernél láttam, magam is tapasztaltam.
Ez eléggé ellentmondani látszik általános (lineáris) világfelfogásunkkal, azzal ahogy a kódot látjuk. - Ennek azonban van egy másik oldala. A “változás” nem mindig azonnal észlelhető, sőt lehet, hogy nem is észlelhető igazán. Tehát meglátásom szerint a legbrutálisabb shotgun surgery sem feltétlen jár látható fájdalommal, nem feltétlenül áll meg tőle az élet, hiába a rossz design és/vagy a védőháló (test suite) hiánya.
A fentiek következménye az a jelenség, hogy egy fejlesztő egy sok osztályon, fileon átívelő átalakítás után kommitolt kódja akár jobb állapotba hozza a kódot (bár adott esetben ezt szinte semmivel sem tudja alátámasztani előre). Később pedig ugyanez a fejlesztő egy egysoros módosítással a feje tetejére állítja a világot (és ebben az esetben sem tudja semmivel alátámasztani előre a módosítás hatását).
Innen nézve a kód sokszor kaotikus, megjósolhatatlan viselkedést mutat. Úgy gondolom, hogy ezt elsősorban a metrikák hiánya okozza. Ha nem látható, hogy egy módosítás milyen komplexitást vezet be (ne adj isten vezet ki) a rendszerbe, ha semmilyen metrika nem ad segítséget, hogy felismerjük az éppen bevezetett/használt design buktatóit/hibáit, ha nem biztosítanak a tesztek védőhálót, akkor a kód viselkedése a jövőben is egy előre meg nem jósolható tényező lesz az életünkben.
Vélemény?