Statik analiz, bir yazılımı çalıştırmadan analiz etme işlemidir. Bu çok iyi ve tavsiye edilir, ancak şunu unutmayın:
- farklı statik analiz araçları , çalıştıkları kodun farklı bir anlayışına sahiptir, bu nedenle farklı sorunları işaret edebilir (veya göstermeyebilir). Bir araç temiz bir rapor verebilir, diğeri ise bir milyon şeyden şikayet edebilir.
- dinamik bir araç (bir örnek vermek gerekirse, valgrind'i düşünün), kaynak tüketimi (zaman, bellek kullanımı) üzerinde ciddi bir yük pahasına birçok başka konu bulabilir. Bunun nedeni genellikle yazılımın enstrümanlı bir versiyonunu çalıştırmanızdır. Bir şekilde araç haline getirerek (malloc'unuzu bir hata ayıklama malloc ile değiştirin), yazılımınızla tam olarak aynı olmadığına dikkat edin (yürütme sürelerinden görebileceğiniz gibi)
Bu yaklaşımların her ikisi de bağlam eksikliğinden muzdariptir: SW'nin neyi başarması gerektiğini bilmiyorlar.
Kod incelemesi, sözde onu bilen ve kontrol edebilen başka bir kodlayıcı tarafından yapılır.
- kod doğruysa
- yazılım anlamsal olarak doğru ise.
Çok daha pahalıdır ve değişen bir tekrarlanabilirlik derecesine sahiptir, ancak çok yardımcıdır.
Her zaman olduğu gibi, tüm hataları giderecek ve tüm sorunları önleyecek tek bir gümüş mermi yoktur. Uygulama - yer, kod, zaman, üç kontrol şekli (statik, dinamik, koda gerçekten bakan daha fazla göz (ve beyin)) göz önüne alındığında mümkün olduğunca önerilir.
ps: Araçları sıfırdan uygulamanın genellikle çok daha iyi olduğunu belirtmeliyim. Eski bir sistemi dönüştürmek, yanlış pozitifler nedeniyle çok daha az zevkli bir deneyimdir. Sıfırdan başlar ve her zaman analiz aracını temiz tutmayı hedeflerseniz, muhtemelen birçok sorundan kaçınacaksınız.
pps: araçlar için olduğu gibi, dile bağlıdır. C ve C ++ dünyasında, yerleşik bir statik analiz aracı içeren Visual Studio'nun kendisine bakarak başlayabilirsiniz. Vikipedi'de nispeten tam bir liste bulunabilir.
ppps: Statik analiz, C veya C ++ gibi statik diller için daha uygundur. Python için, bir noktada bir listeye başvuran bir adın, dinamik özellikleri nedeniyle programın geri kalanı için bir listeye işaret edip etmeyeceğini söylemek gerçekten zor olabilir. Bu, PyPy'nin gösterdiği gibi bir JIT çabasının gösterdiği gibi hiçbir şeyin yapılamayacağı anlamına gelmez .