Kod nieosiągalny to kod programistyczny, którego nie można wykonać w żadnym kontekście. Przyczyn takiego stanu rzeczy może być wiele, a wiele języków komputerowych nie pozwala na wykonanie programu, jeśli część kodu jest niedostępna. Problemy generowane przez nieosiągalny kod można rozwiązać, usuwając problematyczną sekcję kodu lub przepisując część kodu, aby ponownie uzyskać dostęp do sekcji.
Podczas projektowania oprogramowania stosunkowo łatwo może być nieumyślne utworzenie nieosiągalnego kodu. Każde znaczące zakłócenie przepływu programu może spowodować niedostępną sekcję kodu. Na przykład przypadkowe utworzenie nieskończonej pętli może sprawić, że cały kod, który pojawi się po niej, będzie nieosiągalny, ponieważ nie byłoby możliwości wyrwania się z pętli i kontynuowania programu. Innym sposobem, w jaki może się to zdarzyć, jest kodowanie funkcji powrotu przed wykonaniem całego jej kodu. W takim przypadku kod po instrukcji return byłby nieosiągalny.
Istnieją dwa sposoby generowania nieosiągalnego kodu. Po pierwsze, niewłaściwa obsługa struktur kontrolnych podczas pisania surowego kodu może skutkować nieosiągalnymi sekcjami kodu. Po drugie, błędy w strukturach kontrolnych, które nie są oczywiste podczas procesu kodowania, ale pojawiają się podczas uruchamiania programu, mogą również powodować nieosiągalny kod. Pierwszy rodzaj błędu ma różne nazwy, w tym błąd kodowania lub błąd składni, a drugi rodzaj błędu to błąd w czasie wykonywania. Błędy kodowania są zwykle wychwytywane przez parsery lub kompilatory, ale błędy w czasie wykonywania mogą być wykryte tylko przez testowanie i uruchamianie programu po zakończeniu.
Nieosiągalny kod jest często mylony z martwym kodem, ale te dwie rzeczy są znacząco różne. Martwy kod to kod, który wykonuje określone obliczenie, ale nie robi nic z wynikiem obliczenia. To nie to samo, co kod, który jest nieosiągalny, który nigdy nie jest wykonywany. Zarówno nieosiągalny, jak i martwy kod można często usunąć z programu bez szkody lub można go ponownie zintegrować z programem, zwracając szczególną uwagę na przepływ kontroli programu. Ponadto podczas kodowania i przed uruchomieniem programu można zwykle wykryć zarówno nieosiągalny, jak i martwy kod.
Pomimo pozornie złowrogiej definicji, nieosiągalny kod jest często stosunkowo łatwy do naprawienia. Obecność nieosiągalnego kodu zawsze wskazuje na problem z przepływem kontroli, więc dokładna analiza przepływu kontroli programu zwykle szybko zidentyfikuje naruszający kod. Jeśli przepływ sterowania w programie jest dokładnie monitorowany przez cały proces kodowania, prawdopodobieństwo wygenerowania nieosiągalnego kodu jest bardzo niskie.