Moja odpowiedź będzie z perspektywy realnego biznesu i wyzwań, przed którymi stoi każdy zespół programistów. To, co widzę w tym pytaniu i wiele odpowiedzi, naprawdę dotyczy kontrolowania wad.
Kod może być wolny od błędów. Pobierz dowolny przykładowy kod „Hello World” dla dowolnego języka programowania i uruchom go na platformie, na której jest przeznaczony, i będzie działał konsekwentnie i dawał pożądane wyniki. Kończą się teorie na temat niemożności, by kod był wolny od błędów.
Potencjalne błędy pojawiają się, gdy logika staje się bardziej złożona. Prosty przykład Hello World nie ma logiki i za każdym razem robi to samo. Natychmiast po dodaniu dynamicznego działania opartego na logice wprowadza się złożoność, która prowadzi do błędów. Sama logika może być wadliwa lub dane wprowadzane do logiki mogą się różnić w sposób, w jaki logika nie obsługuje.
Nowoczesna aplikacja zależy również od bibliotek wykonawczych, CLR, oprogramowania pośredniego, bazy danych itp., Które - choć ogólnie oszczędzają czas programowania - są również warstwami, w których mogą występować błędy w tych warstwach, które nie są wykrywane podczas testowania i testowania UAT i do produkcji.
Wreszcie, łańcuch aplikacji / systemów, w których aplikacja zużywa dane, które zasilają jej logikę, to wszystkie źródła potencjalnych błędów w ich logice lub w oprogramowaniu, które układa logikę na wierzchu lub w systemach, w których pobiera dane.
Deweloperzy nie mają 100% kontroli nad każdym ruchomym elementem wspierającym logikę ich aplikacji. W rzeczywistości nie kontrolujemy wiele. Dlatego testowanie jednostkowe jest ważne, a zarządzanie konfiguracją i zmianami to ważne procesy, których nie możemy ignorować ani być leniwi / niedbali.
Udokumentowane umowy między aplikacją, która zużywa dane ze źródła, na które nie masz wpływu, które określają konkretny format i specyfikacje przesyłanych danych, a także wszelkie ograniczenia lub ograniczenia, które system przyjmuje, że system źródłowy jest odpowiedzialny za zapewnienie, że dane wyjściowe mieszczą się w zakresie te granice.
W rzeczywistej aplikacji inżynierii oprogramowania nie będziesz w stanie sprawić, by latała, wyjaśniając biznesowi, dlaczego teoretycznie aplikacje nie mogą być wolne od błędów. Dyskusje na ten temat między technologią a biznesem nigdy nie będą się odbywać, chyba że w następstwie awarii technologicznej, która wpłynęła na zdolność firmy do zarabiania pieniędzy, zapobiegania utracie pieniędzy i / lub utrzymywania ludzi przy życiu. Odpowiedź na „jak to się może zdarzyć” nie może być „pozwólcie mi wyjaśnić tę teorię, abyście rozumieli”.
Pod względem ogromnych obliczeń, które teoretycznie mogą trwać wiecznie, aby wykonać obliczenia i uzyskać wynik, aplikacja, która nie może zakończyć i powrócić z wynikiem - to jest błąd. Jeśli charakter obliczeń jest taki, że jest bardzo czasochłonny i intensywny obliczeniowo, przyjmujesz to żądanie i przekazujesz użytkownikowi informacje zwrotne, w jaki sposób / kiedy może on uzyskać wynik, i uruchamiasz równoległe wątki, aby się na nim zgubić. Jeśli musi to nastąpić szybciej, niż można to zrobić na jednym serwerze i jest to wystarczająco ważne z biznesowego punktu widzenia, należy skalować go na tyle systemów, ile potrzeba. Właśnie dlatego chmura jest bardzo atrakcyjna, a możliwość spinania węzłów w celu podjęcia pracy i spinania ich po zakończeniu.
Jeśli istnieje możliwość otrzymania żądania, że żadna ilość mocy obliczeniowej nie jest w stanie ukończyć, nie powinna spędzać czasu w nieskończoności z procesem biznesowym czekającym na odpowiedź na pytanie, co według firmy jest skończonym problemem.
print "Hello, World!"
... czy możesz być trochę bardziej jasny?