পাঠ ০৭ · ৫৮-এর মধ্যে · মডিউল ২

স্পাইরাল মডেল

The spiral model
৭ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

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

  • স্পাইরাল মডেল কীভাবে ওয়াটারফল ও ইটারেটিভ মডেলের ধারণা একত্রিত করে তা বুঝবেন
  • স্পাইরালের চারটি কোয়াড্র্যান্ট নির্ভুলভাবে ব্যাখ্যা করতে পারবেন
  • ঝুঁকি এক্সপোজার (risk exposure) গণনার সূত্র শিখবেন ও Python দিয়ে বাস্তবায়ন করবেন
  • কোন ধরনের প্রজেক্টে স্পাইরাল মডেল উপযুক্ত এবং কোথায় এর ওভারহেড অপ্রয়োজনীয়, তা বিচার করতে পারবেন

১ · স্পাইরাল মডেল কী — দুটো ধারণার মিলন

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

১. উদ্দেশ্য, বিকল্প, সীমাবদ্ধতা নির্ধারণ ২. ঝুঁকি মূল্যায়ন ও সমাধান ৩. পরবর্তী ইনক্রিমেন্ট ডেভেলপ ও টেস্ট ৪. পরবর্তী চক্রের পরিকল্পনা চক্র ২, চক্র ৩... (পুনরাবৃত্তি)
প্রতিটি স্পাইরাল চক্র একই চারটি কোয়াড্র্যান্ট অনুসরণ করে — এবং প্রতিটি নতুন চক্রে সিস্টেম আরও পরিশোধিত ও ঝুঁকিমুক্ত হয়ে ওঠে।

২ · চারটি কোয়াড্র্যান্ট

প্রতিটি স্পাইরাল চক্রে ঠিক এই চারটি ধাপ (কোয়াড্র্যান্ট) নির্দিষ্ট ক্রমে ঘটে:

১. উদ্দেশ্য নির্ধারণ
এই চক্রের জন্য উদ্দেশ্য, সম্ভাব্য বিকল্প ও সীমাবদ্ধতাগুলো নির্ধারণ করা।
২. ঝুঁকি মূল্যায়ন
বিকল্পগুলো মূল্যায়ন করা, ঝুঁকি চিহ্নিত করা ও সমাধানের পথ ঠিক করা — স্পাইরাল মডেলের স্বতন্ত্র, সংজ্ঞায়ক বৈশিষ্ট্য।
৩. ডেভেলপ ও টেস্ট
পরবর্তী-স্তরের প্রোডাক্ট ইনক্রিমেন্ট তৈরি ও পরীক্ষা করা — L06-এর ইনক্রিমেন্টাল ধারণার সরাসরি পুনর্ব্যবহার।
৪. পরবর্তী চক্র পরিকল্পনা
এই চক্রের ফলাফলের ভিত্তিতে পরবর্তী চক্রের পরিকল্পনা করা।

প্রতিটি পাক (spiral turn) সিস্টেমের আরও পরিশোধিত, আরও যাচাইকৃত একটি সংস্করণ তৈরি করে, যেখানে প্রতিটি বাঁকেই ঝুঁকি স্পষ্টভাবে মূল্যায়ন ও প্রশমিত করা হয়।

৩ · কখন স্পাইরাল মডেল উপযুক্ত

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

Risk exposure সূত্র

প্রতিটি চিহ্নিত ঝুঁকির জন্য একটি সহজ, প্রমিত সূত্র ব্যবহার করে "ঝুঁকি এক্সপোজার" (risk exposure) গণনা করা যায় — সম্ভাবনা (probability) ও প্রভাব (impact)-এর গুণফলের যোগফল:

$$R = \sum_{i} p_i \times I_i$$

যেখানে p_i হলো i-তম ঝুঁকির ঘটার সম্ভাবনা (০ থেকে ১-এর মধ্যে) এবং I_i হলো সেটি ঘটলে তার প্রভাবের মাত্রা। একটি চক্র থেকে পরবর্তী চক্রে এই স্কোর হ্রাস পাওয়া উচিত — এর মানে ঝুঁকি সত্যিই প্রশমিত হচ্ছে।

৪ · একটি ছোট্ট ঝুঁকি-এক্সপোজার সিমুলেশন

নিচের কোড সেলে দুটো স্পাইরাল চক্র সিমুলেট করা হয়েছে — প্রতিটি চক্রে ৩টি ঝুঁকি এবং তাদের probability ও impact দেওয়া আছে। লক্ষ্য করুন চক্র ২-এ ঝুঁকিগুলোর probability কমে গেছে (কারণ চক্র ১-এ সেগুলো প্রশমিত করার পদক্ষেপ নেওয়া হয়েছে) — এবং তাই মোট risk exposure স্কোরও কমে যায়।

Python
# স্পাইরাল মডেল সিমুলেশন -- প্রতিটি চক্র চারটি কোয়াড্র্যান্ট অনুসরণ করে,
# ২য় কোয়াড্র্যান্টে ঝুঁকি এক্সপোজার (risk exposure) = sum(probability * impact) গণনা করা হয়।

def risk_score(risks):
    return sum(probability * impact for _, probability, impact in risks)

