Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

niespójna logika IF/THEN

Termin Definicja
niespójna logika IF/THEN

Niespójna logika warunkowa to reguły, w których warunki wzajemnie się wykluczają lub nie obejmują wszystkich przypadków.

Na czym polega niespójna logika IF/THEN

Niespójna logika IF/THEN występuje wtedy, gdy program podejmuje decyzje na podstawie warunków, które nie tworzą pełnego i jednoznacznego zestawu reguł. Konstrukcja IF sprawdza warunek, a THEN określa działanie wykonywane po jego spełnieniu. Problem pojawia się wtedy, gdy dwa warunki opisują ten sam przypadek, wzajemnie się wykluczają w sposób nieuwzględniony przez autora albo pozostawiają część możliwych danych bez żadnej obsługi. W efekcie program może wybrać niewłaściwą gałąź, wykonać kilka sprzecznych działań lub przejść dalej bez ustawienia wymaganej wartości.

Przykładem jest kod, który dla temperatury poniżej 20 stopni ustawia tryb oszczędny, a dla temperatury poniżej 10 stopni uruchamia tryb awaryjny, lecz sprawdza pierwszy warunek przed drugim. Temperatura 5 stopni spełnia oba warunki, więc rezultat zależy od kolejności instrukcji i użycia konstrukcji IF/ELSE IF albo dwóch niezależnych instrukcji IF. Innym przypadkiem jest obsługa zakresów, w której zdefiniowano przedziały od 0 do 10 oraz od 20 do 30, ale pominięto wartości od 11 do 19. Taki brak pokrycia może ujawnić się dopiero przy danych nietypowych lub po zmianie konfiguracji urządzenia.

Pokrycie przypadków, kolejność reguł i wartości graniczne

Ocena spójności warunków wymaga sprawdzenia trzech właściwości. Po pierwsze, należy ustalić, czy każdy dozwolony stan wejściowy ma przypisaną reakcję. Po drugie, trzeba wykryć przypadki, w których kilka reguł jest prawdziwych jednocześnie. Po trzecie, należy zdefiniować zachowanie dla danych spoza oczekiwanego zakresu, na przykład dla wartości ujemnej, pustego pola, wartości tekstowej zamiast liczby albo braku odpowiedzi z czujnika. Sama poprawność składni programu nie gwarantuje poprawności tych zależności.

Szczególne znaczenie mają wartości graniczne. Warunki x < 10, x > 10 i x = 10 tworzą trzy rozłączne przypadki, ale pominięcie równości pozostawia lukę. Z kolei warunki x <= 10 oraz x >= 10 obejmują wartość 10 dwukrotnie. W praktyce należy zdecydować, czy granica należy do pierwszego, czy do drugiego przedziału. Pomocne jest zapisanie reguł w tabeli decyzyjnej, w której osobno analizuje się kombinacje cech, wartości wejściowe oraz oczekiwane działania.

Skutki błędnych rozgałęzień w działaniu programu

Niespójna logika warunkowa może powodować zarówno widoczne błędy, jak i ciche zniekształcenie danych. Program może wyświetlić nieprawidłowy komunikat, zapisać błędny status, pominąć walidację albo uruchomić procedurę przeznaczoną dla innego stanu urządzenia. W aplikacji sterującej pracą komputera podobna pomyłka może zmienić sposób obsługi zasilania, sieci, temperatury lub dostępności podzespołu. Jeżeli warunek dotyczy wyniku diagnozy, użytkownik może otrzymać informację niezgodną z rzeczywistym stanem systemu.

Do częstych symptomów należą różne wyniki dla tych samych danych, komunikat o braku obsługi mimo spełnienia wymagań, przechodzenie do gałęzi domyślnej oraz wartości pozostające niezainicjalizowane. Błąd może być trudny do odtworzenia, gdy zależy od kolejności odczytu, zaokrąglenia liczby zmiennoprzecinkowej, wartości pustej albo opóźnionej odpowiedzi urządzenia. Dlatego testy powinny obejmować nie tylko typowe dane, lecz także wartości minimalne, maksymalne, graniczne, brakujące i niepoprawne. W konstrukcjach wielowarunkowych warto sprawdzić również każdą kombinację flag, na przykład stan zasilania połączony ze stanem połączenia sieciowego.

Sprawdzanie i porządkowanie warunków IF/THEN

Naprawę niespójnej logiki rozpoczyna się od opisania oczekiwanego przepływu decyzji językiem niezależnym od kodu. Następnie każdy warunek należy sprowadzić do jasno określonego predykatu, czyli wyrażenia zwracającego prawdę albo fałsz. Warto zapisać, jakie wartości może przyjmować każda zmienna, czy może być pusta oraz czy dane wejściowe są wcześniej konwertowane i walidowane. Dopiero potem można ustalić kolejność gałęzi, połączyć warunki operatorem AND lub OR albo dodać jawny przypadek domyślny.

W kodzie należy unikać warunków częściowo nakładających się bez uzasadnienia. Jeżeli reguły mają być rozłączne, można użyć konstrukcji IF/ELSE IF/ELSE i zakończyć ją gałęzią obsługującą wartości nieoczekiwane. Jeżeli kilka działań ma być wykonanych niezależnie, trzeba zastosować osobne instrukcje IF, ale wtedy należy sprawdzić, czy ich skutki nie nadpisują się wzajemnie. Test jednostkowy powinien potwierdzać wynik dla każdej klasy danych, a test integracyjny — zachowanie całego przepływu po pobraniu danych z systemu operacyjnego, sterownika lub podzespołu. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów, w tym analizą problemów programowych ujawniających się w codziennym działaniu urządzenia.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę