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

Statyczna analiza kodu z Phan

Statyczna analiza kodu z Phan

Phan to nowy analizator statyczny kodu PHP. Korzysta z nowości w PHP 7 - drzewa składniowego (AST). Opowiem o moich doświadczeniach z codziennej pracy z tym narzędziem.

Tomasz Tybulewicz

February 22, 2016
Tweet

Other Decks in Technology

Transcript

  1. f u n c t i o n g e

    t N u m b e r ( ) : i n t { } / / M e t h o d \ g e t n u m b e r i s d e c l a r e d t o r e t u r n i n t b u t h a s n o r e t u r n v a l u e
  2. f u n c t i o n t a

    i l P a r a m e t e r s R e q u i r e d ( $ p 1 = n u l l , $ p 2 ) { } / / R e q u i r e d a r g u m e n t f o l l o w s o p t i o n a l
  3. f u n c t i o n o n

    e P a r a m e t e r ( $ i ) { } o n e P a r a m e t e r ( 1 , 2 ) ; / / C a l l w i t h 2 a r g ( s ) t o \ o n e p a r a m e t e r ( ) w h i c h o n l y t a k e s 1 a r g ( s )
  4. $ a r r = f a l s e

    ; i f ( $ a r r [ 1 ] ) { } / / S u s p i c i o u s a r r a y a c c e s s t o b o o l
  5. i f ( 4 2 = = [ 1 3

    , 3 7 ] ) { } / / i n t t o a r r a y c o m p a r i s o n i f ( [ 1 3 , 3 7 ] = = ' s t r i n g ' ) { } / / a r r a y t o s t r i n g c o m p a r i s o n
  6. $ v = n u l l ; i f

    ( $ v i n s t a n c e o f U n d e f ) { } / / C h e c k i n g i n s t a n c e o f a g a i n s t u n d e c l a r e d c l a s s \ u n d e f
  7. / * * * @ r e t u r

    n i n t * / f u n c t i o n v o i d R e t u r n ( ) { r e t u r n n u l l ; } / / R e t u r n i n g t y p e n u l l b u t v o i d r e t u r n ( ) i s d e c l a r e d t o r e t u r n i n t
  8. / * * * @ r e t u r

    n i n t [ ] * / f u n c t i o n o l d C o m m e n t ( ) { r e t u r n [ ' t o b e o r n o t t o b e ' ] ; } / / R e t u r n i n g t y p e s t r i n g [ ] b u t o l d C o m m e n t ( ) i s d e c l a r e d t o r e t u r n i n t [ ]
  9. Błędy związane z klasami z rozszerzeń P r o p

    e r t y o f u n d e c l a r e d t y p e \ m e m c a c h e d C a l l t o m e t h o d g e t f r o m u n d e c l a r e d c l a s s \ m e m c a c h e d Moje PHP 7 nie miało wkompilowanego tego rozszerzenia, dodałem do analizy plik "nagłówkowy" z definicją interface'u.
  10. Błędy z rozpoznawaniem przestrzeni nazw P h a n S

    i g n a t u r e M i s m a t c h D e c l a r a t i o n o f f u n c t i o n b u i l d F o r m ( \ s y m f o n y \ c o m p o n e n t \ f o r m \ f o r m b u i l d e r i n t e r f a c e $ b u i l d e r , a r r a y $ o p t i o n s b u i l d F o r m ( \ S y m f o n y \ C o m p o n e n t \ F o r m \ f o r m b u i l d e r i n t e r f a c e $ b u i l d e r , a r r a y $ o p t i o n s Problem poprawiony w 1h od zgłoszenia
  11. PIERWSZA PRÓBA ' d i r e c t o

    r y _ l i s t ' = > [ ' s r c ' , ' v e n d o r ' , ] , ' e x c l u d e _ a n a l y s i s _ d i r e c t o r y _ l i s t ' = > [ ' v e n d o r / ' ] ,
  12. OBECNIE ' f i l e _ l i s

    t ' = > [ ' a p p / A p p K e r n e l . p h p ' , ' v e n d o r / d o c t r i n e / c o l l e c t i o n s / l i b / D o c t r i n e / C o m m o n / C o l l e c t i o n s / A r r a y C o l l e c t i o n / / 8 7 i n n y c h p l i k ó w z v e n d o r ' v e n d o r / s y m f o n y / s y m f o n y / s r c / S y m f o n y / C o m p o n e n t / Y a m l / Y a m l . p h p ' , ] , ' d i r e c t o r y _ l i s t ' = > [ ' s r c ' , ] , ' e x c l u d e _ a n a l y s i s _ d i r e c t o r y _ l i s t ' = > [ ' v e n d o r / ' , ] ,
  13. UŻYCIE W NASZYM PROJEKCIE testy u mnie: 1,5 miesiąca reszta

    zespołu: 2 tygodnie CI: planujemy od wersji 1.0
  14. UŻYCIE W ETSY od tygodnia (info z 19 lutego) działa

    produkcyjnie blokuje deploymenty w przypadku wykrycia błędów
  15. PLUSY aktywnie rozwijany "oryginalne" AST wykrywa problemy pomijane przez inne

    narzędzia analizuje PhpDoc dobry kontakt z developerami
  16. MINUSY aktywnie rozwijany wersja z gałęzi master często nie działa

    false positives nie zgłasza problemów z @throws dość nowy projekt - mało informacji w sieci