def run_cycle(cycle_number, risks):
    print(f"--- চক্র {cycle_number} ---")
    print("১. উদ্দেশ্য, বিকল্প ও সীমাবদ্ধতা নির্ধারণ")
    print("২. বিকল্প মূল্যায়ন ও ঝুঁকি চিহ্নিতকরণ/সমাধান:")
    for name, p, impact in risks:
        print(f"     - {name}: probability={p}, impact={impact}, score={p * impact:.1f}")
    score = risk_score(risks)
    print(f"   মোট ঝুঁকি এক্সপোজার (risk exposure) = {score:.1f}")
    print("৩. পরবর্তী-স্তরের প্রোডাক্ট ইনক্রিমেন্ট ডেভেলপ ও টেস্ট করা")
    print("৪. পরবর্তী চক্রের পরিকল্পনা")
    print()
    return score

cycle1_risks = [
    ("অস্পষ্ট রিকোয়ারমেন্ট", 0.7, 8),
    ("নতুন টেকনোলজি স্ট্যাক", 0.5, 6),
    ("টিমের অভিজ্ঞতার অভাব", 0.4, 5),
]
cycle2_risks = [
    ("অস্পষ্ট রিকোয়ারমেন্ট", 0.2, 8),
    ("নতুন টেকনোলজি স্ট্যাক", 0.2, 6),
    ("টিমের অভিজ্ঞতার অভাব", 0.1, 5),
]

score1 = run_cycle(1, cycle1_risks)
score2 = run_cycle(2, cycle2_risks)

print(f"ঝুঁকি এক্সপোজার: চক্র ১ ({score1:.1f}) -> চক্র ২ ({score2:.1f}) -- হ্রাস পেয়েছে, ঝুঁকি প্রশমিত হয়েছে")

    
হাতে যাচাই: চক্র ১-এ স্কোর = (০.৭×৮) + (০.৫×৬) + (০.৪×৫) = ৫.৬ + ৩.০ + ২.০ = ১০.৬। চক্র ২-এ প্রতিটি ঝুঁকির probability কমে যাওয়ায় স্কোর = (০.২×৮) + (০.২×৬) + (০.১×৫) = ১.৬ + ১.২ + ০.৫ = ৩.৩। ১০.৬ থেকে ৩.৩-এ নেমে আসা প্রমাণ করে ঝুঁকি প্রশমন কাজ করছে — এটিই স্পাইরাল মডেলের মূল প্রতিশ্রুতি।
মূল কথা · Key takeaway

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

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

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

প্র ০১ স্পাইরাল মডেল কি প্রতিটি প্রজেক্টের জন্যই সেরা পছন্দ? কেন বা কেন নয়?

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

প্র ০২ L06-এর ইটারেটিভ মডেল আর স্পাইরাল মডেলের মূল পার্থক্য কী?

দুটোই পুনরাবৃত্তিমূলক — একাধিক চক্রে সিস্টেম পরিশোধিত হয়। কিন্তু স্পাইরাল মডেল প্রতিটি চক্রে একটি প্রকট, বাধ্যতামূলক ঝুঁকি-বিশ্লেষণ কোয়াড্র্যান্ট যোগ করে, যা প্লেইন ইটারেটিভ মডেলে সাধারণত স্পষ্টভাবে সংজ্ঞায়িত থাকে না। এই ঝুঁকি-কেন্দ্রিকতাই স্পাইরাল মডেলের সংজ্ঞায়ক, স্বতন্ত্র বৈশিষ্ট্য।

প্র ০৩ কোড সেলে চক্র ১ থেকে চক্র ২-এ ঝুঁকি স্কোর কেন কমেছে? বাস্তবে এটি কী প্রতিনিধিত্ব করে?

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

অনুশীলন

  1. চিন্তা করুন: একটি নতুন মোবাইল ব্যাংকিং অ্যাপ (উচ্চ নিরাপত্তা ও নিয়ন্ত্রক ঝুঁকি) বনাম একটি ব্যক্তিগত পোর্টফোলিও ওয়েবসাইট (নিম্ন ঝুঁকি) — কোনটির জন্য স্পাইরাল মডেল বেশি উপযুক্ত এবং কেন?

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

  2. পরীক্ষা করুন: উপরের কোড সেলে একটি তৃতীয় চক্র (cycle3_risks) যোগ করুন যেখানে সব probability আরও কমানো আছে, তারপর run_cycle(3, cycle3_risks) কল করে Run চেপে দেখুন স্কোর আরও কীভাবে কমে।

    যদি probability মান আরও কমানো হয় (impact অপরিবর্তিত রেখে), মোট risk exposure স্কোরও আরও কমবে — উদাহরণস্বরূপ, সব probability অর্ধেক করে দিলে (০.১, ০.১, ০.০৫) স্কোর হবে (০.১×৮) + (০.১×৬) + (০.০৫×৫) = ০.৮ + ০.৬ + ০.২৫ = ১.৬৫, যা চক্র ২-এর ৩.৩ থেকেও কম — ধারাবাহিক ঝুঁকি প্রশমনের একটি স্পষ্ট, গণনাকৃত প্রবণতা।

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

আগের পাঠ
ইটারেটিভ ও ইনক্রিমেন্টাল মডেল