सॉफ्टवेयर के सभी दोष, कोड की त्रुटियों के कारण नहीं होते हैं। महंगे दोषों का एक आम स्रोत, अपेक्षाओं के अन्तराल के कारण पनपता है, उदाहरण है, अपरिचित अपेक्षाएं, जो प्रोग्राम डिजाइनर द्वारा विलोपन की त्रुटियों में फलित होते हैं। अपेक्षा अन्तराल का एक आम स्रोत, ग़ैर-कार्यात्मक अपेक्षा है, जैसे परीक्षण-क्षमता, आरोहण-क्षमता, अनुरक्षण-क्षमता, उपयोग-क्षमता, निष्पादन और सुरक्षा।

सॉफ्टवेयर दोष निम्नलिखित प्रक्रियाओं के माध्यम से होते हैं। प्रोग्रामर एक त्रुटि (ग़लती) करता है, जो सॉफ्टवेयर के सोर्स कोड में एक ख़राबी (दोष, बग) में फलित होता है। यदि इस ख़राबी को निष्पादित किया जाता है, तो कुछ ख़ास स्थितियों में सिस्टम त्रुटिपुर्ण परिणाम देगा, जो एक विफलता का कारण बनेगा। सभी दोष आवश्यक रूप से विफलता में परिणत नहीं होंगे। उदाहरण के लिए, डेड कोड में दोष, कभी विफलता में परिणत नहीं होंगे। जब परिवेश बदला जाता है, तब एक ख़राबी विफलता में बदल सकती है। परिवेशगत इन परिवर्तनों के उदाहरणों में शामिल हैं, सॉफ्टवेयर का एक नए हार्डवेयर प्लेटफोर्म पर चलाया जाना, सोर्स डाटा में परिवर्तन या भिन्न सॉफ्टवेयर के साथ पारस्परिक क्रिया. एक एकल त्रुटि, विफलता के विस्तृत लक्षण में परिणत हो सकती है।

स्टेबिलिटी परीक्षण
एक परीक्षण चक्र नमूना
प्रमाणन
त्रुटियाँ और असफलताएं