14 Eylül 2014 Pazar

Parasoft Rule Wizard

Giriş
Statik Analiz yaparken hazır gelen kuralların dışına çıkmak gerektiğinde Parasoft Rule Wizard'ı kullanıyoruz. Bu uygulama görsel olarak kuralı tasarlayabilmemizi sağlıyor.

Görsel Kural
Kural şu kutucuklardan oluşuyor.
Parent Node: İçi beyaz kutu. Kuralın ana giriş noktası
Qualifications : Başlığı sarı renk olan ve ana kuralı detaylandıran kutucuklar. Örnek:

Doğru Ana Kuralı Bulmak
Yeni bir kural için doğru ana kuralı bulmak aşılması gereken ilk engel. Mantıksa olarak gruplama yapılmış. Her ağacı açınca altında başka dallar karşımıza çıkıyor. Biraz deneme yanılma yapmak gerekebilir.


Kural Kaydetmek
Yaratılan kurala isim verirken Rule Editor'de boş bir alana sağ tıklayoruz.

Properties Sekmesi
Bu sekmede aşağıdaki alanları dolduruyoruz.

Rule ID : Format anladığım kadarıyla boşluk içermeyecek şekilde Projesi İsmi + tire + Numara şeklinde olmalı. Örneğin MyProject-21 gibi.
Header : Kuralın kısa açıklaması
Author : Kuralı yaratan kişi
Severity : Lowest/Low/Medium/High/Highest seçeneklerinden birisi
Programlama Dili : C,C++ checkboxlarından birisini de seçmek gerekir.

Description Sekmesi
Kuralın daha uzun açıklamasını buraya giriyoruz.

Kuralı Rule Tree'ye Dahil Etmek
Rule Tree içinde kendimize ait bir kategory oluşturmak iyi bir fikir. Bunun için "Edit Rulemap" düğmesine tıklayarak açılan pencerede Categories sekmesine gidiyoruz.
Category Id : Rule ID ile aynı kelimeyi kullanıyoruz. Örneğin MyProject
Category Description : Ağaçta gürünen isim. Büyük harf olarak girilmesi daha iyi. Örneğin MYDESC
Kural dosyası import edilince ağaçta  görünüm aşağıdaki gibi olur

MYDESC [MyProject] - (0/1 enabled)
  Kuralın kısa açıklaması [Kural numarası]

Eğer kural dosyasını Parasoft'un kurulum dizinine yerleştirirsek zaten otomatik olarak tanıyor. Örneğin
C:\Users\myuser\AppData\Local\Xtest\plugins.vs\com.parasoft.xtest.standars.vstudio.core.cpp\urules
dizini

Kendi Yazdığım Bazı Kural Örnekleri

Herhangi bir token'ın const_cast ve dynamic_cast olmasını yakalama kuralı.

{ Token | and }-> { Name | cons_cast | dynamic_cast }

Member methodlar'ın inline olmaması kuralı

{Member Function | and } -> {IsDecl | True}
                                                {IsInline | True}

Bu kuralda IsImplementation yerine IsDecl kullanılıyor. Böylece .h dosyasında kod olmaması sağlanır.



Hiç yorum yok:

Yorum Gönder