Łukasz Muskietorz Grzegorz Dragon III rok Informatyki inż. Z Grupa A SYSTEMY EKSPERTOWE Sprawozdanie Zastosowanie programu PC-Shell do zaprojektowania systemu dokonującego analizy stanu połączenia sieciowego i uzyskanie informacji zwrotnej. Sosnowiec, 19 listopada 2014r.
1. Opis dziedziny System decyzyjny ma na celu dokonanie heurystycznej analizy stanu połączenia sieciowego i uzyskanie informacji zwrotnej (feedback) na temat kluczowych elementów składających się na poprawne działanie sieci. Zestaw kolejnych pytań naprowadzających pozwala na dokonanie diagnozy problemu i zbliżenie do jego rozwiązania. Pytania zostały skonstruowane w taki sposób, aby eliminować poszczególne możliwości wystąpienia błędów, a dobór zagadnień w nich analizowanych był prosty do zastosowania przez niedoświadczonego użytkownika. Jednocześnie otrzymywany wynik jest precyzyjny i jednoznaczny. Pytania zadawane użytkownikowi zostały podzielone na cztery główne działy: 1. Problemy z konfiguracją połączenia; 2. Problemy z oprogramowaniem, które może blokować połączenie z siecią; 3. Problemy ze sterownikami do sprzętu, które mogą powodować, iż sprzęt nie działa poprawnie; 4. Problemy sprzętowe, czyli możliwość wykrycia problemów w częściach umieszczonych w komputerze. 2. Opis bazy wiedzy Bazę wiedzy tworzy 5 plików: diagnostyka_sieci.bw moduł główny, definiujący źródła wiedzy, blok kontrolny oraz interpretację wniosków konfiguracja_polaczenia.zw plik źródła wiedzy dla problemów związanych z konfiguracją połączenia sieciowego oprogramowanie.zw plik źródła wiedzy dla problemów związanych z oprogramowaniem, mogącym blokować łączność sieciową sprzęt.zw plik źródła wiedzy dla problemów natury sprzętowej sterowniki.zw plik źródła wiedzy dla problemów związanych ze sterownikami urządzeń sieciowych
Każdy z plików źródeł wiedzy zawiera szereg pytań kierowanych do użytkownika systemu oraz kilka reguł złożonych odpowiednio interpretujących odpowiedzi tegoż. Zastosowane atrybuty mają naturę dwuwartościową i przyjmują wartości z zakresu { tak, nie }. Tak przyjęte rozwiązanie pozwala precyzyjniej ująć temat diagnostyki połączenia sieciowego i skuteczniej naprowadzać na potencjalne problemy. Główny moduł bazy wiedzy oprócz deklaracji źródeł wiedzy zawiera blok kontrolny, w którym oprócz opracowania poszczególnych wniosków zachodzi proces zachowania wyników wnioskowania za pomocą instrukcji savesolution oraz zbudowanie i zaprezentowanie użytkownikowi na koniec procesu wnioskowania okna typu popup z krótkim podsumowaniem. 3. Treść bazy wiedzy 3.1 Zawartość pliku diagnostyka_sieci.bw knowledge base diagnostyka_sieci sources problem_konfiguracji_polaczenia : type kb file "konfiguracja_polaczenia.zw"; problem_oprogramowania : type kb file "oprogramowanie.zw"; problem_sterownika : type kb file "sterowniki.zw"; problem_sprzetowy : type kb file "sprzet.zw"; control int Odp; char S1, S2, S3;
run; S1 := "Diagnostyka sieci"; S2 := "Demonstracjny system ekspertowy diagnostyki sieci domowej\ndragon Grzegorz, Muskietorz Lukasz\nUniwersytet Slaski Katowice"; S3 := "Copyright (C) 2014"; // createappwindow; vignette( S1, S2, S3 ); solutionwin( no ); Odp := 1; while( Odp == 1 ) begin char ROZW[1]; char ROZW1[1]; char ROZW2[1]; char ROZW3[1]; int LR; char OB1, ATR1, WAR1; char OB2, ATR2, WAR2; char OB3, ATR3, WAR3; char OB4, ATR4, WAR4; setsystext( problem, "[BDiagnostyka konfiguracji[b" ); solve( problem_konfiguracji_polaczenia, "problem_konfiguracji_polaczenia = Problem_konfiguracji_polaczenia" ); savesolution(rozw, LR); setsystext( problem, "[BDiagnostyka oprogramowania[b" ); solve( problem_oprogramowania, "problem_oprogramowania = Problem_oprogramowania" ); savesolution(rozw1, LR); setsystext( problem, "[BDiagnostyka sterownika[b" ); solve( problem_sterownika, "problem_sterownika = Problem_sterownika" ); savesolution(rozw2, LR); setsystext( problem, "[BDiagnostyka sprzetu[b" ); solve( problem_sprzetowy, "problem_sprzetowy = Problem_sprzetowy" ); savesolution(rozw3, LR); splitoav(rozw[0], OB1, ATR1, WAR1);
splitoav(rozw1[0], OB2, ATR2, WAR2); splitoav(rozw2[0], OB3, ATR3, WAR3); splitoav(rozw3[0], OB4, ATR4, WAR4); char ERROR; ERROR := "false"; if (WAR1 == "tak") begin ERROR := "true"; if (WAR2 == "tak") begin ERROR := "true"; if (WAR3 == "tak") begin ERROR := "true"; if (WAR4 == "tak") begin ERROR := "true"; char MESSAGE; MESSAGE := ""; strcat(message, "System wykryl nastepujace problemy:\n"); strcat(message, ATR1); strcat(message, ": "); strcat(message, WAR1); strcat(message, "\n"); strcat(message, ATR2); strcat(message, ": "); strcat(message, WAR2); strcat(message, "\n"); strcat(message, ATR3); strcat(message, ": "); strcat(message, WAR3); strcat(message, "\n"); strcat(message, ATR4); strcat(message, ": "); strcat(message, WAR4); strcat(message, "\n"); if (ERROR == "true") begin messagebox(0, 0, "Wniosek", MESSAGE); end else begin messagebox(0, 0, "Wniosek", "System nie wykryl problemow z siecia domowa"); confirmbox( 0, 0, "Kontynuowac wnioskowanie?", "Nacisnij 'OK' jesli tak, 'ANULUJ' jesli nie", Odp ); delnewfacts; solutionwin( no );
solutionwin( yes ); 3.2 Zawartość pliku konfigura_polaczenia.zw knowledge source problem_konfiguracji_polaczenia // zrodlo wiedzy badajace konfiguracje polaczenia sieciowego facets single yes; problem_konfiguracji_polaczenia : polaczenie_aktywne : query "Czy polaczenie sieciowe jest aktywne?" ograniczona_lacznosc : query "Czy wystepuje problem ograniczonej lacznosci z siecia lub jej calkowity brak?" poprawne_tcp : query "Czy protokol TCP/IP jest poprawnie skonfigurowany?" rules 1: problem_konfiguracji_polaczenia = "nie" if poprawne_tcp = "tak" & ograniczona_lacznosc = "nie" & polaczenie_aktywne = "tak"; 2: problem_konfiguracji_polaczenia = "tak" if poprawne_tcp = "nie" ograniczona_lacznosc = "tak" polaczenie_aktywne = "nie";
3.3 Zawartość pliku oprogramowanie.zw knowledge source problem_oprogramowania // zrodlo wiedzy badajace problem oprogramowania siecowego facets single yes; problem_oprogramowania : obecny_antywirus : query "Czy uzytkownik korzysta z programu antywirusowego?" zapora_sieciowa : query "Czy uzytkownik korzysta z zapory sieciowej?" proxy : query "Czy uzytkownik korzysta z oprogramowania do obslugi proxy lub VPN?" konfiguracja_antywirusa : query "Czy program antywirusowy zostal poprawnie skonfigurowany?" konfiguracja_zapory_sieciowej : query "Czy zapora sieciowa zostala poprawnie skonfigurowana?" konfiguracja_vpn : query "Czy oprogramowanie do obslugi proxy/vpn zostalo poprawnie skonfigurowane?"
zainfekowany : query "Czy komputer zostal zainfekowany szkodliwym oprogramowaniem uniemozliwiajacym lacznosc z Internetem?" rules 3: problem_oprogramowania = "tak" if (( obecny_antywirus = "tak" & konfiguracja_antywirusa = "nie" ) ( zapora_sieciowa = "tak" & konfiguracja_zapory_sieciowej = "nie" ) ( proxy = "tak" & konfiguracja_vpn = "nie" )) zainfekowany = "tak"; 4: problem_oprogramowania = "nie" if (( obecny_antywirus = "nie" & zapora_sieciowa = "nie" & proxy = "nie" ) ( obecny_antywirus = "tak" & konfiguracja_antywirusa = "tak" ) ( zapora_sieciowa = "tak" & konfiguracja_zapory_sieciowej = "tak" ) ( proxy = "tak" & konfiguracja_vpn = "tak" )) & zainfekowany = "nie"; 3.4 Zawartość pliku sprzet.zw knowledge source problem_sprzetowy // zrodlo wiedzy badajace problem sterownika urzadzenia siecowego facets single yes; problem_sprzetowy : instalacja_karty_sieciowej : query "Czy karta sieciowa jest poprawnie zainstalowana?"
instalacja_routera : query "Czy router jest poprawnie zainstalowany?" poprawnosc_dzialania_karty_sieciowej : query "Czy karta siecowa funkcjonuje prawidlowo?" poprawnosc_dzialania_routera : query "Czy router funkcjonuje prawidlowo?" rules 7: problem_sprzetowy = "tak" if instalacja_karty_sieciowej = "nie" instalacja_routera = "nie" poprawnosc_dzialania_karty_sieciowej = "nie" poprawnosc_dzialania_routera = "nie"; 8: problem_sprzetowy = "nie" if instalacja_karty_sieciowej = "tak" & instalacja_routera = "tak" & poprawnosc_dzialania_karty_sieciowej = "tak" & poprawnosc_dzialania_routera = "tak"; 3.5 Zawartość pliku sterowniki.zw knowledge source problem_sterownika // zrodlo wiedzy badajace problem sterownika urzadzenia siecowego facets
single yes; problem_sterownika : aktualizacja_karty_sieciowej : query "Czy wymagana jest aktualizacja sterownika karty sieciowej?" aktualizacja_routera : query "Czy wymagana jest aktualizacja sterownika routera?" karta_sieciowa_dziala_prawidlowo : query "Czy sterownik karty sieciowej dziala poprawnie?" router_dziala_prawidlowo : query "Czy sterownik routera dziala poprawnie?" poprawnosc_sterownika_karty_sieciowej : query "Czy zainstalowano wlasciwy sterownik dla karty sieciowej?" poprawnosc_sterownika_routera : query "Czy zainstalowano wlasciwy sterownik dla routera?" rules "tak" ) = "nie" ) 5: problem_sterownika = "tak" if ( aktualizacja_karty_sieciowej = "tak" aktualizacja_routera = ( karta_sieciowa_dziala_prawidlowo = "nie" router_dziala_prawidlowo ( poprawnosc_sterownika_karty_sieciowej = "nie" poprawnosc_sterownika_routera = "nie" ); "nie" ) & 6: problem_sterownika = "nie" if ( aktualizacja_karty_sieciowej = "nie" & aktualizacja_routera =
= "tak" ) & ( karta_sieciowa_dziala_prawidlowo = "tak" & router_dziala_prawidlowo ( poprawnosc_sterownika_karty_sieciowej = "tak" & poprawnosc_sterownika_routera = "tak" ); 4. Interpretacja bloku kontrolnego Blok kontrolny opisywanego systemu prezentuje odpowiednio trzy zmienne łańcuchowe, w których nakreśla cechę systemu, autorów oraz datę opracowania. Następnie określa on kilka zmiennych typu char, które posłużą do przechowania wyników wnioskowania z poszczególnych źródeł wiedzy. W bloku tym napotkać można cztery sekcje, na których konstrukcję składają się polecenia: setsystext zaprezentowanie użytkownikowi problemu solve przeprowadzenie wnioskowania w oparciu o zdeklarowane źródło wiedzy savesolution zapisanie wyników wnioskowania do zmiennej Po wykonaniu czterech takich bloków następuje proces ekstrakcji zapisanych wyników do odrębnych zmiennych łańcuchowych przechowujących informacje o obiekcie, atrybucie i wartości, tzw OAV. Operacją wykorzystaną w tym procesie jest polecenie splitoav. Z racji, iż system dedykowany jest diagnostyce sieci, występowanie problemu sieciowego stwierdzić można po wystąpieniu jednego choćby problemu dowolnego typu. Jako, że system bada cztery bloki zagadnień sieciowych, występowanie błędu przynajmniej w jednym z nich jest równoznaczne ze znalezieniem problemu ogólnie. Temu też służy interpretacja danych pozyskanych z operacji splitoav za pomocą szeregu konstrukcji warunkowych if. Posiadając informacje o potencjalnych błędach następuje stosowna konkatenacja zmiennych łańcuchowych w celu opracowania przejrzystego komunikatu dla użytkownika. Komunikat ten zostanie zaprezentowany użytkownikowi w postaci okna messagebox. W przypadku znalezienia problemu sieciowego system informuje użytkownika,
w którym bloku tematycznych dopatrzono się problemu. W przeciwnym razie stwierdza, iż problem sieciowy nie wystąpił. Po zapoznaniu się z tym komunikatem użytkownik może ponownie rozpocząć wnioskowanie, wybierając odpowiednią opcję w prezentowanym oknie typu confirmbox. 5. Przykładowy proces wnioskowania Niniejsza część sprawozdania ukazuje graficznie przykładowy proces wnioskowania okraszony stosownym komentarzem. Po załadowaniu bazy wiedzy w programie PC-SHELL wyświetlone zostaje okno z podstawowymi informacjami o systemie (Rysunek 1). Rysunek 1: Ekran powitalny systemu Po zatwierdzeniu rozpoczyna się proces wnioskowania kolejno czterech modułów: problemów konfiguracyjnych, oprogramowania, sprzętowych i sterowników.
Rysunek 2: Diagnozowanie problemów konfiguracyjnych Pierwszym blokiem jest blok problemów konfiguracyjnych (Rysunek 2). Zadaniem tego bloku jest sprawdzenie stanu połączenia sieciowego, konfiguracji protokołu TCP/IP oraz przepustowości przez określenie potencjalnie ograniczonej łączności. Prawa część powyższego rysunku pokazuje jedną z reguł wykorzystywaną na tym etapie do wnioskowania. Po udzieleniu odpowiedzi na wszystkie pytania tego bloku program przechodzi do bloku związanego z problemami oprogramowania (Rysunek 3). Rysunek 3: Diagnozowanie problemów oprogramowania W tej części system stara się wywnioskować czy na przestrzeni oprogramowania do ochrony antywirusowej, zapory sieciowej czy zestawiania połączenia VPN oraz ich
konfiguracji nie znajduje się żaden problem. Podobnie jak przy poprzedniej grafice, również tutaj można sprawdzić regułę wykorzystywaną w procesie wnioskowania. Jako, że w systemie wykorzystywane są głównie reguły złożone, reguła na powyższym rysunku stanowi doskonały przykład tego typu zastosowań praktycznych. Rysunek 4: Diagnozowanie problemów sterownika Blok następny to blok problemów sterownika (Rysunek 4), w którym system stara się odpowiedzieć na pytanie, czy powstał problem związany z błędnymi sterownikami karty sieciowej, routera, bądź aktualizacjami tychże. Blok ostatni stanowią zagadnienia sprzętowe związane z pracą urządzeń sieciowych (Rysunek 5). Odpowiedzi na pytania tego bloku informują o stanie karty sieciowej i routera. Rysunek 5: Diagnozowanie problemów sprzętowych
Powyższy blok jest ostatnim z czterech wymienionych w charakterystyce opisywanego systemu. Po przeprowadzeniu wnioskowania w każdym z ww. obszarów system prezentuje użytkownikowi okienko z podsumowaniem (Rysunek 6). W tym konkretnym przykładzie jest to komunikat, iż znaleziono problem sieciowy. Rysunek 6: Podsumowanie wyników wnioskowania Kliknięcie OK w powyższym oknie powoduje wyświetlenie okna decyzji, warunkującego rozpoczęcie nowego procesu wnioskowania lub zakończenie procesu (Rysunek 7). Po wybraniu OK system raz jeszcze wchodzi w interakcję z użytkownikiem i proces wnioskowania rozpoczyna się na nowo. W przeciwnym przypadku, tj przy rezygnacji użytkownika z kontynuacji, system kończy swoje działanie. Rysunek 7: Okno decyzji 6. Wady i zalety programu PC-Shell Zastosowanie programu PC-Shell umożliwiło przejście przez algorytm stworzony na potrzeby dokonania analizy stanu połączenia sieciowego. Dużą zaletą programu jest to, że
odpowiedzi implikują kolejne pytania, tj. nie muszą być wyświetlane wszystkie pytania dotyczące danego zagadnienia, jeśli została udzielona odpowiedź wykluczająca dane zagadnienie. Dzięki temu tworzony jest system wspomagający decyzje, które należy podjąć, aby przywrócić połączenie sieciowe. Dodatkowym atutem jest prostota języka używanego do pisania programu w PC-Shell-u. Dzięki temu szkielet systemu można stworzyć bardzo szybko. Niestety negatywną stroną programu PC-Shell okazała się mała intuicyjność interfejsu. Nie każde bowiem polecenia czy przyciski znajdowały się w miejscach, do których przyzwyczajony jest użytkownik (np. przycisk wyjścia z programu). Oczywiście dotyczy to jedynie domyślnego widoku. Co więcej, gorszym problemem przy tworzeniu systemu okazały się skąpe informacje zwrotne dotyczące błędów w programie. Okazuje się bowiem, że podanie numeru wiersza oraz ogólnego opisu błędu nie zawsze wystarcza do tego, by zlokalizować ten błąd i go naprawić.