সরাসরি পর্বে যান
পর্ব ০৪ · ৭০-এর মধ্যে · মডিউল ১

SDLC আর process model — waterfall, V-model, iterative, incremental আর spiral

SDLC and Software Process Models — Waterfall, V-Model, Prototyping, Incremental, Iterative, Spiral, RUP & RAD

Taught in Bangla, this lesson explains why process models exist and covers waterfall, the V-model, prototyping, incremental and iterative development, Boehm's spiral model with risk exposure, the Unified Process and RAD. Runnable simulators compare waterfall with iterative delivery under changing requirements and rank risks in spiral loops, followed by a model-selection decision table and the classic advantages and disadvantages comparison asked in exams.

এই পর্বে যা শিখবেন

  • SDLC-র ধাপ আর পাঁচটি মৌলিক কাজ — কোনো মডেলই এগুলো বাদ দেয় না, শুধু সাজায় ভিন্নভাবে
  • Waterfall, V-model, prototyping, incremental, iterative, spiral, RUP আর RAD — প্রতিটির মূল চিন্তা, সুবিধা ও দুর্বলতা
  • Simulation চালিয়ে দেখা — দেরিতে আসা পরিবর্তন waterfall আর iterative-এ কত rework আনে
  • Risk exposure হিসাব করে spiral-এর মতো সবচেয়ে বড় ঝুঁকি আগে বেছে নেওয়া
  • একটি বাস্তব পরিস্থিতিতে মডেল বেছে নিয়ে যুক্তি দেওয়া — পরীক্ষা ও ইন্টারভিউর প্রিয় প্রশ্ন

১ · Process model কেন — বাড়ির নকশা থেকে software

একটি বাড়ি বানানোর কথা ভাবুন। প্রথমে মালিকের সাথে কথা — কয়টি ঘর, বাজেট কত। তারপর নকশাকার নকশা আঁকেন, রাজউক বা পৌরসভা থেকে অনুমোদন নেওয়া হয়, তারপর রাজমিস্ত্রি ভিত দেন, দেয়াল তোলেন, শেষে রং আর বিদ্যুতের কাজ। কেউ ছাদ ঢালাইয়ের পরে বলেন না “আসলে নিচতলায় একটি গ্যারেজ চাই” — বললেও সেটি খুব দামি।

Software বানানোতেও কয়েকটি কাজ সবসময় থাকে। এই পুরো জীবনচক্রকে বলে SDLC (Software Development Life Cycle) — ধারণা থেকে শুরু করে চালু করা আর বছরের পর বছর রক্ষণাবেক্ষণ পর্যন্ত। প্রচলিত ধাপগুলো:

ধাপমূল প্রশ্নসাধারণ ফল (deliverable)
Requirement বিশ্লেষণকী বানাতে হবে, কার জন্য?Requirement দলিল (SRS), user story
নকশা (design)কীভাবে বানাব — অংশগুলো কী, কে কার সাথে কথা বলে?Architecture, database নকশা, interface
Implementationকোড লেখাSource code, build
Testingযা বানালাম তা ঠিক কাজ করে কি?Test case, test রিপোর্ট
Deploymentব্যবহারকারীর হাতে পৌঁছানোRelease, installation
Maintenanceভুল সারানো, নতুন চাহিদা মেটানোPatch, নতুন version

এখন প্রশ্ন — এই ধাপগুলো কি একবারে একটির পর একটি হবে? নাকি ছোট ছোট চক্রে বারবার? কখন গ্রাহক কাজ দেখবেন? কোথায় থেমে সিদ্ধান্ত নেওয়া হবে? এই প্রশ্নগুলোর উত্তরের কাঠামোই process model. পর্ব ০১-এ (Software engineering কী) দেখেছেন, software engineering মানে শুধু কোড লেখা নয়, পুরো কাজটি নিয়মমাফিক চালানো। Process model সেই নিয়মের নকশা।

পাঁচটি মৌলিক কাজ — সব মডেলেই থাকে

Roger Pressman-এর বহুল পঠিত পাঠ্যবই Software Engineering: A Practitioner's Approach একটি সাধারণ কাঠামো দেয়: প্রায় সব project-এ পাঁচটি framework activity থাকে।

🗣️ Communication

গ্রাহক ও stakeholder-দের সাথে কথা বলে চাহিদা বোঝা।

মালিকের সাথে আলাপ

🗓️ Planning

কাজের তালিকা, সময়, খরচ, ঝুঁকি আর কে কী করবেন — তার পরিকল্পনা।

বাজেট ও সময়সূচি

📐 Modeling

Requirement আর নকশার মডেল — কাগজে বা diagram-এ বোঝা, তারপর বানানো।

বাড়ির নকশা

🧱 Construction

কোড লেখা আর test করা — দুটি মিলে construction.

রাজমিস্ত্রির কাজ

🚚 Deployment

ব্যবহারকারীর হাতে দেওয়া, তাঁর মতামত নেওয়া।

চাবি হস্তান্তর

এর পাশে কিছু umbrella activity পুরো project জুড়ে ছাতার মতো চলে — project tracking, risk management, quality assurance, review, configuration management (কোন ফাইলের কোন version — Git ঠিক এই কাজটিই করে, মডিউল ২ থেকে দেখবেন)।

সংজ্ঞা নিয়ে মতভেদ: Ian Sommerville-এর পাঠ্যবই চারটি মৌলিক কাজ বলে — specification, design ও implementation, validation আর evolution. শব্দ আলাদা, চিন্তা একই। পরীক্ষায় অনুসৃত বইয়ের তালিকা লিখুন, আর পারলে উল্লেখ করুন যে তালিকা বইভেদে বদলায়।

মূল ধারণা

সব process model-এ একই কাজগুলো থাকে। পার্থক্য তিন জায়গায়: (১) ক্রম — একবারে, নাকি চক্রে; (২) পুনরাবৃত্তি — একবার, নাকি বারবার; (৩) প্রতিক্রিয়ার সময় — গ্রাহক কখন কাজ করা software দেখবেন আর কখন পরিবর্তন সস্তায় গ্রহণ করা যাবে।

২ · Waterfall — ধাপে ধাপে, এক দিকে

Waterfall model-এ কাজ ঝরনার পানির মতো ওপর থেকে নিচে নামে: requirement শেষ ও অনুমোদিত হলে নকশা, নকশা শেষ হলে কোড, তারপর test, তারপর deployment. প্রতিটি ধাপের শেষে একটি দলিল আর একটি অনুমোদন — এই অনুমোদন-বিন্দুকে অনেক সময় “phase gate” বলা হয়। পেছনে ফেরা নিয়মে নিষিদ্ধ নয়, কিন্তু দামি।

বিয়েবাড়ির আয়োজনের কথা ভাবুন। কার্ড ছাপা, কমিউনিটি সেন্টার ভাড়া, বাবুর্চি ঠিক করা, মেনু চূড়ান্ত — এগুলো একটির পর একটি হয়, আর প্রতিটি সিদ্ধান্তের পর পরেরটি তার ওপর দাঁড়ায়। অনুষ্ঠানের দুই দিন আগে “অতিথি ৩০০ নয়, ৫০০ জন” শুনলে কার্ড, হল, বাবুর্চি — সব আবার ভাবতে হয়। Waterfall-এর দুর্বলতা ঠিক এটাই: পরিবর্তন যত দেরিতে আসে, তত বেশি আগের কাজ আবার করতে হয়, যাকে বলে rework.

নিচের stepper-এ একটি কাল্পনিক বিশ্ববিদ্যালয়ের ফলাফল পোর্টাল waterfall-এ চলছে। পরিকল্পনা ২০ সপ্তাহের: requirement ২, নকশা ২, কোড ১২, test ৩, deployment ১ সপ্তাহ। খেয়াল করুন গ্রাহক কখন প্রথমবার কাজ করা software দেখেন।

  1. Requirementসপ্তাহ ১–২SRS স্বাক্ষর
  2. Designসপ্তাহ ৩–৪নকশা স্থির
  3. Codeসপ্তাহ ৫–১৬১২টি feature
  4. Testসপ্তাহ ১৭–১৯পুরো system একসাথে
  5. Releaseসপ্তাহ ২৫পরিকল্পনা ছিল ২০
Project-এর অবস্থা (কাল্পনিক মান)
সপ্তাহ
গ্রাহক যা দেখেছেন
Rework
প্রথম মূল্য (value)
  1. Requirement (সপ্তাহ ১–২)। দল রেজিস্ট্রার অফিসের সাথে বসে ফলাফল, GPA হিসাব, transcript — সব লিখে একটি requirement দলিল বানাল। দুই পক্ষ স্বাক্ষর করল; এটিই এখন “baseline” বা ভিত্তি-দলিল। গ্রাহকের হাতে আছে শুধু কাগজ।
  2. Design (সপ্তাহ ৩–৪)। Database-এর table, GPA হিসাবের module, রিপোর্টের পাতা — সব নকশা এখন স্থির। বারোটি feature-এর প্রতিটির নকশা চতুর্থ সপ্তাহেই চূড়ান্ত, যদিও কোনোটির কোড এখনো লেখা হয়নি।
  3. Code (সপ্তাহ ৫–১৬)। বারো সপ্তাহে বারোটি feature. গ্রাহক মাসে মাসে “৭৫% সম্পূর্ণ” ধরনের রিপোর্ট পান, চালিয়ে দেখার মতো কিছু নয়।
  4. Test (সপ্তাহ ১৮)। System test চলছে। তখন একাডেমিক কাউন্সিল জানাল: retake কোর্সের নম্বর GPA-তে কীভাবে ধরা হবে, সেই নিয়ম বদলেছে। এটি একটি আনুষ্ঠানিক change request. সমস্যা: GPA module-এর নকশা ১৪ সপ্তাহ আগে স্থির হয়েছিল, আর transcript, মেধাতালিকা, রিপোর্ট — সবই তার ওপর দাঁড়িয়ে।
  5. পেছনে ফেরা (সপ্তাহ ১৮ → ২৪)। পরিবর্তন নকশায় ফিরে যায় (১ সপ্তাহ), তিনটি নির্ভরশীল অংশের কোড বদলায় (২ সপ্তাহ), আর যেহেতু পুরো system একসাথে test হয়, পুরো test আবার চালাতে হয় (২ সপ্তাহ)। মোট ৫ সপ্তাহের rework.
  6. Release (সপ্তাহ ২৫)। গ্রাহক প্রথমবার কাজ করা software দেখলেন — আর দেখেই বললেন, transcript-এর PDF যেমন ভেবেছিলেন তেমন নয়; এটি যাবে পরের version-এ। কেউ অবহেলা করেননি — মডেলের ধরনেই প্রতিক্রিয়া আসে একদম শেষে।

Royce-এর ১৯৭০ সালের লেখা — যা প্রায় উল্টো পড়া হয়েছে। Waterfall-এর “জনক” হিসেবে প্রায়ই Winston W. Royce-এর নাম আসে। তাঁর লেখা “Managing the Development of Large Software Systems” (IEEE WESCON, আগস্ট ১৯৭০)-এ ধারাবাহিক ধাপের ছবিটি আছে ঠিকই, কিন্তু ঠিক তার পরেই তিনি লেখেন, এই সরল রূপটি “risky and invites failure” — ঝুঁকিপূর্ণ, ব্যর্থতা ডেকে আনে; কারণ test-এর আগে অনেক সমস্যা চোখেই পড়ে না। এরপর তিনি পাঁচটি সংশোধনের কথা বলেন, যার একটি “Do it twice” — চূড়ান্ত version-এর আগে একটি পরীক্ষামূলক (pilot) version বানানো; আরেকটি গ্রাহককে পুরো সময় যুক্ত রাখা। তাঁর ছবিতে পাশাপাশি ধাপের মধ্যে ফিরে যাওয়ার তীরও আছে। “Waterfall” শব্দটি তাঁর লেখায় নেই; শব্দটির প্রথম দিকের ব্যবহার প্রায়ই Bell ও Thayer-এর ১৯৭৬ সালের একটি লেখার সাথে জোড়া হয়।

Waterfall কখন ঠিক পছন্দ

