poniedziałek, 3 maja 2010

Rodzaje nietypowych bugów

Słyszeliście o Heisenbugu? Jeżeli nie, to macie szczęście ;)

Zadziwiające, że nietypowe błędy (bugi) oprogramowania zostały (przeważnie) nazwane od nazwisk wielkich XX wiecznych fizyków. No i jednego matematyka ;)

1. Heisenbug - nazwany od Zasady nieoznaczoności Heisenberga. Błąd ten pojawia się, kiedy program powinien normalnie pracować, ale nie można dojść jego przyczyny, ponieważ w trakcie debugowania wszystko działa i pracuje normalnie.

Przyczyną może być specyficzne działanie debuggera (uruchamia kod bez optymalizacji, czyści pamięć przez co nie ma problemu z niezainicjowanymi zmiennymi itd.) albo to, że nasze procedury mają niespodziewane efekty uboczne lub niewidoczne zależności. Nazwa wzięła się od tego, że podobnie jak w zasadzie nieoznaczoności "im bardziej przypatrujemy się jednej rzeczy, tym gorzej widzimy inne".

2. Bohrbug - od modelu atomu Bohra. Podobnie jak przy dziele słynnego duńskiego fizyka - wiemy dokładnie jak i mamy wyniki eksperymentów, które potwierdzają teorię. Ale nie wiemy dlaczego.

Bohrbug nie znika jak Heisenbug - pojawia się zawsze przy jasno określonych warunkach. Często jednak tych warunków nie znamy (mimo że potrafimy ten błąd wywołać rozpaczliwie klikając) - przez to nie wiemy dlaczego błąd się pojawia. Coś w stylu tego, nad czym spędziłem miło weekend majowy ;)


3. Mandelbug - błąd który sprawia, że zachowanie systemu staje się chaotyczne (a raczej tak skomplikowane, że wydaje się chaotyczne). Nazwany tak na cześć Zbioru Mandelbrota, jednego z najbardziej znanych fraktali.

Jest to świetny przykład, że niechaotyczny system (taki jak komputer) może tworzyć tak skomplikowane efekty, że dla człowieka sprawiają wrażenie chaosu.


4. Schrödinbug - oczywiście od kota Schrödingera. Kot był żywy i martwy jednocześnie, przynajmniej do momentu kiedy otwieramy pojemnik, patrzymy (redukujemy funkcję falową) i... kot już jest tylko w jednym ze stanów.

Podobnie Schrödinbug - ktoś czyta kod działającego programu, trafia na fragment "ale to przecież nie powinno działać" i faktycznie, w tym momencie przestaje. Czyli wcześniej błąd jednocześnie był i nie był obecny w kodzie źródłowym, a dopiero jego przeczytanie ustaliło stan buga.


Ciężko jest stworzyć taksonomię 3 pierwszych błędów (Schrödinbug to ewidentnie inna klasa problemu, bardziej magiczna). Logicznie rzecz biorąc Heisenbug i Bohrbug to przeciwieństwa, a Mandelbug to przypadek szczególny Bohrbuga. Można też twierdzić, iż Heisenbug to przypadek szczególny Mandelbuga - wtedy antonimami są Bohrbug i Mandelbug. Ale szczerze - kogo to obchodzi?


Więcej: http://en.wikipedia.org/wiki/Unusual_software_bug

4 komentarze: