php-ist 2013 / Kodlama Standartları ve Kod Kalite Araçları

4,237 views

Published on

Published in: Technology

php-ist 2013 / Kodlama Standartları ve Kod Kalite Araçları

  1. 1. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr php-ist 2013 Kodlama Standartları ve Kod Kalite Araçları
  2. 2. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Adil İlhan Yazılım Geliştirici – Özgür Yazılım A.Ş. @adil_ilhan www.adililhan.com adil.ilhan@ozguryazilim.com.tr
  3. 3. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Bir Yazılım Geliştirilme Aşamasında Sırasıyla... ● Kod standartları belirlenir. ● Kod standartlarını koruyan araçlar aktif edilir. ● Kod standartlarına ne kadar uyulmuş bakılır.
  4. 4. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Genel Problem ● PHP'nin resmi bir kodlama standartı yok. ● pear.php.net altında ufak bir döküman var. ● Detaylı değil. ● Pear paketi yazacak kişiler için yazılmış bir döküman.
  5. 5. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Genel Problem ● Yazılımcılar kendi standartlarını belirliyorlar. ● CMS ve framework'lerin çekirdek geliştiricileri yazılımlarına uygun kodlama standartları belirliyor. ● Bundan dolayı piyasada birçok farklı standart bulunuyor.
  6. 6. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Sizin de bir standartınız olmalı! ● Çünkü bir standarta uygun olmayan kodun spagetti koda dönüşmesi çok kolaydır. ● Ekipteki kişilerin kodlarını kolayca okuyabilmelisiniz.
  7. 7. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Sizin de bir standartınız olmalı! ● Dikkat! Düzensizlik düzen olmuş olabilir. ● Karmaşık kodlara alışmış olabilirsiniz. ● Kodu bu şekilde sadece “siz” yönetebilirsiniz. ● Geleceği de düşünmelisiniz. ● Sadece bilgisayar değil insanlar da kodu anlayabilmeli.
  8. 8. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Standartlarınızı Genele Göre Belirleyin ● Kendi yazım stiliniz, genel kabul görmüş stillerden farklı olabilir. ● CMS ve framework'lerin kodlama standartlarını yazdıkları dökümanlara bakın. ● PSR iyi bir tercih olabilir.
  9. 9. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PSR Standartları Size Yardımcı Olabilir ● PHP Standards Recommendation ● PHP Standart Tavsiyeleri. ● PHP Framework Interoperability Group ● (PHP Çatıları Birlikte Çalışabilirlik Grubu) ● Grupta PHP ile yazılmış ve önemli sayılabilecek yazılımların çekirdek geliştiricileri var. ● Doctrine, Composer, Symfony2, Laravel ... ● PHP'de ortak bir standart oluşturmaya çalışıyorlar.
  10. 10. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PSR Standartlarına Genel Bakış ● Birbiri ile bağlantılı 4 PSR standartı bulunuyor. ● PSR-0 ● PSR-1 ● PSR-2 ● PSR-3
  11. 11. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PSR Standartlarına Genel Bakış ● PSR-0 ● Autoloading üzerine ● PSR-1 ● Temel kod standartları
  12. 12. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PSR Standartlarına Genel Bakış ● PSR-2 ● Özel fonksiyonların kullanım şekilleri – Try-catch, foreach, for, if-else ... ● PSR-3 ● Loglama üzerine ● Logger Interface'i bulunuyor
  13. 13. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Birkaç PSR Standartı ● Indent'lerde 4 boşluk olmalı. White space olmamalı. ● true, false, null gibi kelimeler küçük harfli olmalı. ● Satır uzunluğu en fazla 120 karakter olmalı. 80 karakteri geçmese iyi olur. ● Dosya BOM'suz UTF-8 olmalı. ● Sabitler (define) büyük harfle olmalı. ● Metot ismi camelCase olmalı. Örn: getCity()
  14. 14. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Kendi standartları olan birkaç yazılım ● Symfony Framework ● Zend Framework ● Drupal
  15. 15. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Symfony'de bu işler nasıl yürüyor? ● PSR-0,PSR-1 ve PSR-2'yi dikkate alıyor. ● Her sınıfta, her metotta PHPDoc istiyor. ● Her sınıfta namespace kullanımı istiyor. ● Exception mesajlarında sprintf kullanılmalı. ● camelCase kullanılmalı. ● Parametrelerde alt çizgi kullanmak isteğe bağlı.
  16. 16. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Ya Zend Framework'te? ● ?> etiketini istemiyor. ● 80 karakter olmalı. Eğer koşullar uygun değilse 120 karaktere kadar çıkılabilir. ● Eğer fonksiyon argümanları maksimum karakter sayısını aşıyorsa alt satıra yazılmalı. ● Metotlara ve sınıflara PHPDoc istiyor.
  17. 17. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Drupal Bazen Kendi Bildiğini Okuyor ● Bazı noktalarda PSR standartlarını dikkate alsa bile bazı kuralları farklı işletiyor. ● Indent'lerde 2 boşluk istiyor. ● UpperCamel isimlendirme kullanıyor. Örn: GetCity(); ● if($degisken) yerine empty veya isset ile kontrol yapılmasını istiyor.
  18. 18. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Standartlarınızı Belirledikten Sonra O Standartları Korumanız Gerek Peki standartları nasıl koruyabiliriz?
  19. 19. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Standartlarınızı Koruyabilmeniz İçin Birçok Araç Bulunuyor
  20. 20. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PHP_CodeSniffer ● PEAR eklentisi ● Oldukça esnek bir yapıya sahip. ● Kendi kural setlerinizi oluşturabilirsiniz. ● Uzantı (php,inc vb.) seçebilirsiniz. ● -v ile adım adım analizi takip edebilirsiniz. ● Analiz sırasında php.ini düzenleyebilirsiniz. – phpcs -d memory_limit=512M yol
  21. 21. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PHP_CodeSniffer ● --ignore parametresi ile belli dosyaları analiz ettirmeyebilirsiniz. ● --ignore=*/dummyCodes/*, */codeTests/* ● Birçok farklı formatta rapor veriyor. ● XML, CSV, emacs... ● SVN, Git taraması yapıp yüzde olarak committer bilgisi sunuyor.
  22. 22. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PHP_CodeSniffer Kolayca kendi kurallarınızı entegre edebilirsiniz. (uzunlukDegistir.xml)
  23. 23. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr phpcpd (PHP Copy/Paste Detector) ● Don't Repeat Yourself (Kendini Tekrarlama) ● Tekrarlanmış kod parçalarını tespit eder. ● PEAR veya composer ile yüklenebilir.
  24. 24. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr phpcpd (PHP Copy/Paste Detector) ● Kullanımı oldukça basit. ● phpcpd yol ● Örnek çıktı: ● /var/www/wp/wp-includes/Text/Diff/Engine/xdiff.php:57-63 ● /var/www/wp/wp-includes/Text/Diff/Engine/string.php:240-246
  25. 25. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr phpdcd (PHP dead code detector) ● İşi; kullanılmayan metotları ve fonksiyonları tespit etmek. ● Bunun da kullanımı kolay :) ● phpdcd yol
  26. 26. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr phpdcd (PHP dead code detector) ● Nadiren de olsa kullanılan fonksiyonları tespit edebiliyor. ● add_action( 'admin_page_access_denied', '_access_denied_splash', 99 ); ● _access_denied_splash() fonksiyonu böyle çağırıldığı için tespit edemiyor. ● __construct, __destruct'ı da yakalıyor :(
  27. 27. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr PHPDocumentor ile PHPDoc Kontrol Altında ● Doc, bir kodun sürdürülebilir olması için gerekli olan en temel etkendir. ● Mümkün olduğunca her sınıfa, metota doc eklenmelidir. ● Yorum satırlarını PHPDocumentor'un kurallarına uygun yazarsanız güzel bir kod dökümanı elde edebilirsiniz.
  28. 28. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Örnek Bir PHPDoc /** * Sehir bilgisi donduruyor. * @param string $city * @return string * @throws Exception Eger string degilse Exception firlatiyor */ function getCity($city) { // Kodlar }
  29. 29. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Standartları Belirledik Ama Bunun Kontrolünü Nasıl Sağlayacağız? ● Bu bahsedilen araçların hepsinin konsoldan yönetmek için gerekli arayüzleri var. ● Ancak her defasında kodları bu araçlardan geçirmek uğraştırıcı. Bundan dolayı SVN/Git (Yoksa siz hâlâ VCS kullanmıyor musunuz?) deposuna hatalı kodlar gidebiliyor.
  30. 30. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr pre-commit Hook Bugünler İçin Var ● Dosyanızı commitlerken otomatik olarak arkada sizin istediğiniz komutları uygular. ● Eğer bir hata olursa commit'e izin vermez. ● Örneğin: Karakter sayısı fazla bir dosya sunucuya gitmeden geri döner. Böylece depoda sadece standartlara uygun kod bulunur.
  31. 31. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Bir yazılım olsa pre-commit hook ile standart kontrolü yapsa...
  32. 32. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Muhafız Sizin İçin Var :) ● SVN/Git pre-commit hook ile her commit'te kodlarınızı inceliyor. ● Standart dışı yazım gördüğünde commiti kesiyor ve mesaj veriyor. ● Deponuzda hep standartlara uygun kod bulunması için Muhafız'ı yanınızdan ayırmayın :) ● github.com/sonsuzdongu/muhafiz
  33. 33. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Standartlara Uyarak Ne Kadar Kod Yazdığınızı Görmek İstemez misiniz? ● Sonar, nam-ı diğer Doğrucu Davut ● Kodlarınızı standartlar göre inceler. Nerede hangi hatalar yaptığınızı gösterir. ● Yapılan hatalara göre başarı grafiği çıkarır. ● Projeye kim ne kadar commit yapmış grafik olarak sunar.
  34. 34. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Örnek Sonar Görüntüsü
  35. 35. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr phploc Kodunuzun İçeriği Hakkında Bilgi Alın ● phploc ile yazılımınızda kaç tane interface, sınıf, metot, namespace, traits ... olduğunu öğrenebilirsiniz. ● Nesne yönelimli programlama tekniğini kodunuza ne kadar yansıttığınızı phploc sayesinde görebilirsiniz.
  36. 36. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Symfony2'nin phploc Analizi
  37. 37. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Kaliteli Kodun Testleri de Yapılmış Olmalıdır ● PHPUnit ● Behat + Mink ● Selenium ● Codeception
  38. 38. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Codeception ile BDD ● Davranış Güdümlü Testing yapmanızı sağlar. ● Symfony2, Zend Fw, Kohana ... destekliyor. ● Jenkins veya Bamboo ile kullanılabilir. ● Kullanımı oldukça kolaydır ● Yazı halindeki senaryoyu koda çevirerek hızlıca kodlarınızı test edebilirsiniz.
  39. 39. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Örnek Bir Test
  40. 40. Özgür Yazılım A.Ş. www.ozguryazilim.com.tr Teşekkürler... Sorularınız? Adil İlhan Yazılım Geliştirici – Özgür Yazılım A.Ş. www.adililhan.com www.twitter.com/adil_ilhan www.linkedin.com/in/adililhan

×