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:
Od tego momentu każda awaria ze skryptów PHP będzie wysłana do randomtest-server.php razem ze śladem stosu.
putenv(“RANDOMTEST_URL”, “http://localhost/randomtest-server.php”);
require("randomtest-probe.php");
Przykład z testowego programu wygenerowanego na serwerze:
event counter: 10RandomTest 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ą.
[Undefined variable: undefined_var]
test1.php:10 randomtest_error_handler()
test1.php:16 fun_C()
test1.php:19 fun_B()
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).