Jak zrobić program wolny od błędów (lub, przy mniejszych możliwościach błędów)

OK, wiem, że to głupie pytanie, Więc pozwól mi wyjaśnić.

Mój szef uważa, że "do tej pory, przy twoim poziomie wiedzy, nie powinieneś już mieć błędów w swoim oprogramowaniu". Chociaż może to być poprawne, biorąc pod uwagę odpowiedni zestaw narzędzi i właściwą metodę, nigdy nie są mi one dozwolone, może dlatego, że nie wiem, co dokładnie mu odpowiedzieć (Jestem tu jedynym programistą, więc nie mam do kogo się zwrócić, gdy to się stanie).

Oto moje pytanie: jakie narzędzia i metody, których używasz, aby mieć mniej możliwych błędów w oprogramowaniu ?


Reasumując: kod bez żadnego błędu jest niemożliwy. Jednak oto, co można zrobić:

Testowanie

Narzędzia

Praktyki, zarządzanie, środowisko

Author: cosmo0, 2008-09-22

17 answers

Kilka pomysłów:

  1. poćwicz pisanie testów jednostkowych. To uratowało mi życie (nie dosłownie) wiele razy.
  2. Użyj Kontroli Źródła
  3. Użyj narzędzia do pokrycia kodu-na przykład w Javie używam Emmy lub Cobertury
  4. Użyj narzędzia do budowania ciągłej integracji, takiego jak tempomat
  5. Użyj twierdzeń, aby sprawdzić swoje założenia. Pragmatyczny programista (książka) idzie do tego bardziej szczegółowo. W rzeczywistości jest to książka, którą wysoce Polecam czytam.
  6. testy funkcjonalności - na przykład w Javie można zajrzeć do jFeature

Chciałbym odtworzyć to, co inni mówili o pisaniu kodu bez błędów-to niemożliwe. Jednak korzystanie z niektórych lub wszystkich powyższych technik powinno przynajmniej pomóc zmniejszyć błędy.

Oczywiście, a może nawet najważniejsze, powinieneś mieć kogoś, kto testuje Twoje oprogramowanie (tj. nie tylko zautomatyzowane testy), zanim zostanie wdrożone / wysłane.

 17
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:52:28

Po Pierwsze: wolne od błędów oprogramowanie to mit!

Po drugie, same narzędzia zależą od wielu rzeczy, ale jeśli chcesz, aby rzeczy były jak najbardziej ogólne:

  • dobry edytor
  • dobry system kontroli wersji
  • właściwe etapy rozwoju (projekt funkcjonalny, projekt techniczny itp.)
  • a proper test-team
  • niewłaściwy zespół testowy (w zasadzie mleczarz, sprzątaczka i kierowca autobusu, którego przyprowadziłeś... ludzie, którzy nie mają pojęcia co robią, jeśli chodzi o Komputery i interfejsy)
  • sposób na wskazanie, że chcesz nie rozpraszać w ogóle
  • czas, aby móc rozwiązać problemy, gdy utkniesz na nich
 6
Author: Twan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:37:40

Cosmo0, przepraszam, ale współczuję Ci.

Dla mnie twój szef myślący, że musisz napisać kod wolny od błędów jest tym samym, co Ty myślący, że musisz mieć nieskończoną pensję. Dodanie słowa "prawie" do tego "wolnego od błędów" wcale nie zmienia znaczenia.

Istnieje kod wolny od błędów. Kod, który ma funkcjonalność 0 jest wolny od błędów. Ale to jest bezużyteczne.

Pisanie programów komputerowych jest bardzo podobne do gry w szachy. Tigran Petrosjan, mistrz świata w szachach, znany z silne zdolności obronne, został kiedyś zapytany przez niezbyt uprzejmego dziennikarza, dlaczego czasami popełnia błędy. Odpowiedź była zaskakująco prosta: "ponieważ granie w szachy nie jest łatwe. Spróbuj grać siebie, a zobaczysz."

Oczywiście radziłbym użyć tego przykładu jako uzasadnienia tylko wtedy, gdy twój szef jest mądrą osobą i zrobi to dobrze. W przeciwnym razie lepiej będzie poszukać innej pracy.

 4
Author: Anonymous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 16:29:18

Naprawdę musisz uświadomić swojemu szefowi, że pisanie oprogramowania o dowolnej złożoności bez błędów jest praktycznie niemożliwe.

Gdy tylko zaakceptujesz, że pisanie kodu wolnego od błędów jest niemożliwym zadaniem, możesz skupić się na tym, co jest naprawdę ważne: uczynienie wszystkich błędów łatwo wykrywalnymi

