2012-04-11 18 views
8

Bir nesne başvurusu boş bir Null Reference Exception atabildiğinde, bunlara yönelik savunma kodu yazabilmem için uyarı almanın bir yolunu buluyorum.Potansiyel boş nesne referansları için statik kod doğrulaması mevcut mu?

Resharper baktım ama bunu gerçekleştirir orada bir şey görmedik.

Kod Sözleşmeleri muhtemelen olmayan bir marş olduğu; Uygulama oldukça büyüktür ve Kod Sözleşmeleri resmi olarak kullanıma sunulmadan önce .NET 3.5'te yazılmıştır.

+0

sadece zaman nesneye referans 'null' olup olmadığını görmek için kontrol etmek daha kolay olmaz mı? Başka bir rotaya da gidebilir ve kullandığınız nesnenin boş olduğundan emin olamazsınız. –

+1

* Her * nesne başvurusu için? : Bazıları asla boş olamaz (kurucuda ayarlanırlar). –

+0

Kod Sözleşmeleri kullanmıyor olsanız bile, yöntemlerin başında koruyucu maddeler yazmalısınız. – jason

cevap

3

Resharper aslında böyle bir şey başarmak gelmez. Mümkün NullReferenceExpections öğesi, üzerine geldiğinizde araç ipuçlarıyla mavi renkte IDE içinde vurgulanır.

enter image description here

Resharper sonra (Visual Studio'nun, derleyici hataları ve uyarıları ayrı) o kendi denetim sonuçları penceresinde potansiyel hataları ve uyarıları izler. Özellikle bir nesne başlatıldı sürece

enter image description here

+0

Analiz uyarıları listesinde görünecek mi? Başka uyarılarda denize gömülmek mümkün. –

+0

Oh Ne demek istediğini anladım. VS Hata Listesinde görünmeyeceklerdir; Yeniden paylaşım, kod sorunlarının izlenmesi ve takibi için kendi penceresini korur. Cevabımı uygun şekilde güncellemek. – raveturned

+1

@RobertHarvey, ReSharper kullanarak mı bitti? Denemeyi denedim, benzer bir null-sayısında (bunu) alıp almadığını görmek için, ama varsayılan olarak bana çözüm için birkaç bin uyarı/hata verdi, önemsemek. – Stijn

0

Genel anlamda, her zaman en az kadarıyla derleyici söz konusu olduğunda, bir boş nesne referansı atmak potansiyeline sahip olabilir. Bir algoritmanın nesneye yapılan bir referansın boş olup olmayacağını kontrol etmesi için, programınızın alabileceği her yolu geçirmesi ve kullanmakta olduğunuz tüm harici kitaplıklardaki yolları içermesi gerekir. En basit programlar için bile, böyle bir algoritma derleyicinizin performansını düşürür.

+0

Eh, her * zaman derlediğimde * mutlaka kontrol etmek zorunda değil. Çoğunlukla, "ilk şans" istisnaları ararım, bir nesnenin başlatıldığı durumlar değil, daha sonra boş bırakılabilir (nadiren de olsa, bunu yaparsam). –

0

Ben kör kodu ve her yöntemin içinde mevcut her bir alan için boş karşı savunmak fikrine karşı değilim.

beni boş değerlere karşı kontrol nereye karar aşağıdaki yardım:

1- yöntemlerinizi çağırma olacak?
bir yöntem özel ve bunu erişilen ediliyor bulunuyor üzerinde kontrol sahibi, ben buna boş değerler beklemek yöntemin mantığının parçası olmadıkça boş çekler karşı korumak için mantıklı görmüyorum. Bir yöntem kamuya açıksa (API gibi), tabiki boş çekler çok büyük bir endişe olmalıdır.

2- Yazılım Tasarım: method1(fromAnimalToString(animal)); arayarak ve nedense fromAnimalToString() için olan var
Görüntü asla (Gerçi bunun yerine boş bir dize döndürebilir) null döndürür.
Sonra böyle durumda, Method1 içinde animal != null() 'in bedeni kontrol etmek mantıklı olmaz

3- Test: Yazılım mühendisliğinde
, her zamankinden geleni olası senaryoları test etmek neredeyse imkansız yürütün. Bununla birlikte, normal ve alternatif senaryoları test edin ve akışın beklendiği gibi olduğundan emin olun.

+0

Soruyorum çünkü projeyi birkaç kez sınamaya sundum ve geliştirme testlerimde belirgin olmayan null başvuru istisnası ortaya çıktı. –

+0

İdeal bir ortamda, geliştiricilerin hata oluşumunu en aza indirmek için ellerinden geleni yapmayı düşünüyorum. Karmaşık sistem durumunda, QA'nın işi, geliştiricilerin düşündükleri senaryoları üretmeye çalışmaktır, böylece QA aşamasında olası NullPointerExceptions'a yol açabilecek alternatif senaryolar bulunabilir. Bu gibi durumlarda, null değerini kontrol etmek yeterli olmayabilir, aynı zamanda parametrenin null olarak neyin geldiğine bağlı olarak uygun mantıksal önlemleri almak da yeterli olmayabilir. – SiN