A számítógép-programozásban holt kódnak nevezzük azt a kódot, aminek az eredményét sehol sem használja fel a program,Debray, S. K., Evans, W., Muth, R., and De Sutter, B. 2000. Compiler techniques for code compaction. ACM Trans. Program. Lang. Syst. 22, 2 (Mar. 2000), 378–415.Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press. viszont manipulálhat globális vagy környezeti változókat, és kivételeket dobhat, akár meglepetésszerűen is. Ezek a számítások memóriát foglalnak, végrehajtásuk pedig időbe telik, így a program memória- és időigényét is megnövelik. Egyes szerzők szerint holt kód az, amire nem kerül vezérlés futás során. DO-178BDO-178B Wikipedia/DO-178B.
Nehezebb megtalálni, mint a hajóhorgonyt, mivel vezérlést kap, így akár egész modulok is elhalhatnak. A megtalálásban segíthet egy jó IDE. Például az Xcode, Visual Studio 2010Habib Heydarian, Microsoft Corp és az Eclipse GalileoEclipse Developer Guide fordítási időben képesek a holt kódot felismerni.
A kivételek dobása és a globális állapot változtatása megnehezíti a holt kód eltávolítását, mivel mégis csak csinál valamit, és törlése szoftverhibákat okozhat. Át kell nézni a kódot, és meg kell vizsgálni, hogy szükség van-e ezekre a kivételekre. Ha nem, akkor a kódrészlet kidobható. Ha igen, akkor a kódszakasz törlése mellett a kivételek eldobhatók, a globális változók beállíthatók a számítások nélkül is. A holt osztályok integrálhatók szülőjükbe vagy éppen a szülő távolítható el. A szükségtelen paraméterek is eltávolíthatók, hacsak azért kell őket átvenni, mert azt a hierarchia kikényszeríti. Ekkor a hierarchiát kell átgondolni.
Példa:
int foo (int iX, int iY) { int iZ = iX/iY;
return iX*iY; }
ahol iZ holt változó, és az int iZ = iX/iY; sor kivételt dob, ha iY nulla. Így ennek a sornak az eltávolítása megváltoztatja a program kimenetelét.
A fordítók optimalizációként képesek holt kódot eltávolítani, ami azonban nem érinti az ember által írt kódot. A holt kód elemzése végezhető élő változó elemzéssel, ami a statikus kódelemzés egyik fajtája. Ezzel szemben az elérhetetlen kód vezérlési folyam elemzéssel megtalálható.
A holt kód kiküszöbölésének technikája ugyanabba a technikai osztályba tartozik, mint az elérhetetlen kód és a redundáns kód kiküszöbölésének technikája.
Nagy programozási projektekben néha nehéz felismerni és kiküszöbölni a holt kódot, különösen, ha teljes modulok halnak meg. A tesztállványzat azt mutathatja, hogy a kód még él, és előfordul, hogy a szerződésnyelv megköveteli a kód leszállítását, akkor is, ha a kód már nem releváns.Douglas W. Jones Dead Code Maintenance, Risks 8.19 (Feb. 1, 1989)
Míg a legtöbb optimalizációs technika a holt kódot eltávolításra keresi, néha éppen a méret csökkentésére szándékosan vezetnek be és gondosan formáznak látszólag holt kódot, hogy összefogjon látszólag egymással kapcsolatban nem álló szakaszokat, ezzel csökkentve a méretet. Ez a kód nem árt a végrehajtás első útvonalának, de olyan műveleteket végez fel, melyeket az alternatív útvonalak használnak, melyek számára azonban más kódszakaszok halnak meg. Funkcionálisabb szinten ez mesterségesen bevezetett hasznos/nem ártó mellékhatás és a kód redundanciájának csökkentése, de használható opcode szinten is, hogy lehetővé tegye rövidebb utasítások használatát, ami nem lenne lehetséges, ha a kódszekvenciák hajtogatását a holt kód által bevezetett mellékhatások nélkül próbálnánk megoldani. Jegyzetek
Források Dead Code Detector (DCD) simply finds never used code in your Java/JEE applications Comparisons of some Java Dead Code Detector UCDetector Eclipse PlugIn to find dead java code Refractoring Guru Fordítás
Kategória:Programozási antiminták