Waterfall-কে “পুরোনো, খারাপ” বলে উড়িয়ে দেওয়া ভুল। যেখানে এটি যুক্তিসঙ্গত:

  • Requirement স্থির ও ভালোভাবে বোঝা: যেমন একটি পুরোনো payroll system-কে একই নিয়মে নতুন platform-এ নেওয়া — কী বানাতে হবে, তা নিয়ে অনিশ্চয়তা কম।
  • নির্দিষ্ট পরিধির চুক্তি: সরকারি টেন্ডার বা fixed-price চুক্তিতে শুরুতেই কাজের পরিধি, দাম আর গ্রহণের শর্ত লিখে দিতে হয়।
  • নিয়ন্ত্রিত ক্ষেত্র: যেখানে নিয়ন্ত্রক সংস্থা প্রতিটি ধাপের দলিল আর অনুমোদন দেখতে চায়।

সবচেয়ে বড় ঝুঁকি দেরিতে শেখা: ভুল বোঝা requirement, ভুল প্রযুক্তিগত অনুমান, integration-এর সমস্যা — সবই ধরা পড়ে শেষে, যখন বদলানো সবচেয়ে দামি। তাই waterfall-এও শুরুতে একটি prototype আর কঠিন অংশটি আগে একবার পরীক্ষামূলকভাবে বানিয়ে দেখা ভালো।

৩ · V-model — প্রতিটি নকশার পাশে তার test

Waterfall-এ test আসে শেষে, আর “কী test করব” সেটিও প্রায়ই তখনই ভাবা হয়। V-model এই ফাঁকটি বন্ধ করে। ধাপগুলোকে ইংরেজি V অক্ষরের মতো সাজানো হয়: বাঁ বাহু দিয়ে নামতে নামতে requirement থেকে খুঁটিনাটি নকশা, নিচে কোড, তারপর ডান বাহু দিয়ে উঠতে উঠতে ছোট থেকে বড় test. সবচেয়ে গুরুত্বপূর্ণ কথা: বাঁ দিকের প্রতিটি ধাপের সাথে ডান দিকের একটি test স্তর জোড়া, আর সেই test-এর পরিকল্পনা নকশার সময়েই লেখা হয়।

বাঁ দিক (নকশা)ডান দিক (test স্তর)কী যাচাই হয়
Requirement বিশ্লেষণAcceptance testগ্রাহকের আসল প্রয়োজন মিটল কি?
System designSystem testপুরো system specification মেনে চলে কি?
Architecture (high-level) designIntegration testModule-গুলো জোড়া দিলে ঠিক কথা বলে কি?
Module (detailed) designUnit testপ্রতিটি function বা class একা ঠিক কি?
V-এর তলায়: Coding

ফলাফল পোর্টালে: requirement লেখার সময়েই acceptance test — “রেজিস্ট্রার ছাত্রের রোল দিলে ১০ সেকেন্ডের মধ্যে সঠিক GPA-সহ transcript দেখাবে।” GPA module-এর নকশার সময়েই unit test — “৪টি কোর্সে A, A-, B+, F থাকলে GPA কত?” লাভ দুটি: test লিখতে গিয়ে নকশার অস্পষ্টতা আগেই ধরা পড়ে, আর প্রতিটি requirement থেকে তার test পর্যন্ত সংযোগ থাকে, যাকে বলে traceability.

Verification বনাম validation

V-model-এর দুই বাহু দুটি প্রশ্নের উত্তর দেয়। Verification: “আমরা কি product-টি ঠিকভাবে বানাচ্ছি?” — নকশা আর specification মেনে চলছে কি না (unit, integration, system test). Validation: “আমরা কি ঠিক product বানাচ্ছি?” — গ্রাহকের প্রয়োজন মিটছে কি না (acceptance test). এই ইংরেজি জোড়া-প্রশ্ন সাধারণত Barry Boehm-এর নামে উদ্ধৃত হয়। Test-এর স্তর আর verification-validation বিস্তারিত পাবেন পর্ব ৪৫-এ (testing-এর মৌলিক), আর unit test লেখার কৌশল পর্ব ৪৬-এ।

সীমাবদ্ধতা: V-model আসলে waterfall-এরই একটি রূপ — ধাপ এখনো ধারাবাহিক, কাজ করা software এখনো আসে শেষে, requirement বদলালে V-এর দুই বাহুই বদলাতে হয়। এর শক্তি অন্য জায়গায়: যেখানে প্রমাণ দেখাতে হয় যে প্রতিটি requirement যাচাই হয়েছে — চিকিৎসা যন্ত্র, গাড়ি, বিমান, রেলের সংকেত ব্যবস্থার software. ১৯৮০-র দশকে এটি পরিচিতি পায়; জার্মানির সরকারি project-এর জন্য তৈরি “V-Modell” (পরের বড় সংস্করণ V-Modell XT, ২০০৫ সালের দিকে) এর একটি সুপরিচিত আনুষ্ঠানিক রূপ।

৪ · Prototyping, incremental আর iterative

Prototyping — দেখলে তবে বোঝা যায়

দর্জির কাছে প্রথমবার পাঞ্জাবি বানাতে গেলে ভালো দর্জি একবার “ট্রায়াল” দেন — কাঁচা সেলাইয়ে গায়ে দিয়ে দেখা, কোথায় ঢিলা। Software-এ এর নাম prototype: আসল system-এর আগে দ্রুত বানানো একটি নমুনা। অনেক ব্যবহারকারী কাগজে লেখা requirement পড়ে কিছু বুঝতে পারেন না, কিন্তু পর্দায় একটি screen দেখলে সঙ্গে সঙ্গে বলেন “না, এটা না।” Prototype দুই রকম:

🗑️ Throwaway prototype

শুধু শেখার জন্য — UI-এর নকশা বা একটি প্রযুক্তি কাজ করে কি না দেখা। কাজ শেষে কোড ফেলে দিয়ে আসল system ঠিকভাবে নতুন করে বানানো হয়। দ্রুত বানানোর জন্য এতে test, নিরাপত্তা, পরিচ্ছন্ন নকশা ইচ্ছা করে বাদ থাকে।

throwaway · rapid prototype

🌱 Evolutionary prototype

ফেলে দেওয়া হয় না — ব্যবহারকারীর মতামত নিয়ে ধাপে ধাপে উন্নত করে সেটিই আসল product হয়। তাই শুরু থেকেই ভালো মানের কোড দরকার।

evolutionary

প্রচলিত বিপদ: throwaway prototype দেখে গ্রাহক বলেন, “এটাই তো চলছে, চালু করে দিন!” — আর test-হীন কোড আসল system হয়ে যায়। Prototype কোন ধরনের, তা শুরুতেই লিখিতভাবে জানিয়ে রাখুন।

Incremental বনাম iterative — দুটি আলাদা কথা

এই দুটি শব্দ প্রায়ই গুলিয়ে ফেলা হয়, অথচ পরীক্ষায় এদের পার্থক্য খুব প্রিয় প্রশ্ন।

  • Incremental development: software-কে অংশে ভাগ করে প্রতিবার একটি নতুন, সম্পূর্ণ অংশ যোগ করা। প্রথম release-এ login আর ফলাফল দেখা; পরেরটিতে transcript; তারপর মেধাতালিকা। প্রতিটি increment যোগের সময়েই ব্যবহারযোগ্য। প্রশ্ন: “এবার কোন অংশ যোগ হবে?”
  • Iterative development: একই জিনিসে বারবার ফিরে এসে উন্নত করা। প্রথমে পুরো পোর্টালের একটি মোটা দাগের রূপ, তারপর প্রতিটি iteration-এ মতামত দেখে আরও নিখুঁত। প্রশ্ন: “যা আছে, তা কীভাবে আরও ভালো হবে?”

একটি জনপ্রিয় ব্যাখ্যা এসেছে Mona Lisa ছবি দিয়ে, যা সাধারণত product-বিশেষজ্ঞ Jeff Patton-এর নামে প্রচলিত (২০০৮ সালের দিকের একটি blog লেখায় এর বহুল প্রচার)। Incremental শিল্পী ক্যানভাসের এক কোণ থেকে শুরু করে প্রতিদিন একটি অংশ পুরো রং করে শেষ করেন — প্রথম দিন সম্পূর্ণ একটি চোখ, তারপর মুখ, তারপর হাত; বাকি ক্যানভাস ফাঁকা। Iterative শিল্পী প্রথম দিন পেনসিলে পুরো ছবির খসড়া আঁকেন, তারপর হালকা রং, তারপর আলো-ছায়া — প্রতিদিন পুরো ছবিটাই একটু ভালো হয়। পরীক্ষার খাতার খসড়া আর ফেয়ার কপির মতো: খসড়ায় পুরো উত্তর থাকে, ফেয়ার কপিতে সেটিই গোছানো।

শুধু incremental-এর বিপদ: প্রথম অংশটি যদি ভুল বোঝা হয়, বাকিগুলোও সেই ভুলের ওপর দাঁড়াবে। শুধু iterative-এর বিপদ: সবকিছু বারবার “একটু ভালো” হতে থাকে, কিন্তু কোনো অংশই ব্যবহারযোগ্য অবস্থায় হাতে আসে না। তাই বাস্তবে প্রায় সব আধুনিক পদ্ধতি দুটো মেশায় — প্রতিটি iteration-এ একটি ব্যবহারযোগ্য increment. Agile-এর sprint ঠিক এটাই: পর্ব ০৫-এ (Agile আর Scrum) এর নিয়মকানুন বিস্তারিত পাবেন। একদম শুরুর ছোট্ট ব্যবহারযোগ্য রূপটিকে অনেকে বলেন MVP.

এবার আগের ফলাফল পোর্টালটিকেই তিনটি iteration-এ চালিয়ে দেখি। একই ১২টি feature, একই ২০ সপ্তাহ, একই নিয়ম-পরিবর্তন — শুধু ক্রম বদলেছে।

  1. Backlog১২টি featureমূল্য অনুযায়ী সাজানো
  2. Iteration ১সপ্তাহ ১–৬login, ফলাফল, GPA, নোটিশ
  3. Iteration ২সপ্তাহ ৭–১৩retake নিয়ম, transcript…
  4. Iteration ৩সপ্তাহ ১৪–২০বাকি feature, পূর্ণ release
Project-এর অবস্থা (কাল্পনিক মান)
সপ্তাহ
ব্যবহারযোগ্য feature
গ্রাহক যা দেখেছেন
Rework
প্রথম মূল্য (value)
  1. Backlog সাজানো। বারোটি feature একটি তালিকায়, সবচেয়ে দরকারি ওপরে; iteration ৬–৭ সপ্তাহের। শুধু প্রথম চারটির নকশা এখন বিস্তারিত; বাকিগুলো এক লাইনের বর্ণনা — বদলালে খরচ প্রায় শূন্য।
  2. Iteration ১ (সপ্তাহ ১–৬)। Login, ফলাফল দেখা, GPA হিসাব আর নোটিশ — চারটি feature নকশা, কোড, test সহ শেষ। ষষ্ঠ সপ্তাহে একটি বিভাগে pilot চালু হলো। প্রথম মূল্য এল ৬ষ্ঠ সপ্তাহে, waterfall-এর ২৫তম সপ্তাহের বদলে।
  3. প্রতিক্রিয়া আগেই। শিক্ষকেরা আসল ডেটায় GPA মিলাতে গিয়েই retake নিয়মের অস্পষ্টতা ধরলেন — ১৮তম নয়, ৬ষ্ঠ সপ্তাহে। এখনো শুধু GPA module আর দুটি পাতা এর ওপর নির্ভর করে, তাই সংশোধনে প্রায় ১ সপ্তাহ; কাজটি পরের iteration-এ উঠল।
  4. Iteration ২ (সপ্তাহ ৭–১৩)। Retake নিয়মের সংশোধন, transcript, ফল প্রকাশের নোটিফিকেশন আর পুনর্নিরীক্ষার আবেদন। Demo-তে রেজিস্ট্রার transcript-এর PDF দেখে বিন্যাস বদলাতে বললেন — PDF তৈরি হয়েছে মাত্র দুই সপ্তাহ আগে, তাই খরচ আধা সপ্তাহ।
  5. Iteration ৩ (সপ্তাহ ১৪–২০)। PDF সংশোধন আর বাকি feature. মোট rework ১.৫ সপ্তাহ, তাই নির্দিষ্ট সময়ে সবকিছু ধরল না। দল সময় বাড়ায়নি; গ্রাহকের সাথে কথা বলে সবচেয়ে কম জরুরি feature (পুরোনো বছরের ফলাফল import) পরের version-এ সরাল। ২০তম সপ্তাহে পূর্ণ release — সময় স্থির, পরিধি নমনীয়।

