পাঠ ১৯ · ৫৭-এর মধ্যে · মডিউল ৪
Home / Courses / Human-Computer Interaction / ইউজেবিলিটি প্রিন্সিপল

এরর প্রিভেনশন ও এরর মেসেজ

Error prevention & error messages
৯ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • এরর প্রিভেনশনের তিনটি প্রধান কৌশল — কনস্ট্রেইন্ট, কনফার্মেশন, ভালো ডিফল্ট
  • একটি ভালো এরর মেসেজের তিনটি বৈশিষ্ট্য — নির্দিষ্ট, প্লেইন ভাষা, গঠনমূলক সমাধান
  • একটি সত্যিকারের সিমুলেশন — কনফার্মেশন মেকানিজম প্রকৃতপক্ষে কতটা এরর কমায় তা গণনা করে দেখা
  • এরর প্রিভেনশন ও এরর রিকভারির মধ্যে পার্থক্য এবং কেন দুটোই দরকার

১ · এরর প্রিভেনশন — ভুল হওয়ার আগেই থামানো

সবচেয়ে ভালো এরর হ্যান্ডলিং কৌশল হলো — এরর যেন প্রথমেই না ঘটে তা নিশ্চিত করা। এর তিনটি প্রধান হাতিয়ার আছে। প্রথমত, কনস্ট্রেইন্টConstraintইন্টারফেস এমনভাবে ডিজাইন করা যাতে ভুল অ্যাকশন করাই কঠিন বা অসম্ভব হয় — M3/L14-এ পূর্ণ পাঠ। (M3/L14-এ পূর্ণ পাঠ) — যেমন একটি ফর্মে "জমা দিন" বাটন ধূসর (disabled) থাকা যতক্ষণ না সব আবশ্যক ফিল্ড পূরণ হয়, যাতে অসম্পূর্ণ ফর্ম জমা দেওয়াই অসম্ভব হয়ে যায়।

দ্বিতীয়ত, কনফার্মেশন ডায়ালগ — একটি অপরিবর্তনীয় বা ঝুঁকিপূর্ণ অ্যাকশনের (যেমন একটি অ্যাকাউন্ট ডিলিট করা) আগে একটি স্পষ্ট নিশ্চিতকরণ চাওয়া, যাতে দুর্ঘটনাক্রমে ক্লিক করলে সিস্টেম সাথে সাথে অপরিবর্তনীয়ভাবে কাজ না করে। তৃতীয়ত, নিরাপদ ডিফল্ট — যখন ব্যবহারকারী কোনো পছন্দ না করে, সিস্টেম যেন সবচেয়ে নিরাপদ অপশনটি বেছে নেয় (যেমন একটি ফাইল-শেয়ারিং সেটিংয়ে ডিফল্ট হিসেবে "শুধু আমি" থাকা, "সবাই" নয়)।

২ · ভালো এরর মেসেজের বৈশিষ্ট্য