Testy jednostkowe to świetny sposób, aby to zrobić, i jest wiele małych sztuczek, które będziesz podnosić z czasem, które pomogą Ci ich uniknąć, chociaż tak naprawdę tylko z doświadczeniem i wiedzą, jakie błędy ty możesz popełnić.

Często cytowanym (i prawdopodobnie teraz-nieistotnym) przykładem jest odwrócenie kolejności porównań, np.:

"bar" == foo

Zamiast

foo == "bar"

Więc nie kończy się na wykonaniu zadania (foo = "bar"), Gdy masz na myśli wykonanie porównania (foo == "bar"). Jeśli odwrócisz kolejność, wtedy przypadek błędu ("bar" = foo) jest łatwo wykrywalnym błędem składni, a nie znacznie trudniejszym do znalezienia błędem logicznym. Ale to naprawdę przydatne tylko wtedy, gdy jest to rodzaj błędu, który popełniasz regularnie.

 3
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:40:34

Czy twój szef może dać ci wolne od błędów i pełne specyfikacje, które nie zmieniają się od chwili, gdy je uzupełni, do chwili, gdy skończysz oprogramowanie? Kiedy mówię "Ukończ", nie mam na myśli tylko listy funkcji. Co powiesz na wszystkie interakcje między wszystkimi funkcjami, wszystkie expections zachowania dla każdego możliwego wejścia użytkownika, każdy możliwy stan środowiska (np. system operacyjny, obecne pliki, inne uruchomione aplikacje, dostęp do współdzielonych zasobów, rozmiar czcionki, schematy kolorów, Klawiatura layouts), które procesy mają pierwszeństwo przed innymi, czas do milisekundy itp.

 2
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-11 11:44:24

Test Driven Development to dobry początek, ale to za mało. Dobre praktyki, przegląd kodu i programowanie w parach, wysoki poziom uwagi i współpraca dobrego testera mogą skutecznie poprawić kontrolę błędów.

Ale myślę, że "oprogramowanie wolne od błędów" odnosi się do science fiction...

 1
Author: Manrico Corazzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:32:32

Być może twój szef nie jest zaznajomiony z ludzkim błędem. Mając to na uwadze, korzystanie z praktyk takich jak testowanie jednostkowe, ciągła integracja i statyczna analiza kodu może poprawić jakość kodu i zmniejszyć niektóre rodzaje błędów.

 1
Author: Ben Hoffstein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:33:11

Wolne od błędów oprogramowanie to mit. Dla porównania, kiedy twój szef mówi, że nie powinieneś mieć błędów w oprogramowaniu, to tak, jakby powiedział matematykowi, że powinien już ustalić dokładną wartość dziesiętną π lub znaleźć wszystkie liczby pierwsze. Oprogramowanie wolne od błędów jest celem, do którego podchodzisz, a nie celem, który osiągasz.

Nie oznacza to, że nie jesteśmy winni błędów w naszym oprogramowaniu, ani że wykwalifikowani programiści nie będą mieli mniejszej liczby błędów. Ale twój szef musi mieć realistyczne oczekiwania co do Twoich umiejętności. Nie ma doskonałych sterowników, doskonałych menedżerów i doskonałych programistów.

 1
Author: The Digital Gabeg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 16:22:23

Nie sądzę, aby bugfree było możliwe, chyba że aplikacja jest bardzo mała.

Myślę, że możesz i musisz spróbować ograniczyć ilość błędów w swoim oprogramowaniu poprzez rygorystyczne testy.

 0
Author: Galwegian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:33:58

Myślę, że "do tej pory, z twoim poziomem wiedzy, nie powinieneś już mieć błędów w swoim oprogramowaniu" nie jest możliwe.

Ale możesz użyć TDD (Test Driven Developent) w swoim projekcie, aby zminimalizować błędy w wersjach wydania. Ale to nie jest całkowite rozwiązanie. niektóre błędy są bardzo skomplikowane i mogą być spowodowane przez aktualizację komponentu 3rd party lub cokolwiek innego.

 0
Author: TcKs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:35:15

JUnit (lub jakiś inny program do testów jednostkowych) jest przydatny, gdy masz jasne wymagania do przetestowania i zapobiegania regresji. Gdy testy są zautomatyzowane i często uruchamiane, możesz mieć pewność, że Twoje zmiany nie łamią innych części systemu. Jest to również pomocne przy projektowaniu trudnych klas, ponieważ można zaplanować wszystkie (cóż, wiele) przypadków krawędzi, które chcesz przetestować i przetestować je wszystkie razem.