Stepper-এর সংখ্যা একটি গল্প; এবার একই কথা নিয়মে বেঁধে যাচাই করি। অনুমান: ১২টি feature, ২০ সপ্তাহ। Waterfall-এ সব নকশা চতুর্থ সপ্তাহে স্থির, গ্রাহক software দেখেন ২০তম সপ্তাহে। Iterative-এ ৫ সপ্তাহের ৪টি iteration, প্রতিটিতে ৩টি feature — প্রথম সপ্তাহে নকশা, শেষ সপ্তাহে demo. প্রতি সপ্তাহে ৩৫% সম্ভাবনায় একটি পরিবর্তন আসে, আর প্রতিটি feature ২৫% সম্ভাবনায় ভুল বোঝা — ধরা পড়ে গ্রাহক সেটি প্রথম চালিয়ে দেখলে। দুই মডেলে একই তালিকা। খরচ: নকশা স্থির হওয়ার আগে পরিবর্তন ০.২৫ সপ্তাহ; পরে ০.৫, সাথে স্থির হওয়ার পর প্রতি সপ্তাহে আরও ০.১ — কারণ সময়ের সাথে আরও কাজ সেই সিদ্ধান্তের ওপর দাঁড়ায়।

// Waterfall vs iterative: same 12 features, same seeded requirement changes.
let seed = 3; function rand() {   // mulberry32: small seeded PRNG
  seed = (seed + 0x6D2B79F5) | 0; let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);
  t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
}
const N = 12, WEEKS = 20, P_CHANGE = 0.35, P_WRONG = 0.25;
const changes = [];               // [week, feature]: a change request arrives
for (let w = 1; w <= WEEKS; w++) if (rand() < P_CHANGE) changes.push([w, Math.floor(rand() * N)]);
const wrong = [];                 // features the team misunderstood (found at first demo)
for (let f = 0; f < N; f++) if (rand() < P_WRONG) wrong.push(f);
console.log("changes (week:feature): " + changes.map(([w, f]) => w + ":F" + f).join(" "));
console.log("misunderstood: " + wrong.map(f => "F" + f).join(" "));
// design = week the feature's design is frozen; demo = week the customer first sees it work
const plans = {
  waterfall: () => ({ design: 4, demo: 20 }),          // all designed by wk 4, one release wk 20
  iterative: f => { const k = Math.floor(f / 3);       // 4 iterations x 5 weeks, 3 features each
                    return { design: 5 * k + 1, demo: 5 * k + 5 }; }
};
// Rule: before design is frozen a change costs 0.25 wk; after that 0.5 wk
// plus 0.1 wk for every week since the freeze (more work now rests on it).
const cost = (week, p) => week <= p.design ? 0.25 : 0.5 + 0.1 * (week - p.design);
for (const [name, plan] of Object.entries(plans)) {
  let rc = 0, rw = 0;
  for (const [w, f] of changes) rc += cost(w, plan(f));
  for (const f of wrong) rw += cost(plan(f).demo, plan(f));
  let first = WEEKS; for (let f = 0; f < N; f++) first = Math.min(first, plan(f).demo);
  console.log(name.padEnd(10) + " first value: week " + String(first).padStart(2) +
    " | rework: changes " + rc.toFixed(2) + " + misunderstandings " + rw.toFixed(2) +
    " = " + (rc + rw).toFixed(2) + " wk");
}

আউটপুট:

changes (week:feature): 2:F5 3:F9 6:F3 8:F1 13:F8 14:F8 18:F10 19:F11
misunderstood: F2 F5 F6
waterfall  first value: week 20 | rework: changes 8.90 + misunderstandings 6.30 = 15.20 wk
iterative  first value: week  5 | rework: changes 4.95 + misunderstandings 2.70 = 7.65 wk

৮টি পরিবর্তন আর ৩টি ভুল বোঝা feature, দুই মডেলে হুবহু এক। পরিবর্তনের খরচ ৮.৯০ বনাম ৪.৯৫ সপ্তাহ। হাতে মিলিয়ে দেখুন: সপ্তাহ ১৩-এ F8 waterfall-এ ০.৫ + ০.১ × (১৩ − ৪) = ১.৪; iterative-এ F8-এর নকশা স্থির ১১তম সপ্তাহে, তাই ০.৫ + ০.১ × ২ = ০.৭. তবে সপ্তাহ ৮-এ F1 iterative-এ বেশি দামি (১.২ বনাম ০.৯), কারণ F1 প্রথম iteration-এই বানানো — iterative সব ক্ষেত্রে জেতে না। ভুল বোঝার খরচ: waterfall-এ প্রতিটি ০.৫ + ০.১ × ১৬ = ২.১, মোট ৬.৩০; iterative-এ ০.৯ করে, মোট ২.৭০. প্রথম মূল্য: সপ্তাহ ২০ বনাম ৫. আরও বারোটি seed চালিয়ে প্রতিবারই iterative-এর মোট rework কম এসেছে, ব্যবধান আলাদা। P_CHANGE ও P_WRONG দুটিই 0 করলে rework দুই দিকেই শূন্য — requirement সত্যিই স্থির হলে waterfall-এর ক্ষতি শুধু দেরিতে মূল্য।

মডেলের সীমা: সংখ্যাগুলো একটি খেলনা নিয়ম থেকে, কোনো জরিপ থেকে নয়। “দেরিতে পরিবর্তন বেশি দামি” — এই ধারণার পেছনে Boehm-এর Software Engineering Economics (১৯৮১) বইয়ের বিখ্যাত “cost of change” রেখা আছে, কিন্তু কত গুণ বেশি তা project-ভেদে খুব আলাদা আর এ নিয়ে বিতর্কও আছে। Simulation-এর কাজ সংখ্যা মুখস্থ করানো নয়, কোন অনুমান ফল বদলায় তা দেখানো।

৫ · Spiral model — সবচেয়ে বড় ঝুঁকি আগে

১৯৮৬ সালে (ACM SIGSOFT Software Engineering Notes-এ) আর আরও পরিচিত রূপে ১৯৮৮ সালে (IEEE Computer পত্রিকায়) Barry Boehm প্রকাশ করেন “A Spiral Model of Software Development and Enhancement” নামের লেখা। তাঁর মূল প্রশ্ন: পরের ধাপে কী করব, তা কে ঠিক করবে? Waterfall-এর উত্তর — দলিলের তালিকা। Boehm-এর উত্তর — ঝুঁকি. যে অনিশ্চয়তা project ডোবাতে পারে, সেটিই আগে পরীক্ষা করুন।

Spiral model-এ project একটি প্যাঁচানো পথ ধরে কেন্দ্র থেকে বাইরে যায়। প্রতিটি পাক বা loop চারটি ভাগ (quadrant) পার হয় — ঘড়ির কাঁটার দিকে:

  1. লক্ষ্য, বিকল্প ও সীমা ঠিক করা — এই loop-এ কী চাই, কোন কোন পথে, কোন বাজেট-সময়ে।
  2. বিকল্প মূল্যায়ন, ঝুঁকি চিহ্নিত ও সমাধান — prototype, simulation বা benchmark দিয়ে ঝুঁকি কমানো।
  3. পরের স্তরের product তৈরি ও যাচাই — প্রথম দিকের loop-এ হয়তো শুধু requirement, পরের দিকে নকশা ও কোড।
  4. পরের ধাপের পরিকল্পনা — stakeholder review, আর পরের loop-এর অঙ্গীকার অথবা project থামানো।

Boehm-এর ছবিতে কেন্দ্র থেকে দূরত্ব মানে এখন পর্যন্ত মোট খরচ, আর ঘূর্ণন মানে অগ্রগতি। প্রতিটি loop-এ কত বিস্তারিত কাজ হবে, তা ঠিক করে ঝুঁকি — ঝুঁকি বেশি হলে আরও prototype, কম হলে সোজা waterfall-এর মতো এগোনো। এই অর্থে spiral একটি “মডেল বানানোর মডেল”: ঝুঁকি অনুযায়ী এক project-এর ভেতরেই waterfall, prototyping বা incremental অংশ আসতে পারে।

Risk exposure — কোন ঝুঁকি আগে

প্রতিটি risk-এর দুটি দিক: ঘটার সম্ভাবনা (P) আর ঘটলে ক্ষতি (L, টাকায় বা সপ্তাহে)। Boehm-এর ১৯৯১ সালের লেখা “Software Risk Management: Principles and Practices” (IEEE Software)-এ সংজ্ঞাটি এমন:

Risk Exposure, RE = P(খারাপ ফল) × L(খারাপ ফলের ক্ষতি)

যেমন, payment gateway জোড়া দিতে ব্যর্থ হওয়ার সম্ভাবনা ০.৪, ঘটলে ক্ষতি ৳২০ লাখ → RE = ০.৪ × ২০ = ৳৮ লাখ। এটি প্রত্যাশিত ক্ষতি — বহু project-এর গড়ে যা হারানোর আশঙ্কা। সব ঝুঁকির RE সাজিয়ে সবচেয়ে বড়টি আগে সামলানো spiral-এর মূল কৌশল। একই লেখায় Boehm ঝুঁকি কমানোর একটি ব্যবস্থা কতটা লাভজনক তা মাপতে risk reduction leverage-এর কথাও বলেন: (আগের RE − পরের RE) ÷ ব্যবস্থার খরচ। পুরো risk register আর risk management আসবে পর্ব ৬২-তে।

নিচের stepper একটি কাল্পনিক অনলাইন বাজার অ্যাপের দ্বিতীয় loop দেখায়, যেখানে সবচেয়ে বড় ঝুঁকি ঈদের সেলের ভিড়। ঈদের আগে বাসের টিকিটের ভিড়ের মতো — সারা বছর ঠিক চলা সিস্টেম ওই কয়েক দিনেই ভেঙে পড়ে।

  1. ১ · লক্ষ্য৫,০০০ অর্ডার/মিনিটবিকল্প ও সীমা
  2. ২ · ঝুঁকিload test prototypeRE ৬ → ১.২
  3. ৩ · তৈরি ও যাচাইorder queuetest-সহ
  4. ৪ · পরিকল্পনাreviewপরের loop-এর অঙ্গীকার
Loop ২-এর অবস্থা (কাল্পনিক মান)
বিকল্প
ভিড়ের ঝুঁকি
খরচ ও সময়
সিদ্ধান্ত
  1. Quadrant ১ — লক্ষ্য, বিকল্প, সীমা। এই loop-এর লক্ষ্য: ঈদের সেলে মিনিটে ৫,০০০ অর্ডার নেওয়া। দুটি বিকল্প: (ক) একটি বড় server আর database-এ সরাসরি লেখা, (খ) অর্ডার আগে একটি queue-তে জমা রেখে পরে প্রক্রিয়া করা। সীমা: ৳১০ লাখ, ৮ সপ্তাহ। ভিড়ের ঝুঁকির RE = ০.৫ × ১২ = ৳৬ লাখ — loop ১-এ payment-এর ঝুঁকি কমানোর পর এখন এটিই সবচেয়ে বড়।
  2. Quadrant ২ — ঝুঁকি বিশ্লেষণ ও prototype তৈরি। তর্ক না করে মাপা হলো: এক সপ্তাহে দুই বিকল্পের ছোট prototype বানিয়ে load test. (ক) মিনিটে প্রায় ১,৮০০ অর্ডারে আটকে যায়; (খ) ৬,২০০ সামলায়। (খ) বাছলে ঘটার সম্ভাবনা ধরা যাক ০.১-এ নামে, RE = ০.১ × ১২ = ৳১.২ লাখ। এক সপ্তাহের খরচে ৳৪.৮ লাখের প্রত্যাশিত ক্ষতি কমল।
  3. Quadrant ৩ — তৈরি ও যাচাই। আসল order queue module তৈরি হলো unit আর integration test-সহ, তারপর load test দিয়ে লক্ষ্য যাচাই। Prototype ছিল throwaway — তার কোড আসল module-এ যায়নি।
  4. Quadrant ৪ — review আর পরের পরিকল্পনা। Stakeholder-রা ফল দেখলেন আর পরের loop-এ টাকা ও সময় দেওয়ার অঙ্গীকার করলেন। বাকি ঝুঁকির মধ্যে এখন সবচেয়ে বড় অস্পষ্ট ডেলিভারি নিয়ম (০.৬ × ৮ = ৳৪.৮ লাখ) — সেটি loop ৩-এর লক্ষ্য। ঝুঁকি অগ্রহণযোগ্য থাকলে এখানেই project থামানোও একটি বৈধ সিদ্ধান্ত।

