Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Metryki kodu i aplikacji PHP

Metryki kodu i aplikacji PHP

Abstrakt prezentacji:

Każdy projekt można sprowadzić to zestawu metryk, dzięki którym możemy jednoznacznie powiedzieć, czy zespół porusza się we właściwym kierunku. Mierzyć można bardzo wiele parametrów aplikacji, zaczynając od liczby klas, metod oraz ich złożoności cyklomatycznej, a na monitorowaniu zdarzeń biznesowych w środowisku produkcyjnym kończąc. Nie dajcie się zwieść, te z pozoru banalne informacje przetworzone w odpowiedni sposób stanowią bardzo ważne narzędzie analityczne, ważne także dla developerów. W trakcie prezentacji poznamy zestaw narzędzi i technik pomocnych w zbieraniu i wykorzystywaniu metryk aplikacji w projektach PHP.

Mariusz Gil

August 11, 2012
Tweet

More Decks by Mariusz Gil

Other Decks in Programming

Transcript

  1. METRYKI KODU I APLIKACJI PHP Mariusz Gil, m t.ph 6,

    Poznan ` niedziela, 12 sierpnia 2012
  2. PRZYKLAD: LOAD AVERAGE 0 5 10 15 20 25 30

    12:01 12:02 12:03 12:04 12:05 12:06 12:07 - niedziela, 12 sierpnia 2012
  3. CO SIE WLASCIWIE STALO? NOWI UZYTKOWNICY? ATAK NA INFRASTRUKTURE? PROBLEM

    Z OBCIAZENIEM BAZ DANYCH? NOWY BUG W KODZIE APLIKACJI? ` ` . ` . ` - - niedziela, 12 sierpnia 2012
  4. PRZYKLAD: APACHE REQUESTS 0 25000 50000 75000 100000 125000 150000

    12:01 12:02 12:03 12:04 12:05 12:06 12:07 - niedziela, 12 sierpnia 2012
  5. A TERAZ? UZYTKOWNICY POWIEDZIELI BYE BYE? PROBLEMY Z SERWERAMI WWW?

    NOWY BUG W KODZIE APLIKACJI? . niedziela, 12 sierpnia 2012
  6. COLLECTD CACTI MUNIN GANGLIA ANALYTICS HADOOP STATSD STATSD STATSD GRAPHITE

    GRAPHITE GRAPHITE PHPLOC PDEPEND COLLECTD ISSUE TRACKERS DEVELOPMENT MONITORING OPERATIONS BIZNES niedziela, 12 sierpnia 2012
  7. JAK SZYBKO ROZPOZNAC, CZY NASZ KOD PHP APLIKACJI NIE JEST

    PROBLEMEM ALBO NIE BEDZIE NIM W NAJBLIZSZEJ PRZYSZLOSCI? ? ` ` ` . - niedziela, 12 sierpnia 2012
  8. $ phploc /usr/local/src/phpunit/PHPUnit phploc 1.7.0 by Sebastian Bergmann. Directories: 16

    Files: 117 Lines of Code (LOC): 27640 Cyclomatic Complexity / Lines of Code: 0.12 Comment Lines of Code (CLOC): 13771 Non-Comment Lines of Code (NCLOC): 13869 Namespaces: 0 Interfaces: 6 Traits: 0 Classes: 109 Abstract: 9 (8.26%) Concrete: 100 (91.74%) Average Class Length (NCLOC): 125 Methods: 723 Scope: Non-Static: 498 (68.88%) Static: 225 (31.12%) Visibility: Public: 510 (70.54%) Non-Public: 213 (29.46%) Average Method Length (NCLOC): 18 Cyclomatic Complexity / Number of Methods: 3.34 Anonymous Functions: 0 Functions: 128 Constants: 33 Global constants: 1 Class constants: 32 PHPLOC niedziela, 12 sierpnia 2012
  9. PHPDEPEND EHH:Average Hierarchy Height srednia wysokosc hierarchii kla AC: Afferent

    Coupling ilosc skoja en odsrodkowych CCN: Cyclomatic Complexity Number wielkosci zlozonosci cyklomatycznej CIS: Class Interface Size wielkosc nieprywantych metod i wlasciwosci CLOC: Comment Lines of Code ilosc linii kodu komenta y CLSA: Number of Abstract Classess liczba kla abstrakcyjnych CLSC: Number of Concrete Classes liczba wlasciwych kla implementacji LOC: Lines of Code ilosc linii kodu ...oraz 32 inne metryki niedziela, 12 sierpnia 2012
  10. 0 75 150 225 300 ilosc requestow http get /

    post ilosc http 200/301/404/500 ilosc wywolan ajax liczba zalogowanych uzytkownikow liczba logowan do aplikacji ilosc (nie)poprawnych captcha czas generowania strony czas renderowania strony* i wiele innych... ` ` ` ` ` ` ` ` ` ` ` ` . niedziela, 12 sierpnia 2012
  11. /** * Sample class. */ class ConcreteClass2 extends AbstractClass {

    // … /** * Returns object value. * * @param void * @return integer * @access public * @deprecated */ public function getValue() { StatsD::increment(”code.deprecated.ConcreteClass2.getValue”, 1); return $this->getValue(); } } STATSD / graphite niedziela, 12 sierpnia 2012
  12. /** * Login processes. */ class LoginAction extends webAction {

    // … public function executeSignIn( // … if ($loginForm->isValid()) { StatsD::increment(”login_attemps.success”, 1); } else { StatsD::increment(”login_attemps.failed”, 1); } // … return $response; } } STATSD / graphite niedziela, 12 sierpnia 2012
  13. <?php $start = microtime(true); // action flow // ... //

    counters incrementation StatsD::increment(”requests.total”, 1); StatsD::increment(”requests.methods.$method”, 1); StatsD::increment( $user->isAuthenticated() ? ”requests.users.authenticated” : ”requests.users.unauthenticated”, 1 ); StatsD::increment(”requests.http_codes.$code”, 1); StatsD::timing(”requests.timing”, (microtime(true) - $start)); STATSD / graphite niedziela, 12 sierpnia 2012
  14. aplikacja php rejestracja statystyk aplikacja php rejestracja statystyk } aplikacja

    php rejestracja statystyk statsd / node.js agregacja statystyk } graphite agregacja statystyk i storage developer kontrola aplikacji monitoring runtime monitoring biznes analizy STATSD / graphite niedziela, 12 sierpnia 2012
  15. serwer www rejestracja logo aplikacja php rejestracja zda en }

    serwer www rejestracja logo apache flume zapi danych HDFS } apache hadoop p etwa anie danych developer kontrola aplikacji biznes analizy biznes analizy niedziela, 12 sierpnia 2012
  16. pobranie html pobranie frameworkow javascript pobranie dodatkowych danych z backendu

    rendering komponentow, obsluga eventow zapis statystyk ` ` - ` niedziela, 12 sierpnia 2012