| Termin | Definicja |
|---|---|
| wielokrotne wyzwalanie tej samej akcji | Wielokrotne wyzwalanie tej samej akcji to błąd automatyzacji powodujący powtarzanie skutków jednego zdarzenia. Na czym polega wielokrotne wyzwalanie tej samej akcjiWielokrotne wyzwalanie tej samej akcji występuje wtedy, gdy jedno zdarzenie wejściowe powoduje kilka identycznych reakcji zamiast jednej. Zdarzeniem może być kliknięcie przycisku, odebranie komunikatu, zmiana wartości w formularzu, pojawienie się pliku w określonym katalogu albo zakończenie zadania przez system. Błąd nie musi oznaczać wielokrotnego wystąpienia zdarzenia. Często źródłem problemu jest sposób obsługi pojedynczego zdarzenia: ten sam odbiornik został zarejestrowany kilka razy, procedura została uruchomiona ponownie bez usunięcia poprzedniej instancji albo kilka niezależnych mechanizmów reaguje na ten sam warunek. Skutek zależy od rodzaju akcji. Program może wysłać kilka takich samych formularzy, utworzyć wiele kopii pliku, dodać kilka identycznych rekordów, rozpocząć kilka procesów, wielokrotnie zmienić ustawienie albo wyświetlić użytkownikowi serię tych samych komunikatów. W przypadku operacji odczytu problem może być tylko uciążliwy, natomiast przy zapisie, płatności, usuwaniu danych lub uruchamianiu zadań może doprowadzić do niespójności danych. Dlatego podczas analizy trzeba ustalić zarówno liczbę wywołań, jak i to, czy każde wywołanie wykonało pełną operację. Źródła powtórzeń w aplikacji i systemieJedną z typowych przyczyn jest wielokrotne podłączenie funkcji do tego samego zdarzenia. Przykładowo aplikacja może przy każdym otwarciu okna dodawać kolejny handler kliknięcia, ale nie usuwać poprzedniego. Po kilku otwarciach jedno kliknięcie wywołuje wtedy tę samą funkcję kilka razy. Podobny efekt może powstać w aplikacji korzystającej z komunikatów asynchronicznych, gdy konsument zostanie uruchomiony ponownie, a poprzedni proces nadal działa. Powtórzenia mogą również wynikać z zadania harmonogramu skonfigurowanego równocześnie w dwóch miejscach albo z nakładających się reguł automatyzacji. Oddzielną kategorię stanowią ponowienia połączeń. Biblioteka, przeglądarka lub program użytkowy może ponowić żądanie po przekroczeniu limitu czasu, błędzie sieci albo braku odpowiedzi. Jeżeli pierwsza próba faktycznie dotarła do odbiorcy, ale odpowiedź zaginęła, ponowienie może wykonać tę samą operację drugi raz. Z tego powodu operacje zmieniające stan powinny być projektowane jako odporne na powtórzenia. Stosuje się między innymi identyfikator żądania, sprawdzenie aktualnego stanu przed zapisem oraz mechanizm idempotencji, czyli takie wykonanie operacji, przy którym ponowne użycie tych samych danych nie tworzy kolejnego skutku. Rozpoznawanie błędu w przepływie danychDiagnozę należy rozpocząć od odtworzenia pełnej sekwencji: zdarzenie wejściowe, odebranie go przez aplikację, rozpoczęcie funkcji, wykonanie operacji oraz zapis wyniku. W logach warto porównać znaczniki czasu, identyfikatory żądań, identyfikatory użytkownika lub sesji oraz dane przekazywane pomiędzy modułami. Jeżeli jeden identyfikator zdarzenia prowadzi do kilku wpisów rozpoczęcia tej samej funkcji, prawdopodobne jest wielokrotne podłączenie obsługi albo ponowne dostarczenie komunikatu. Jeżeli funkcja rozpoczyna się raz, ale zapis pojawia się kilka razy, problem może znajdować się wewnątrz procedury, w warstwie transakcji lub w wywołaniu zewnętrznego interfejsu. Przydatne jest rozdzielenie logowania na etapy oraz nadanie każdemu wykonaniu unikalnego identyfikatora korelacyjnego. Należy sprawdzić, czy akcja jest uruchamiana przez timer, zdarzenie interfejsu, obserwatora plików, kolejkę komunikatów lub odpowiedź sieciową. Warto także obserwować liczbę aktywnych procesów, wątków i połączeń, ponieważ kilka równoległych instancji może wyglądać w logu jak seria pojedynczych błędów. Sam komunikat o powtórzeniu nie wskazuje jeszcze przyczyny. Konieczne jest ustalenie, czy powielone zostało zdarzenie, wywołanie funkcji, żądanie sieciowe, zapis danych czy tylko prezentacja tego samego wyniku. Ograniczanie skutków powtarzanej operacjiOchrona przed takim błędem powinna obejmować zarówno warstwę interfejsu, jak i kod wykonujący operację. Przycisk rozpoczynający kosztowne lub zmieniające dane zadanie może zostać czasowo zablokowany po pierwszym użyciu, ale nie zastępuje to zabezpieczeń po stronie logiki aplikacji. Funkcja powinna kontrolować, czy operacja o danym identyfikatorze nie została już zakończona, a zapis powinien korzystać z warunku unikalności lub innego mechanizmu zapobiegającego tworzeniu identycznych wyników. W procesach wieloetapowych trzeba również określić, co dzieje się po przerwaniu pracy i po ponownym uruchomieniu programu. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów, komputerów PC i ich podzespołów, a w ramach diagnostyki można sprawdzić, czy powtarzanie akcji wynika z ustawień systemu, programu, sterownika albo nieprawidłowego działania urządzenia. Analiza powinna uwzględniać komunikaty aplikacji, dzienniki systemowe, konfigurację autostartu oraz zachowanie programu podczas kontrolowanego powtórzenia. Dopiero po rozróżnieniu przyczyny od samego objawu można zdecydować, czy potrzebna jest korekta konfiguracji, aktualizacja oprogramowania, usunięcie konfliktu procesów czy naprawa innego elementu środowiska komputera. |