Upload
adililhan
View
4.647
Download
0
Embed Size (px)
Citation preview
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
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
Ö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.
Ö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.
Ö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.
Ö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.
Ö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.
Ö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.
Ö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.
Ö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
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
PSR Standartlarına Genel Bakış
● PSR-0● Autoloading üzerine
● PSR-1● Temel kod standartları
Ö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
Ö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()
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
Kendi standartları olan birkaç yazılım
● Symfony Framework● Zend Framework● Drupal
Ö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ı.
Ö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.
Ö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.
Ö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?
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
Standartlarınızı Koruyabilmeniz İçin Birçok Araç Bulunuyor
Ö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
Ö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.
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
PHP_CodeSnifferKolayca kendi kurallarınızı entegre edebilirsiniz.
(uzunlukDegistir.xml)
Ö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.
Ö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
Ö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
Ö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 :(
Ö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.
Ö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
}
Ö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.
Ö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.
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
Bir yazılım olsa pre-commit hook ile standart kontrolü yapsa...
Ö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
Ö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.
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
Örnek Sonar Görüntüsü
Ö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.
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
Symfony2'nin phploc Analizi
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
Kaliteli Kodun Testleri de Yapılmış Olmalıdır
● PHPUnit● Behat + Mink● Selenium● Codeception
Ö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.
Özgür Yazılım A.Ş.www.ozguryazilim.com.tr
Örnek Bir Test
Ö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