phan - analiza statyczna kodu z użyciem nowości php 7
TRANSCRIPT
![Page 1: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/1.jpg)
STATYCZNA ANALIZAKODU PHP Z PHAN
/ Tomasz Tybulewicz @tybulewicz
![Page 2: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/2.jpg)
HISTORIA
![Page 3: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/3.jpg)
https://twitter.com/rasmus/status/532288201852198912
![Page 4: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/4.jpg)
https://twitter.com/rasmus/status/616740838102532097
![Page 5: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/5.jpg)
https://twitter.com/rasmus/status/671836218896736257
![Page 6: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/6.jpg)
OBECNIE ROZWIJANY W ETSYwiększość zmian autorstwa Andrew Morrisona
![Page 7: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/7.jpg)
DZIAŁANIE
![Page 8: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/8.jpg)
WYMAGANIAwymaga PHP 7 i rozszerzenia analizuje kod dowolnej wersji PHP
php-ast
![Page 9: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/9.jpg)
PRZYKŁADY ŁAPANYCH BŁĘDÓW
![Page 10: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/10.jpg)
function getNumber(): int // Method \getnumber is declared to return int but has no return value
![Page 11: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/11.jpg)
function tailParametersRequired($p1 = null, $p2) // Required argument follows optional
![Page 12: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/12.jpg)
function oneParameter($i) oneParameter(1, 2); // Call with 2 arg(s) to \oneparameter() which only takes 1 arg(s)
![Page 13: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/13.jpg)
$arr = false;if ($arr[1]) // Suspicious array access to bool
![Page 14: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/14.jpg)
if (42 == [13, 37]) // int to array comparison
if ([13, 37] == 'string') // array to string comparison
![Page 15: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/15.jpg)
$v = null;if ($v instanceof Undef) // Checking instanceof against undeclared class \undef
![Page 16: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/16.jpg)
/** * @return int */function voidReturn() return null;// Returning type null but voidreturn() is declared to return int
![Page 17: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/17.jpg)
/** * @return int[] */function oldComment() return ['to be or not to be']; // Returning type string[] but oldComment() is declared to return int[]
![Page 18: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/18.jpg)
MOJE DOŚWIADCZENIA
![Page 19: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/19.jpg)
TRUDNE POCZĄTKI
![Page 20: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/20.jpg)
PHAN się wysypywał przy analizie Wordpressa
Pomogło cofnięcie wersji do release 0.2
Master został szybko poprawiony
![Page 21: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/21.jpg)
Błędy związane z klasami z rozszerzeń
Property of undeclared type \memcached Call to method get from undeclared class \memcached
Moje PHP 7 nie miało wkompilowanego tego rozszerzenia,dodałem do analizy plik "nagłówkowy" z definicją interface'u.
![Page 22: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/22.jpg)
Błędy z rozpoznawaniem przestrzeni nazw
PhanSignatureMismatch Declaration of function buildForm(\symfony\component\form\formbuilderinterface $builder, array $optionsbuildForm(\Symfony\Component\Form\formbuilderinterface $builder, array $options
Problem poprawiony w 1h od zgłoszenia
![Page 23: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/23.jpg)
DOMYŚLNY PLIK KONFIGURACYJNY.phan/config.php
Przykładowa konfiguracja Phan: github.com/etsy/phan/blob/master/.phan/config.php
Pełen plik: github.com/etsy/phan/blob/master/src/Phan/Config.php
![Page 24: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/24.jpg)
PIERWSZA PRÓBA'directory_list' => [ 'src', 'vendor', ],'exclude_analysis_directory_list' => [ 'vendor/' ],
![Page 25: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/25.jpg)
PIERWSZA PRÓBAczas analizy > 30sużyta pamięć > 2GB
![Page 26: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/26.jpg)
OBECNIE'file_list' => [ 'app/AppKernel.php', 'vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php' // 87 innych plików z vendor 'vendor/symfony/symfony/src/Symfony/Component/Yaml/Yaml.php', ],'directory_list' => [ 'src',],'exclude_analysis_directory_list' => [ 'vendor/', ],
![Page 27: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/27.jpg)
OBECNIEczas analizy < 2sużyta pamięć - pomijalnie mało
![Page 28: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/28.jpg)
UŻYCIE W NASZYM PROJEKCIEtesty u mnie: 1,5 miesiącareszta zespołu: 2 tygodnieCI: planujemy od wersji 1.0
![Page 29: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/29.jpg)
UŻYCIE W ETSYod tygodnia (info z 19 lutego) działa produkcyjnieblokuje deploymenty w przypadku wykrycia błędów
![Page 30: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/30.jpg)
PODSUMOWANIE
![Page 31: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/31.jpg)
PLUSYaktywnie rozwijany"oryginalne" ASTwykrywa problemy pomijane przez inne narzędziaanalizuje PhpDocdobry kontakt z developerami
![Page 32: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/32.jpg)
MINUSYaktywnie rozwijanywersja z gałęzi master często nie działafalse positivesnie zgłasza problemów z @throwsdość nowy projekt - mało informacji w sieci
![Page 33: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/33.jpg)
MINUSY
![Page 34: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/34.jpg)
ZASTOSOWANIEkolejne narzędzie do analizy koduwykrywa błędy zanim staną się problememwspiera podczas przeglądu kodu
![Page 35: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/35.jpg)
LINKIgithub.com/etsy/phanAnalyzing a Large Sloppy Code Basekanał na gitter
![Page 36: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/36.jpg)
PYTANIA?
![Page 37: Phan - analiza statyczna kodu z użyciem nowości PHP 7](https://reader033.vdocuments.net/reader033/viewer/2022042619/58849cd31a28ab26058b6a73/html5/thumbnails/37.jpg)
UŻYWAŁEM PHAN ZANIMTO BYŁO MODNE
/ Tomasz Tybulewicz @tybulewicz