একই কৌশল কয়েকটি loop জুড়ে: ছয়টি ঝুঁকি দিয়ে শুরু; প্রতি loop-এ দুটি সবচেয়ে বড় অমীমাংসিত ঝুঁকিতে prototype বা spike (ঝুঁকি যাচাইয়ের ছোট পরীক্ষামূলক কাজ)। Seeded PRNG ঠিক করে পরীক্ষাটি পুরো সফল (৮০%) নাকি আংশিক — আংশিক হলে সম্ভাবনা শুধু অর্ধেক। Loop ১-এ পাওয়া নতুন ঝুঁকি (পুরোনো ডেটা স্থানান্তর) loop ২ থেকে যোগ হয়। মোট RE ৳৭ লাখের নিচে নামলে পুরো তৈরির অঙ্গীকার।

// Spiral: each loop attacks the 2 biggest risks first (risk exposure RE = P x impact).
let seed = 7; function rand() {   // mulberry32: decides whether a spike/prototype works
  seed = (seed + 0x6D2B79F5) | 0; let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);
  t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
}
// [id, probability, impact in lakh taka, P after a successful mitigation]
const risks = [
  ["R1 payment gateway", 0.40, 20, 0.05], ["R2 Eid-sale load", 0.50, 12, 0.10],
  ["R3 unclear delivery rules", 0.60, 8, 0.10], ["R4 key dev leaves", 0.20, 15, 0.10],
  ["R5 new framework", 0.30, 6, 0.05], ["R6 store approval", 0.25, 4, 0.10]
].map(([id, p, imp, after]) => ({ id, p, imp, after }));
const re = r => r.p * r.imp;
const total = () => risks.reduce((s, r) => s + re(r), 0);
const LIMIT = 7.0;                 // stakeholders accept the plan below this total RE
console.log("start: total RE = " + total().toFixed(2) + " lakh");
for (let loop = 1; loop <= 4 && total() >= LIMIT; loop++) {
  if (loop === 2) risks.push({ id: "R7 data migration", p: 0.5, imp: 6, after: 0.1 }); // found in loop 1
  risks.sort((a, b) => re(b) - re(a));
  const parts = [];
  for (const r of risks.filter(r => !r.done).slice(0, 2)) {
    const before = re(r), ok = rand() < 0.8;   // 80% of spikes fully work
    r.p = ok ? r.after : r.p / 2; r.done = ok;  // a failed spike still halves P
    parts.push(r.id + " " + before.toFixed(2) + "->" + re(r).toFixed(2) + (ok ? "" : " (partly)"));
  }
  console.log("loop " + loop + ": " + parts.join(", ") + " | total " + total().toFixed(2));
}
console.log(total() < LIMIT ? "risk acceptable: commit to build" : "still risky: rethink or stop");
risks.sort((a, b) => re(b) - re(a));
console.log("left: " + risks.map(r => r.id.split(" ")[0] + "=" + re(r).toFixed(2)).join(" "));

আউটপুট:

start: total RE = 24.60 lakh
loop 1: R1 payment gateway 8.00->1.00, R2 Eid-sale load 6.00->1.20 | total 12.80
loop 2: R3 unclear delivery rules 4.80->2.40 (partly), R4 key dev leaves 3.00->1.50 | total 11.90
loop 3: R7 data migration 3.00->0.60, R3 unclear delivery rules 2.40->0.80 | total 7.90
loop 4: R5 new framework 1.80->0.30, R6 store approval 1.00->0.40 | total 5.80
risk acceptable: commit to build
left: R4=1.50 R2=1.20 R1=1.00 R3=0.80 R7=0.60 R6=0.40 R5=0.30

শুরুতে মোট RE ৳২৪.৬ লাখ (৮ + ৬ + ৪.৮ + ৩ + ১.৮ + ১)। Loop ১ payment (৮) আর ভিড় (৬) সামলায়, মোট ১২.৮. Loop ২-এ নতুন R7 (০.৫ × ৬ = ৩) যোগ হয়ে মোট ১৫.৮; R4 আর R7 দুটিরই RE ৩.০০ — JavaScript-এর sort stable, তাই তালিকায় আগে থাকা R4 বাছাই হয়। R3-এর পরীক্ষা আংশিক (৪.৮ → ২.৪), তাই সেটি loop ৩-এ আবার আসে। Loop ৩-এর পরে ৭.৯ — তখনো ৭-এর ওপরে, তাই loop ৪, আর মোট ৫.৮. ঝুঁকি শূন্য হয়নি: spiral ঝুঁকি দূর করে না, কোনটি কতটা মেনে নেবেন সেই সিদ্ধান্ত তথ্য দিয়ে নিতে সাহায্য করে।

Anchor point — কোথায় থেমে অঙ্গীকার

Spiral-এর একটি সমালোচনা ছিল: loop কতবার চলবে, কখন “যথেষ্ট” — তা অস্পষ্ট। ১৯৯৬ সালে Boehm “Anchoring the Software Process” (IEEE Software) লেখায় তিনটি anchor point milestone প্রস্তাব করেন, যেখানে stakeholder-রা একসাথে বসে পরের বড় খরচের অঙ্গীকার করেন:

  • LCO (Life Cycle Objectives): লক্ষ্য, পরিধি আর অন্তত একটি সম্ভাব্য architecture আছে — project-টি করার মতো কি?
  • LCA (Life Cycle Architecture): architecture বাছাই হয়েছে, বড় ঝুঁকিগুলো সমাধান বা পরিকল্পিত — এখন পুরো তৈরিতে টাকা দেওয়া যায় কি?
  • IOC (Initial Operational Capability): প্রথম ব্যবহারযোগ্য রূপ ব্যবহারকারীর কাছে যাওয়ার জন্য প্রস্তুত।

এই তিনটি বিন্দু পরে Unified Process-এর phase-সীমায় প্রায় হুবহু ঢুকে যায় — পরের অংশে দেখবেন।

তিনটি মডেল পাশাপাশি

Waterfall, V-model আর spiral — সরল রূপে

Waterfall cascades once; the V-model pairs each design level with a test level; the spiral repeats four quadrants, driven by risk

Waterfall Waterfall RequirementsDesignImplementationTestingDeployment চাহিদা নির্ণয়নকশাকোড লেখাযাচাইচালু ও রক্ষণাবেক্ষণ ড্যাশ তীর: আগের ধাপে ফেরা V-model V-model RequirementsSystem designArchitectureModule design Coding AcceptanceSystem testIntegrationUnit test চাহিদাসিস্টেম নকশাকাঠামো নকশামডিউল নকশা কোড লেখা গ্রহণ-যাচাইপুরো সিস্টেমজোড়া যাচাইএকক যাচাই ড্যাশ রেখা: কোন নকশা কোন স্তরে যাচাই Spiral model Spiral ১ লক্ষ্য ও বিকল্প ২ ঝুঁকি ও prototype ৩ তৈরি ও যাচাই ৪ পরের পরিকল্পনা ObjectivesRisk analysis Develop & verifyPlan next
ছবি ৪.১ — বাঁয়ে waterfall-এর এক দিকের ধারা (ড্যাশ তীর শুধু পাশের ধাপে ফেরা); মাঝে V-model-এর জোড়া — বাঁ বাহুর প্রতিটি নকশা ডান বাহুর একটি test স্তরে যাচাই হয় (Module design আর Unit test পাশাপাশি); ডানে spiral — প্রতিটি পাক চারটি quadrant পার হয়, লাল বিন্দুতে প্রতিটি loop-এর তৈরি-ও-যাচাই ধাপ শুরু, আর কেন্দ্র থেকে দূরত্ব মানে মোট খরচ।

৬ · Unified Process আর RAD — সংক্ষেপে

Unified Process (RUP) — চারটি phase, ভেতরে iteration

১৯৯০-এর দশকের শেষে Rational Software কোম্পানির Ivar Jacobson, Grady Booch আর James Rumbaugh — যাঁরা UML-এরও প্রধান স্থপতি — The Unified Software Development Process (১৯৯৯) বইয়ে একটি কাঠামো দেন। এর বাণিজ্যিক রূপ Rational Unified Process (RUP); ২০০৩ সালে IBM Rational-কে কিনে নেয়। মূল চিন্তা: project চারটি ধারাবাহিক phase-এ ভাগ, কিন্তু প্রতিটি phase-এর ভেতরে এক বা একাধিক iteration.

Phaseমূল কাজশেষের milestone
InceptionProject-টি করার মতো কি? পরিধি, business case, প্রধান ঝুঁকিLifecycle Objectives
ElaborationArchitecture দাঁড় করানো ও চালিয়ে যাচাই, বড় ঝুঁকি দূর করাLifecycle Architecture
Constructionবাকি feature বানানো, iteration-এ iteration-এInitial Operational Capability
Transitionব্যবহারকারীর কাছে হস্তান্তর, beta, প্রশিক্ষণProduct Release

প্রথম তিনটি milestone-এর নাম Boehm-এর anchor point (LCO, LCA, IOC)-এর সাথে মিলিয়ে দেখুন — এটি কাকতালীয় নয়। RUP-এর “hump chart”-এ দেখা যায় সব কাজ প্রতিটি phase-এ চলে, শুধু অনুপাত বদলায়: inception-এ requirement বেশি, construction-এ কোড বেশি। সমালোচনা ছিল এর ভার — অনেক role, artifact আর দলিল।

RAD — দ্রুততাই লক্ষ্য

RAD (Rapid Application Development) নামটি জনপ্রিয় হয় James Martin-এর ১৯৯১ সালের একই নামের বই থেকে। এর উপাদান: ব্যবহারকারীর সাথে কয়েক দিনের নিবিড় workshop, দ্রুত prototype, তৈরি টুল আর code generator, আর একটি কঠোর timebox — সাধারণত কয়েক মাস; সময় শেষ হলে কাজ কমানো হয়, সময় বাড়ানো হয় না। ছোট দল, ব্যবহারকারী সহজে পাওয়া যায়, আর একটি ব্যবসায়িক application যা ভাগ করে বানানো যায় — এমন জায়গায় RAD ভালো। বড়, জটিল, উচ্চ-নিরাপত্তার system-এ এটি কম মানায়। RAD-এর কিছু চিন্তা পরে DSDM-এর মতো পদ্ধতি হয়ে Agile আন্দোলনে মিশেছে।

৭ · কোন মডেল কখন — সিদ্ধান্তের টেবিল

“কোন মডেল সেরা?” — প্রশ্নটাই ভুল। আসল প্রশ্ন: এই project-এ কোন অনিশ্চয়তা সবচেয়ে বড়, আর কোন সীমা অনড়? রেলের সময়সূচির কথা ভাবুন — ঢাকা-চট্টগ্রাম রুটে বছরের পর বছর একই সময়সূচি চলে, আগে থেকে ঠিক করা যায়; কিন্তু ঈদের বিশেষ ট্রেনের পরিকল্পনা প্রতি বছর ভিড় দেখে বদলায়। দুটিই রেলের কাজ, পদ্ধতি আলাদা।

