Automatyczne testowanie jądra Linuksa notatki
|
|
- Helena Makowska
- 8 lat temu
- Przeglądów:
Transkrypt
1 Szymon Giżecki Chu Hong Hai Mateusz Kopeć Automatyczne testowanie jądra Linuksa notatki Metodologie przygotowywania i przeprowadzania testów poprawnościowych Statyczna analiza kodu Idea Zanim przejdziemy do budowania aplikacji i testowania jej działania można się pokusić o sprawdzenie poprawności kodu źródłowego. Jest to możliwe dzięki technikom statycznej analizy kodu. Korzystając z metod matematycznych i informatycznych, staramy się dowodzić poprawności programu bądź też próbujemy pokazać, że program błędnie działa (i zlokalizować ten błąd). Metody Istnieje dużo technik służących statycznej analizie kodu, m.in.: Weryfikacja modelowa (model checking) tworzymy uproszczony model z ograniczoną liczbą stanów, potem sprawdzamy czy ten model spełnia żądane wymagania. Analiza przepływu danych (data flow analysis) zbiera informacje o możliwych wartościach wszystkich zmiennych programu w pewnym momencie wykonania. Abstract interpretation tworzy abstrakcyjną maszynę, która aproksymuje działanie pierwotnego systemu. Dobrze stworzona abstrakcyjna maszyna spełnia bardzo ważną zależność: każda prawdziwa właściwość w niej jest również prawdziwa dla pierwotnego systemu. Asercje warunki logiczne, które muszą być spełnione przez kod programu. Semantyka określenie semantyki (operacyjnej, denotacyjnej) programu pozwala wykryć pewne pułapki danego języka programowania. Narzędzia Można bez trudu znaleźć narzędzia pomocne w statycznej analizie kodu, zarówno darmowe jak i komercyjne. Warto tu wspomnieć o: Sparse specjalnie zaprojektowany do szukania błędów w jądrze Linuksa. Cppcheck wykrywa wycieki pamięci, przepełnienie bufora i inne typowe błędy. Coverity Prevent komercyjna aplikacja do analizy kodu w C/C++, C#, Javie
2 Przygotowanie testów Wybór zestawów testowych Testy powinny mocno obciążyć główne zasoby (CPU, pamięć, I/O, networking) oraz pokryć dużą część kodu jądra. Pierwsze wymaganie zapewnia stabilność systemu w krytycznych sytuacjach. Drugie daje gwarancję, że jądro działa poprawnie w prawie wszystkich swoich czynnościach, a nie tylko tych najczęściej wykonywanych. Podczas wyboru testów zwracamy uwagę również na to, czy są one automatyczne (lub półautomatyczne). Pozwala to na testowanie stabilności przez długi okres czasu (do 90 dni) bez ingerencji człowieka oraz powtarzanie testów w podobnych warunkach. W przypadku projektu Open Source, jakim jest jądro Linuksa, dobrze jest również wybrać testy, które umożliwiają łatwą (darmową) publikację wyników w ogólnie przyjętym formacie. Dzięki temu różne zespoły pracujące nad tym samym projektem mogą korzystać z wysiłku innych i ta sama praca nie będzie wykonywana wielokrotnie. Ocena wykorzystania zasobów systemowych Cztery zasoby, które głównie odpowiadają za czas reakcji systemu i które powinny być mocno obciążone podczas testów: CPU: czas spędzony na procesowaniu danych przez jednostki procesorowe pamięć: czas spędzony na odczytaniu/zapisaniu danych z/do fizycznej pamięci I/O: czas spędzony na odczytaniu/zapisaniu danych z/do dysku fizycznego networking: sieci Do oceny, czy dany zestaw testów odpowiednio obciąża dane zasoby, warto korzystać z narzędzi: top, sar i iostat top pozwala szybko sprawdzić, które zasoby (CPU, pamięć, I/O) są wykorzystywane przez testy sar zbiera i tworzy raport o aktywności systemu iostat monitoruje I/O, potrafi podać raporty co pewien czas (iostat x 1 podaje rozszerzone statystyki co 1 sekundę)
3 Gdy dana kombinacja testów jest już wybrana, trzeba uruchomić te testy przez odpowiednio długi okres czasu by dokładnie ocenić, czy spełniają nasze wymagania. Równolegle z testami narzędzie sar powinno być uruchamiane. Analiza pokrycia kodu jądra W normalnym użytkowaniu tylko mała część funkcjonalności jądra Linuksa jest wykorzystywana. Nawet testy intensywnie obciążające główne zasoby systemowe nie są w stanie pokryć dużej części kodu. Dlatego obowiązkiem testera jest ocena stopnia pokrycia kodu przez testy i ewentualne dobranie dodatkowych jednostek, by zapewnić uniwersalność całego zestawu. Istotną pomoc w tym zajęciu mogą stanowić 2 narzędzia: gcov i lcov. Ocena końcowego testu obciążeniowego Wybrany zestaw testowy należy uruchomić na stabilnej wersji jądra przez dłuższy okres czasu. Ma to dwojaki cel: wykonanie testu na stabilnym jądrze pozwala wykryć i usunąć konflikty między samymi testami, a wynik narzędzia sar posłuży jako punkt odniesienia dla przyszłych uruchomień tego zestawu testowego. Po tych 4 krokach możemy uznać przygotowanie testów za zakończone i przystąpić do ich uruchomienia. Przeprowadzenie testów Kryterium oceny Za miarę stabilności i niezawodności systemu uznajemy jego czas ciągłego i bezawaryjnego działania. W związku z tym testy są uruchomione i działają bez przerwy przez długi okres czasu (30, 60, 90 dni). Przed testem właściwym często jest uruchomiony 24 godzinny test wstępny w celu sprawdzenia poprawności systemu. Podczas testowania odpowiednie narzędzia bez przerwy zbierają statystyki dotyczące systemu. Aby ustawić cykliczne zapisywanie danych statystycznych można używać narzędzia cron. Metodologie przygotowywania i przeprowadzania testów wydajnościowych. Techniki pozwalające na poprawne odczytywanie informacji o wydajności Co mierzymy Przed przystąpieniem do przeprowadzenia testów wydajnościowych musimy zdefiniować sposób ilościowego mierzenia wydajności. 1. Na początku określamy miarę, której będziemy używać do testów np. ilość wysłanych wiadomości na sekundę. 2. Potem upewniamy się, że wybrane benchmarki są odpowiednie do mierzenia wydajności i obciążenia komponentów jądra. 3. Tworzymy również dokumentację, która pozwoli innym powtórzyć nasze testy. 4. Na końcu określamy, jakie dane są zebrane w celu badania wydajności systemu. Zanim uruchomimy testy musimy odpowiednio dostosować sprzęt i oprogramowanie. Ma to
4 zapobiegać błędnym odczytom spowodowanym niechcianymi czynnikami. Sam proces polega na cyklicznym ustawianiu i mierzeniu obciążenia zasobów systemowych, jak również i parametrów hardware u w pracy. Narzędzia Odczytanie informacji o wydajności wymaga użycia specjalnych programów. Na szczęście istnieje szereg narzędzi Open Source, które to zadanie wykonują. Korzystanie z tych programów oprócz oczywistej zalety w postaci ceny (a raczej braku) ma również inne, niebagatelne znaczenie: wyniki naszych badań będą mogli przetwarzać inni ludzie w Open Source Community. Narzędzia, z których można korzystać to m.in. wirtualny system plików /proc lockmeter (SGI) zajmuje się spinlockami kernprof (SGI) profiler kernela trace facility (IBM) narzędzie do trace'owania IBM sstat monitoruje szynę SCSI schedret zbiera statystyki o schedulerze acgparse bierze ACG (annotated call graph) z kernprof i przetwarza dalej Oprócz narzędzi OSC (Open Source Community) czasami potrzebne będą testy przeprowadzone sprawdzonymi, standardowymi (w przemyśle) benchmarkami.
5 Fault Injection i Linux Test Project 1). Mechanizm Fault Injection Każde dobrze napisane oprogramowanie musi mieć mechanizmy obsługi błędów i wyjątków. Problem tkwi jednak w tym, iż jednocześnie staramy się uniknąć wykonywania tych ścieżek, ponieważ naszą oczywistą intencją jest pisanie programów bez błędów. Mechanizm fault injection pozwala właśnie na testowanie zachowania naszego oprogramowania w momencie wystąpienia błędu, poprzez jego sztuczne wywołanie. 2). Rodzaje Fault Injection Rozróżniamy dwa rodzaje fault injection : software implemented fault injection runtime fault injection Ta pierwsza polega na skompilowaniu programu z kodem który automatycznie uruchomi pożądany błąd. Prosty przykład: mamy funkcję int fun(int a)zwracającą nieujemne liczby oraz pewne miejsce w programie: if(fun(a) > 10) { coś } else { coś2 } możemy do programu dodać funkcję int fj_foo(int a) { return a + 10; } i teraz obudowujemy naszą funkcję w foo, czyli: if(foo(fun(a)) > 10) { coś } else { coś2 } Jest to oczywiście bardzo prosty przykład, jednak można się domyślić, że używanie tego pierwszego rodzaju fault injection jest w istocie dosyć uciążliwe, gdyż za każdym razem musimy przekompilowywać nasz kod. Drugi sposób, czyli runtime fault injection polega na bezpośrednim manipulowaniu pamięcią lub rejestrami CPU, tak aby sztucznie wywołać błąd programu lub systemowy w trakcie działania testowanego kawałka kodu. W Unixie mamy nawet dostępne biblioteki
6 pozwalające na użycie tego mechanizmu (np. fault.c, która przykładowo pozwala na wywołanie błędu Segmentation Fault, itd.) Są również specjalne apliakcje ułatwiające korzystanie z ww. mechanizmu. Taką aplikacją jest np. FERRARI, czyli Flexible Software Based Fault and Error Injection System. Aplikacja ta niewątpliwie ułatwia używanie fault injection, nie czyni go jednak prostym. 3). Linux Test Project Informacje ogólne Został zainicjowany przez konsorcjum SGI. Do tego momentu, aby testować linuxa, koniecznym było używanie wielu różnych programów z testami, a i tak duża część funkcjonalności jądra systemu nie mogła być testowana. Stąd pomysł na stworzenie jednej dużej aplikacji pozwalającej na kompleksowe testowanie jądra systemu. Projekt ten został przejęty przez IBM, którego własnością jest do dzisiaj. Jest on tworzony jako cały czas rozwijane oprogramowanie Open Source. Zawiera obecnie ponad 3000 testów. Napisany jest głównie, bo w ponad 94%, w C; pozostałe języki to Perl i Shell, używane przede wszystkim do processing'u danych. LTP jest używany głównie przez developerów jądra, a także przez entuzjastów oraz hackerów. Przed uruchomieniem LTP zaleca się dokładne przetestowanie komputera (hardware'u), do czego posłużyć może Memtest86 oraz CPUBurn. 4). LTP Rodzaje testów Unit testing testowanie pojedynczych funkcjonalności, w możliwie jak największej izolacji od reszty systemu Integration testing kiedy już mamy przetestowane pojedyncze części systemu, to należy sprawdzić, czy i jak współpracują one ze sobą System testing testowanie API kernela Regression testing testowanie zgodności oprogramowania, które piszemy z różnymi wersjami oprogramowania/jądra Strees testing testowanie ww. elementów pod dużym obciążeniem systemu LTP natomiast nie udostępnia mechanizmów do testowania wydajności systemu (tzw. benchmarków) oraz nie pozwala na testowanie samej kompilacji programów. 5). LTP struktura LTP pozwala na testowanie wielu różnych części jądra systemu. Przede wszystkim API jądra, zarządzania pamięcią, scheduler'a, wątków jądra, przeróżnych systemów plików, podsystemu /proc, sieci, oraz sterowników wielu urządzeń (np. DVD, CDROM, FDD, a nawet już prawie nigdzie nie używanych taśm TAPE)
7 Testy są ułożone w bardzo przejrzystą strukturę, co ułatwia korzystanie z LTP. 6). LTP diagram działania Zanim zostanie uruchomiony wybrany test, tworzony jest obraz czystego systemu. Tzn. moduł GCOV zbiera informacje odnośnie ilości wykonań linii kodu systemu potrzebnych do jego normalnej pracy, aby później móc odfiltrować te wykonania od tych, które były uruchamiane przez nasz test. Następnie uruchamiany jest wybrany test. Moduł GCOV w tle zbiera informacje na które linie kodu ma on wpływ. Wszystkie te dane zapisywane są jako kod ASCII, później przetwarzany do kodu HTML 7). LTP zbieranie danych Testy w LTP są ułożone w drzewiastą strukturę. Tzn. na samym spodzie są dostępne testy, które mają wpływ na wiele różnych części systemu, natomiast im schodzimy niżej w hierarchii katalogów, tym testy stają się coraz bardziej wyizolowane. Pomaga to w zdefiniowaniu relacji pomiędzy wybranymi testami, a modułami systemu, których będą one dotyczyć. Twórcy LTP przy jego tworzeniu musieli dokonać wyboru odnośnie sposobu uruchamiania
8 testów. Wybór mianowicie dotyczył stopnia automatyzacji. Podejście manualne, bardzo elastyczne i pozwalające na dowolne personalizowanie ustawień, jednocześnie byłoby niewygodne przy testowaniu dużych systemów. Dlatego też twórcy zdecydowali się na automatyzację tego procesu, zostawiając jednakże pewne możliwości konfiguracji. 8). LTP Processing danych Jak już było wspomniane, LTP przy pomocy GCOV tworzy obraz systemu podczas normalnej pracy, tzw. Raw Coverage Data. Odfiltrowuje później te dane od informacji dotyczących pokrycia systemu w czasie działania testu, dodaje dane dotyczące przebiegu i działania tegoż testu i przetwarza je wszystkie do formatu HTML. Został on wybrany, ze względu na łatwość publikacji wyników działanie testów, co ma ułatwiać pracę grupową, a także ze względu na przenośność tego formatu. W wyniku dostajemy informacje o rezultacie zakończenia się testu częściach jądra na które miał on wpływ częściach dotkniętego podsystemu, których test nie dotyczył oraz szczegółowe informacje o wykonywaniu się linii kodu (ile razy która linia została uruchomiona, z jaką częstotliwością) 9). LTP Rozwój Poniżej mamy przedstawiony diagram dotyczący pokrycia poszczególnych części systemu przez testy dostępne w LTP w wersji z roku 2002 i 2008: LTP 2002
9 LTP marzec 2008 Jak widać uczyniony został ogromny postęp. Co ciekawe, w roku 2002 autorzy zakładali pokrycie równe 50%, za wiarygodne i nie wymagające dalszego rozwijania. Dzisiaj ta granica przesunęła się w okolice 66%. Poniżej przedstawiam jeszcze jeden diagram pokazujący rozwój LTP w bardzo krótkim okresie 3 miesięcy:
10 10). LTP Tworzenie własnych testów Oczywiście każdy może stworzyć testy, które można przesłać na stronę projektu i liczyć na włączenie do kolejnego wydania. Poniżej przedstawiam diagram działania takiego testu: Najpierw oczywiście należy zadbać o dołączenie bibliotek LTP, oraz przydzielić naszemu testowi unikatowy numer. Oczywiście nasz test musi rozpoznać wersję i architekturę jądra. Po wykonaniu się właściwego testu musi on zapisać wszystkie dane do odpowiedniego pliku logu. Test póki co musi być napisany w C. Bardzo ważne jest, aby uruchomienie testu nie wymagało żadnej manualnej pre konfiguracji systemu. Takową, jeśli jest niezbędna, można przeprowadzić w treści samego testu. LTP udostępnia nam również zestaw makr pomocnych przy pisaniu testu, jak np. TEST(), TEST_PAUSE, itd., oraz predefiniowane zmienne takie jak TEST_RETURN, czy TEST_ERRNO. Właściwy test powinien być funkcją zwracającą 1 lub 0, którą należy uruchomić wewnątrz makra TEST(). Oczywiście ustawia ona ww. zmienne. API do tworzenia testów udostępnia nam również funkcje ułatwiające sterowanie przebiegiem
11 testu. Np. przy użyciu funkcji char *parse_opts(int argc, char *argv[], option_t option_array[], void (*user_help_func)()); możemy w łatwy sposób mieszać i przekazywać opcje sterowania testem z opcjami samego testu. Opcje sterowania testem, to np. utworzenie n instancji testu działających równolegle itp. 11). LTP przykładowe wyjście
12 Powyżej przedstawione są przykładowe wyjścia LTP. Po kliknięciu w żądaną bibliotekę w oknie raportu GCOV, otrzymamy szczegółowe informacje dotyczące jej pokrycia. 12). LTP Co dalej? Projekt LTP jest cały czas rozwijany. Oto główne cele postawione przez jego developerów: Umożliwienie pisania testów w Perlu i być może innych językach Dodanie nowych obszarów dostępnych do testowania. Przede wszystkim modułu odpowiedzialnego za zarządzanie mocą, ale także KDUMP i innych Przetwarzanie zebranych danych nie tylko do formatu HTML, ale również XML Dodanie testów wydajnościowych systemu A przede wszystkim pisanie coraz większej ilości testów, aby pokryć około 2/3 kodu wszystkich modułów na które testy mają wpływ 13). Linux Benchmark Suite Jest to zbiór testów niejako uzupełniający LTP. Zawiera dużo mniej testów, ale ma między innymi: Kernel Lockmetering, czyli testowanie i zbieranie statystyk używania semaforów i spin locków przez jądro Kernele Profiling, czyli szczegółowe informacje o aktywności jądra UnixBench, czyli zbiór benchark'ów testujący procesor i operacje wejścia wyjścia pod zróżnicowanym obciążeniem SPEC CPU2000, benchmark, który oprócz testowania CPU potrafi również mierzyć wydajność kompilacji 14). HINT Jest to benchmark stworzony na zlecenie departamentu energii USA. Według zapewnień jego twórców używa zupełnie innego podejścia do mierzenia wydajności systemu, co przekłada się na większą dokładność, lepszą skalowalność i wysoką wiarygodność. Owo podejście zostało nazwane QUIPS, czyli QUality Improvement Per Second. W uproszczeniu jest to ilość uszczegółowień pewnej funkcji w czasie. Funkcja ta jest identyczna dla wolnych systemów oraz dla superkomputerów (w przeciwieństwie do innych benchmarków), przez co wyniki są bardzo łatwo porównywalne. Poniżej przedstawiony jest przykładowy rezultat działania tego testu. Co ciekawe był on wykonany na dwóch, teoretycznie identycznych maszynach (ten sam software i hardware).
13 Pokrycie kodu testami (GCOV) 1. Czym jest COV? Pokrycie kodu (ang. code coverage) jest miarą używaną w testowaniu oprogramowania. Opisuje ona stopień w którym sam kod programu został przetestowany. Ponieważ sprawdzanie kodu następuje w sposób bezpośredni, tę formę testów należy zaliczyć do rodzaju white box testing. (testy białej skrzynki) Warto dodać, że pokrycie kodu testami jest jedną z pierwszych wprowadzonych technik systematycznego testowania oprogramowania. 2. Kryteria pokrycia W celu zmierzenia, jak dokładnie zestaw testów sprawdza program, używa się jedego lub wielu kryteriów pokrycia. Można wymienić ich wiele, to są najważniejsze z nich: Pokrycie funkcji (function coverage) czy każda funkcja w programie została wykonana? Pokrycie instrukcji (statement coverage) czy każda instrukcja kodu źródłowego została wykonana? Pokrycie decyzji/rozgałęzień (decision/branch coverage) czy każda struktura kontrolna (jak na przykład instrukcja if) wyliczyła się zarówno do true, jak i false? Pokrycie warunków (condition coverage) czy każde podwyrażenie boolowskie wyliczyło się do true jak i do false? (to implikuje oczywiście pokrycie decyzji) Pokrycie ścieżek (path coverage) czy każde możliwe przejście przez dany fragment kodu zostało wykonane? Pokrycie wejścia/wyjścia (entry/exit coverage) czy każde możliwe wywołanie i każdy możliwy powrót z wywołania funkcji zostały wykonane? Aplikacje o znaczeniu krytycznym dla bezpieczeństwa (safety critical) najczęściej muszą osiągnąć 100% pokrycia niektórych z powyższych kryteriów. Niektóre z kryteriów są połączone, na przykład, pokrycie ścieżek implikuje pokrycie decyzji, instrukcji i wejścia/wyjścia, a pokrycie decyzji wymusza pokrycie instrukcji, ponieważ każda instrukcja jest częścią jakiegoś rozgałęzienia. Łatwo się domyślić, że pełne pokrycie kodu testami jest zwykle niepraktyczne, a nawet niemożliwe. Każdy moduł posiadający n decyzji może mieć do 2n ścieżek do przetestowania, a pętle mogą implikować nieskończone ilości możliwych przejść programu. (wiele modułów działa przecież w nieskończonych pętlach) Wiele ścieżek może też być niewykonywalnych dla żadnego możliwego wejścia programu, czyli mogą nie istnieć dane testowe które spowodują wykonanie pewnego fragmentu kodu. Niestety, ogólny algorytm szukania nieosiągalnych ścieżek nie istnieje (ponieważ mógłby być użyty jako rozwiązanie problemu stopu, którego brak udowodnił w 1936 roku Alan Turing). Praktycznie zatem stosuje się techniki, pozwalające na grupowanie ścieżek w klasy, różniące się jedynie ilością wykonań pętli, a następnie pokrywanie każdej z klas ścieżek, nie zaś każdej pojedynczej ścieżki. 4. Analiza pokrycia testami kodu jądra Osiągnięcie właściwego pokrycia testami kodu jądra należy do obowiązków zestawu testów systemu. Mimo że grupa testów może obejmować intensywne użycie wszystkich czterech głównych zasobów systemowych, niekoniecznie będzie ona wykorzystywać więcej niż małą
14 część kodu kernela. Jeżeli zatem chcemy posiadać test z prawdziwego zdarzenia, a nie jedynie generator obciążenia systemu, nie możemy zapomnieć o pokryciu kodu testami. Można wymienić dwa open source'owe narzędzia pomocne w tym zadaniu: gcov: Program rozwijany głównie przez Linux Test Project, umożliwiający rozpoznanie ile razy dana linia kodu, funkcja lub gałąź aplikacji (w naszym wypadku jądra) zostały wywołane. Użycie gcov a wymaga skompilowania programu za pomocą gcc z użyciem odpowiednich flag. Zatem w naszym przypadku wymaga rekompilacji jądra, oraz dodatkowo nałożenia na nie odpowiedniej łatki. Gcov za pomocą systemu /proc potrafi wygenerować odpowiednie statystyki. Przykład wyników gcov dla programu tmp.c: 0:Source:tmp.c 0:Graph:tmp.gcno 0:Data:tmp.gcda 0:Runs:1 0:Programs:1 1:#include <stdio.h> 2: 3:int main (void) function main called 1 returned 1 blocks executed 75% 1: 4:{ 1: 5: 6: 1: 7: 8: 11: 9: int i, total; total = 0; for (i = 0; i < 10; i++) branch 0 taken 91% (fallthrough) branch 1 taken 9% 10: 10: 11: 1: 12: total += i; if (total!= 45) branch 0 taken 0% (fallthrough) branch 1 taken 100% #####: call call 13: printf ("Failure\n"); 0 never executed 14: 1: 15: else printf ("Success\n"); 0 called 1 returned 100% 1: 16: 17:} return 0; lcov: Aplikacja stworzona przez IBM i rozwijana przez Linux Test Project, będąca rozszerzeniem gcov a. Zawiera zestaw skryptów w perlu budujących na podstawie tekstowych wyników gcov a graficzną prezentację w formacie HTML. Wynik obejmuje pokrycie procentowe, wykresy i strony statystyk, umożliwiające sprawne przeglądanie uzyskanych danych.
15 Po załadowaniu modułu gcov a, należy uruchomić wszystkie testy jądra z naszego zestawu. Mimo że w rzeczywistości część testów mogłaby być wykonywana równolegle, należy to zrobić iteracyjnie. Każdy test powinien być uruchomiony dokładnie raz. Takie pojedyncze, iteracyjnie wywoływanie ma służyć zmniejszeniu ilości nieprzewidywalnych i niecelowych wywołań kodu jądra, które próbowałoby zbalansować liczne i równoległe wątki różnych testów. Po zakończeniu testów można przejść do analizy uzyskanych danych za pomocą lcov a. Wyniki tego ostatniego obejmują każdą linię kodu jądra, której wywołania są agregowane w wyniki procentowe dla danych sekcji i plików kernel a. Przykład pokazujący, jak takie wyniki mogą wyglądać: Projektanci lcov a zdefiniowali sastysfakcjonujące pokrycie (kolor zielony) w sposób odgórny, dlatego nie powinien to być wyznacznik jakości testu. Jednakże dostępne dokładne statystyki pozwalają każdemu na własną ocenę stanu pokrycia kodu testami. Tworzący zestaw testów może przeanalizować wyniki i uwzględnić widoczne braki za pomocą dodatkowych testów dołączonych do zestawu.
16 5. Profilowanie czasu wykonania Często wraz z programami testującymi pokrycie kodu (jak gcov) używa się programów sprawdzających czas wykonywania poszczególnych linii kodu, funkcji lub modułów(np. Gprof). Dzięki temu tzw. wąskie gardła (ang., bottle neck) mogą zostać szybciej zidentyfikowane i zlikwidowane. Tracing 1. Czym jest tracing? W inżynierii oprogramowania, tracingiem nazywamy logowanie informacji o wykonaniu programu w trakcie jego wykonywania, głównie do celów odpluskwiania programów. 2. logging vs tracing Logowanie zdarzeń Głównie używane przez administratorów systemów Tracing Głównie używany przez developerów Logowanie informacji wysokopoziomowych (jak np. Logowanie informacji niskopoziomowych błąd przy instalacji programu) (jak np. rzucony wyjątek) Nie może być zbytnio rozrzutny (zawierać wielu zduplikowanych informacji lub informacji nieprzydatnych dla użytkowników) Może sobie na to pozwolić Wymagany najczęściej ustalony format wyników Niewielkie ograniczenia na format wyników Wiadomości w wersjach językowych Rzadko jest to brane pod uwagę Elastyczność ze względu na nowe rodzaje zdarzeń nie jest wymagana Elastyczność ze względu na nowe rodzaje zdarzeń jest kluczowa Tracing jest gorącym tematem w społeczności linuxowej, głównie ze względu na to, że Sun Microsystems wkłada mnóstwo energii w reklamowanie Solarisowego Dtrace'a. W Linuxie jednak również nie brakuje narządzi do trace owania, natomiast dostępność ich dla szerszej publiczności powinna zostać poprawiona. 3. Najważnejsze cechy narzędzia do trace'u: Zajrzenie w głąb działającego systemu Wyszukiwanie wąskich gardeł systemu Śledzenie wykonań procesów i środowiska w którym się wykonują (coś jak zaglądanie pod maskę samochodu jadącego 160 km/h) Tryb flight recorder czarna skrzynka samolotu obejrzenie archiwalnych danych w wypadku, gdy coś pójdzie źle. Możliwość zaglądania zarówno w przestrzeń użytkownika jak i jądra 4. Przykładowe narzędzia do tracingu: SystemTap SystemTap to open sourcowe narzędzie zapewniające prosty interfejs poprzez linię poleceń i własny język skryptowy. Aktualnie wykorzystywany m.in. w: Red Hat, IBM, Intel, Hitachi i Oracle.
17 Przykład skryptu: probe syscall.open { printf ("%s(%d) open (%s)\n", execname(), pid(), argstr) } probe timer.ms(4000) # after 4 seconds { exit () } I jak to działa w praktyce: vmware guestd(2206) open ("/etc/redhat release", O_RDONLY) hald(2360) open ("/dev/hdc", O_RDONLY O_EXCL O_NONBLOCK) hald(2360) open ("/dev/hdc", O_RDONLY O_EXCL O_NONBLOCK) hald(2360) open ("/dev/hdc", O_RDONLY O_EXCL O_NONBLOCK) df(3433) open ("/etc/ld.so.cache", O_RDONLY) df(3433) open ("/lib/tls/libc.so.6", O_RDONLY) df(3433) open ("/etc/mtab", O_RDONLY) hald(2360) open ("/dev/hdc", O_RDONLY O_EXCL O_NONBLOCK) Dtrace for Linux DTrace, inaczej Dynamic Tracing Framework, to zaawansowane narzędzie służące do monitorowania i diagnozowania działania systemu i aplikacji, opracowane przez firmę Sun dla systemu operacyjnego Solaris. Prace nad wersją linuxową wciąż trwają, działa ona już dla wielu wersji jądra, jednak bez pełnej funkcjonalności. Kprobes Kernel Dynamic Probes (Kprobes) posiada lekki interfejs do umieszczania w kodzie tzw. probów i ustawiania ich obsługi. Probe to automatyczny breakpoint dynamicznie wstawiany w wybrany moduł działający w przestrzeni jądra, bez konieczności modyfikacji kodu źródłowego. LTTng (Linux Trace Toolkit) i LTTV (Linux Trace Toolkit Viewer) Jak sama nazwa wskazuje, LTTng jest programem do tracowania jądra systemu Linux. LTTV analizuje i przedstawia w sposób graficzny wyniki. W przeciwieństwie do kprobes, LTTng jest statyczny, w tym sensie, że probe'y muszą być na stałe umieszczone w kodzie jądra. Jego główne założenia dotyczą prostoty i wysokiej wydajności.
18 Przykładowe testy jądra 1. Bootchart Bootchart to narzędzie do analizy wydajności i wizualizacji procesu bootowania systemu Linux. Umożliwia ono zbadanie użycia zasobów (jak procesor i dysk twardy) oraz przyjrzenie się dokładnie, jakie procesy i w jakiej kolejności są uruchamiane przy ładowaniu systemu. Projekt ten powstał jako odpowiedź na wyzwanie postawione przez Owena Taylora na liście mailingowej developerów Fedory: (tłumaczenie własne) Wyzwaniem jest stworzenie aplikacji ukazującej na jednym rysunku, co dzieje się podczas bootowania systemu i wskazanie szans na optymalizację tego procesu, poprzez ukazanie jak bardzo rzeczywiste bootowanie odbiega od idealnego, w którym nieustannie występuje 100% zapotrzebowanie na procesor i dostęp do dysku. Bootchart używa skryptu powłoki uruchamianego przez jądro w fazie init. Skrypt działa w tle i zbiera z systemu plików /proc informacje o procesach, statystyki użycia CPU i dysku. Dane są przechowywane w pamięci i zapisywane na dysk po zakończeniu ładowania systemu operacyjnego. Logi są następnie za pomocą aplikacji napisanej w Jave przetwarzane do graficznego formatu: PNG, SVG lub EPS. Wykres może być użyty do analizy zależności procesów i ogólnego zużycia zasobów systemowych w trakcie bootowania systemu. Jak to działa? System zamiast /sbin/init uruchamia logger /sbin/bootchartd przy starcie systemu, co uzyskujemy za pomocą odpowiedniej modyfikacji GRUB a lub LILO. Program /sbin/bootchartd uruchamia od razu /sbin/init, ale jednocześnie zaczyna zbierać dane do wirtualnego systemu plików (tmpfs), ponieważ partycja root a jest w trakcie bootowania zamontowana w trybie tylko do odczytu. Gdy tylko system plików /proc zostanie zamontowany, logger zbiera informacje z wielu plików: /proc/stat statystyki CPU dla: usera, systemu, IO, idle /proc/diskstats statystyki dyskowe: aktualne użycie i przepustowość (tylko w jądrach 2.6) /proc/[pid]/stat informacje o działających procesach: czas uruchomienia, PID rodzica, stan procesu, użycie CPU, itp. Zawartość tych plików jest dopisywana do odpowiednich logów, domyślnie co 0.2 sekundy. Zakończenie bootowania bootchart wykrywa poszukując specyficznych procesów, jak np. gdmgreeter, kdm_greet, itp. (run level 5). Warto zwrócić uwagę na to, że krótko żyjący proces może zakłócić spójność zbieranych informacji, ponieważ nie zostanie zauważony przez logger. Jest jednak możliwość poradzenia sobie z tym problemem za pomocą odpowiedniej konfiguracji bootcharta i jądra mianowicie użycia BSD process accounting v3 oraz instalacji pakietu psacct lub acct. Wizualizacja Plik tar zawierający logi jest przekazywany aplikacji Javowej w celu przetworzenia danych. Typowa sekwencja bootowania używa setek procesów, zatem wykres Gantt'a
19 przedstawiający ładowanie systemu musi zostać odpowiednio uproszczony, co sprowadza się do usuwania krótko żyjących i bezczynnych procesów z wykresu, jak również grupowania podobnych procesów działających równolegle. 2. Volanomark Javowy benchmark mierzący wydajność serwera i skalowalność sieci. Tworzy połączenia między 20 osobowymi grupami klientów i oblicza jak długo zajmuje rozpowszechnienie wiadomości w grupach. Wynikiem jest średnia ilość wiadomości transerowanych przez serwer na sekundę. 3. Lmbench Zestaw prostych, przenośnych testów wydajnościowych kluczowych opcji systemu, zawiera testy obsługujące m.in.: Mierzenie wydajności: odczytu plików w cache'u kopiowania pamięci (bcopy) odczytów z pamięci zapisów do pamięci pipe'ów TCP Mierzenie opóźnień: przełączania kontekstu operacji sieciowych: ustanawiania połączeń, pipe'ów, TCP, UDP i RPC hot potato tworzenia i usuwania systemów plików tworzenia procesów obsługi sygnałów wywoływania funkcji systemowych 4. netperf Test sprawdzający wydajność różnych typów połączeń sieciowych. Mierzy przepustowość pośrednią, jak również opóźnienia całościowe (end to end). Środowiska obsługiwane przez netperf to: TCP i UDP przez BSD Sockets, DLPI, Unix Domain Sockets, Fore ATM API, oraz HP HiPPI Link Level Access. 5. Fileio Część sysbench'a, potrafiąca tworzyć różne rodzaje zestawów plików, a następnie wykonywać na nich konkretne operacje wejścia/wyjścia i badać ich wydajność. 6. Iozone Iozone to narzędzie to testowania systemu plików, generujące różnorodne operacje na plikach i umożliwiające dokładną analizę działania systemu operacyjnego związanego z zarządzaniem plikami. Testowane operacje: read, write, re read, re write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write. 7. Vmregress
20 Testowy moduł jądra do badania zarządzania pamięcią wirtualną. (VM) Umożliwia on testowanie w sposób powtarzalny każdego z aspektów zarządzania pamięcią wirtualną, w tym rzeczywistej wydajności. Opiera się na kombinacji narzędzi z przestrzeni użytkownika i jądra w celu określenia aktualnego stanu jądra i wiarygodnego powtórzenia testów. Używane moduły są podzielone na 4 części: core zapewnia obsługę całego programu sense udostępnia informacje o aktualnie działającym jądrze test egzekwuje wybrane scenariusze testowe bench mierzy wydajność różnych podsystemów Interfejs VMRegress opiera się na systemie plików /proc. 8. Mmbench Program ten tworzy obciążenie dla jednostki zarządzania pamięcią (MMU), podsystemu swap oraz odzyskiwania pamięci w celu zmierzenia wydajności zarządzania pamięcią przez jądro. Test używa wewnętrzego generatora liczb losowych w celu stworzenia strumienia logarytmicznie normalnego rozkładu częstotliwości dostępów do stron. Rozkład log normalny precyzyjniej niż rozkład Zipfa odpowiada zachowaniu normalnych programów. Rozmiar używanej pamięci jest domyślnie tylko o 12% większy niż rzeczywista ilość dostępnego miejsca, w celu uzyskania krótkiego czasu wykonania programu. Ten test zadziała na platformie Solaris, Windows i oczywiście Linux. 9. Tiobench Tiobench potrafi zmierzyć przepustowość (MB/s) i opóźnienia (ms) funkcji odczytu/zapisu dla sekwencyjnych lub losowych prób zapisu/odczytu dla wielu równoległych wątków. Istnieje możliwość wyboru algorytmu szeregowania operacji wejścia/wyjścia. (czyli wybór spośród: anticipatory, cfq, noop, ddl scheduler)
Automatyczne testowanie jądra Linuksa
Szymon Giżecki Chu Hong Hai Mateusz Kopeć Automatyczne testowanie jądra Linuksa Systemy Operacyjne Projekt studencki Plan prezentacji...czyli o czym będziemy mówili: Metodologie testowania jądra Linuksa
Piotr Dwieczkowski. Code coverage. Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++
Piotr Dwieczkowski Code coverage Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++ Plan Co to jest pokrycie kodu? Możliwe sposoby wykorzystania Rodzaje statystyk Wady i zalety mierzenia porycia kodu
GNU GProf i GCov. przygotował: Krzysztof Jurczuk Politechnika Białostocka Wydział Informatyki Katedra Oprogramowania ul. Wiejska 45A Białystok
GNU GProf i GCov przygotował: Krzysztof Jurczuk Politechnika Białostocka Wydział Informatyki Katedra Oprogramowania ul. Wiejska 45A 15-351 Białystok Streszczenie: Dokument zawiera podstawowe informacje
Optymalizacja programów Open Source. Profilery wysokiego poziomu część 2. Krzysztof Lichota
Optymalizacja programów Open Source Profilery wysokiego poziomu część 2 Krzysztof Lichota lichota@mimuw.edu.pl gprof gprof Pomiar działa na zasadzie instrumentacji kompilowanego kodu (wejścia i wyjścia
Automatyczne testowanie jądra Linuksa
Automatyczne testowanie jądra Linuksa Krzysztof Skrzypczyński Marcin Mieteń Automatyzacja testów W kontekście testowania jądra linuxa tworzy się skrypty i programy sprawdzające działanie odpowiednich części
NS-2. Krzysztof Rusek. 26 kwietnia 2010
NS-2 Krzysztof Rusek 26 kwietnia 2010 1 Opis ćwiczenia Symulator ns-2 jest potężnym narzędziem, szeroko stosowanym w telekomunikacji. Ćwiczenie ma na cele przedstawić podstawy symulatora oraz symulacji
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Testowanie oprogramowania. Testowanie oprogramowania 1/34
Testowanie oprogramowania Testowanie oprogramowania 1/34 Testowanie oprogramowania 2/34 Cele testowania testowanie polega na uruchamianiu oprogramowania w celu wykrycia błędów, dobry test to taki, który
Maciej Oleksy Zenon Matuszyk
Maciej Oleksy Zenon Matuszyk Jest to proces związany z wytwarzaniem oprogramowania. Jest on jednym z procesów kontroli jakości oprogramowania. Weryfikacja oprogramowania - testowanie zgodności systemu
Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie
Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których
Instalacja SQL Server Express. Logowanie na stronie Microsoftu
Instalacja SQL Server Express Logowanie na stronie Microsoftu Wybór wersji do pobrania Pobieranie startuje, przechodzimy do strony z poradami. Wypakowujemy pobrany plik. Otwiera się okno instalacji. Wybieramy
IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com
IdyllaOS www.idyllaos.org Prosty, alternatywny system operacyjny Autor: Grzegorz Gliński Kontakt: milyges@gmail.com Co to jest IdyllaOS? IdyllaOS jest to mały, prosty, uniksopodobny, wielozadaniowy oraz
Budowa systemów komputerowych
Budowa systemów komputerowych Krzysztof Patan Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski k.patan@issi.uz.zgora.pl Współczesny system komputerowy System komputerowy składa
Uniwersytet Mikołaja Kopernika w Toruniu. Profilowanie ruchu sieciowego w systemie GNU/Linux
Uniwersytet Mikołaja Kopernika w Toruniu Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej Michał Ferliński Nr albumu: 187386 Praca magisterska na kierunku Informatyka
Monitorowanie wydajność w bazie Oracle11g
Monitorowanie wydajność w bazie Oracle11g Wstęp Monitorowanie wydajności bazy danych, a także aplikowanie aktualizacji to jedne z ważniejszych zadań administratora bazy danych. Wpływ na wydajność może
EXSO-CORE - specyfikacja
EXSO-CORE - specyfikacja System bazowy dla aplikacji EXSO. Elementy tego systemu występują we wszystkich programach EXSO. Może on ponadto stanowić podstawę do opracowania nowych, dedykowanych systemów.
Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania
Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania Krzysztof Kluza, Janusz Miller 1 Debugowanie Debugowanie, czy też po polsku odpluskiwanie, to proces polegający na kontrolowanym wykonaniu programu
Galileo - encyklopedia internetowa Plan testów
Galileo - encyklopedia internetowa Plan testów Sławomir Pawlewicz Alan Pilawa Joanna Sobczyk Matek Sobierajski 5 czerwca 2006 1 Spis treści 1 Wprowadzenie 3 1.1 Cel..........................................
Projekt dotyczy stworzenia zintegrowanego, modularnego systemu informatycznego wspomagającego zarządzanie pracownikami i projektami w firmie
Projekt dotyczy stworzenia zintegrowanego, modularnego systemu informatycznego wspomagającego zarządzanie pracownikami i projektami w firmie informatycznej. Zadaniem systemu jest rejestracja i przechowywanie
SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)
(opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) W informatyce występują ściśle obok siebie dwa pojęcia: sprzęt (ang. hardware) i oprogramowanie
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 007 Tryb rzeczywisty i chroniony procesora 2 SO i SK/WIN Wszystkie 32-bitowe procesory (386 i nowsze) mogą pracować w kilku trybach. Tryby pracy
<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>
Wersja [Uwaga: Niniejszy wzór dostarczony jest w celu użytkowania z Unified Process for EDUcation. Tekst zawarty w nawiasach kwadratowych i napisany błękitną kursywą
System komputerowy. System komputerowy
System komputerowy System komputerowy System komputerowy układ współdziałających ze sobą (według pewnych zasad) dwóch składowych: sprzętu komputerowego (hardware) oraz oprogramowania (software) po to,
Rozwiązanie Compuware dynatrace
Rozwiązanie Compuware dynatrace COMPUWARE DYNATRACE... 3 2 COMPUWARE DYNATRACE Narzędzie Compuware dynatrace oparte jest o unikatową technologię agentową, która pozwala na dogłębną analizę stanu aplikacji
Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36
Automatyzacja testowania oprogramowania Automatyzacja testowania oprogramowania 1/36 Automatyzacja testowania oprogramowania 2/36 Potrzeba szybkich rozwiązań Testowanie oprogramowania powinno być: efektywne
Działanie systemu operacyjnego
Działanie systemu operacyjnego Budowa systemu komputerowego Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej Pamięć
Działanie systemu operacyjnego
Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej I NIC sieci Pamięć operacyjna Przerwania Przerwania
Win Admin Replikator Instrukcja Obsługi
Win Admin Replikator Instrukcja Obsługi Monitoring Kopie danych (backup) E-mail Harmonogram lokalne i zewnętrzne repozytorium Logi Pamięć Procesor HDD Administracja sprzętem i oprogramowaniem (automatyzacja
U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)
http://user-mode-linux.sourceforge.net/ System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux) Autor: Jeff Dike Koncepcja powstała w 1999 r. Początkowo jako patch do jądra 2.0
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Skanowanie podsieci oraz wykrywanie terminali ABA-X3
Skanowanie podsieci oraz wykrywanie terminali ABA-X3 Terminale ABA-X3 od dostarczane od połowy listopada 2010 r. są wyposażane w oprogramowanie umożliwiające skanowanie podsieci w poszukiwaniu aktywnych
dr inż. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2010/2011 Wykład nr 7 (24.01.2011) dr inż. Jarosław Forenc Rok akademicki
REFERAT PRACY DYPLOMOWEJ
REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i implementacja środowiska do automatyzacji przeprowadzania testów aplikacji internetowych w oparciu o metodykę Behavior Driven Development. Autor: Stepowany
Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;
14.3. Podstawy obsługi X Window 14.3. Podstawy obsługi X Window W przeciwieństwie do systemów Windows system Linux nie jest systemem graficznym. W systemach Windows z rodziny NT powłokę systemową stanowi
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 006 Wydajność systemu 2 SO i SK/WIN Najprostszym sposobem na poprawienie wydajności systemu, jeżeli dysponujemy zbyt małą ilością pamięci RAM
Plan testów do Internetowego Serwisu Oferowania i Wyszukiwania Usług Transportowych
Plan testów do Internetowego Serwisu Oferowania i Wyszukiwania Usług Transportowych Michał Lewowski, Piotr Skowron, Michał Matczuk, Piotr Wygocki 5 czerwca 2006 1 Spis treści 1 Wprowadzenie 3 1.1 Cel..........................................
Testowanie według modelu (MBT) Stowarzyszenie Inżynierii Wymagań wymagania.org.pl
Testowanie według modelu (MBT) Bogdan Bereza, Victo MBT testowanie z modelu wersja 2.1 A 1 (48) Pozdrawiam Best regards Med vänliga hälsningar Bogdan Bereza bogdan.bereza@victo.eu +48 519 152 106 Skype:
IO - Plan wdrożenia. M.Jałmużna T.Jurkiewicz P.Kasprzyk M.Robak. 5 czerwca 2006
IO - Plan wdrożenia M.Jałmużna T.Jurkiewicz P.Kasprzyk M.Robak 5 czerwca 2006 1 Spis treści 1 Wprowadzenie 3 1.1 Cel.......................................... 3 1.2 Zakres........................................
Prezentacja systemu RTLinux
Prezentacja systemu RTLinux Podstawowe założenia RTLinux jest system o twardych ograniczeniach czasowych (hard real-time). Inspiracją dla twórców RTLinux a była architektura systemu MERT. W zamierzeniach
Układy VLSI Bramki 1.0
Spis treści: 1. Wstęp... 2 2. Opis edytora schematów... 2 2.1 Dodawanie bramek do schematu:... 3 2.2 Łączenie bramek... 3 2.3 Usuwanie bramek... 3 2.4 Usuwanie pojedynczych połączeń... 4 2.5 Dodawanie
Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski
Struktura systemu operacyjnego Schemat budowy systemu operacyjnego model warstwowy Schemat budowy systemu operacyjnego części składowe Większość systemów operacyjnych opiera się o koncepcję jądra, która
XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery
http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod
Win Admin Monitor Instrukcja Obsługi
Win Admin Monitor Instrukcja Obsługi czerwiec 2019 wersja dokumentu 1.7 dla wersji aplikacji 2.1.1.0 Spis treści: I. Wstęp 3 II. Wymagania systemowe 4 III. Ograniczenia funkcjonalne wersji demo 5 IV. Instalacja
Strojenie systemu Linux pod k¹tem serwera bazy danych Oracle 9i
VI Seminarium PLOUG Warszawa Styczeñ 2003 Strojenie systemu Linux pod k¹tem serwera bazy danych Oracle 9i Marcin Przepiórowski Strojenie systemu Linux pod kątem serwera bazy danych Oracle 9i 7 1. Wstęp
NETBEANS PROFILER TOMASZ ŁUKASZUK
NETBEANS PROFILER TOMASZ ŁUKASZUK STRESZCZENIE: Dokument zawiera podstawowe informacje dotyczące programu NetBeans Profiler. Stanowi uproszczoną instrukcję jego używania. Dotyczy NetBeans Profiler w wersji
Podstawy Techniki Komputerowej. Temat: BIOS
Podstawy Techniki Komputerowej Temat: BIOS BIOS ( Basic Input/Output System podstawowy system wejścia-wyjścia) zapisany w pamięci stałej zestaw podstawowych procedur pośredniczących pomiędzy systemem operacyjnym
Q E M U. http://www.qemu.com/
http://www.qemu.com/ Emulator procesora Autor: Fabrice Bellard Obsługiwane platformy: Windows, Solaris, Linux, FreeBSD, Mac OS X Aktualna wersja: 0.9.0 Większość programu oparta na licencji LGPL, a sama
LEKCJA TEMAT: Zasada działania komputera.
LEKCJA TEMAT: Zasada działania komputera. 1. Ogólna budowa komputera Rys. Ogólna budowa komputera. 2. Komputer składa się z czterech głównych składników: procesor (jednostka centralna, CPU) steruje działaniem
Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).
Testowanie II Cel zajęć Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage). Pokrycie kodu testami Jak już była mowa na poprzednich
S P I S T R E Ś C I. Instrukcja obsługi
S P I S T R E Ś C I Instrukcja obsługi 1. Podstawowe informacje o programie.................................................................................... 2 2. Instalacja programu.....................................................................................................
Tester oprogramowania 2014/15 Tematy prac dyplomowych
Tester oprogramowania 2014/15 Tematy prac dyplomowych 1. Projekt i wykonanie automatycznych testów funkcjonalnych wg filozofii BDD za pomocą dowolnego narzędzia Jak w praktyce stosować Behaviour Driven
Zapisywanie algorytmów w języku programowania
Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym
OPROGRAMOWANIE WSPOMAGAJĄCE ZARZĄDZANIE PROJEKTAMI. PLANOWANIE ZADAŃ I HARMONOGRAMÓW. WYKRESY GANTTA
OPROGRAMOWANIE WSPOMAGAJĄCE ZARZĄDZANIE PROJEKTAMI. PLANOWANIE ZADAŃ I HARMONOGRAMÓW. WYKRESY GANTTA Projekt to metoda na osiągnięcie celów organizacyjnych. Jest to zbiór powiązanych ze sobą, zmierzających
Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.
GRZEGORZ FURDYNA Krótka Historia Co to jest NetBeans? Historia Wersje NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły NetBeans Profiler Narzędzie do projektowania GUI Edytor NetBeans
Działanie systemu operacyjnego
Działanie systemu operacyjnego Budowa systemu komputerowego I NIC Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej
Tworzenie oprogramowania
Tworzenie oprogramowania dr inż. Krzysztof Konopko e-mail: k.konopko@pb.edu.pl 1 Tworzenie oprogramowania dla systemów wbudowanych Program wykładu: Tworzenie aplikacji na systemie wbudowanym. Konfiguracja
Działanie komputera i sieci komputerowej.
Działanie komputera i sieci komputerowej. Gdy włączymy komputer wykonuje on kilka czynności, niezbędnych do rozpoczęcia właściwej pracy. Gdy włączamy komputer 1. Włączenie zasilania 2. Uruchamia
Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9
Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9 Uruchamianie edytora OpenOffice.ux.pl Writer 9 Dostosowywanie środowiska pracy 11 Menu Widok 14 Ustawienia dokumentu 16 Rozdział 2. OpenOffice
Diagnostyka pamięci RAM
Diagnostyka pamięci RAM 1 (Pobrane z slow7.pl) Uszkodzenie pamięci RAM jest jednym z najczęściej występujących problemów związanych z niestabilnym działaniem komputera. Efektem uszkodzenia kości RAM są
Usługa: Testowanie wydajności oprogramowania
Usługa: Testowanie wydajności oprogramowania testerzy.pl przeprowadzają kompleksowe testowanie wydajności różnych systemów informatycznych. Testowanie wydajności to próba obciążenia serwera, bazy danych
Analizator wydajności AMD CodeAnalyst
Analizator wydajności AMD CodeAnalyst Dostępny bezpłatnie dla Windows i Linux (różne funkcjonalności w obu systemach) Pozwala na 4 tryby pracy - profilowania: Bazujące na upływie czasu próbkowanie aplikacji
Uniwersytet Mikołaja Kopernika. Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej
Uniwersytet Mikołaja Kopernika Wydział Matematyki i Informatyki Wydział Fizyki, Astronomii i Informatyki Stosowanej Marcin HENRYKOWSKI Nr albumu: 158069 Praca magisterska na kierunku Informatyka Archiwizacja
(Pluggable Authentication Modules). Wyjaśnienie technologii.
Bezpieczeństwo systemów komputerowych. Temat seminarium: Moduły PAM (Pluggable Authentication Modules). Wyjaśnienie technologii Autor: Bartosz Hetmański Moduły PAM (Pluggable Authentication Modules). Wyjaśnienie
Programowanie współbieżne Wykład 2. Iwona Kochańska
Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas
ECDL/ICDL Zarządzanie projektami Moduł S5 Sylabus - wersja 1.0
ECDL/ICDL Zarządzanie projektami Moduł S5 Sylabus - wersja 1.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu ECDL/ICDL Zarządzanie projektami. Sylabus opisuje zakres wiedzy
IO - Plan testów. M.Jałmużna T.Jurkiewicz P.Kasprzyk M.Robak. 5 czerwca 2006
IO - Plan testów M.Jałmużna T.Jurkiewicz P.Kasprzyk M.Robak 5 czerwca 2006 1 SPIS TREŚCI 2 Spis treści 1 Historia zmian 3 2 Zakres testów 3 2.1 Integration testing - Testy spójnosci.............. 3 2.2
Reguły plików cookies witryny i usług internetowych tsop.pl
Reguły plików cookies witryny i usług internetowych tsop.pl Data publikacji dokumentu: 1 czerwca 2014 Spis treści 1 Wstęp...2 2 Definicje...2 2.1 Administrator...2 2.2 Cookies...2 2.3 Cookies Administratora
Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak
Systemy operacyjne System operacyjny Linux - wstęp Anna Wojak 1 1 Wstęp Linux jest systemem z rodziny Unix. Pierwsza wersja systemu została opracowana w 1969 roku przez K.Thompsona i D.Ritchie Jest to
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Programowanie obiektowe
Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć
1.Wstęp. 2.Generowanie systemu w EDK
1.Wstęp Celem niniejszego ćwiczenia jest zapoznanie z możliwościami debuggowania kodu na platformie MicroBlaze oraz zapoznanie ze środowiskiem wspomagającym prace programisty Xilinx Platform SDK (Eclipse).
DBE DataBase Engineering
Loader PI dla mmedica Instrukcja instalacji interfejsu Przychodni Internetowej (Loader PI) w wersji DEMO dla programu mmedica. DBE DataBase Engineering Firma z którą pracują najlepsi Wrocław 2009 PL-PI-INS001-122009
Laboratorium Komputerowe Systemy Pomiarowe
Jarosław Gliwiński, Łukasz Rogacz Laboratorium Komputerowe Systemy Pomiarowe ćw. Zastosowanie standardu VISA do obsługi interfejsu RS-232C Data wykonania: 03.04.08 Data oddania: 17.04.08 Celem ćwiczenia
Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.
Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji
Ćwiczenie Nr 6 Przegląd pozostałych najważniejszych mechanizmów systemu operacyjnego Windows
Ćwiczenie Nr 6 Przegląd pozostałych najważniejszych mechanizmów systemu operacyjnego Windows Cel ćwiczenia: Zapoznanie się z: zarządzaniem systemami plików, zarządzaniem atrybutami plików, prawami do plików
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()
Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,
MentorGraphics ModelSim
MentorGraphics ModelSim 1. Konfiguracja programu Wszelkie zmiany parametrów systemu symulacji dokonywane są w menu Tools -> Edit Preferences... Wyniki ustawień należy zapisać w skrypcie startowym systemu
I. Informacje ogólne. Jednym z takich systemów jest Mambo.
MAMBO (CMS) I. Informacje ogólne CMS, Content Management System ("system zarządzania treścią") jest to jedna lub zestaw aplikacji internetowych pozwalających na łatwe utworzenie oraz późniejszą aktualizację
ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4
ICD 2 Czym jest In-Circuit Debugger? 2 O poradniku 3 Gdzie szukać dodatkowych informacji? 4 ICD 1 ICD 25.08.2009 Czym jest In-Circuit Debugger? Większość procesorów dostarcza systemów debugowania (ang.
Java jako język programowania
Java jako język programowania Interpretowany programy wykonują się na wirtualnej maszynie (JVM Java Virtual Machine) Składnia oparta o język C++ W pełni zorientowany obiektowo (wszystko jest obiektem)
Technologie informacyjne - wykład 12 -
Zakład Fizyki Budowli i Komputerowych Metod Projektowania Instytut Budownictwa Wydział Budownictwa Lądowego i Wodnego Politechnika Wrocławska Technologie informacyjne - wykład 12 - Prowadzący: Dmochowski
Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows 7
5.0 5.3.3.5 Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows 7 Wprowadzenie Wydrukuj i uzupełnij to laboratorium. W tym laboratorium, będziesz korzystać z narzędzi administracyjnych
Działanie systemu operacyjnego
Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej sieci Pamięć operacyjna Przerwania Przerwania Przerwanie
Liczby losowe i pętla while w języku Python
Liczby losowe i pętla while w języku Python Mateusz Miotk 17 stycznia 2017 Instytut Informatyki UG 1 Generowanie liczb losowych Na ogół programy są spójne i prowadzą do przewidywanych wyników. Czasem jednak
dziennik Instrukcja obsługi
Ham Radio Deluxe dziennik Instrukcja obsługi Wg. Simon Brown, HB9DRV Tłumaczenie SP4JEU grudzień 22, 2008 Zawartość 3 Wprowadzenie 5 Po co... 5 Główne cechy... 5 baza danych 7 ODBC... 7 Który produkt
System Zarządzania Dystrybucją
PRI - Projekt System Zarządzania Dystrybucją Leszek Krupiński 13 czerwca 2003 Spis treści 1 Opis dziedziny problemowej 2 2 Cel 3 3 Zakres 4 4 Kontekst 5 5 Opis wymagań 6 5.1 Wymagania funkcjonalne......................
WHITE PAPER. Planowanie, przygotowanie i testowanie działań na wypadek wystąpienia awarii
WHITE PAPER Planowanie, przygotowanie i testowanie działań na wypadek wystąpienia awarii 1 TABLE OF CONTENTS Wstęp...3 Symulator VERITAS Cluster Server...3 Doradca VERITAS Volume Replicator...5 Próbny
Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows Vista
5.0 5.3.3.6 Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows Vista Wprowadzenie Wydrukuj i uzupełnij to laboratorium. W tym laboratorium, będziesz korzystać z narzędzi administracyjnych
2009-03-21. Paweł Skrobanek. C-3, pok. 321 e-mail: pawel.skrobanek@pwr.wroc.pl pawel.skrobanek.staff.iiar.pwr.wroc.pl
Wrocław 2007-09 SYSTEMY OPERACYJNE WPROWADZENIE Paweł Skrobanek C-3, pok. 321 e-mail: pawel.skrobanek@pwr.wroc.pl pawel.skrobanek.staff.iiar.pwr.wroc.pl 1 PLAN: 1. Komputer (przypomnienie) 2. System operacyjny
Funkcje i instrukcje języka JavaScript
Funkcje i instrukcje języka JavaScript 1. Cele lekcji a) Wiadomości Uczeń : zna operatory i typy danych języka JavaScript, zna konstrukcję definicji funkcji, zna pętlę If i For, Do i While oraz podaje
Projektowanie oprogramowania. Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik
Projektowanie oprogramowania Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik Agenda Weryfikacja i zatwierdzanie Testowanie oprogramowania Zarządzanie Zarządzanie personelem
WYKŁAD 3 Jądro systemu i procesy. Marcin Tomana Wyższa Szkoła Informatyki i Zarządzania
SYSTEMY OPERACYJNE WYKŁAD 3 Jądro systemu i procesy Marcin Tomana Wyższa Szkoła Informatyki i Zarządzania Program wykładu 2 Jądro systemu Możliwości procesorów Działanie procesów i wątków Zarządzanie procesami
VinCent Administrator
VinCent Administrator Moduł Zarządzania podatnikami Krótka instrukcja obsługi ver. 1.01 Zielona Góra, grudzień 2005 1. Przeznaczenie programu Program VinCent Administrator przeznaczony jest dla administratorów
Testowanie I. Celem zajęć jest zapoznanie studentów z podstawami testowania ze szczególnym uwzględnieniem testowania jednostkowego.
Testowanie I Cel zajęć Celem zajęć jest zapoznanie studentów z podstawami testowania ze szczególnym uwzględnieniem testowania jednostkowego. Testowanie oprogramowania Testowanie to proces słyżący do oceny
Algorytm. a programowanie -
Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik
Systemy operacyjne i sieci komputerowe Szymon Wilk System operacyjny 1
i sieci komputerowe Szymon Wilk System operacyjny 1 1. System operacyjny (ang. OS Operating System) to oprogramowanie nadzorujące pracę komputera. Programy, które uruchamia użytkownik na komputerze z systemem
UNIX: architektura i implementacja mechanizmów bezpieczeństwa. Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci
UNIX: architektura i implementacja mechanizmów bezpieczeństwa Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci Plan prezentacji: Wprowadzenie do struktury systemów rodziny UNIX
Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Zarządzanie partycjami
Zarządzanie partycjami Do tworzenie i usuwania partycji, formatowania dysków i zmiany liter dysków w systemie Windows NT, służy narzędzie graficzne Zarządzanie dyskami lub program diskpart dostępny w konsoli