تأثير تصميم البرنامج
مُقدَّم| English | المعنى |
|---|---|
| modular/ˈmɒdjʊlə/ | وحدوي |
يمكن لتصميمين نظيفين تقديم متوسطات مختلفة
- يحتوي سجل خيالي على درجات 80، غائبة، و100. اعتبار الغياب بصفر يعطي
(80 + 0 + 100) / 3 = 60؛ استبعاد النتيجة الغائبة يعطي(80 + 100) / 2 = 90. - يمكن لطرق منفصلة حساب كل نتيجة بشكل صحيح. لا تختار التنظيم سياسة الإبلاغ: حدد ما يعنيه الغياب، ومن يقرر، وما هو المقام الذي يجب أن يظهره التقرير قبل استخدام النتيجة.
الدرجات هي 80، غائبة و100. وفقاً لسياسة الدرجات المتاحة، ما هو المتوسط الحسابي؟
Difficulty 2/5 · 140 coins + a small bonus on first completion today
مجموع الدرجات الحاضرة هو 180 وعدد الحاضرين هو 2، لذا 180/2 = 90.
حوّل المتطلبات إلى عقد
- حدد ما إذا كان الغياب يعني مهمة تقييمية لم تُحاول، أو مهمة لم تُخصص، أو بيانات لم تُدخل بعد. لا يشترط أن تشارك هذه الحالات قاعدة واحدة؛ يوضح المثال الخيالي العواقب ولا يوصي بسياسة مدرسية للتقييم.
- حدد المدخلات المقبولة، ومعالجة القيم المفقودة، والنتيجة. إذا كانت القاعدة "متوسط الدرجات المتاحة"، فلا يوجد متوسط للسجل الذي يحتوي على قيم مفقودة بالكامل؛ أبلغ عن هذه الحالة صراحةً بدلاً من اختلاق الصفر أو القسمة على صفر.
فصل المسؤوليات عن التحقق
- يفصل التصميم النموذجي بين
readScoresوaverageAvailableوprintReport. يمكن التحقق من طريقة المتوسط باستخدام قيم معروفة دون قراءة ملف أو التقاط مخرجات منسق. - يساعد الفصل عندما تظل الواجهات واضحة. قد يتطلب تغيير معنى الغياب أيضًا تغييرات في الحساب والإبلاغ والتحقق؛ لا تمنع الطرق الصغيرة والأسماء الجيدة وحدها تلك الاعتماديات.
تحقق من الحالات العادية وحالات الحدود
- بالنسبة لسياسة الدرجات المتاحة، تحقق من [80، غائب، 100] يعطي 90، ودرجة واحدة 80 تعطي 80، بينما [غائب، غائب] ينتج النتيجة المتفق عليها "لا نتيجة". لا تكتفِ بالتحقق من أن البرنامج يعمل فقط.
- الحساب أدناه يستخدم
nullللقيم المفقودة. يُرجع متوسطًا كعدد عشري (double) ويرفض حالة عدم وجود أي قيم. يفترض مصفوفة من الدرجات العادية غير الفارغة؛ حيث تكون التحقق من صحة الإدخال والإبلاغ مسؤوليات منفصلة.
public class AverageAvailable {
public static double averageAvailable(Integer[] scores) {
double total = 0;
int present = 0;
for (Integer score : scores) {
if (score != null) {
total += score;
present++;
}
}
if (present == 0) {
throw new IllegalArgumentException("No available scores");
}
return total / present;
}
}
التصميم المعياري (قطع مستقلة ذات أسماء جيدة) أسهل بشكل رئيسي في...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
التجزئة تجعل التغييرات أكثر أماناً وتسمح بإعادة استخدام القطع.
عندما يعيد عدة مستدعين استخدام نفس الطريقة، فإن تصحيح تلك الطريقة يمكن أن يفيد جميع المستدعين دون تعديل النسخ المكررة.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
صحيح: المستدعون يعيدون استخدام التنفيذ. لا يزال العقد الخاص به وآثار التغيير يحتاج إلى مراجعة.
يمكن أن ينتج التحيز في بيانات البرنامج أو منطقه نتائج غير عادلة على نطاق واسع.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
تؤثر خيارات التصميم على أشخاص حقيقيين — فكر في من يتأثر.
لفحص حساب المتوسط بشكل مستقل عن المدخلات والمخرجات المطبوعة، أي تصميم يعزل هذه المسؤولية بشكل أفضل؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
فصل الحساب عن الإدخال والإخراج يسمح بفحص الدرجات المعلومة دون تلك العمليات الأخرى. امتلاك طرق صغيرة فقط لا يضمن الصحة.
تصميم البرنامج مجرد زينة ولا يؤثر على مدى أمان تغيير الكود.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
يحدد التصميم مدى أمان تعديل البرنامج.
تُرجع دالة averageAvailable المعروضة صفراً لمصفوفة تتكون بالكامل من قيم غائبة.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
خطأ: ترفض هذه الحالة باستخدام IllegalArgumentException لأنه لا توجد درجات كافية لتعريف متوسط حسابي.
أثار التقارير على المستخدمين المتأثرين
- يجب أن ينص تقرير 90 على أنه يجمع متوسطين من أصل ثلاث سجلات، مع استبعاد نتيجة غائبة واحدة. الإحصاء بـ 90 فقط يخفي معلومات يحتاجها القارئ لمقارنة النتائج.
- راجع من قد يتأثر بالبيانات والسياسة. قد لا تزال الحسابات المتسقة تعامل أنواعًا مختلفة من الغياب بشكل غير لائق؛ اختبر المتطلبات المتفق عليها واجعل النتيجة مفهومة للمستخدمين.
تجعل الوحدوية (Modularity) السياسة أسهل في التدقيق والاختبار، لكنها لا تجعل تلك السياسة عادلة أو مناسبة. تستخدم المتوسطات 60 و90 مقامات مختلفة. اختر القاعدة وأعلن عنها بدلاً من اختيار صامت لأي نتيجة تبدو أفضل.
تصميم جيد أم سيء؟
لدي خيارات تصميم عواقب حقيقية. رتب كل نتيجة.
حمل تغيير السياسة عبر التصميم
- إذا تغير المتطلب المعتمد ليحسب المهمة غير المحاولتها بصفر، قم بتحديث المقام والأمثلة ذات الصلة والتحقق ونصوص التقرير. إعادة استخدام طريقة ما يكون مفيدًا فقط عندما تتطابق عقودها مع المهمة الجديدة.
- راجع قابلية الاختبار والصحة وفهم المستخدم بشكل منفصل. الحدود الواضحة تقلل بعض مخاطر التغيير، لكن يجب لا يزال التحقق من المدعوين والفرضيات المشتركة عند تغيير عقد الطريقة.
يؤثر تصميم البرنامج على سهولة الصيانة والناس. افصل المسؤوليات بحيث يمكن التحقق من السلوك، عرّف سياسة البيانات المفقودة، اختبر حالات حدودها وأعلن عن المقام. الحساب الصحيح والهيكل المنظم وحدهما لا يرسخان سياسة مناسبة.
Match the change to the issue it addresses.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
A modular structure enables checking but cannot choose the right policy by itself.