طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 241 · تحليل وتصميم برمجيات الويب
تقييم الدرس 27

من المستند إلى التنفيذ: مصفوفة التتبع

أجب عن الأسئلة ثم اضغط «صحّح ورقتي» في آخر الصفحة. ← العودة إلى الدرس

أسئلة التقييم

تقييم الدرس 27: من المستند إلى التنفيذ: مصفوفة التتبع. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».

1السؤال الأول: اختر الإجابة الصحيحة

1) أين يجد المطور «متى أعتبر الميزة منتهية؟»
2) في مخطط المتطلبات، علاقة الاختبار بالمتطلب:
3) متطلب في مصفوفة التتبع بلا كود. حالته:
4) أي مما يلي ليس من تعريف «منجز» في الدرس؟
5) رمز الحالة المحدد في المواصفة للإضافة إلى قائمة الانتظار:

2السؤال الثاني: صح أم خطأ

1) يحق للمطور تغيير السلوك عن المواصفة دون توثيق إن رآه أفضل.
الصواب: خطأ
2) مصفوفة التتبع تساعد على معرفة ما يتأثر بتغيير متطلب.
الصواب: صح
3) كل معيار قبول يمكن تحويله إلى حالة اختبار.
الصواب: صح
4) Gold Plating إضافة ميزات لم تطلبها المواصفة.
الصواب: صح
5) مصفوفة التتبع تُملأ مرة واحدة في بداية المشروع فقط.
الصواب: خطأ

3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة

1) الجدول الذي يربط المتطلبات بالتصميم والكود والاختبار يسمّى مصفوفة .
الإجابة: التتبع
2) في requirementDiagram، العنصر الذي يحقق المتطلب يرتبط به بـ .
الإجابة: satisfies
3) قائمة شروط اعتبار العمل مكتملًا تسمّى تعريف .
الإجابة: منجز

4السؤال الرابع: أسئلة عملية

1) ما الذي يتحقق verifies من FR-15.1 في المخطط؟

<<satisfies>>

<<satisfies>>

<<verifies>>

<<Functional Requirement>>

FR15

ID: FR-15.1

Text: قائمة انتظار للدورة المكتملة

Risk: Medium

Verification: Test

<<Element>>

api

Type: POST /api/courses/:id/enroll

<<Element>>

model

Type: جدول waitlist

<<Element>>

acceptance

Type: اختبار القبول AC-15.1

2) ما جسم الاستجابة؟ (الدورة سعتها 2، ولا أحد مسجل بعد) POST /api/courses/1/enroll

const express = require('express');const app = express();app.use(express.json()); const tokens = { 'tok-1': 1, 'tok-2': 2, 'tok-3': 3, 'tok-4': 4 };const course = { id: 1, title: 'تصميم الويب', capacity: 2, enrolled: [], waitlist: [] }; function auth(req, res, next) {  req.userId = tokens[(req.headers.authorization || '').replace('Bearer ', '')];  if (!req.userId) return res.status(401).json({ error: 'سجّل الدخول' });  next();} app.get('/api/courses/1', (req, res) => {  res.json({ enrolled: course.enrolled, waitlist: course.waitlist });}); // FR-02.2 + FR-15.1 + BR-06app.post('/api/courses/1/enroll', auth, (req, res) => {  if (course.enrolled.includes(req.userId) || course.waitlist.includes(req.userId))    return res.status(409).json({ error: 'مسجل أو منتظر مسبقًا' });            // BR-06  if (course.enrolled.length >= course.capacity) {                              // FR-15.1    course.waitlist.push(req.userId);    return res.status(202).json({ status: 'waitlisted', position: course.waitlist.length });  }  course.enrolled.push(req.userId);  res.status(201).json({ status: 'enrolled' });}); // FR-02.5 + FR-15.2app.delete('/api/courses/1/enroll', auth, (req, res) => {  course.enrolled = course.enrolled.filter(id => id !== req.userId);  let promoted = null;  if (course.enrolled.length < course.capacity && course.waitlist.length) {    promoted = course.waitlist.shift();    course.enrolled.push(promoted);  }  res.json({ cancelled: true, promoted });}); app.listen(3000);
الاستجابة الصحيحة:
{"status":"enrolled"}
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس