Mart 2010 tarihinde hazırladığım bir yazıyı paylaşmak istiyorum.
Doğrulama ve test yazılım geliştirme sürecinin önemli bir parçasıdır. Testin kalitesi yazılımın kalitesiyle paralellik sergiler. Bu süreçte kullanılabilecek bir araç olarak PMD'den nasıl faydalanıldığı kısaca aşağıda anlatılmıştır.
PMD java için yazılmış açık kaynak kodlu kod analiz aracıdır.
http://sourceforge.net/projects/pmd/files/ adresinden indirilebilmektedir. Bu adreste JDeveloper, Eclipse, Netbeans gibi çeşitli IDE’ler için uygun indirme yapılabilmektedir. Ben Netbeans üzerinde çalıştığım için Netbeans versiyonunu indirdim. Daha sonra eklentiyi IDE’me kurdum. Bu işlemi Tool>Plugins>Downloaded>Add Plugins..>pmd.nbm adımlarını izleyerek yaptım. Eklentiyi kurduktan sonra bir projeye sağ tıkladığımda Tools bölümünden Run PMD çalıştırılarak ya da Ctrl+Alt+P kısayoluyla çalıştırılabilmektedir.
Şekil 1
PMD’nin kodu analiz ederken hangi kriterlere bakacağını da ayarlamamız mümkün. Buna göre kodun şu şu özelliklerine bakılsın, şunlara bakılmasına gerek yok şeklinde bir ayarlama yapılabiliyor. Aynı zamanda eski ayarların saklanıp tekrar kullanılması, farklı senaryolar için farklı ruleset’lerin kullanılması mümkün. İlk önce Tools>Options>Miscallaneous>PMD penceresini açılır.(Şekil-2)
Şekil 2
Buradan “Manage Rules” butonuna basıldığında Rule editor tablosu gelir. Buradan rule’lar kullanıcı tarafından belirlenir. “>>” tuşu ile tüm rule’ların yüklenmesi de sağlanabilir.
Şekil 3
Kuralları bu şekilde ayarladıktan sonra artık kodları test edebiliriz. Test işlemi için yaz stajında yazdığım “Çoklu Server Client” programımı seçtim. Bu program ağ üzerinden bilgisayarların haberleşmesini sağlayan, aynı bilgisayarda birden fazla server ve client oluşturulmasına imkan veren bir programdır. Run PMD yapılınca PMD 128 adet uyarı verdi. Bunlardan biri de EmptyCatchBlock hatasıydı. Hatanın yanında açıklaması var. Daha detaylı bir
açıklama ve kod örneğine “Rule editor” penceresinde hata seçildiğinde ulaşılabilmektedir. Bu kadar çok uyarı çıkmasının nedeni tüm kuralları geçerli kılmam oldu.
Şekil 4
Şimdi de daha önceden hazırlanmış bir ruleset’in kullanılmasında bahsedeceğim. Bu sefer Options Penceresinden (Bkn Şekil-2) Manage rulesets butonuna basıyoruz. Add ruleset butonuna basarak bir xml dosyası yüklüyoruz.(Bkn Şekil-5) Bu dosyada kural ayarlarımız mevcut. Bu xml dosyasını kendimiz değiştirebiliyor, ihtiyaca göre edit edebiliyoruz. Ya da daha önceden başkalarının yazdığı bir ruleset’i kullanabiliyoruz. Aşağıda kullandığım ruleset’in içi gözükmektedir.
<?xml version="1.0" ?>
- <ruleset name="Custom ruleset" xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>Imagine PMD Rule Set</description>
<rule ref="rulesets/basic.xml" />
<rule ref="rulesets/codesize.xml" />
<rule ref="rulesets/clone.xml" />
<rule ref="rulesets/coupling.xml" />
<rule ref="rulesets/finalizers.xml" />
<rule ref="rulesets/imports.xml" />
<rule ref="rulesets/logging-java.xml" />
<rule ref="rulesets/logging-jakarta-commons.xml" />
<rule ref="rulesets/naming.xml" />
<rule ref="rulesets/optimizations.xml" />
<rule ref="rulesets/strings.xml" />
<rule ref="rulesets/sunsecure.xml" />
<rule ref="rulesets/unusedcode.xml" />
- <rule ref="rulesets/codesize.xml/CyclomaticComplexity">
- <properties>
<property name="reportLevel" value="8" />
</properties>
</rule>
- <rule ref="rulesets/strictexception.xml">
<exclude name="SignatureDeclareThrowsException" />
</rule>
</ruleset>
Şekil 5
İnternetten indirdiğim custom ruleset ile projemde tekrar test başlattığımda bu sefer bana 26 uyarı verdi.(Bkn Şekil-6)
Şekil 6
Bu uyarıları düzelterek daha kaliteli bir program oluşturmak mümkün. Projenin tamamına test uyguladım ancak class’lara tek tek uygulamak da mümkün. Hatalarımı göstermesi bakımında benim için çok yararlı oldu. Anlayamadığım hatalarda açıklamalara ve örnek kodlara bakmak da tecrübe kazandırdı. Bu sayede ileride yazdığım programlarda günden güne daha az hata mesajı alacağımı düşünüyorum.