Project-এর বৈশিষ্ট্যযে মডেলের দিকে ঝোঁককারণ
Requirement স্থির, ভালো বোঝা, অভিজ্ঞ দলWaterfallঅনিশ্চয়তা কম; পরিকল্পনা আর দলিল সহজ
Fixed-price চুক্তি, নির্দিষ্ট পরিধিWaterfall বা পর্যায়ভিত্তিক incrementalচুক্তিতে শুরুতেই পরিধি আর গ্রহণের শর্ত লাগে
নিয়ন্ত্রিত বা নিরাপত্তা-সংবেদনশীল (চিকিৎসা, বিমান, রেল)V-model (প্রায়ই iterative অংশসহ)প্রতিটি requirement-এর যাচাইয়ের প্রমাণ আর traceability লাগে
Requirement বদলাবে, গ্রাহক নিয়মিত সময় দিতে পারেনIterative / Agileঘন ঘন প্রতিক্রিয়া, দেরিতে শেখার ঝুঁকি কম
দ্রুত একটি মূল অংশ বাজারে দরকারIncrementalআগে মূল্য, বাকিটা পরে যোগ
ব্যবহারকারী জানেন না কী চান (বিশেষত UI)Prototypingদেখে-চালিয়ে requirement পরিষ্কার
বড়, নতুন প্রযুক্তি, উচ্চ ঝুঁকিSpiral (ঝুঁকি-চালিত)সবচেয়ে বড় অনিশ্চয়তা আগে পরীক্ষা
ছোট দল, ব্যবসায়িক app, কঠোর সময়সীমাRAD / timebox-ভিত্তিকসময় স্থির, পরিধি নমনীয়

এই টেবিলকেই নিয়মে বেঁধে একটি ছোট সহকারী প্রোগ্রাম বানাই। প্রতিটি নিয়ম একটি বৈশিষ্ট্য দেখে কোনো মডেলকে পয়েন্ট দেয় আর কারণটি লিখে রাখে। নিয়ম আর পয়েন্ট আমাদের ঠিক করা — কোনো মান (standard) নয়; উদ্দেশ্য হলো যুক্তিটা স্পষ্ট করে লেখা, যাতে তর্ক করা যায়।

// A rule-based helper: project traits -> points for each process model, with reasons.
const RULES = [  // [condition, model, points, reason]
  [p => p.reqStable,        "Waterfall",   2, "requirements are stable and signed off"],
  [p => p.fixedContract,    "Waterfall",   1, "fixed-scope contract needs an up-front spec"],
  [p => p.regulated,        "V-model",     2, "regulator wants each phase traced to a test level"],
  [p => p.safetyCritical,   "V-model",     2, "safety: plan verification from day one"],
  [p => !p.reqStable,       "Iterative",   2, "requirements will change; get feedback often"],
  [p => p.customerNearby,   "Iterative",   1, "customer can review every 2-4 weeks"],
  [p => p.earlyRelease,     "Incremental", 2, "users need a core part early"],
  [p => p.reqStable && p.earlyRelease, "Incremental", 1, "scope is known, so it splits cleanly"],
  [p => p.risk === "high",  "Spiral",      3, "high technical risk: retire risks first"],
  [p => p.size === "large" && p.risk !== "low", "Spiral", 1, "large and uncertain"],
  [p => p.uiUnclear,        "Prototyping", 2, "users cannot say what they want until they see it"],
];
function recommend(name, p) {
  const score = {}, why = {};
  for (const [test, model, pts, reason] of RULES) if (test(p)) {
    score[model] = (score[model] || 0) + pts; (why[model] = why[model] || []).push(reason);
  }
  const ranked = Object.entries(score).sort((a, b) => b[1] - a[1]);
  console.log(name + ": " + ranked.map(([m, s]) => m + "=" + s).join(" "));
  const [best, s] = ranked[0];
  console.log("  -> " + best + " (" + s + "): " + why[best].join("; "));
}
recommend("A. payroll for a fixed tender", { reqStable: true, fixedContract: true, regulated: false,
  safetyCritical: false, customerNearby: false, earlyRelease: false, risk: "low", size: "medium", uiUnclear: false });
recommend("B. infusion-pump firmware", { reqStable: true, fixedContract: false, regulated: true,
  safetyCritical: true, customerNearby: false, earlyRelease: false, risk: "medium", size: "medium", uiUnclear: false });
recommend("C. new online-bazaar app", { reqStable: false, fixedContract: false, regulated: false,
  safetyCritical: false, customerNearby: true, earlyRelease: true, risk: "medium", size: "medium", uiUnclear: true });

আউটপুট:

A. payroll for a fixed tender: Waterfall=3
  -> Waterfall (3): requirements are stable and signed off; fixed-scope contract needs an up-front spec
B. infusion-pump firmware: V-model=4 Waterfall=2
  -> V-model (4): regulator wants each phase traced to a test level; safety: plan verification from day one
C. new online-bazaar app: Iterative=3 Incremental=2 Prototyping=2
  -> Iterative (3): requirements will change; get feedback often; customer can review every 2-4 weeks

A (একটি টেন্ডারের payroll): requirement স্থির (২) আর নির্দিষ্ট চুক্তি (১) — শুধু waterfall পয়েন্ট পেয়েছে। B (রোগীর শরীরে ওষুধ দেওয়ার pump-এর firmware): নিয়ন্ত্রিত (২) আর নিরাপত্তা (২) মিলে V-model ৪; requirement স্থির হওয়ায় waterfall ২ — ঝোঁক V-model-এর দিকে। C (নতুন অনলাইন বাজার app): requirement বদলাবে (২) আর গ্রাহক কাছে (১) মিলে iterative ৩, তবে incremental আর prototyping-ও ২ করে পেয়েছে। সেরা উত্তর এখানে একটি মিশ্রণ: iteration-এ কাজ, প্রতিটিতে একটি increment, শুরুতে UI prototype. প্রোগ্রাম শুধু সবচেয়ে বেশি পয়েন্টের নামটি বলে; দ্বিতীয় আর তৃতীয় নাম পড়া মানুষের কাজ।

বাস্তবে hybrid — বিশুদ্ধ মডেল বিরল

বইয়ের মডেলগুলো আদর্শ রূপ; বাস্তবের বেশিরভাগ দল একটি hybrid চালায়। কয়েকটি পরিচিত মিশ্রণ:

  • শুরুতে পরিকল্পনা, ভেতরে iteration: চুক্তি আর বাজেটের জন্য শুরুতে মোটা দাগের requirement ও architecture (waterfall-এর মতো), তারপর ২–৪ সপ্তাহের iteration-এ তৈরি, শেষে আনুষ্ঠানিক acceptance test. Forrester-এর বিশ্লেষক Dave West ২০১১ সালের দিকে এর নাম দেন “Water-Scrum-Fall” — প্রশংসা আর সতর্কতা দুই অর্থেই।
  • নিয়ন্ত্রিত ক্ষেত্রে iterative V: প্রতিটি increment-এর ভেতরে ছোট একটি V — requirement থেকে test পর্যন্ত traceability বজায় রেখে।
  • Agile দলে spiral-এর চিন্তা: অনিশ্চিত কাজের আগে ছোট “spike” — স্পষ্ট ঝুঁকি-চালিত সিদ্ধান্ত, শুধু নামটা আলাদা।

Flow আর কাজের সীমা (WIP limit) দিয়ে আরেকটি পথ — Kanban আর lean — পর্ব ০৬-এ (Kanban আর lean) দেখবেন। আর release-কে ঘন ঘন আর নিরাপদ করার কৌশল পর্ব ৫৮ (continuous integration) আর পর্ব ৫৯ (continuous delivery আর DevOps)-এ।

৮ · পরীক্ষার প্রিয় তুলনা — সুবিধা আর অসুবিধা

মডেলমূল চিন্তাসুবিধাঅসুবিধা
Waterfallধাপে ধাপে, একবারসহজে বোঝা ও পরিচালনা; স্পষ্ট milestone আর দলিল; চুক্তি ও বাজেটে সুবিধাকাজ করা software আসে শেষে; দেরিতে আসা পরিবর্তন দামি; ঝুঁকি দেরিতে ধরা পড়ে
V-modelপ্রতিটি নকশার পাশে test স্তরTest-এর পরিকল্পনা আগেই; traceability; নিয়ন্ত্রকের পছন্দWaterfall-এর মতোই অনমনীয়; requirement বদলালে দুই বাহুই বদলায়; দলিলের ভার
Prototypingনমুনা দেখিয়ে শেখাঅস্পষ্ট requirement পরিষ্কার; ব্যবহারকারীর অংশগ্রহণThrowaway কোড আসল হয়ে যাওয়ার ঝুঁকি; প্রত্যাশা বেড়ে যায়; পরিকল্পনা কঠিন
Incrementalঅংশে অংশে releaseআগে মূল্য; ছোট অংশে ঝুঁকি কম; অগ্রাধিকার অনুযায়ী সাজানো যায়শুরুতে পুরো architecture-এর ভালো ধারণা লাগে; অংশ জোড়ায় সমস্যা হতে পারে
Iterativeবারবার উন্নত করাপ্রতিক্রিয়া আগেই; পরিবর্তন গ্রহণ সহজ; শেখার সুযোগমোট সময়-খরচ শুরুতে অনুমান কঠিন; নিয়ম না মানলে শেষই হয় না; গ্রাহকের সময় লাগে
Spiralঝুঁকি-চালিত loopবড় ঝুঁকি আগে সামলায়; বড়, নতুন project-এ উপযুক্ত; মডেলের মিশ্রণ সম্ভবঝুঁকি বিশ্লেষণের দক্ষতা লাগে; ছোট project-এ ব্যয়বহুল; কখন থামবেন তা অস্পষ্ট হতে পারে
RUPচার phase, ভেতরে iterationArchitecture আগে যাচাই; স্পষ্ট milestone; বড় দলে কাঠামোভারী — অনেক role ও artifact; ছোট দলে অতিরিক্ত
RADদ্রুত, timeboxঅল্প সময়ে কাজের software; ব্যবহারকারীর নিবিড় অংশগ্রহণদক্ষ ছোট দল আর সহজলভ্য ব্যবহারকারী লাগে; বড় বা উচ্চ-ঝুঁকির system-এ কম মানায়

আরও গভীরে: আন্তর্জাতিক মান ISO/IEC/IEEE 12207 (সর্বশেষ বড় সংস্করণ ২০১৭) software-এর জীবনচক্রের process-গুলো (যেমন requirement, architecture, verification, maintenance) সংজ্ঞায়িত করে, কিন্তু কোনো নির্দিষ্ট ক্রম বা মডেল চাপিয়ে দেয় না — waterfall বা iterative, দুই ভাবেই মানা যায়। Craig Larman ও Victor Basili-র “Iterative and Incremental Development: A Brief History” (IEEE Computer, ২০০৩) দেখায়, iteration-এর চর্চা ১৯৫০–৬০-এর দশক থেকেই ছিল। আর Boehm ও সহকর্মীরা পরে spiral-কে আরও গুছিয়ে “Incremental Commitment Spiral Model” (বই, ২০১৪) নামে প্রকাশ করেন।

পরীক্ষা ও ইন্টারভিউতে — বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এই ধরনের প্রশ্ন আসতে পারে:

  • Waterfall-এর দুটি সুবিধা ও দুটি অসুবিধা লিখুন। — সুবিধা: সহজ পরিচালনা, স্পষ্ট দলিল; অসুবিধা: দেরিতে কাজের software, দেরিতে পরিবর্তন দামি।
  • V-model-এ কোন নকশার ধাপ কোন test-এর সাথে জোড়া? — requirement ↔ acceptance, system design ↔ system, architecture ↔ integration, module ↔ unit.
  • Incremental আর iterative-এর পার্থক্য কী? — incremental অংশ যোগ করে, iterative একই জিনিস বারবার উন্নত করে; বাস্তবে দুটি মেশানো।
  • Spiral model-এর চারটি quadrant কী কী, আর এটি কেন “risk-driven”? — লক্ষ্য, ঝুঁকি বিশ্লেষণ, তৈরি-যাচাই, পরিকল্পনা; প্রতিটি loop-এর কাজ ঠিক করে সবচেয়ে বড় ঝুঁকি।
  • একটি ঝুঁকির সম্ভাবনা ২০%, ক্ষতি ৳৫০ লাখ — risk exposure কত? — ০.২ × ৫০ = ৳১০ লাখ।

