You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Use Case添加计时功能?Automated Examing System用例图实现咨询

Automated Exam System: Use Case Timer Handling & Implementation

Part 1: Adding Time Attributes to Use Cases

Use Cases in UML focus on actor-system interactions, but you can clearly represent time-related requirements in a few standard, practical ways:

  • Embed constraints in Use Case descriptions: For your core Take Exam Use Case, add a line like: "Constraint: The exam automatically ends after [X] minutes; the system blocks all further input once the timer expires." This keeps the diagram clean while explicitly stating the time rule.
  • Use UML constraint stereotypes: Attach a <<constraint>> note to the Take Exam Use Case with text such as Duration = 90 minutes to call out the time requirement visually.
  • Parameterize the Use Case: If you need flexible durations (e.g., different exams have different lengths), define the Use Case as Start Exam(ExamDuration: Integer). This signals that the system accepts a time parameter when initiating the exam.
  • Create a supporting Use Case: Add an included Use Case Manage Exam Timer that’s triggered by Take Exam. You can assign attributes like Duration or EndTime to this supporting Use Case to encapsulate all timer logic separately—great if timer functionality is reused across workflows.

Part 2: Implementing the Timer Functionality

To make the timer reliable (and cheat-resistant), you’ll need to handle both frontend UX and backend enforcement:

Frontend (Client-Side)

  • Real-time countdown: Use JavaScript’s setInterval to update a visible timer on the exam page. Example snippet:
    let timeLeft = 90 * 60; // 90 minutes converted to seconds
    const timerElement = document.getElementById('exam-timer');
    
    const countdown = setInterval(() => {
      const minutes = Math.floor(timeLeft / 60);
      const seconds = timeLeft % 60;
      timerElement.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`;
      
      if (timeLeft <= 0) {
        clearInterval(countdown);
        // Disable inputs and auto-submit the exam
        document.querySelectorAll('input, textarea, button[type="submit"]').forEach(el => el.disabled = true);
        document.getElementById('exam-form').submit();
      }
      timeLeft--;
    }, 1000);
    
  • Time warnings: Trigger UI alerts (e.g., a pop-up or color change) when 5 or 1 minutes remain to help users manage their time.
  • Note on tampering: Client-side checks are for UX only—never rely on them to block late submissions (users can edit client-side code). Backend validation is non-negotiable.

Backend (Server-Side)

  • Track timestamps: When a user starts an exam, store start_time and calculate end_time (start_time + duration) in your database. Always use server time for calculations—never trust client-side time.
  • Validate on every action: Whenever the user submits an answer or accesses the exam, check if the current server time is past end_time. If yes, reject the request and mark the exam as completed.
  • Auto-expire inactive exams: Use background tasks (e.g., cron jobs in Python, scheduled functions in Node.js) to periodically check for exams where end_time has passed but haven’t been submitted. Mark them as expired and save any partial answers.
  • Real-time notifications (optional): Use WebSockets to send a message from the server to the client when time’s up. This ensures the client locks the exam immediately even if the user’s internet was briefly disconnected.

Key Best Practices

  • Server-side validation first: Client-side timers are for user experience only—always enforce time limits on the server to prevent cheating.
  • Persist timer state: If the user refreshes or disconnects, retrieve start_time from the database and calculate remaining time instead of resetting the timer.
  • Handle edge cases: Store partial answers periodically and let users resume exams after disconnections, still enforcing the original end time.

内容的提问来源于stack exchange,提问作者HG9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:58:44