في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
بناء البرمجيات - المعمل 3
التحقق (Validation)، البرمجة القائمة على الاختبار أولا، تقنيات الصندوق الأسود والصندوق الأبيض، والتغطية
Validation)Verification)Coverage)التحقق (Validation)
التوثيق الشكلي (Verification)
مراجعة الكود (Code Review)
الاختبار (Testing)
| المعيار | التوثيق الشكلي (Verification) | التحقق (Validation) |
|---|---|---|
| السؤال | هل نبني المنتج بشكل صحيح؟ | هل نبني المنتج الصحيح؟ |
| الآلية | فحص المستندات والتصميم والكود مقابل المواصفات، دون تنفيذ | ديناميكي، يتضمن دائما تنفيذ الكود، ويتحقق من تلبية احتياجات العميل |
| التوقيت | يكتشف الأخطاء مبكرا في دورة التطوير | يأتي بعد التوثيق، ويكتشف ما لا يستطيع التوثيق اكتشافه |
| الهدف | البنية والمواصفات والتصميم | المنتج الفعلي |
حتى مع أفضل عمليات التحقق، بلوغ الجودة المثالية صعب جدا
| مستوى الجودة | عيوب لكل kloc | أمثلة |
|---|---|---|
| برمجيات صناعية نمطية | 1 - 10 | معظم البرمجيات التجارية |
| تحقق عالي الجودة | 0.1 - 1 | مكتبات جافا |
| حرج للسلامة | 0.01 - 0.1 | ناسا وشركات مثل Praxis |
لماذا الاختبار صعب
الاختبار الشامل غير عملي
الاختبار العشوائي غير المجدي
أخذ العينات الإحصائية لا يعمل
32-bit وحده لديه 2^64 حالة اختبار محتملةتقلل عدد حالات الاختبار مع زيادة التغطية
تقنيات الاختبار
قائم على المواصفة (صندوق أسود)
قائم على البنية (صندوق أبيض)
قائم على الخبرة
Cache)BVA)EP)event1event2event3الحالة A
الحالة B
الحالة C
Error Guessing)Exploratory Testing)مثال
BigInteger.multiply(BigInteger val): مجال مدخلات ثنائي الأبعاد من أزواج (a, b)
تقسيمات multiply(a, b)
تقسيمات الإشارة
قيم خاصة
تقسيمات الحجم
a وb كلاهما موجب، كلاهما سالب، أو إشارتان مختلفتانa أو b تساوي 0، 1، أو -1int/long؛ اختبر قيما صغيرة، وأيضا قيما تتجاوز Long.MAX_VALUE (~2^63)تغطية الجمل (Statement)
الأضعف
تغطية الفروع (Branch)
أقوى
تغطية المسارات (Path)
غالبا غير عملية
True وFalsedef absolute_value(x):
if x < 0: # Line 1
x = -x # Line 2
return x # Line 3x = 51 و3 فقط، لا 2: التغطية نحو `66%`| المعيار | اختبار الوحدة (Unit Test) | اختبار التكامل (Integration Test) |
|---|---|---|
| النطاق | وحدة واحدة (دالة/صنف) منعزلة، باستخدام بدائل (Stubs) | توليفة من الوحدات، أو البرنامج بأكمله |
| عند الفشل | الخطأ يشير مباشرة إلى تلك الوحدة | يكتشف أخطاء نقاط الاتصال بين الوحدات |
| أفضل ممارسة | ابن مجموعة شاملة من اختبارات الوحدة أولا | يحتاج بحثا أقل لتحديد الخطأ بعد ذلك |
Mahmoud Abas|بناء البرمجيات - المعمل 3: تقنيات اختبار البرمجيات