لماذا ضمان الجودة؟ كلفة العيب
لماذا نكتب اختبارات أصلًا، وكم يكلّفنا العيب الذي يتسلّل إلى المستخدم؟ ⏱ نحو 30 دقيقة.
- تدرك أن كلفة العيب تكبر بتأخّر اكتشافه.
- تفرّق بين
QAوQCوالاختبار. - تفهم الاختبار كمقارنة بين الفعلي والمتوقَّع.
- تكتب اختبارًا بسيطًا يكشف عيبًا.
١العيب الذي يَكبر
زرٌّ لا يعمل، سعرٌ يُحسب خطأً، نموذجٌ يقبل بريدًا بلا @. عيبٌ صغير في الكود قد يُكلّف المتجر عملاءه وسمعته. ضمان الجودة QA هو العمل المنظّم لاكتشاف هذه العيوب قبل أن يراها المستخدم.
القاعدة الأشهر في المجال: كلفة إصلاح العيب تتضاعف كلما تأخّر اكتشافه. خطأٌ يُكتشَف وأنت تكتب الكود يُصلَح في دقائق؛ الخطأ نفسه بعد الإطلاق قد يُكلّف أضعافًا.
| متى اكتُشف العيب | الكلفة النسبية التقريبية |
|---|---|
| أثناء الكتابة | ×1 |
| أثناء الاختبار | ×10 |
| بعد الإطلاق للمستخدم | ×100 |
لذلك لا نترك الاختبار للنهاية؛ نختبر مبكرًا وباستمرار. والاختبار الآليّ يجعل ذلك ممكنًا: يُعاد تشغيله في ثوانٍ كلما غيّرنا الكود.
٢ثلاثة مصطلحات لا تُخلَط
| المصطلح | المعنى | السؤال |
|---|---|---|
| ضمان الجودة QA | منع العيوب بتحسين العملية كلها | هل نبني بطريقةٍ صحيحة؟ |
| مراقبة الجودة QC | كشف العيوب في المنتج | هل المنتج صحيح؟ |
| الاختبار Testing | تنفيذ البرنامج للعثور على العيوب | هل يعمل كما يُتوقَّع؟ |
الاختبار جزءٌ من مراقبة الجودة، ومراقبة الجودة جزءٌ من ضمان الجودة. في هذا المقرر نركّز على الاختبار بوصفه أداة QA الأهمّ، ونكتبه بأيدينا.
٣أول نظرة: اختبارٌ يكشف عيبًا
انظر دالةً فيها عيب، واختبارًا بسيطًا يكشفه. الاختبار قارنَ الناتج الفعلي بالناتج المتوقَّع:
def discount(price, pct): "يطبّق خصمًا بنسبة مئوية" return price - pct / 100 # ✗ عيب: نسي الضرب في price # اختبار يدويّ بسيطgot = discount(200, 10) # نتوقّع 180expected = 180print("الناتج الفعلي:", got)print("المتوقَّع:", expected)print("هل نجح الاختبار؟", got == expected)
الاختبار أظهر الخطأ فورًا: الناتج 199.9 لا 180. بلا اختبار كان العيب سيصل إلى الزبون. هذا جوهر المقرر: نكتب ما يكشف الخطأ قبل غيرنا.
توقّع وتحقّق
كلفة إصلاح العيب كلما تأخّر اكتشافه:
ضمان الجودة QA يركّز على:
الاختبار يقارن الناتج الفعلي بـ:
أرخص وقت لاكتشاف العيب:
الخلاصة
- ضمان الجودة يمنع العيوب قبل أن يراها المستخدم؛ وكلفتها تتضاعف بالتأخّر.
QAيحسّن العملية،QCيكشف في المنتج، والاختبار ينفّذ البرنامج ليجد العيوب.- جوهر الاختبار: قارن الناتج الفعلي بالمتوقَّع.
- نختبر مبكرًا وباستمرار؛ والاختبار الآليّ يجعل ذلك سريعًا ومتكرّرًا.
تحدٍّ برمجي: اكشف العيب
تمهيديالدالة total تحسب إجمالي فاتورة (سعر × كمية). فيها عيب. اطبع الناتج الفعلي لـ total(50, 3)، والمتوقَّع، وهل تطابقا.
- استدعِ
total(50, 3)واطبع الناتج الفعلي. - اطبع المتوقَّع
(150)، ثم اطبع هل تطابقا(True/False).
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
def total(price, qty): return price + qty # عيب: جمع بدل ضرب# اطبع الناتج الفعلي لـ total(50, 3)، ثم المتوقَّع 150، ثم هل تطابقا
💡 تلميح 1
got = total(50, 3) ثم print(got).💡 تلميح 2
print(got == 150).حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
def total(price, qty): return price + qtygot = total(50, 3)print(got)print(150)print(got == 150)