৯ · AI-এর যুগে process model

AI-কে “আমার project-এর জন্য কোন SDLC model ভালো?” জিজ্ঞেস করলে প্রায়ই আত্মবিশ্বাসী উত্তর আসে — “Agile ব্যবহার করুন”, সাথে একটি সুবিধা-অসুবিধার তালিকা। কিন্তু AI আপনার চুক্তি, নিয়ন্ত্রক বা দলের কথা জানে না, যদি না আপনি বলেন; আর ইতিহাস ও মান নিয়ে প্রায়ই ভুল বলে।

AI-এর সাধারণ ভুলকীভাবে ধরবেন
“Royce ১৯৭০ সালে waterfall আবিষ্কার ও সুপারিশ করেন”মূল লেখাটি পড়ুন — তিনি সরল রূপটিকে ঝুঁকিপূর্ণ বলেছেন, “waterfall” শব্দই ব্যবহার করেননি
বানানো পরিসংখ্যান: “৭০% waterfall project ব্যর্থ হয়”উৎস চান; CHAOS-এর মতো রিপোর্টের পদ্ধতি নিয়ে গবেষকদের বিতর্ক আছে, তাই এমন সংখ্যা সাবধানে ব্যবহার করুন
মানের ভুল নাম, সংস্করণ বা বছরISO বা IEEE-র অফিসিয়াল catalogue-এ মিলিয়ে নিন
V-model-এর ভুল জোড়া (যেমন requirement ↔ unit test)নিয়ম মনে রাখুন: যত ওপরের নকশা, তত বড় পরিসরের test
সব ক্ষেত্রে “Agile” বা সব ক্ষেত্রে একটি মডেলনিজের project-এর বৈশিষ্ট্য দিয়ে সিদ্ধান্তের টেবিল মিলিয়ে দেখুন
Spiral-কে শুধু “iterative-এর আরেক নাম” বলাজিজ্ঞেস করুন প্রতিটি loop-এর কাজ কী ঠিক করে — উত্তর “ঝুঁকি” না হলে ব্যাখ্যা অসম্পূর্ণ

AI-কে মডেল বাছাইয়ের সহকারী হিসেবে ব্যবহার করতে চাইলে প্রেক্ষাপট দিন, অনুমান লিখিয়ে নিন, আর উৎস চান:

আমি একটি কাল্পনিক জেলা হাসপাতালের জন্য অনলাইন অ্যাপয়েন্টমেন্ট system বানাব। প্রেক্ষাপট: ৫ জনের দল, ২ জন নতুন; সরকারি fixed-price চুক্তি, ৯ মাস; রোগীর তথ্যের গোপনীয়তার নিয়ম কঠোর; ডাক্তাররা মাসে একবার এক ঘণ্টা সময় দিতে পারবেন; SMS gateway আমাদের কাছে নতুন। ১. কোন process model (বা মিশ্রণ) সুপারিশ করো, আর প্রতিটি সিদ্ধান্ত আমার দেওয়া কোন তথ্যের ওপর দাঁড়িয়ে তা দেখাও। ২. তোমার ধরে নেওয়া প্রতিটি অনুমান আলাদা তালিকায় লেখো। ৩. প্রধান তিনটি ঝুঁকির জন্য আনুমানিক সম্ভাবনা আর ক্ষতি দিয়ে risk exposure হিসাব করো, আর বলো কোনটি আগে সামলাবে। ৪. কোনো বই, লেখা বা মানের নাম বললে লেখক ও বছর দাও, আর যেটিতে নিশ্চিত নও সেটি স্পষ্ট করে "অনিশ্চিত" লেখো। কোনো পরিসংখ্যান বানিয়ো না।

AI-এর পরামর্শ হাতে পেলে — যাচাইয়ের চেকলিস্ট

এই কোর্স জুড়ে একই অভ্যাস লাগবে: AI প্রায়ই git reset --hard বা git push --force-এর মতো ক্ষতিকর command সতর্কতা ছাড়াই দেয়, অস্তিত্বহীন flag বানায়, কিছুই যাচাই না করা test লেখে, বা ভুল UML আঁকে। নিজে চালিয়ে, অফিসিয়াল দলিল পড়ে, আলাদা কপিতে যাচাই করে তবে বিশ্বাস করুন।

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

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

প্র ০১Royce যদি সরল waterfall-কে ঝুঁকিপূর্ণই বলে থাকেন, তাহলে সেটি কীভাবে বছরের পর বছর “আদর্শ” পদ্ধতি হয়ে উঠল?

এটি software engineering-এর ইতিহাসের সবচেয়ে বড় ভুল-পড়ার গল্পগুলোর একটি, আর এর পেছনে কয়েকটি কারণ একসাথে কাজ করেছে।

  • ছবির শক্তি: Royce-এর লেখার প্রথম দিকের ধারাবাহিক ধাপের ছবিটি সরল, মনে রাখা সহজ। পরের পাতাগুলোর সংশোধন — pilot version, গ্রাহককে যুক্ত রাখা, test-এর পরিকল্পনা — জটিল। অনেকে শুধু ছবিটি উদ্ধৃত করেছেন, পুরো লেখা পড়েননি।
  • পরিচিত প্রকৌশলের মতো দেখায়: বাড়ি, সেতু, কারখানা — ভৌত প্রকৌশলে নকশা শেষ করে তবেই নির্মাণ। Software-কে “প্রকৌশল” বানানোর আকাঙ্ক্ষায় (পর্ব ০২-এ software crisis আর ইতিহাস দেখুন) এই উপমা আকর্ষণীয় ছিল, যদিও software-এ “নির্মাণ” তুলনায় সস্তা আর বদলানো সহজ।
  • চুক্তি ও ক্রয়ের নিয়ম: বড় সরকারি ক্রেতাদের দলিল-ভিত্তিক মান — যেমন যুক্তরাষ্ট্রের প্রতিরক্ষা বিভাগের DoD-STD-2167 (১৯৮৫ সালের দিকে) — ধাপভিত্তিক review আর দলিলের ওপর জোর দিয়েছিল বলে ব্যাপকভাবে বলা হয়। পরে MIL-STD-498 (১৯৯৪ সালের দিকে) iterative পদ্ধতির পথ খুলে দেয়। ক্রেতা যেভাবে টাকা দেন, বিক্রেতা সেভাবেই কাজ সাজান।
  • পরিচালনার সুবিধা: “নকশা ১০০% শেষ” — এমন milestone ব্যবস্থাপকের কাছে মাপা সহজ, যদিও কাজ করা software ছাড়া অগ্রগতির মাপ প্রায়ই বিভ্রান্তিকর।

মজার মিল হলো, Fred Brooks-ও The Mythical Man-Month (১৯৭৫)-এ লেখেন “plan to throw one away; you will, anyhow” — একটি ফেলে দেওয়ার পরিকল্পনা রাখুন, কারণ এমনিতেই ফেলবেন। Royce-এর “do it twice” আর Brooks-এর এই কথা একই শিক্ষা দেয়: প্রথম চেষ্টা আসলে শেখার চেষ্টা। পরে Brooks নিজেই এর একটি নমনীয় ব্যাখ্যা দেন — পুরো system ফেলার চেয়ে ধাপে ধাপে বাড়ানো ভালো।

মূল উপলব্ধি: একটি পদ্ধতির জনপ্রিয়তা শুধু তার গুণে আসে না — চুক্তি, ব্যবস্থাপনা আর সহজ ছবিও ঠিক করে কী টিকে থাকবে। তাই কোনো পদ্ধতির নাম শুনলে মূল উৎসটি পড়ুন; প্রায়ই সেখানে আরও সূক্ষ্ম কথা থাকে।

প্র ০২Iterative development কি Agile-এর আবিষ্কার? নাকি এর ইতিহাস আরও পুরোনো?

অনেকে ধরে নেন ২০০১ সালের Agile Manifesto-র আগে সবাই waterfall চালাত, আর iteration নতুন ধারণা। ইতিহাস বলে অন্য কথা।

Craig Larman ও Victor Basili ২০০৩ সালে IEEE Computer-এ “Iterative and Incremental Development: A Brief History” লেখায় দেখান, iteration-এর চর্চা অনেক পুরোনো। তাঁদের বর্ণনামতে, ১৯৬০-এর দশকে NASA-র Project Mercury-র software-এ খুব ছোট সময়ের iteration ব্যবহার হয়েছিল, আর ১৯৭০-এর দশকে IBM-এর Federal Systems Division বড় প্রতিরক্ষা ও মহাকাশ project-এ incremental পদ্ধতি চালায় — Harlan Mills-এর মতো প্রকৌশলীরা তখনই ধাপে ধাপে বাড়ানোর পক্ষে লিখেছিলেন। Boehm-এর spiral (১৯৮৬/১৯৮৮) নিজেও একটি iterative মডেল, আর ১৯৯০-এর দশকে RUP, DSDM, Scrum ও Extreme Programming — সবই iteration-এর ওপর দাঁড়ানো। (খুঁটিনাটি তারিখ ও নাম মূল লেখায় মিলিয়ে নেওয়া ভালো; এখানে মূল প্রবণতাটিই গুরুত্বপূর্ণ।)

তাহলে Agile নতুন কী আনল? (১) মূল্যবোধের ঘোষণা — দলিলের চেয়ে কাজ করা software, চুক্তির চেয়ে গ্রাহকের সাথে সহযোগিতা; (২) খুব ছোট iteration — মাসের বদলে সপ্তাহ; (৩) দলের স্ব-ব্যবস্থাপনা আর প্রতিদিনের সমন্বয়; (৪) প্রযুক্তিগত চর্চা — স্বয়ংক্রিয় test, continuous integration, refactoring — যা ঘন ঘন পরিবর্তনকে নিরাপদ করে। শেষেরটি প্রায়ই ভুলে যাওয়া হয়: স্বয়ংক্রিয় test ছাড়া দুই সপ্তাহ পরপর release মানে দুই সপ্তাহ পরপর ঝুঁকি।

এই ইতিহাস জানা কাজের, কারণ এতে “Agile বনাম waterfall” লড়াইয়ের ভুল ছবিটা ভাঙে। আসল প্রশ্ন সবসময় ছিল: প্রতিক্রিয়ার চক্র কত ছোট, আর প্রতিটি চক্রের শেষে কী যাচাই হয়। Agile-এর নিয়মকানুন পর্ব ০৫-এ (Agile আর Scrum) দেখবেন।

তাই কেউ “আমরা ১৯৯০-এর দশকেও iteration চালাতাম” বললে অবাক হওয়ার কিছু নেই।

মূল উপলব্ধি: Iteration কোনো আন্দোলনের সম্পত্তি নয়; এটি অনিশ্চয়তার মুখে শেখার একটি পুরোনো প্রকৌশল-কৌশল। নতুন নামের পেছনে প্রায়ই পুরোনো ধারণা থাকে — সেটি চিনতে পারলে fashion-এর চেয়ে নীতি বুঝবেন।

প্র ০৩Fixed-price সরকারি চুক্তিতে requirement বদলাবেই জানলে কী করবেন? Waterfall চুক্তির ভেতরে iteration-এর সুবিধা আনা যায় কি?

