php-ist 2013 / kodlama standartları ve kod kalite araçları

40
Özgür Yazılım A.Ş. www.ozguryazilim.com.tr php-ist 2013 Kodlama Standartları ve Kod Kalite Araçları

Upload: adililhan

Post on 29-Jan-2018

4.649 views

Category:

Technology


0 download

TRANSCRIPT

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

php-ist 2013

Kodlama Standartları ve Kod Kalite Araçları

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

Ö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

[email protected]

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

Ö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.

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

Ö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.

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

Ö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.

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

Ö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.

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

Ö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.

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

Ö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.

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

Ö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.

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

Ö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

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

PSR Standartlarına Genel Bakış

● PSR-0● Autoloading üzerine

● PSR-1● Temel kod standartları

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

Ö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

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

Ö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()

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

Kendi standartları olan birkaç yazılım

● Symfony Framework● Zend Framework● Drupal

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

Ö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ı.

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

Ö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.

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

Ö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.

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

Ö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?

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

Standartlarınızı Koruyabilmeniz İçin Birçok Araç Bulunuyor

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

Ö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

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

Ö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.

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

PHP_CodeSnifferKolayca kendi kurallarınızı entegre edebilirsiniz.

(uzunlukDegistir.xml)

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

Ö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.

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

Ö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

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

Ö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

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

Ö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 :(

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

Ö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.

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

Ö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

}

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

Ö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.

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

Ö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.

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

Bir yazılım olsa pre-commit hook ile standart kontrolü yapsa...

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

Ö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

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

Ö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.

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

Örnek Sonar Görüntüsü

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

Ö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.

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

Symfony2'nin phploc Analizi

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

Kaliteli Kodun Testleri de Yapılmış Olmalıdır

● PHPUnit● Behat + Mink● Selenium● Codeception

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

Ö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.

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

Özgür Yazılım A.Ş.www.ozguryazilim.com.tr

Örnek Bir Test

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

Ö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