Kluczowe punkty to

  • Testy Automatyczne
  • Run testy często
  • upewnij się, że przypadki testowe spełniają znane wymagania
  • tworzenie przypadków testowych, gdy znajdziesz błędy; te testy nie powiodą się, dopóki błąd nie zostanie naprawiony
 0
Author: Mr. Shiny and New 安宇,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:36:54

Współczuję Tobie i Twojemu szefowi. Myślę, że to niezwykłe, że w dzisiejszych czasach tworzenie oprogramowania "doskonałego" byłoby tak drogie, że nikt nie chciałby za nie płacić. W końcu klienci akceptują poziom bugginess, który sprawia, że oprogramowanie jest niedrogie.

Dodam prosty fragment "metody". To idea zero-defektowego kamienia milowego . Bardzo często w projektach programistycznych mówi się o kamieniach milowych, które reprezentują istotne punkty w projekcie / align = "left" / W większości przypadków widziałem, ludzie mówią, że osiągnęli kamień milowy w momencie, w którym skończyli wpisywać kod dla funkcji w tym milestone. W rzeczywistości oczywiście nie daje to wyobrażenia o postępie w kierunku ukończenia.

Kamień milowy zero-defekt nie próbuje mieć zero defektów. Oznacza to raczej, że nie deklarujesz, że osiągnąłeś kamień milowy, dopóki nie wykonasz testów i nie będziesz mieć pewnego poziomu pewności, że wiesz, jakie są wszystkie twoje błędy are . Możesz wybrać naprawę niektórych przed zadeklarowaniem kamienia milowego, lub nie, ale przynajmniej wiesz, czym one są. Ty decydujesz, ile testów zrobić i jakie błędy są dopuszczalne, ale te rzeczy są uzgodnione z góry.

Ten rodzaj kamienia milowego jest o wiele lepszą miarą tego, jak daleko posunąłeś się w kierunku ukończenia, ale zaskakujące jest to, jak rzadko widzisz projekty zarządzane w ten sposób. Polecam.

 0
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:40:30

Jakie masz wady w swoim oprogramowaniu?

Poza granicami błędów? Odczyt niezinicjalizowanych zmiennych? Dereferencja nieprawidłowych wskaźników? Można je wykryć za pomocą narzędzia do analizy statycznej.

Niepełne zrozumienie wymagań? Tutaj test driven development i kultura przeglądu pomaga.

Problemy projektowe? Ponownie, recenzje są bardzo pomocne.

Używając nieaktualnego kodu? To wymaga kontroli wersji.

I: prowadzić dziennik defektów, więc wiesz co rodzaj wad, które popełniasz.

 0
Author: Markus Schnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 15:44:28

Odniosłem sukces dzięki wzorcowi "release early, release fastly", w którym wybierasz mniej funkcji na raz i intensywnie testujesz te funkcje, zanim dołączysz je do wydania. Funkcje, które nie spełniają kryteriów jakości, nie są uwzględniane w iteracji.

Oczywiście, to nie działa sam i trzeba mieć dobre praktyki rozwoju, jak te wymienione przez Phila, Manrico, Twan i innych...

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 16:05:48

Wszystko jak bove jeśli chodzi o najlepsze praktyki, dobry proces dev + TTD, ale również wykorzystanie ... Testowanie mutacyjne - bardzo fajne narzędzie do pomiaru jakości testów jednostkowych! http://nester.sourceforge.net/

Powodzenia.

/ Ievgenii

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 16:20:58

To jest głupie od podstaw i nie ogranicza się do programowania. Tylko kilka kontrprzykładów. Większość z nas ma prawo jazdy od lat i dlatego już nigdy nie powinni się angażować tylko w wypadku. Jak prawdziwe to jest?

Kolejny przykład, nigdy nie powinno się zdarzyć, że śruby powinny pękać w "normalnych" warunkach, ale nadal tak jest. Mogą być przeciążone, mogą zacząć rdzewieć lub ktoś może pomyśleć, że dobrym pomysłem jest użycie gorszej jakości. I zgadnij czego nie widzisz to, można powiedzieć z dużym prawdopodobieństwem, że ładunek śrub jest ok, ale nie można ich przetestować wyczerpująco. Mogą być w nim słabe miejsca, do diabła, może być tak, że powietrze jest włączone, które prawie nie widać, nie prześwietlając ich. I tak to się ciągle powtarza, gdyby taka postawa była tylko trochę dźwięczna, żylibyśmy w zupełnie innym świecie....

 0
Author: Friedrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-11 11:13:57

Testy jednostkowe! Nie jest to srebrny bullit, ale oszczędza dużo czasu debugowania.

 0
Author: Toon Krijthe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-30 20:49:33