Dariusz Cieślak

Dariusz Cieślak Systemy
Informatyczne na
Zamówienie

Temat: Centralne rejestrowanie błędów i ostrzeżeń z aplikacji PHP

Zachęcam do zapoznania się w projektem OpenSource który mam przyjemność prowadzić: http://randomtest.net/ .

Celem projektu jest implementacja koncepcji losowych testów integracyjnych. Dla mnie jasne jest, że pisanie testów jednostkowych jest trudne ponieważ wymaga odpowiedniego poziomu izolacji pomiędzy komponentami. Z drugiej strony narzędzia klik&play testujące na poziomie integracyjnym są bardzo "kruche"
ponieważ niebywale zależą od stanu środowiska. Moim pomysłem jest przeniesienie weryfikacji wyników do mechanizmu "Design by Contract" w postaci asercji zaszytych w kodzie systemu i wrzucenie losowego pobudzenia do aplikacji. Otrzymujemy wtedy pewne pokrycie kodu (darmowe w sensie czasu pracy człowieka) które pozwala uwidocznić zdarzenia (SIGSEGV, SIGBUS, qWarning, assert()...)

Oczywiście nie zamierzam zmniejszać roli działu QA w całym procesie - moim celem jest wyeliminowanie nakładu pracy QA na wyszukiwanie awarii i skupienie się na kontroli implementacji względem specyfikacji, co jest bardzo trudno zautomatyzować.

Użycie (w przypadku PHP) jest bardzo proste:

putenv(“RANDOMTEST_URL”, “http://localhost/randomtest-server.php”);
require("randomtest-probe.php");
Od tego momentu każda awaria ze skryptów PHP będzie wysłana do randomtest-server.php razem ze śladem stosu.

Przykład z testowego programu wygenerowanego na serwerze:
event counter: 10
[Undefined variable: undefined_var]
test1.php:10 randomtest_error_handler()
test1.php:16 fun_C()
test1.php:19 fun_B()
RandomTest jak na razie pozwala tylko centralnie zbierać ślady stosu z awarii w programach PHP i C/C++ i prezentować je w postaci raportu. Docelowo będzie także dostarczać mechanizm losowego generowania pobudzenia dla programów (komercyjnie wdrożyłem zdalne sterowanie pętli zdarzeń QT) a także dbać o zasoby (bazę danych, serwery zewnętrzne, CPU, pamięc) w sensie okresowego pomiaru i wskazywania potencjalnych problemów z wydajnością.

Tzw. "probe" jest napisany dla środowiska PHP i C/C++, ale w planach są kontenery servletów (Java) i inne
środowiska (Android/IPhone). Będzie można spójnie monitorować / testować systemy heterogeniczne i agregować centralnie wyniki do celów analizy stabilności.

Oczywiście wszystko w modelu OpenSource (kod jest opublikowany na GitHub).