এটি বাস্তবের খুব সাধারণ টানাপোড়েন। সরকারি বা বড় প্রতিষ্ঠানের ক্রয় নিয়মে সাধারণত শুরুতেই কাজের পরিধি, দাম, সময় আর গ্রহণের শর্ত লিখে দিতে হয় — যাতে স্বচ্ছতা থাকে আর বিক্রেতাদের মধ্যে ন্যায্য তুলনা হয়। কিন্তু software-এর requirement প্রায়ই কাজ চলতে চলতে পরিষ্কার হয়। তাহলে কী করা যায়?

  • চুক্তি ধাপে ভাগ করা: প্রথম ছোট চুক্তি শুধু requirement বিশ্লেষণ আর prototype-এর; তার ফল দেখে দ্বিতীয় চুক্তি মূল তৈরির। এতে প্রথম ধাপের শেখা পরের ধাপের পরিধিতে ঢোকে — spiral-এর anchor point-এর মতো।
  • পরিধির ভেতরে অগ্রাধিকার: চুক্তিতে “অবশ্যই লাগবে” আর “থাকলে ভালো” আলাদা করা। সময় বা বাজেট টানাটানি হলে দ্বিতীয় তালিকা কাটা যায় — timebox-এর চিন্তা।
  • আনুষ্ঠানিক পরিবর্তন-ব্যবস্থা: প্রতিটি change request-এর খরচ ও প্রভাব লিখিতভাবে হিসাব করে দুই পক্ষের অনুমোদন। এটি waterfall-এর দুর্বলতা নয়, শৃঙ্খলা — সমস্যা হয় যখন ব্যবস্থাটি না থাকে বা খুব ধীর হয়।
  • ভেতরে iteration, বাইরে milestone: চুক্তির milestone (যেমন “রিপোর্ট module গ্রহণ”) বাইরে থেকে waterfall-এর মতো দেখালেও দলের ভেতরে ২–৪ সপ্তাহের iteration চালিয়ে প্রতিটির শেষে গ্রাহককে demo দেখানো যায়। গ্রাহক যত আগে দেখেন, তত আগে ভুল বোঝা ধরা পড়ে — উপরের simulation-এ যা দেখেছেন।

তবে সীমাও আছে। ক্রয়ের নিয়ম দেশ ও প্রতিষ্ঠানভেদে আলাদা, আর চুক্তির ধরন বদলানো আইনি সিদ্ধান্ত — প্রকৌশলীর একার নয়। প্রকৌশলীর কাজ হলো ঝুঁকিগুলো স্পষ্ট করা: “এই অংশের requirement অস্পষ্ট, এখানে prototype না করলে পরে বড় পরিবর্তন আসার সম্ভাবনা বেশি, আনুমানিক ক্ষতি এত।” Risk exposure-এর ভাষা এখানে খুব কাজের, কারণ ক্রেতা আর ব্যবস্থাপক টাকার ভাষা বোঝেন।

মূল উপলব্ধি: Process model শুধু প্রকৌশলের সিদ্ধান্ত নয়; এটি চুক্তি, আইন আর বিশ্বাসের সাথে জড়ানো। দক্ষ প্রকৌশলী সীমা মেনে নিয়েই তার ভেতরে প্রতিক্রিয়ার চক্র ছোট করার পথ খোঁজেন।

প্র ০৪Spiral model পাঠ্যবইয়ে এত বিখ্যাত, অথচ বাস্তবে খুব কম দল বলে “আমরা spiral চালাই” — কেন?

কয়েকটি কারণ আছে, আর উত্তরটি spiral-এর ব্যর্থতা নয়, বরং তার ধারণার সাফল্যের গল্প।

  • এটি একটি meta-model: spiral নিজে বলে না প্রতিটি loop-এ ঠিক কী করতে হবে — ঝুঁকি দেখে ঠিক করতে বলে। ফলে “spiral চালানো” মানে প্রতিটি project-এ নিজের পদ্ধতি নিজে নকশা করা। এর জন্য অভিজ্ঞ মানুষ লাগে, যিনি ঝুঁকি চিনতে আর মাপতে পারেন। নতুন দলের কাছে এটি “কী করব?” প্রশ্নের উত্তর দেয় না।
  • ঝুঁকি মাপা কঠিন: সম্ভাবনা ০.৪ নাকি ০.২? এই সংখ্যাগুলো প্রায়ই অনুমান, আর মানুষ নিজের পছন্দের বিকল্পের ঝুঁকি কম দেখে। ভালো ঝুঁকি বিশ্লেষণে আলাদা দৃষ্টিভঙ্গি, তথ্য আর সততা লাগে।
  • ছোট project-এ ভারী: প্রতিটি loop-এ আনুষ্ঠানিক review আর ঝুঁকি বিশ্লেষণ ছোট দলের কাছে অতিরিক্ত।

কিন্তু spiral-এর মূল চিন্তা সবখানে ঢুকে গেছে। Unified Process-এর phase-সীমার milestone প্রায় হুবহু Boehm-এর তিনটি anchor point (LCO, LCA, IOC)-এর মতোই। RUP-এর elaboration phase-এর পুরো উদ্দেশ্যই “বড় ঝুঁকি আগে দূর করা।” Agile দলের “spike” — অনিশ্চিত কাজের আগে সময়-বাঁধা একটি পরীক্ষামূলক কাজ — ঠিক spiral-এর quadrant ২. Startup জগতের “আগে সবচেয়ে ঝুঁকিপূর্ণ অনুমানটি যাচাই করুন” পরামর্শও একই। Boehm নিজে পরে সহকর্মীদের সাথে Incremental Commitment Spiral Model (বই, ২০১৪) নামে ধারণাটি আরও গুছিয়ে দেন, যেখানে প্রতিটি ধাপে stakeholder-দের বাড়তে থাকা অঙ্গীকারের ওপর জোর।

এটি অনেকটা ক্রিকেটের নেট প্র্যাকটিসের মতো: কোনো দল বলে না “আমরা নেট-প্র্যাকটিস পদ্ধতিতে খেলি”, কিন্তু সব ভালো দলই কঠিন বোলারের বিরুদ্ধে আগে নেটে অনুশীলন করে নেয়।

মূল উপলব্ধি: একটি ধারণা যখন সত্যিই কাজের হয়, তখন সেটি আলাদা নাম হারিয়ে অন্য পদ্ধতির অংশ হয়ে যায়। নাম মুখস্থ না করে প্রশ্নটি মনে রাখুন: “এখন সবচেয়ে বড় অনিশ্চয়তা কোনটি, আর সবচেয়ে কম খরচে সেটি কীভাবে যাচাই করব?”

প্র ০৫চিকিৎসা যন্ত্র বা বিমানের মতো নিরাপত্তা-সংবেদনশীল software কি iterative বা Agile পদ্ধতিতে বানানো যায়?

সংক্ষিপ্ত উত্তর: যায়, তবে নিয়ন্ত্রক যা চায় তা মেনে — আর নিয়ন্ত্রক সাধারণত একটি নির্দিষ্ট মডেল চায় না, চায় প্রমাণ।

এই ক্ষেত্রের কয়েকটি পরিচিত মান: চিকিৎসা যন্ত্রের software-এর জন্য IEC 62304 (প্রথম সংস্করণ ২০০৬), বিমানের software-এর জন্য DO-178C (২০১১), আর গাড়ির জন্য ISO 26262 (প্রথম সংস্করণ ২০১১)। এগুলো বলে কোন কাজ করতে হবে আর কী দলিল রাখতে হবে — requirement, নকশা, প্রতিটি requirement-এর verification, ঝুঁকি বিশ্লেষণ, traceability — কিন্তু ধাপগুলো এক-পাসে করতে হবে এমন বাধ্যবাধকতা সাধারণত নেই। তাই V-model এখানে জনপ্রিয়: এর গঠনই traceability দেখায়। তবে অনেক প্রতিষ্ঠান প্রতিটি increment-এর ভেতরে ছোট V চালায়, আর চিকিৎসা যন্ত্রের ক্ষেত্রে Agile ব্যবহারের নির্দেশিকাও প্রকাশিত হয়েছে (যেমন AAMI-র TIR45, ২০১২ সালের দিকে)।

কেন এত কড়াকড়ি? ইতিহাস সাক্ষী। ১৯৮৫–১৯৮৭ সালের মধ্যে Therac-25 নামের একটি রেডিয়েশন-চিকিৎসা যন্ত্রে বেশ কয়েকজন রোগী মাত্রাতিরিক্ত বিকিরণ পান, কয়েকজন মারা যান। Nancy Leveson ও Clark Turner-এর ১৯৯৩ সালের বিখ্যাত বিশ্লেষণে দেখা যায়, কারণগুলোর মধ্যে ছিল software-এর race condition, আগের মডেলের hardware সুরক্ষা সরিয়ে software-এর ওপর ভরসা, অপর্যাপ্ত test আর দুর্বল ঘটনা-তদন্ত। শিক্ষাটি কোনো একটি process model নিয়ে নয় — শিক্ষাটি হলো স্বাধীন যাচাই, ঝুঁকি বিশ্লেষণ আর প্রমাণ রাখার গুরুত্ব নিয়ে।

Iterative পদ্ধতি এখানে আসলে সাহায্যও করতে পারে: ঘন ঘন যাচাই মানে সমস্যা আগে ধরা পড়ে। ঝুঁকি হয় তখন, যখন “দ্রুত” মানে দাঁড়ায় দলিল আর স্বাধীন review বাদ দেওয়া। Software quality কীভাবে মাপা হয়, তা পর্ব ০৩-এ (Software quality) দেখেছেন বা দেখবেন; পেশাগত দায়িত্বের দিকটি আসবে পর্ব ৬৪-তে।

মূল উপলব্ধি: নিয়ন্ত্রিত ক্ষেত্রে প্রশ্ন “waterfall না Agile” নয়; প্রশ্ন হলো “প্রতিটি requirement যাচাই হয়েছে তার প্রমাণ কী, আর প্রতিটি পরিবর্তনের পর সেই প্রমাণ কি এখনো সত্য?” যে পদ্ধতি এই প্রশ্নের উত্তর নির্ভরযোগ্যভাবে দেয়, সেটিই ঠিক পদ্ধতি।

অনুশীলন

