What is static analysis?
स्टेटिक विश्लेषण हमारे बारे में एक कार्यक्रम के सभी संभव फांसी तर्क करने की अनुमति देता है पर इस विषय के बारे में अधिक जानें। यह किसी भी निष्पादन के बारे में आश्वासन देता है, तैनाती से पहले, लेकिन वाणिज्यिक उपकरण डेवलपर भ्रम, झूठे सकारात्मक के साथ काम कर प्रयास की एक बहुत खर्च करते हैं, आदि
What are potential gotchas regarding proper and improper usage/application of static analysis?
मुख्य मुद्दा अमूर्त है। एब्स्ट्रक्शन हमें सभी संभावित रनों को स्केल और मॉडल करने देता है लेकिन परिशुद्धता और स्केलेबिलिटी को संतुलित करने की कोशिश कर रूढ़िवादी होना चाहिए। स्टेटिक विश्लेषण कपोल-कल्पना सफाई से डेवलपर कपोल-कल्पना
When should you use it, and when shouldn't it be used?
मुख्य उद्देश्य कोड परीक्षण और रखरखाव के लिए है से मेल नहीं के रूप में यह डेवलपर अंतर्ज्ञान के साथ अच्छी तरह से फिट बैठता है है। व्यावहारिक रूप से, यह बग-डिटेक्शन का सबसे आम रूप है लेकिन प्रत्येक परीक्षण सिस्टम के केवल एक संभावित निष्पादन की पड़ताल करता है। सुरक्षा उद्योग में डेवलपर्स इसे कोड बग, शोषण इत्यादि की खोज के लिए मुख्य उपकरण के रूप में उपयोग करते हैं।
यहां प्रतीकात्मक निष्पादन का उपयोग करके स्टेटिक विश्लेषण का एक उदाहरण है जहां मुख्य विचार अज्ञात प्रतीकात्मक चर का उपयोग करके परीक्षण को सामान्य बनाना है मूल्यांकन जहां हम प्रतीकात्मक राज्यों को ट्रैक करते हैं। यदि निष्पादन पथ अज्ञात पर निर्भर करता है, तो हम प्रतीकात्मक निष्पादक निष्कर्ष निकालते हैं। प्रतीकात्मक निष्पादन के दौरान, हम यह निर्धारित करने की कोशिश कर रहे हैं कि कुछ सूत्र संतोषजनक हैं (उदाहरण के लिए एक विशेष कार्यक्रम बिंदु पहुंच योग्य है, सरणी पहुंच ए [i] सीमाओं से बाहर है? आदि)।
int a = α, b = β, c = γ;
// symbolic
int x = 0, y = 0, z = 0;
if (a) {
x = -2;
}
if (b < 5) {
if (!a && c) { y = 1; }
z = 2;
}
assert(x+y+z!=3)
और यह सरल कोड नमूने के विश्लेषण:
यहाँ है कि स्थिर कोड विश्लेषण के लिए उपयोग किया जाता है श्रीमती/सैट समाधानकर्ताओं के लिए कुछ उपयोगी लिंक कर रहे हैं:
SAT solving, SMT solving and Program Verification
List of tools for Static Code Analysis
Symbolic Execution, SAT solving, SMT solving and Program Verification
Symbolic Execution Harvard CS252r
"यूनिट परीक्षण जो (सैद्धांतिक रूप से) साबित करता है कि कोड वास्तव में काम करता है।" पेडेंट नहीं होना चाहिए (ओह, ठीक है, एक पेडेंट होने के लिए), यूनिट परीक्षण कुछ भी "सिद्ध" नहीं करते हैं, यहां तक कि "सैद्धांतिक रूप से" भी नहीं। टेस्ट शुद्धता में विश्वास पैदा करते हैं, लेकिन वे –
के हर व्यवहार को संभवतः कवर नहीं कर सकते हैं "उन्हें निर्माण प्रक्रिया में एकीकृत किया जाना चाहिए" सहमत हैं। हालांकि, डीबग और रिलीज बनाता है, या एक या दूसरे? –
@ChrisConway Untrue; यदि आप किसी दिए गए आंशिक या कुल कार्य को कम करने के लिए व्यवस्थित सबूत या पूर्व/पोस्ट स्थितियों का उपयोग करते हैं, तो आप उन मामलों को पूरी तरह से साबित करने के लिए यूनिट परीक्षणों का उपयोग कर सकते हैं (और इसलिए एक अनिवार्य सबूत है कि कोड जो करता है वह करता है)। हालांकि कार्यों के दौरान कई बड़े पैमाने या मूल्यों के लिए यह आसान नहीं है, सैद्धांतिक रूप से और व्यावहारिक रूप से यह निश्चित रूप से संभव है। – Alice