Poka-Yoke, wywodzący się z japońskich praktyk zarządzania, stanowi skuteczne rozwiązanie w zapobieganiu błędom poprzez eliminację najczęstszych źródeł i rozpoznawanie podstawowych przyczyn ich występowania.
Metoda ta koncentruje się na tworzeniu warunków, w których pomyłki są niemożliwe lub natychmiast zauważalne, obejmując praktyki takie jak:
- przekazywanie dalej tylko części bez wad,
- redukcja kosztów związanych z poprawkami,
- standaryzacja,
- zmniejszenie procesów kontrolnych i jakościowych.
Artykuł ma na celu ocenę możliwości metody Poka-Yoke jako metody zapobiegania defektom, szczególnie w informatyce, analizując jej zastosowania i potwierdzając, że testowanie w tej dziedzinie również stanowi mechanizm Poka-Yoke.
Krótko o historii Poka-Yoke
Poka-Yoke, wynaleziona przez Shigeo Shingo, inżyniera z Toyoty, jest metodą eliminującą możliwość powstania błędów. Inspiracją była filozofia Toyoty, skupiająca się na produkcji bez wad i błędów. Shingo uznał, że zamiast wymagać od pracowników większej uwagi, lepiej jest usunąć potrzebę uważania, tworząc systemy, które zapobiegają błędom.
Pierwsze urządzenie Poka-Yoke zastosowane w fabryce Yamada Electric w 1961 roku wyeliminowało błąd wynikający z niepoprawnego montażu. To urządzenie było proste, ale skuteczne i przyczyniło się do doskonalenia systemu produkcyjnego Toyoty (TPS). Od lat 60. i 70. Poka-Yoke zyskało na popularności w Japonii, a później również na rynkach europejskim i amerykańskim.
Założenia inżynierskie i idea rozwiązania Poka-Yoke
Shigeo Shingo, dążąc do osiągnięcia stanu „zero defektów”, identyfikuje kluczowe założenia Poka-Yoke:
- nieefektywność metodologii SPC przy pomyłkach,
- potrzeba 100% kontroli każdego wyrobu,
- autonomiczność inspekcji jako część procesu produkcyjnego.
Podstawą jest wykrywanie, sygnalizowanie i eliminacja błędów. Poka-Yoke koncentruje się na zaprojektowaniu procesów pracy, w których błędy są niemożliwe lub natychmiast korygowane, z uwzględnieniem głównych przyczyn ludzkich pomyłek. Urządzenia Poka-Yoke powinny być proste, tanie i efektywne.
Podział i zastosowanie urządzeń Poka-Yoke
Poka-Yoke dzieli się na systemy prewencyjne i detekcyjne. Klasyfikacja wg funkcji wygląda następująco:
- regulacyjne – metody kontroli/sterowania, które zatrzymują maszynę przy wykryciu wady, oraz metody ostrzegania, sygnalizujące alarmem wystąpienie wady,
- ustawiające – metody kontaktu wykrywają nieprawidłowości poprzez fizyczny kontakt, a metody ustalonej wartości oraz koniecznego kroku polegają na sprawdzaniu ilości ruchów lub elementów oraz wymaganej sekwencji operacji.
Przykłady zastosowania obejmują wiele rozwiązań, m.in.:
- zmianę konstrukcji śruby, aby uniknąć porysowania opakowań przy montażu:
- stosowanie specjalnych tac, które ułatwiają identyfikację brakujących elementów montażowych. Tacki zostały zaprojektowane w taki sposób, aby liczba otworów w jednym rzędzie była taka sama, jak liczba śrub wymagana dla jednego produktu. Tacka jest czarna, żeby operator łatwo zauważył brak śruby lub podkładki i mógł łatwo ocenić, czy doszło do pominięcia podczas montażu.
Zastosowanie Poka-Yoke w informatyce
W informatyce Poka-Yoke można stosować poprzez wbudowane systemy kontrolne, które uniemożliwiają powstawanie błędnych danych.
Jednym z często spotykanych, aczkolwiek nie zawsze wykorzystywanych rozwiązań, jest „wyszarzenie” przycisku OK w oknie dialogowym, jeśli użytkownik nie wprowadził wszystkich wymaganych danych. Dzięki temu, aplikacja uniemożliwia dalsze działanie bez kompletu informacji, zapobiegając w ten sposób błędom.
Metodą na wykrywanie nieprawidłowości jest również wprowadzenie do systemu losowych danych i weryfikacja uzyskanych odpowiedzi.
Mniej powszechnie, a co za tym idzie – niesłusznie pomijane, są techniki bardziej zaawansowane, takie jak:
- kontrola liczby rekordów po procesie replikacji danych,
- obliczanie sum kontrolnych CRC podczas transferów danych,
- stosowanie instrukcji assert do weryfikacji wartości zmiennych w kodzie programu.
Metody zmniejszające liczbę błędów
Zgodnie z definicją, do metod zmniejszania liczby błędów można zaliczyć:
- „umiejętne zastosowanie paradygmatów programowania strukturalnego, proceduralnego i obiektowego,
- pisanie w sposób czytelny, hierarchiczne formatowanie kodu źródłowego,
- unikanie skrótów programistycznych w rodzaju
++i*=*c--,
- stosowanie zrozumiałych identyfikatorów, nawet kosztem ich większej długości,
- stosowanie komentarzy w miejscach, w których zrozumienie kodu nie jest natychmiastowe,
- współtworzenie programu i jego dokumentacji,
- opisywanie (w komentarzach i dokumentacji) założeń przyjętych podczas pisania danego fragmentu kodu (np.: co do typów danych wejściowych, czy spodziewanego sposobu użycia),
- unikanie trudnych w analizie konstrukcji (jak instrukcja skoku, czy ewaluacja kodu w trakcie wykonania),
- używanie narzędzi wykrywających podejrzane fragmenty kodu (np. lint),
- włączenie ostrzeżeń kompilatora o napotkaniu konstrukcji będących częstym źródłem błędów (np.
if(a=b)...
zamiastif(a==b)...
),- ręczne audyty kodu
W typowych warunkach można się spodziewać, że w każdym nietrywialnym programie będzie sporo błędów. Ich liczbę można jednak znacząco ograniczyć.
Uważa się, że liczba błędów na wiersz kodu jest w przybliżeniu niezależna od języka, dlatego program o tej samej funkcjonalności napisany w języku wyższego poziomu (np.: Perl czy Python), będzie miał mniej błędów, niż w języku niższego poziomu (C czy asembler). Stąd lepiej używać języków, które w krótszym tekście zawrą więcej.
Stosowanie tych prostych mechanizmów pozwala w oczywisty sposób ograniczać liczbę błędów, które pojawiają się w produkcie finalnym lub – w najlepszym razie – wychodzą na testach.
Poka-Yoke w testowaniu
Testowanie także jest mechanizmem Poka-Yoke. Tak postawioną hipotezę postaram się udowodnić w dalszej części artykułu.
Bez wątpienia, testowanie stanowi kluczowy element procesu wytwórczego systemów informatycznych. Jest to czynność, która zdecydowanie zasługuje na dokładne i metodyczne wykonanie przed wprowadzeniem systemu do użytku. Należy jednak mieć świadomość, że wykrywanie oraz eliminowanie błędów w fazie testów wiąże się z dużymi kosztami, co oznacza, że testy nie mogą zastąpić innych elementów zapewnienia jakości.
Testy powinny być zautomatyzowane – automat może przeprowadzić o kilka rzędów wielkości więcej testów niż człowiek w danej jednostce czasu. Testowanie dużych funkcjonalności jest trudną operacją. Zazwyczaj testuje się osobno podzespoły programu oraz program w całości (testy integracyjne).
Aspekty testowania
Testowanie oprogramowania jest jednym z procesów kontroli jakości oprogramowania i ma dwa główne cele:
- weryfikację oprogramowania – sprawdzenie, czy wytwarzane oprogramowanie jest zgodne ze specyfikacją,
- walidację oprogramowania – sprawdzenie czy oprogramowanie spełnia oczekiwania użytkownika.
Testowanie powinniśmy rozpocząć jak najszybciej, gdyż umożliwia wykrycie błędów we wczesnych stadiach rozwoju oprogramowania (specyfikacja i projekt). Dzięki temu możemy zmniejszyć koszty ich usuwania na późniejszych etapach wytwarzania oprogramowania.
Zasady testowania
Podstawową i najkrótszą definicją testowania jest znajdowanie anomalii. Nie rozstrzygamy, czym jest anomalia i kto ma stwierdzić, czy konkretny przypadek nią jest, czy też nie. Pozostawiam dopasowanie tej definicji do środowiska i pojmowania testowania.
Podstawy
Każdy produkt ludzkiej działalności, od najmniejszych przedmiotów jak igła, aż po skomplikowane maszyny takie jak odrzutowce, a także oprogramowanie i konstrukcje budowlane, może być przedmiotem testów. Dodatkowo, każda osoba, niezależnie od tego, czy sobie zdaje z tego sprawę, czy nie, w pewnym stopniu pełni rolę testera.
Jako przykład można podać wybór trasy dojścia do pracy, który opiera się na naszych potrzebach i ocenie jakości poszczególnych opcji. Zazwyczaj, po wypróbowaniu różnych możliwości, decydujemy się na tę, która wydaje nam się najbardziej odpowiednia.
Planowanie testów
Podejmując decyzję o testowaniu, warto zwrócić uwagę na cele testów:
- do czego dążymy?
- co chcemy osiągnąć?
Możemy to osiągnąć poprzez stworzenie planu testów.
Kontrolowanie testów
Plan testów w każdym momencie procesu musi być sprawdzany pod kątem tego, jak daleko „odchodzimy” od wstępnych założeń.
Projektowanie i analiza testów
Planowanie oraz analiza testów to proces, w którym z ogólnych założeń dotyczących testowania przechodzi się do konkretnego określenia warunków testowych oraz projektowania samych testów.
Wdrażanie i wykonywanie testów
Implementacja testów i ich wykonywanie jest czynnością, gdzie warunki testów zostają przemienione w przypadki testowe i zbiór czynników testowych oraz konfigurację środowiska.
Sprawdzenie kryterium zakończenia testów
Weryfikacja kryteriów zakończenia testów jest czynnością odnoszącą się do ustalonych celów. Proces ten wymaga realizacji na każdym etapie testowania.
Zakończenie testów
Zakończenie testów obejmuje gromadzenie danych z wszystkich wykonanych czynności testowych, aby skonsolidować zdobyte doświadczenia, czynniki testowe, fakty i dane.
Podsumowanie
Systemy Poka-Yoke przyczyniają się do znacznej poprawy jakości procesów wytwarzania oraz redukcji defektów, wykazując się większą skutecznością niż tradycyjne metody kontroli jakości produktów czy Statystyczna Kontrola Procesu (SPC). W związku z tym, rekomenduję ich używanie w miejsce innych metod kontroli procesu lub produktu, gdziekolwiek jest to wykonalne.
Urządzenia Poka-Yoke powinny charakteryzować się maksymalną prostotą, dlatego w fazie projektowania priorytetem jest poszukiwanie rozwiązań, które są jednocześnie proste i ekonomiczne. Warto też kształtować proces w taki sposób, aby prawidłowe operacje były łatwe do wykonania, natomiast wykonanie operacji nieprawidłowych było utrudnione.
Stosowanie Poka-Yoke jest procesem ciągłym, służącym do zabezpieczenia bezbłędnego wykonania wszystkich operacji na produkcie na każdym stanowisku roboczym.
Analizując zasady testowania, wymienione wyżej aspekty testowania oraz biorąc pod uwagę cechy Poka-Yoke, można stwierdzić, że kontrola jakości oprogramowania, czyli testowanie też jest mechanizmem Poka-Yoke.
Przykładem Poka-Yoke w tworzeniu oprogramowania jest wykorzystanie przypadków testowych. Twórcy oprogramowania przeprowadzają przypadki testowe, aby upewnić się, że wzięto pod uwagę wszystkie niezbędne czynniki. Zmniejsza to prawdopodobieństwo późniejszego znalezienia tych błędów przez użytkowników i zapewnia bardziej stabilny produkt.
Zostaw komentarz