হিসাব, বাছাই, আউটপুট অনুমান আর সমালোচনা — চারটিই পরীক্ষা ও ইন্টারভিউর ধরনের।

  1. Risk exposure হিসাব: একটি কাল্পনিক টিকিট বুকিং app-এর তিনটি ঝুঁকি — (A) ঈদের ভিড়ে server বসে যাওয়া: সম্ভাবনা ০.৩, ক্ষতি ৳৫০ লাখ; ঝুঁকি কমানোর ব্যবস্থা (load test আর autoscaling) খরচ ৳২ লাখ, এতে সম্ভাবনা নামবে ০.০৫-এ। (B) payment-এর নতুন API-তে ভুল: ০.৬, ৳১০ লাখ; ব্যবস্থা (sandbox-এ prototype) ৳১ লাখ, সম্ভাবনা নামবে ০.২-এ। (C) তথ্য ফাঁস: ০.১, ৳৮০ লাখ; ব্যবস্থা (নিরাপত্তা audit) ৳৫ লাখ, সম্ভাবনা নামবে ০.০৫-এ। প্রতিটির RE, মোট RE আর risk reduction leverage (RRL = (আগের RE − পরের RE) ÷ খরচ) বের করুন। কোনটি আগে করবেন?

    RE: A = ০.৩ × ৫০ = ৳১৫ লাখ; B = ০.৬ × ১০ = ৳৬ লাখ; C = ০.১ × ৮০ = ৳৮ লাখ। মোট = ৳২৯ লাখ। RE অনুযায়ী ক্রম: A (১৫) → C (৮) → B (৬)।

    ব্যবস্থার পরে RE: A = ০.০৫ × ৫০ = ২.৫; B = ০.২ × ১০ = ২; C = ০.০৫ × ৮০ = ৪।

    RRL: A = (১৫ − ২.৫) ÷ ২ = ৬.২৫; B = (৬ − ২) ÷ ১ = ৪; C = (৮ − ৪) ÷ ৫ = ০.৮।

    সিদ্ধান্ত: A আগে — RE আর RRL দুই মাপেই প্রথম। RE-তে C দ্বিতীয় হলেও RRL-এ B দ্বিতীয়: প্রতি টাকায় B বেশি ঝুঁকি কমায়। বাজেট সীমিত হলে A আর B আগে (৳৩ লাখে RE কমে ১২.৫ + ৪ = ৳১৬.৫ লাখ)। তবে তথ্য ফাঁসের ক্ষতি শুধু টাকায় মাপা যায় না — গোপনীয়তা আর আইনি দায় আছে; তাই শুধু RRL দেখে C বাদ দেওয়া ঠিক নয়।

  2. মডেল বেছে যুক্তি দিন: একটি কাল্পনিক জেলা হাসপাতাল অনলাইন অ্যাপয়েন্টমেন্ট system চায়। তথ্য: সরকারি fixed-price চুক্তি, ৯ মাস; ৫ জনের দল, ২ জন নতুন; রোগীর তথ্যের গোপনীয়তার নিয়ম কঠোর; ডাক্তাররা মাসে একবার এক ঘণ্টা সময় দিতে পারবেন; রোগীরা বেশিরভাগ মোবাইলে, অনেকের ইন্টারনেট দুর্বল; SMS gateway দলের কাছে নতুন। কোন মডেল (বা মিশ্রণ) বেছে নেবেন? অন্তত তিনটি তথ্যের সাথে সিদ্ধান্ত মিলিয়ে দেখান।

    একটি যুক্তিসঙ্গত উত্তর (একমাত্র নয়): বাইরে পর্যায়ভিত্তিক incremental, ভেতরে মাসিক iteration, শুরুতে একটি ঝুঁকি-চালিত loop রাখা।

    • Fixed-price চুক্তি → শুরুতে requirement আর পরিধি লিখতে হবে, “অবশ্যই লাগবে” আর “থাকলে ভালো” আলাদা করে। চুক্তির milestone হবে increment: (১) ডাক্তারের সময়সূচি আর বুকিং, (২) SMS নিশ্চিতকরণ আর অনুস্মারক, (৩) রিপোর্ট আর admin.
    • নতুন SMS gateway → এটি সবচেয়ে বড় প্রযুক্তিগত ঝুঁকি; প্রথম মাসে spiral-এর মতো একটি spike বা throwaway prototype চালিয়ে বার্তা পৌঁছানোর হার আর খরচ মেপে নিন।
    • ডাক্তারের সময় মাসে এক ঘণ্টা → সাপ্তাহিক demo সম্ভব নয়, তাই iteration মাসিক; প্রতিটির শেষে ওই এক ঘণ্টায় demo. বাকি সময় হাসপাতালের অভ্যর্থনা কর্মীদের কাছ থেকে প্রতিক্রিয়া নিন।
    • দুর্বল ইন্টারনেট, মোবাইল → শুরুতেই একটি clickable UI prototype কয়েকজন রোগীকে দেখান।
    • গোপনীয়তা → নিরাপত্তার requirement থেকে test পর্যন্ত traceability — V-model-এর চিন্তা, পুরো V-model নয়। নতুন সদস্য থাকায় ভারী RUP নয়।

    শুধু “Agile” বললে fixed-price আর ডাক্তারের সীমিত সময়ের সাথে সংঘাত; শুধু “waterfall” বললে SMS আর UI-এর ভুল শেষে ধরা পড়বে।

  3. আউটপুট অনুমান করুন: অংশ ৭-এর model-selection প্রোগ্রামে (একই RULES আর recommend) একটি নতুন project যোগ করা হলো — কাল্পনিক একটি ব্যাংকের KYC পোর্টাল, নাম "E. bank KYC portal": reqStable: true, fixedContract: true, regulated: true, safetyCritical: false, customerNearby: false, earlyRelease: true, risk: "medium", size: "large", uiUnclear: false. চালালে ঠিক কোন দুটি লাইন ছাপা হবে? কেন সেরা হিসেবে ঠিক ওই নামটিই আসে?
    E. bank KYC portal: Waterfall=3 Incremental=3 V-model=2 Spiral=1
      -> Waterfall (3): requirements are stable and signed off; fixed-scope contract needs an up-front spec

    হিসাব: Waterfall = ২ (স্থির) + ১ (চুক্তি) = ৩; V-model = ২ (নিয়ন্ত্রিত), নিরাপত্তা-সংবেদনশীল নয় তাই আর কিছু নয়; Incremental = ২ (আগে release) + ১ (স্থির ও আগে release) = ৩; Spiral = ১ (বড় আর ঝুঁকি low নয়); Iterative আর Prototyping-এর কোনো নিয়ম মেলেনি, তাই তাদের নামই ছাপা হয় না।

    সমতা কে ভাঙল? Waterfall আর Incremental দুটিই ৩. score object-এ নামগুলো যে ক্রমে প্রথম ঢুকেছে (Waterfall প্রথম নিয়মে, Incremental সপ্তম নিয়মে), Object.entries সেই ক্রম রাখে, আর JavaScript-এর sort stable (ECMAScript 2019 থেকে নিশ্চিত), তাই সমান পয়েন্টে আগের নামটি আগে থাকে। অর্থাৎ “Waterfall” জিতেছে নিয়মের তালিকায় তার অবস্থানের জোরে, যুক্তির জোরে নয়। শিক্ষা: স্বয়ংক্রিয় সুপারিশ সমতা লুকিয়ে ফেলে। বাস্তবে এখানে সঠিক পড়া হলো “পর্যায়ভিত্তিক incremental, প্রতিটি increment-এ traceability” — একটি hybrid.

  4. সমালোচনা করুন: একটি দল বলছে, “আমরা Agile চালাই।” তাদের পরিকল্পনা: প্রথম ৬ মাস শুধু requirement দলিল আর পূর্ণ নকশা; তারপর ২ সপ্তাহের sprint-এ ৮ মাস কোড; তারপর ৩ মাস আলাদা test দলের হাতে পুরো system-এর test; শেষে একবারে release. প্রতিটি sprint-এর শেষে শুধু দলের ভেতরে demo হয়। এটি কোন মডেল? প্রধান ঝুঁকি কোথায়, আর কোন তিনটি পরিবর্তন সবচেয়ে কাজের হবে?

    মডেল: নামে Agile, আসলে waterfall-এর ভেতরে iteration — Dave West যাকে “Water-Scrum-Fall” বলেছিলেন। ঝুঁকির দিক থেকে এটি waterfall-এর কাছাকাছি: গ্রাহক কাজ করা software দেখবেন প্রায় ১৭ মাস পরে।

    • ঝুঁকি ১ — দেরিতে প্রতিক্রিয়া: sprint demo শুধু দলের ভেতরে, তাই ভুল বোঝা requirement ধরা পড়বে শেষে — simulation-এর waterfall-এর মতো।
    • ঝুঁকি ২ — বড় ব্যাচে test: ৮ মাসের কোড ৩ মাসে একসাথে test হলে integration-এর সমস্যা স্তূপ হয়ে আসবে, আর প্রতিটি সংশোধনের পর পুরো test আবার।

    তিনটি পরিবর্তন: (১) requirement আর নকশা প্রথমে ৪–৬ সপ্তাহে মোটা দাগে, খুঁটিনাটি প্রতিটি sprint-এর আগে; (২) প্রতিটি sprint-এর demo-তে আসল ব্যবহারকারী বা গ্রাহকের প্রতিনিধি; (৩) test প্রতিটি sprint-এর ভেতরে — স্বয়ংক্রিয় unit ও integration test আর continuous integration (পর্ব ৫৮), আর সম্ভব হলে প্রতি কয়েক sprint-এ একটি increment আসল ব্যবহারকারীর কাছে। শুরুর পরিকল্পনা বা শেষের acceptance দোষের নয়; দোষ হলো প্রতিক্রিয়ার চক্র ১৭ মাস লম্বা রাখা।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমSpiral model-এর একটি loop-এর কাজগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. 🎯 এই loop-এর লক্ষ্য, বিকল্প আর সীমা ঠিক করা
  2. ⚠️ প্রতিটি বিকল্পের ঝুঁকি চিহ্নিত করে risk exposure অনুযায়ী সাজানো
  3. 🧪 Prototype বা benchmark দিয়ে সবচেয়ে বড় ঝুঁকি যাচাই
  4. 🛠️ পরের স্তরের product তৈরি ও যাচাই
  5. 🗓️ Stakeholder review আর পরের loop-এর পরিকল্পনা ও অঙ্গীকার

V-model-এ “system design” ধাপটি কোন test স্তরের সাথে জোড়া?

  • Unit test
  • Integration test
  • System test
  • Acceptance test

Winston Royce-এর ১৯৭০ সালের “Managing the Development of Large Software Systems” লেখা সম্পর্কে কোনটি সঠিক?

  • তিনি কঠোর এক-পাসের waterfall-কে সব project-এর আদর্শ বলেন
  • তিনি সরল ধারাবাহিক রূপটিকে ঝুঁকিপূর্ণ বলে পুনরাবৃত্তি ও দুবার বানানোর পরামর্শ দেন
  • তিনি প্রথম “waterfall” শব্দটি ব্যবহার করে মডেলের নাম দেন
  • তিনি ঝুঁকি-চালিত spiral model প্রস্তাব করেন

একটি ঝুঁকি ঘটার সম্ভাবনা ২৫%, আর ঘটলে ক্ষতি ৳১২ লাখ। এর risk exposure কত?

  • ৳৩ লাখ
  • ৳৪৮ লাখ
  • ৳১২ লাখ
  • ৳১২.২৫ লাখ

একটি দল প্রথম release-এ শুধু login আর অর্ডার দেওয়া সম্পূর্ণ করে চালু করল, পরের release-এ payment, তার পরেরটিতে ডেলিভারি tracking — প্রতিটি অংশ যোগের সময়েই সম্পূর্ণ ও ব্যবহারযোগ্য। এটি মূলত কোন ধরনের development?

  • শুধু iterative
  • Incremental
  • Waterfall
  • Throwaway prototyping

কোন পরিস্থিতিতে throwaway prototype সবচেয়ে উপযুক্ত?

  • Requirement পুরোপুরি স্থির আর লিখিত
  • কোডটি সরাসরি আসল system হিসেবে চালু করতে হবে
  • উচ্চ নিরাপত্তার কোড দ্রুত লিখে ফেলতে হবে
  • ব্যবহারকারী UI দেখে না চালানো পর্যন্ত বলতে পারছেন না কী চান

নিচের কোন project-এ সরল waterfall সবচেয়ে যুক্তিসঙ্গত?

  • একটি নতুন startup-এর app, যার বাজার এখনো পরীক্ষা হয়নি
  • নতুন প্রযুক্তিতে একটি বড়, অনিশ্চিত গবেষণামূলক system
  • একটি পুরোনো payroll system একই নিয়মে নতুন platform-এ নেওয়া, fixed-price চুক্তিতে
  • এমন একটি UI, যার নকশা নিয়ে ব্যবহারকারী নিজেই নিশ্চিত নন

Rational Unified Process (RUP)-এর চারটি phase-এর সঠিক ক্রম কোনটি?

  • Inception → Elaboration → Construction → Transition
  • Elaboration → Inception → Construction → Transition
  • Requirements → Design → Implementation → Testing
  • Inception → Construction → Elaboration → Transition

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. সব process model-এ একই কাজ — communication, planning, modeling, construction, deployment; পার্থক্য ক্রম, পুনরাবৃত্তি আর প্রতিক্রিয়ার সময়ে.
  2. Waterfall স্থির requirement আর নির্দিষ্ট চুক্তিতে ভালো; দেরিতে আসা পরিবর্তন দামি। Royce নিজেই সরল রূপটিকে ঝুঁকিপূর্ণ বলে “do it twice”-এর পরামর্শ দেন।
  3. V-model: requirement ↔ acceptance, system design ↔ system, architecture ↔ integration, module ↔ unit — test-এর পরিকল্পনা নকশার সময়েই।
  4. Incremental অংশ যোগ করে, iterative বারবার উন্নত করে; spiral প্রতিটি loop-এ সবচেয়ে বড় RE = P × L আগে সামলায়; RUP-এর চার phase — inception, elaboration, construction, transition.
  5. মডেল বাছাই করুন requirement-এর স্থিরতা, ঝুঁকি, দল, চুক্তি আর নিয়ন্ত্রক দেখে — বাস্তবে প্রায়ই hybrid; AI-এর সুপারিশ আর ইতিহাস-দাবি সবসময় যাচাই করুন।

পরের পর্বে: Iteration-এর সবচেয়ে জনপ্রিয় রূপ — Agile Manifesto-র চারটি মূল্যবোধ, আর Scrum-এর role, event, artifact ও sprint কীভাবে একসাথে কাজ করে।

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

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান