Poprawność
Poprawność
programów.
programów.
Błąd, źródła błędów.
Błąd, źródła błędów.
BUG
BUG
• to w żargonie informatycznym,
wyrażenie oznaczające pewien
błąd
,
usterkę
– niepożądane, powtarzające
się przy zajściu określonych czynników
działanie programu, wynikające z
błędu człowieka na jednym z etapów
tworzenia oprogramowania, zwykle na
etapie projektowania lub tworzenia
kodu źródłowego.
Pochodzenie nazwy „BUG”
Pochodzenie nazwy „BUG”
• Wprowadzenie do
użycia
wspomnianego
terminu
angielskiego jest
przypisywane
admirał
Grace
Brewster Murray
Hopper
Pochodzenie nazwy „BUG”
Pochodzenie nazwy „BUG”
• Podczas prowadzonych w
1945
lub
1947
r
. pracach z prymitywnym
komputerem
Harvard Mark II
operator stwierdził jego nieprawidłowe
działanie i po poszukiwaniach
przyczyny znalazł pomiędzy gołymi
przewodami przekaźnika drobnego
insekta (ang.
bug
) ćmę, która
powodowała spięcie.
DEBUGERY
DEBUGERY
• Bug jako nazwa błędu programistycznego
występuje w nazwach programów
pomagających usuwać błędy, tzw.
debugerów
• Programy te pozwalają śledzić wartości
określonych
zmiennych
i
rejestrów
wykorzystywanych w programie do momentu
wystąpienia
błędu
celem
znalezienia
dokładnego miejsca w
kodzie źródłowym
,
które należy zmienić, by bug się nie pojawiał.
Systemy zbierania informacji o
usterkach
i niedogodnościach w
programach
• BUGZILLA
W systemie Bugzilla błąd może zgłosić
każdy, przez określenie warunków, w
jakich się pojawia. Zgłoszenie jest
następnie przydzielane określonemu
programiście,
a
system
zawiera
aktualne informacje o postępach w
naprawianiu usterki.
Ilość bugów na linijkę kodu jest w
przybliżeniu niezależna od języka,
czyli
program
o
tej
samej
funkcjonalności napisany w języku
wyższego poziomu (np.
Perl
czy
Python
) będzie miał mniej bugów
niż w języku niższego poziomu
(
Java
,
C
, czy
asembler
).
Ilość błędów można
znacząco ograniczyć
poprzez:
•
pisanie testów
pisanie testów -
-
testy te powinny być
w miarę możliwości zautomatyzowane –
komputer potrafi przeprowadzić o kilka
rzędów wielkości więcej testów na
godzinę niż człowiek
•
ręczne audyty kodu
ręczne audyty kodu
-
-
jawne opisanie
założeń jakie przyjmuje kod (np. co do
typów danych wejściowych, czy
spodziewanego sposobu użycia)
Ilość błędów można
znacząco ograniczyć
poprzez:
•
unikanie trudnych w analizie
unikanie trudnych w analizie
konstrukcji
konstrukcji
(jak słynne goto, czy
ewaluacja kodu w trakcie wykonania)
•
używanie narzędzi
używanie narzędzi
wykrywających podejrzane
wykrywających podejrzane
fragmenty kodu
fragmenty kodu
(lint, ostrzeżenia
kompilatora).
TESTOWANIE PROGRAMÓW
TESTOWANIE PROGRAMÓW
• Czasem bugi wykrywa się przez
karmienie programu losowymi
danymi i sprawdzanie
otrzymywanych odpowiedzi.
Ponieważ typowe bugi dotyczą
wielu danych, wykrywa się w ten
sposób większość bugów.
TESTOWANIE PROGRAMÓW
TESTOWANIE PROGRAMÓW
• zwykle testuje się osobno podzespoły
programu, oraz program w całości
(zakładając przy tym, że podzespoły
działają poprawnie)
• testowanie w środowisku sztucznym, za
pomocą emulatorów sprzętu, sieci czy
sztucznego karmienia programu
wydarzeniami udającymi użytkowników
TESTOWANIE PROGRAMÓW
TESTOWANIE PROGRAMÓW
• Testy pisze się zwykle w późnej fazie
rozwoju oprogramowania.
• W metodologii
extreme programming
testy pisze się zanim rozpocznie się
pisanie danej części oprogramowania, co
ma zmniejszyć liczbę błędów.
• Do tworzenia testów i zarządzania nimi
istnieje wiele systemów, tzw.
testing
frameworks
, takich jak
XUnit
.
OGÓLNY BŁĄD
OGÓLNY BŁĄD
OCHRONY
OCHRONY
• (ang.
general
protection
fault
)
w
architekturze
Intel
x86
jest
błędem
pojawiającym się, gdy bieżąco wykonywany
program komputerowy w jakiś sposób
narusza zasady sprzętu, na którym jest
wykonywany.
• Błędy, które powodują wystąpienie ogólnego
błędu ochrony, są zazwyczaj nieodwracalne i
uważa się, że najbezpieczniejszą reakcją na
nie jest przerwanie programu.
PRZYCZYNY BŁĘDÓW
PRZYCZYNY BŁĘDÓW
Wyróżnia się cztery typy
zdarzeń, które powodują
powstanie błędu:
• Błędy pamięci
• Błędy braku uprawnień
• Błędne zachowanie
• Błędy formatu
Błędy pamięci
Błędy pamięci
• Ten przypadek zachodzi, gdy
program próbuje wykonać operację
na
części pamięci komputera
,
do której nie powinien mieć
dostępu.
Błąd pamięci obejmuje:
Błąd pamięci obejmuje:
• Pisanie do
pamięci tylko do odczytu
(ang.
read-only)
• Próbę wykonania bajtów z pamięci, która
nie jest przeznaczona na instrukcje
• Próbę odczytania danych z pamięci
przeznaczonej na instrukcje
• Inne konflikty pomiędzy przeznaczeniem
pamięci a jej użytkowaniem przez
program
Błędy braku uprawnień
Błędy braku uprawnień
• W komputerze są obszary, które są
zarezerwowane do wyłącznego
użytku
systemu operacyjnego
• Jeśli program, który nie jest częścią
systemu operacyjnego próbuje użyć
któregoś z nich, może spowodować
to powstanie błędu ochrony
Błędne zachowanie
Błędne zachowanie
• Specyfikacja architektury
Intela
zawiera
pewne konwencje, do których programy
powinny się stosować, przeważnie ze
względu na ochronę poprawności
danych w programach i pomiędzy nimi.
• Program, który ich nie przestrzega,
może spowodować powstanie ogólnego
błędu ochrony.
Błędy formatu
Błędy formatu
• Ogólny błąd ochrony może się pojawić,
jeśli instrukcja załadowana przez
procesor
jest nieprawidłowa lub zbyt
długa.
Ogólny błąd ochrony może
zostać wywołany z wielu różnych
powodów:
• błędy naruszenia segmentacji poprzez
przekroczenie granic segmentu
• błędy naruszenia segmentacji poprzez
złamanie reguł dostępu do segmentu
• nieprawidłowa zawartość rejestrów
segmentowych
• dostęp do pamięci przy użyciu DS, ES, FS,
lub GS, gdy zawierają one zerowy selektor
• przełączanie zadań (TSS)
Z A D A N I A
Z A D A N I A
Start
...
1. Co w języku informatyków oznacza
wyrażenie „bug”?
a)
a)
Kod źródłowy
Kod źródłowy
b)
b)
Błąd, usterka
Błąd, usterka
2.
2.
Nazwa „bug” wprowadzona została
Nazwa „bug” wprowadzona została
przez:
przez:
a)
a)
Grace Murray Hopper
Grace Murray Hopper
b)
b)
Aleksandra Kopers’a
Aleksandra Kopers’a
DALE
J
WYJD
Ź
3. Debugery to:
a) Błędy pamięci
b) Programy usuwające błędy
4. Wskaż zdanie prawdziwe:
a) Program napisany w języku
wyższego poziomu będzie mieć
więcej błędów niż napisany w języku
niższego poziomu.
b) Błędy powstają głównie na etapie
tworzenia kodu źródłowego.
DALE
J
WYJD
Ź
WSTEC
Z
a
b
5. W metodologii extreme
programming testy pisze się zanim
rozpocznie się pisanie danej części
oprogramowania, co ma
zmniejszyć liczbę błędów.
6. Czym jest ogólny błąd ochrony?
PRAWDA
FAŁSZ
WSTEC
Z
DALE
J
WYJD
Ź
7. Jeśli instrukcja załadowana przez
procesor
jest nieprawidłowa lub zbyt
długa mamy do czynienia z błędem:
a) Braku uprawnień
b) Formatu
8. Co to jest i do czego służy Bugzilla?
WSTEC
Z
DALE
J
WYJD
Ź
9. Jeśli program, który nie jest
częścią systemu operacyjnego
próbuje użyć obszarów, które są
zarezerwowane do wyłącznego
użytku
systemu
operacyjnego
,
wtedy nie może to spowodować
powstania błędu ochrony.
WSTEC
Z
KONIE
C
DOBRA ODPOWIEDŹ
DOBRA ODPOWIEDŹ
POWRÓT
POWRÓT
ZŁA ODPOWIEDŹ
ZŁA ODPOWIEDŹ
POWRÓT
POWRÓT
OGÓLNY BŁĄD
OGÓLNY BŁĄD
OCHRONY
OCHRONY
• (ang.
general protection fault
) w
architekturze
Intel x86
jest błędem
pojawiającym się, gdy bieżąco
wykonywany
program
komputerowy
w
jakiś
sposób
narusza zasady sprzętu, na którym
jest wykonywany.
•
W systemie Bugzilla błąd może
zgłosić każdy, przez określenie
warunków, w jakich się pojawia.
•
Zgłoszenie
jest
następnie
przydzielane
określonemu
programiście, a system zawiera
aktualne informacje o postępach w
naprawianiu usterki.
BUGZILLA
KONIEC
KONIEC