যখন এরর প্রতিরোধ করা যায় না, তখন এরর মেসেজের গুণমান গুরুত্বপূর্ণ হয়ে ওঠে (নীলসেনের হিউরিস্টিক #৯)। একটি ভালো এরর মেসেজের তিনটি বৈশিষ্ট্য থাকে।

নির্দিষ্ট (Specific)
ঠিক কী ভুল হয়েছে তা স্পষ্টভাবে বলা — "কিছু ভুল হয়েছে" নয়, বরং "ইমেইল ঠিকানায় @ চিহ্ন নেই" এর মতো নির্দিষ্ট।
সাধারণ ভাষা (Plain language)
টেকনিক্যাল কোড বা জার্গনের বদলে ব্যবহারকারীর বোধগম্য ভাষায় লেখা — "Error 4032" নয়, "নেটওয়ার্ক সংযোগ পাওয়া যাচ্ছে না"।
গঠনমূলক সমাধান (Constructive)
শুধু সমস্যা বলা নয়, পরবর্তী পদক্ষেপ কী তা বলা — "আবার চেষ্টা করুন" বাটন বা "সাহায্যের জন্য এখানে ক্লিক করুন" লিংক দেওয়া।

একটি ক্লাসিক খারাপ উদাহরণ — একটি ব্যাংকিং অ্যাপে "Transaction failed: ERR_CODE_4032" দেখানো। একজন সাধারণ ব্যবহারকারী এই কোড থেকে কিছুই বোঝে না — টাকা কি কাটা গেছে? আবার চেষ্টা করা কি নিরাপদ? তার বদলে, "লেনদেনটি সম্পন্ন হয়নি এবং আপনার অ্যাকাউন্ট থেকে কোনো টাকা কাটা হয়নি। অনুগ্রহ করে আবার চেষ্টা করুন, অথবা সমস্যা থাকলে হেল্পলাইনে যোগাযোগ করুন" — এই মেসেজটি একই তথ্য জানায়, কিন্তু নির্দিষ্ট, সহজবোধ্য ভাষায় এবং একটি স্পষ্ট পরবর্তী পদক্ষেপসহ।

৩ · একটি সত্যিকারের ডেমো — কনফার্মেশন মেকানিজম কতটা এরর কমায়

নিচের সিমুলেশনে ধরা হয়েছে — একজন ব্যবহারকারী বারবার "ডিলিট" বাটনের কাছাকাছি ক্লিক করেন, এবং মাঝে মাঝে তাড়াহুড়ায় বা ক্লান্তিতে ভুলবশত ক্লিক করে ফেলেন। এটি একটি সরলীকৃত, ইলাস্ট্রেটিভ মডেল — কোনো প্রকৃত ব্যবহারকারী-স্টাডির ফলাফল নয় — কিন্তু এটি দেখায় কনফার্মেশন মেকানিজমের প্রভাব কীভাবে সত্যিকারের সংখ্যায় গণনা করা যায়।

Python
import random

random.seed(42)

N = 2000                # সিমুলেটেড "ডিলিট" অ্যাকশনের সংখ্যা (ইলাস্ট্রেটিভ, বাস্তব স্টাডি নয়)
P_ACCIDENTAL = 0.06      # প্রতিটি ক্লিকে দুর্ঘটনাক্রমে/তাড়াহুড়ায় ভুল টার্গেটে ক্লিকের সম্ভাবনা
CATCH_RATE = 0.85        # কনফার্মেশন ডায়ালগ দেখে ব্যবহারকারী কতবার নিজের ভুল ধরে বাতিল করে

def simulate(with_confirmation):
    errors = 0
    for _ in range(N):
        accidental = random.random() < P_ACCIDENTAL
        if not accidental:
            continue
        if not with_confirmation:
            errors += 1              # কোনো সেফটি-নেট নেই -- দুর্ঘটনাক্রমে ক্লিক মানেই সরাসরি ডেটা মুছে যাওয়া
        else:
            # কনফার্মেশন ডায়ালগ দেখানোর পরও কিছু ব্যবহারকারী না পড়েই "হ্যাঁ" চাপে
            if random.random() > CATCH_RATE:
                errors += 1
    return errors

# দুটো আলাদা সিমুলেশন -- একই সিড থেকে শুরু করে ন্যায্য তুলনা নিশ্চিত করা হলো
random.seed(42)
errors_without = simulate(with_confirmation=False)

random.seed(42)
errors_with = simulate(with_confirmation=True)

rate_without = errors_without / N * 100
rate_with = errors_with / N * 100
reduction = (errors_without - errors_with) / errors_without * 100

print(f"মোট সিমুলেটেড অ্যাকশন: {N}")
print(f"কনফার্মেশন ছাড়া  -> প্রকৃত এরর: {errors_without:4d}  ({rate_without:.2f}%)")
print(f"কনফার্মেশনসহ     -> প্রকৃত এরর: {errors_with:4d}  ({rate_with:.2f}%)")
print(f"এরর কমেছে: {reduction:.1f}%")

    
লক্ষ্য করুন — কনফার্মেশন ছাড়া ১০৪টি (৫.২০%) দুর্ঘটনাক্রমে ডিলিট প্রকৃত ডেটা-লস তৈরি করে, কিন্তু কনফার্মেশন ডায়ালগ যোগ করলে তা কমে ১৭টি (০.৮৫%)-এ — অর্থাৎ প্রায় ৮৩.৭% এরর কমেছে। এটি একটি সরলীকৃত মডেল হলেও, এটি স্পষ্টভাবে দেখায় কেন একটি সাধারণ, সস্তা UI প্যাটার্ন (একটি কনফার্মেশন ডায়ালগ) এত বড় প্রভাব ফেলতে পারে — এমনকি যখন ব্যবহারকারীরা প্রতিবার মনোযোগ দিয়ে পড়ে না (এখানে CATCH_RATE=0.85, অর্থাৎ ১৫% ক্ষেত্রে ব্যবহারকারী তখনও ভুল করে)।
মূল কথা · Key takeaway

এরর প্রিভেনশন ও এরর রিকভারি একসাথে কাজ করে — কনস্ট্রেইন্ট ও কনফার্মেশন দিয়ে যতটা সম্ভব ভুল আটকানো, এবং যা আটকানো যায়নি তার জন্য নির্দিষ্ট, সহজবোধ্য, গঠনমূলক এরর মেসেজ দেওয়া। উপরের সিমুলেশন দেখায় — একটি একক কনফার্মেশন ডায়ালগ যোগ করা যতটা তুচ্ছ মনে হয়, তার প্রকৃত প্রভাব ততটাই বড় হতে পারে, এবং এই ধরনের প্রভাব প্রকৃতপক্ষে গণনা করে দেখানো যায়, শুধু অনুমান করার প্রয়োজন নেই। এখানেই M4 শেষ হয় — L20 থেকে M5 শুরু হবে, যেখানে ব্যবহারকারীদের সরাসরি পর্যবেক্ষণ ও বোঝার পদ্ধতি শেখানো হবে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের সিমুলেশনে CATCH_RATE=0.85 ব্যবহার করা হয়েছে, অর্থাৎ কনফার্মেশন ডায়ালগ ১০০% কার্যকর নয়। বাস্তবে কেন একটি কনফার্মেশন ডায়ালগ সবসময় ভুল আটকাতে ব্যর্থ হতে পারে?

ব্যবহারকারীরা প্রায়ই "ডায়ালগ ফ্যাটিগ"-এ ভোগেন — যদি একটি অ্যাপে অতিরিক্ত কনফার্মেশন ডায়ালগ দেখানো হয় (এমনকি নিরাপদ অ্যাকশনের জন্যও), ব্যবহারকারী অভ্যাসবশত না পড়েই "হ্যাঁ" বা "OK" চেপে দেন। এটাই কেন কনফার্মেশন ডায়ালগ শুধু সত্যিকারের ঝুঁকিপূর্ণ, অপরিবর্তনীয় অ্যাকশনের জন্য সংরক্ষিত রাখা উচিত (নীলসেনের হিউরিস্টিক #৮, "মিনিমালিস্ট ডিজাইন"-এর সাথেও সম্পর্কিত) — প্রতিটি ছোট অ্যাকশনে কনফার্মেশন দেখালে এই মেকানিজমের কার্যকারিতাই নষ্ট হয়ে যায়।

প্র ০২ কনফার্মেশন ডায়ালগের বদলে অনেক আধুনিক অ্যাপ এখন "আনডু" অপশন ব্যবহার করে (যেমন Gmail-এর "Undo Send")। এই দুটো কৌশলের মধ্যে ট্রেড-অফ কী?

কনফার্মেশন ডায়ালগ অ্যাকশনের আগে বাধা তৈরি করে — এটি সব ব্যবহারকারীর জন্য ধীরগতির, এমনকি যাদের ভুল হয়নি তাদের জন্যও (নীলসেনের হিউরিস্টিক #৭, "এফিশিয়েন্সি"-এর সাথে সাংঘর্ষিক)। "আনডু" অ্যাকশনের পরে সুযোগ দেয় — বেশিরভাগ ব্যবহারকারী কোনো বাধা ছাড়াই দ্রুত কাজ করতে পারে, এবং শুধু যাদের সত্যিই ভুল হয়েছে তারাই আনডু ব্যবহার করে। আনডু সাধারণত ভালো, কিন্তু এটি শুধুমাত্র তখনই কাজ করে যখন অ্যাকশনটি প্রযুক্তিগতভাবে বিপরীতমুখী (reversible) করা সম্ভব — একটি ইমেইল স্থায়ীভাবে পাঠানোর পর সার্ভার থেকে মুছে ফেলা কঠিন, তাই Gmail একটি সংক্ষিপ্ত বিলম্ব যোগ করে আনডুকে সম্ভব করে।

প্র ০৩ "Error 4032" এর মতো একটি এরর কোড কি কখনো ব্যবহারকারীকে দেখানো উচিত? যদি হ্যাঁ, কখন এবং কীভাবে?

হ্যাঁ, তবে প্রধান বার্তা হিসেবে নয় — বরং একটি সহায়ক, সাধারণ-ভাষার মেসেজের পাশে ছোট করে, যাতে ব্যবহারকারী কাস্টমার সাপোর্টকে রিপোর্ট করার সময় এটি ব্যবহার করতে পারে (যেমন "লেনদেনটি সম্পন্ন হয়নি। আবার চেষ্টা করুন। [রেফারেন্স: 4032]")। মূল নীতি হলো — কোডটি ব্যবহারকারীর জন্য নয়, ডিবাগিং/সাপোর্টের জন্য একটি অতিরিক্ত তথ্য, এবং এটি কখনোই একমাত্র বার্তা হওয়া উচিত নয়।

অনুশীলন

  1. চিন্তা করুন: উপরের কোড সেলে যদি CATCH_RATE ০.৮৫ থেকে ০.৫-এ কমানো হয় (অর্থাৎ কনফার্মেশন ডায়ালগটি কম কার্যকর, ব্যবহারকারীরা প্রায়ই না পড়েই "হ্যাঁ" চাপে), কনফার্মেশনসহ এরর রেট এবং সামগ্রিক এরর-হ্রাসের শতাংশ কীভাবে বদলাবে বলে আপনার ধারণা?

    যেহেতু এখন দুর্ঘটনাক্রমে ক্লিকের অর্ধেক (৫০%) এখনও এরর তৈরি করবে (আগে ছিল মাত্র ১৫%), কনফার্মেশনসহ এরর রেট অনেক বেড়ে যাওয়া উচিত — প্রায় কনফার্মেশন-ছাড়ার হারের অর্ধেকের কাছাকাছি, এবং এরর-হ্রাসের শতাংশ ৮৩.৭%-এর চেয়ে অনেক কম, সম্ভবত ৫০%-এর কাছাকাছি হবে।

  2. পরীক্ষা করুন: উপরের কোড সেলে CATCH_RATE = 0.85-কে CATCH_RATE = 0.5-এ পরিবর্তন করে Run চেপে আপনার অনুমান যাচাই করুন।

    পরিবর্তনের পর কনফার্মেশনসহ এরর হয় ৫১টি (২.৫৫%), আর সামগ্রিক এরর-হ্রাস দাঁড়ায় ৫১.০% — ঠিক যেমন অনুমান করা হয়েছিল, এটি ৮৩.৭%-এর তুলনায় অনেক কম। এটি দেখায় কেন শুধু "একটি কনফার্মেশন ডায়ালগ আছে" যথেষ্ট নয় — এর কার্যকারিতা (ব্যবহারকারী আসলে পড়ছে ও বুঝছে কিনা) সমান গুরুত্বপূর্ণ, এবং এটি ডায়ালগ-ফ্যাটিগ এড়াতে সংযমের সাথে ব্যবহার করার যুক্তিও শক্তিশালী করে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ কগনিটিভ সাইকোলজি, ইন্টারঅ্যাকশন ডিজাইন, ইউজেবিলিটি হিউরিস্টিক্স, ইউজার রিসার্চ, প্রোটোটাইপিং, ইভালুয়েশন মেথড, ভিজ্যুয়াল ডিজাইন, অ্যাক্সেসিবিলিটি ও ক্যাপস্টোন।
  • পরবর্তী পাঠ — ব্যবহারকারীদের বোঝা L20 · মডিউল ৫ M5-এর প্রথম পাঠ — কন্টেক্সচুয়াল ইনকোয়ারি ও ফিল্ড স্টাডি দিয়ে কীভাবে ব্যবহারকারীদের বাস্তব প্রেক্ষাপটে বোঝা যায়, ইউজার রিসার্চ মেথডের সিরিজ শুরু হচ্ছে।
  • Human-Centered AI কোর্স সহোদর কোর্স ট্রাস্ট ক্যালিব্রেশন, এক্সপ্লেইনেবিলিটি ও হিউম্যান-ইন-দ্য-লুপ ডিজাইনের গভীর কভারেজ — এই কোর্স সেই একই ভিত্তির উপর সাধারণ এরর-ডিজাইন নীতির দিকটি যোগ করে।
আগের পাঠ
কনসিস্টেন্সি ও স্ট্যান্ডার্ড