Narzędzia do pokrycia kodu, takie jak Emma, Cobertura i Clover, będą instrumentować Twój kod i rejestrować, które jego części są wywoływane przez uruchomienie zestawu testów. Jest to bardzo przydatne i powinno stanowić integralną część procesu rozwoju. Pomoże Ci to określić, jak dobrze Twój zestaw testów obejmuje Twój kod.
Nie jest to jednak to samo, co identyfikacja rzeczywistego martwego kodu. Identyfikuje tylko kod objęty (lub nie objęty) testami. Może to dać fałszywe alarmy (jeśli twoje testy nie obejmują wszystkich scenariuszy), a także fałszywe negatywy (jeśli kod dostępu do testów nigdy nie jest używany w scenariuszu z prawdziwego świata).
Wyobrażam sobie, że najlepszym sposobem na rzeczywistą identyfikację martwego kodu byłoby oprzyrządowanie kodu za pomocą narzędzia pokrycia w środowisku działającym na żywo i analiza pokrycia kodu przez dłuższy okres czasu.
Jeśli pracujesz w środowisku redundantnym z równoważeniem obciążenia (a jeśli nie, dlaczego nie?), Przypuszczam, że sensowne byłoby instrumentowanie tylko jednego wystąpienia aplikacji i skonfigurowanie modułu równoważenia obciążenia w taki sposób, aby losowa, ale niewielka część Twoi użytkownicy działają w Twojej instancji instrumentalnej. Jeśli robisz to przez dłuższy czas (aby upewnić się, że obejrzałeś wszystkie scenariusze użytkowania w świecie rzeczywistym - takie sezonowe odmiany), powinieneś być w stanie dokładnie zobaczyć, które obszary twojego kodu są dostępne w rzeczywistym użyciu i które części tak naprawdę nigdy nie są dostępne, a zatem martwy kod.
Nigdy nie widziałem tego osobiście i nie wiem, jak wspomniane narzędzia można wykorzystać do instrumentowania i analizowania kodu, który nie jest wywoływany za pomocą zestawu testów - ale jestem pewien, że mogą.