एक सॉफ्टवेयर इंजीनियर के रूप में, मैं औद्योगिक उत्पादों के लिए बहुत सारे कोड लिखता हूं। कक्षाओं, थ्रेड्स, कुछ डिज़ाइन प्रयासों के साथ अपेक्षाकृत जटिल सामान, लेकिन प्रदर्शन के लिए कुछ समझौता भी। मैं बहुत परीक्षण करता हूं, और मैं परीक्षण से थक गया हूं, इसलिए मुझे औपचारिक सबूत उपकरण में दिलचस्पी हुई, जैसे कि कॉक, इसाबेल ... क्या मैं औपचारिक रूप से यह साबित करने के लिए इनमें से एक का उपयोग कर सकता हूं कि मेरा कोड बग-मुक्त है और किया जाए इसके साथ? - लेकिन हर बार जब मैं इनमें से किसी एक उपकरण की जांच करता हूं, तो मैं बिना सोचे-समझे चल देता हूं कि वे रोजमर्रा के सॉफ्टवेयर इंजीनियरिंग के लिए उपयोग करने योग्य हैं। अब, यह केवल मैं ही हो सकता हूं, और मैं उस :-) के बारे में संकेत / राय / विचार की तलाश कर रहा हूं
विशेष रूप से, मुझे यह धारणा मिलती है कि मेरे लिए इन उपकरणों में से एक को काम करने के लिए विचार के तहत कार्यक्रम की वस्तुओं, विधियों ... को ठीक से परिभाषित करने के लिए एक बड़े निवेश की आवश्यकता होगी। मुझे आश्चर्य है कि अगर यह सबकुछ भाप से नहीं चलेगा, तो इससे निपटने के लिए हर चीज को आकार देना होगा। या हो सकता है कि मुझे साइड-इफेक्ट्स से छुटकारा पाना होगा (जो कि प्रोवर टूल डिक्लेक्टिव भाषाओं के साथ वास्तव में अच्छा लगता है), और मुझे आश्चर्य है कि क्या इसका परिणाम "सिद्ध कोड" होगा जिसका उपयोग नहीं किया जा सकता क्योंकि यह तेज नहीं होगा या काफी छोटा। इसके अलावा, मेरे पास उस भाषा को बदलने की लक्जरी नहीं है जिसके साथ मैं काम करता हूं, यह जावा या सी ++ होने की आवश्यकता है: मैं अपने बॉस को नहीं बता सकता कि मैं अब से ओएक्सएक्सएक्सएमएल में कोड करने जा रहा हूं, क्योंकि यह एकमात्र भाषा है जिसे मैं कोड की शुद्धता साबित कर सकता हूं ...
क्या कोई व्यक्ति औपचारिक प्रमाण उपकरण टिप्पणी के अधिक अनुभव के साथ कर सकता है? फिर से - मैं एक औपचारिक उपकरण का उपयोग करने के लिए प्यार करता हूँ, मुझे लगता है कि वे महान हैं, लेकिन मुझे लगता है कि वे एक हाथी दांत टॉवर में हैं कि मैं जावा / सी ++ ... (PS: I) के नीच खाई से नहीं पहुंच सकता यह भी पसंद हास्केल, OCaml ... गलत विचार नहीं मिलता है: मैं कथात्मक भाषाओं और औपचारिक प्रमाण के एक प्रशंसक रहा हूँ, मैं सिर्फ देखने के लिए कि कैसे मैं वास्तविक सॉफ्टवेयर इंजीनियरिंग करने के लिए है कि उपयोगी बना सकता है कोशिश कर रहा हूँ)
अपडेट: चूंकि यह काफी व्यापक है, इसलिए निम्न निम्नलिखित विशिष्ट प्रश्नों का प्रयास करें: 1) औद्योगिक जावा / सी ++ कार्यक्रमों की शुद्धता साबित करने के लिए प्रवाहों का उपयोग करने के उदाहरण हैं? 2) क्या कोक उस कार्य के लिए उपयुक्त होगा? 3) अगर Coq उपयुक्त है, तो क्या मुझे पहले Coq में प्रोग्राम लिखना चाहिए, फिर Coq से C ++ / Java जेनरेट करें? 4) क्या यह दृष्टिकोण सूत्रण और प्रदर्शन अनुकूलन को संभाल सकता है?