এই পর্বে যা শিখবেন
- Risk management-এর ধাপ, ঝুঁকির তিন ধরন আর Boehm-এর পরিচিত ঝুঁকির তালিকা
- Heat map, risk exposure, risk reduction leverage আর decision tree দিয়ে সিদ্ধান্ত নেওয়া
- Risk register-এর একটি সারি পূরণ, trigger, contingency আর RMMM plan
- QA আর QC-র পার্থক্য; CMMI, ISO 9001, Six Sigma, PDCA আর PSP/TSP-এর মূল কথা
- GQM দিয়ে metric programme নকশা, metric-এর ফাঁদ আর control chart পড়া
১ · Risk কী — আর risk management-এর চার ধাপ
বর্ষার আগে একজন কৃষক কী করেন? বীজতলা একটু উঁচু জায়গায় করেন, নালা পরিষ্কার রাখেন, কেউ কেউ শস্যবিমা করেন, আর ঠিক করে রাখেন — পানি উঠলে চারা কোথায় সরাবেন। বন্যা হবেই, এমন নয়। কিন্তু হলে কী ক্ষতি, আর আগে থেকে কী করলে ক্ষতি কমে — এই হিসাবটাই risk management.
Software project-এও একই কথা। একটি risk বা ঝুঁকি হলো এমন একটি অনিশ্চিত ঘটনা, যা ঘটলে সময়, খরচ বা মানের ক্ষতি হবে। “Server বসে গেছে” ঝুঁকি নয় — সেটি ঘটে যাওয়া সমস্যা (issue). “ঈদের ভিড়ে server বসে যেতে পারে” ঝুঁকি, কারণ এখনো ঘটেনি, আর এখনো কিছু করার সুযোগ আছে। Risk management মানে সেই সুযোগটি কাজে লাগানোর সুশৃঙ্খল পদ্ধতি।
এই পর্বে একটি কাল্পনিক উদাহরণ বারবার আসবে: একটি কৃষিপণ্যের অনলাইন বাজার অ্যাপ (কাল্পনিক), যেখানে কৃষকেরা সবজি-ফল তোলেন আর শহরের ক্রেতারা অর্ডার দেন। দল ছয়জনের, বাজেট আর সময় সীমিত, আর প্রথম বড় পরীক্ষা ঈদের আগের সপ্তাহ।
চার ধাপের চক্র
বিভিন্ন বই ধাপগুলোকে ভিন্ন নামে ভাগ করে। Ian Sommerville-এর পরিচিত পাঠ্যবই Software Engineering চারটি ধাপ বলে, যা এখানে আমরা মানব:
১ · Identify — চিহ্নিত করা
কী কী খারাপ হতে পারে, তার তালিকা। Checklist, দলের brainstorming, আগের project-এর শিক্ষা, অনুমানগুলো (assumption) প্রশ্ন করা।
risk তালিকা২ · Analyse — বিশ্লেষণ
প্রতিটি ঝুঁকির সম্ভাবনা কত, ঘটলে ক্ষতি কত। গুণগত (উচ্চ-মাঝারি-নিম্ন) বা পরিমাণগত (টাকা, সপ্তাহ)।
অগ্রাধিকারসহ তালিকা৩ · Plan — জবাবের পরিকল্পনা
প্রতিটি বড় ঝুঁকির জন্য কৌশল (এড়ানো, হস্তান্তর, কমানো, মেনে নেওয়া), দায়িত্বপ্রাপ্ত ব্যক্তি, trigger আর contingency.
risk register, RMMM৪ · Monitor — নজরদারি
নিয়মিত (যেমন প্রতি সপ্তাহে বা প্রতি Sprint-এ) তালিকা হালনাগাদ: কোন ঝুঁকি বাড়ল, কোনটি বন্ধ হলো, নতুন কী এলো।
চক্র আবার শুরুBarry Boehm তাঁর ১৯৯১ সালের প্রবন্ধ “Software Risk Management: Principles and Practices” (IEEE Software)-এ একই কাজকে দুই ভাগে দেখান: risk assessment (identification, analysis, prioritization) আর risk control (management planning, resolution, monitoring). Boehm-এর spiral model (পর্ব ০৪) প্রতিটি loop-এ এই চক্রটিই চালায় — সেখানে আপনি RE = P × L দিয়ে কোন ঝুঁকি আগে সামলাবেন তা দেখেছেন। এই পর্বে সেই ভিত্তির ওপর পুরো ব্যবস্থাটি দাঁড় করাব।
Boehm-এর “top 10” software ঝুঁকি
একই প্রবন্ধে Boehm অভিজ্ঞ project manager-দের জরিপের ভিত্তিতে software project-এর দশটি প্রধান ঝুঁকির একটি তালিকা দেন। তালিকাটি ১৯৯১ সালের, তাই প্রযুক্তি বদলেছে; তবু বহু পাঠ্যবই এখনো এটি উদ্ধৃত করে। নিচে আমাদের জানামতে মূল তালিকার ভাব সংক্ষেপে (শব্দ আর ক্রম মূল প্রবন্ধে মিলিয়ে নিন):
| # | ঝুঁকি (Boehm, ১৯৯১) | আজকের ভাষায় একটি উদাহরণ |
|---|---|---|
| ১ | Personnel shortfalls — দক্ষ লোকের ঘাটতি | একমাত্র payment-জানা ডেভেলপার চাকরি ছেড়ে দিলেন |
| ২ | Unrealistic schedules and budgets | “ঈদের আগে সব feature চাই” — অনুমান ছাড়াই তারিখ ঠিক |
| ৩ | Developing the wrong functions and properties | কৃষকেরা আসলে SMS-এ অর্ডার নিতে চান, অ্যাপ নয় |
| ৪ | Developing the wrong user interface | বয়স্ক কৃষকের জন্য ছোট লেখা আর জটিল মেনু |
| ৫ | Gold-plating — অপ্রয়োজনীয় চাকচিক্য | কেউ চায়নি, তবু animation আর theme বানাতে দুই সপ্তাহ |
| ৬ | Continuing stream of requirements changes | প্রতি সপ্তাহে নতুন delivery নিয়ম (scope creep, পর্ব ২৪) |
| ৭ | Shortfalls in externally furnished components | বাইরের map বা SMS API ধীর বা বদলে গেল |
| ৮ | Shortfalls in externally performed tasks | বাইরের দলকে দেওয়া design-এর কাজ দেরিতে এলো |
| ৯ | Real-time performance shortfalls | ভিড়ের সময় checkout ১০ সেকেন্ড নেয় |
| ১০ | Straining computer-science capabilities | দলের অচেনা প্রযুক্তি দিয়ে মূল অংশ বানানো |
তালিকাটির আসল কাজ মনে করিয়ে দেওয়া — “আমাদের ক্ষেত্রে এটি কতটা খাটে?” তবে আজকের project-এ নিরাপত্তা, তথ্য-গোপনীয়তা আর বাইরের dependency-র মতো তালিকার বাইরের ঝুঁকিও বড় জায়গা নেয়।
২ · ঝুঁকির ধরন আর ঝুঁকি খুঁজে বের করা
Sommerville ঝুঁকিকে তিন ভাগে দেখান। ভাগটি জরুরি, কারণ ধরন অনুযায়ী দায়িত্ব আর প্রতিকার আলাদা হয়:
| ধরন | কী ক্ষতিগ্রস্ত হয় | কৃষি-বাজার অ্যাপে (কাল্পনিক) উদাহরণ |
|---|---|---|
| Project risk | সময়সূচি আর সম্পদ | অভিজ্ঞ ডেভেলপার চলে যাওয়া; অনুমান খুব আশাবাদী (পর্ব ৬০) |
| Product risk (technical risk) | যে software বানানো হচ্ছে তার মান বা কার্যকারিতা | ভিড়ে checkout বসে যাওয়া; payment API বদলে যাওয়া |
| Business risk | যে প্রতিষ্ঠান software বানাচ্ছে বা কিনছে | বড় প্রতিযোগী একই সেবা বিনা কমিশনে চালু করল; নতুন সরকারি নিয়মে কৃষকের তথ্য রাখার শর্ত |
একই ঘটনা একাধিক ধরনে পড়তে পারে। ভিড়ে checkout বসে গেলে সেটি product risk (system-এর ক্ষমতা), আবার business risk-ও (ক্রেতা আর কৃষকের আস্থা হারানো)। Register-এ প্রধান ধরনটি লিখে বাকিটি উল্লেখ করলেই যথেষ্ট।
ঝুঁকি খোঁজার কৌশল
- Checklist আর taxonomy: Boehm-এর তালিকা, বা আরও বিস্তারিত SEI risk taxonomy. Carnegie Mellon বিশ্ববিদ্যালয়ের Software Engineering Institute (SEI)-এর ১৯৯৩ সালের প্রতিবেদন “Taxonomy-Based Risk Identification” (Carr ও সহকর্মীরা) ঝুঁকিকে তিনটি বড় শ্রেণিতে ভাগ করে — product engineering (requirement, design, code, test), development environment (প্রক্রিয়া, tool, ব্যবস্থাপনা) আর program constraints (সম্পদ, চুক্তি, বাইরের নির্ভরতা) — আর প্রতিটির জন্য প্রশ্নমালা দেয় (আমাদের জানামতে প্রায় দুইশো প্রশ্ন)।
- Brainstorming আর pre-mortem: দল কল্পনা করে, “ছয় মাস পরে project ব্যর্থ হয়েছে — কেন?” তারপর প্রত্যেকে কারণ লেখেন। মনোবিজ্ঞানী Gary Klein-এর জনপ্রিয় করা এই কৌশল চুপচাপ সদস্যদের দুশ্চিন্তাও সামনে আনে।
- Assumption analysis: পরিকল্পনার প্রতিটি অনুমান (“payment API বদলাবে না”, “কৃষকদের স্মার্টফোন আছে”) একটি সম্ভাব্য ঝুঁকি।
ঝুঁকি লিখুন কারণ → ঘটনা → ফল আকারে: “যেহেতু ঈদের আগে অর্ডার কয়েক গুণ হবে (কারণ), checkout ভারে বসে যেতে পারে (ঘটনা), ফলে বিক্রি আর আস্থা হারাব (ফল)।” শুধু “performance” লিখলে কেউ জানেন না কী সামলাতে হবে। কারণ লেখা থাকলে প্রতিকারও চোখে পড়ে — কারণকে আঘাত করা যায়, বা ফলকে ছোট করা যায়।
৩ · ঝুঁকি মাপা — probability × impact matrix আর risk exposure
চিহ্নিত ঝুঁকি হয়তো ত্রিশটি; সবকটির পেছনে সমান সময় দেওয়া যায় না। তাই সাজাতে হয়। দুটি প্রচলিত উপায় আছে — গুণগত আর পরিমাণগত।
গুণগত বিশ্লেষণ — heat map
প্রতিটি ঝুঁকিকে সম্ভাবনা আর ক্ষতির জন্য ১ থেকে ৫ পর্যন্ত একটি ধাপ (band) দেওয়া হয়, তারপর দুটি গুণ করে score. ছবিতে সাজালে পাওয়া যায় probability–impact matrix, যাকে রঙের কারণে heat map-ও বলে। আমাদের কাল্পনিক দল band ঠিক করেছে এভাবে: সম্ভাবনা ০.২ পর্যন্ত ১, ০.৪ পর্যন্ত ২, ০.৬ পর্যন্ত ৩, ০.৮ পর্যন্ত ৪, তার বেশি ৫; ক্ষতি ৳২ লাখ পর্যন্ত ১, ৳৫ লাখ পর্যন্ত ২, ৳১০ লাখ পর্যন্ত ৩, ৳২০ লাখ পর্যন্ত ৪, তার বেশি ৫। Score ১২ বা বেশি লাল (উচ্চ), ৫ থেকে ১১ হলুদ (মাঝারি), ৪ বা কম সবুজ (নিম্ন)। এই সীমাগুলো দলের নিজের সিদ্ধান্ত — কোনো মানদণ্ড নির্দিষ্ট সংখ্যা চাপিয়ে দেয় না।
Probability–impact matrix (heat map) — আটটি কাল্পনিক ঝুঁকি
Each cell shows score = P-band × impact-band; dots are risks R1–R8
পরিমাণগত বিশ্লেষণ — risk exposure
পর্ব ০৪-এ দেখেছেন Boehm-এর সংজ্ঞা: risk exposure RE = P × L, অর্থাৎ ঘটার সম্ভাবনা গুণ ঘটলে ক্ষতি। এটি প্রত্যাশিত ক্ষতি — অনেকগুলো একই রকম project-এর গড়ে যা হারানোর আশঙ্কা। Heat map-এর score-এর সাথে এর বড় পার্থক্য হলো, band-এ ভাগ করলে তথ্য হারায়: ০.৪১ আর ০.৬০ দুটিই band ৩, আর ৳২১ লাখ ও ৳৮০ লাখ দুটিই band ৫। নিচের program আটটি ঝুঁকির RE বের করে, সাজায়, band আর score দেখায়, তারপর প্রস্তাবিত চারটি প্রতিকারের RRL হিসাব করে (RRL অংশ ৫-এ বিস্তারিত)।
// Risk register (fictional farm-produce market app): RE = P x L, L in lakh taka
const risks = [
{ id: "R1", what: "payment API changes", p: 0.5, L: 12 },
{ id: "R2", what: "key developer leaves", p: 0.3, L: 15 },
{ id: "R3", what: "Eid traffic overload", p: 0.5, L: 24 },
{ id: "R4", what: "requirements keep moving", p: 0.7, L: 6 },
{ id: "R5", what: "farmer data leak", p: 0.1, L: 80 },
{ id: "R6", what: "SMS price rise", p: 0.6, L: 2 },
{ id: "R7", what: "map API licence change", p: 0.2, L: 10 },
{ id: "R8", what: "estimate too optimistic", p: 0.6, L: 10 },
];
const band = (x, cuts) => 1 + cuts.filter(c => x > c).length; // 1..5
const pBand = p => band(p, [0.2, 0.4, 0.6, 0.8]), iBand = L => band(L, [2, 5, 10, 20]);
const zone = s => s >= 12 ? "HIGH" : s >= 5 ? "MED " : "LOW ";
for (const r of risks) r.re = r.p * r.L;
risks.sort((a, b) => b.re - a.re);
console.log("id RE P-band x I-band = score zone risk");
for (const r of risks) {
const s = pBand(r.p) * iBand(r.L);
console.log(r.id, r.re.toFixed(1).padStart(5), " ", pBand(r.p), "x", iBand(r.L),
"=", String(s).padStart(2), " ", zone(s), r.what);
}
console.log("total RE =", risks.reduce((t, r) => t + r.re, 0).toFixed(1), "lakh");
const plans = [ // proposed mitigation: new P (maybe new L), cost
{ id: "R3", act: "load test + autoscaling", cost: 3, p: 0.1 },
{ id: "R5", act: "security audit + encrypt", cost: 4, p: 0.02 },
{ id: "R2", act: "pairing + runbooks", cost: 1.5, p: 0.15, L: 10 },
{ id: "R6", act: "2-year SMS contract", cost: 1, p: 0.3 },
];
for (const m of plans) {
const r = risks.find(x => x.id === m.id), after = m.p * (m.L ?? r.L);
const rrl = (r.re - after) / m.cost; // Boehm's RRL
console.log(m.id, m.act.padEnd(25), "RE", r.re.toFixed(1), "->", after.toFixed(1),
" RRL =", rrl.toFixed(2), rrl > 1 ? "worth it" : "weak");
}আউটপুট:
id RE P-band x I-band = score zone risk
R3 12.0 3 x 5 = 15 HIGH Eid traffic overload
R5 8.0 1 x 5 = 5 MED farmer data leak
R1 6.0 3 x 4 = 12 HIGH payment API changes
R8 6.0 3 x 3 = 9 MED estimate too optimistic
R2 4.5 2 x 4 = 8 MED key developer leaves
R4 4.2 4 x 3 = 12 HIGH requirements keep moving
R7 2.0 1 x 3 = 3 LOW map API licence change
R6 1.2 3 x 1 = 3 LOW SMS price rise
total RE = 43.9 lakh
R3 load test + autoscaling RE 12.0 -> 2.4 RRL = 3.20 worth it
R5 security audit + encrypt RE 8.0 -> 1.6 RRL = 1.60 worth it
R2 pairing + runbooks RE 4.5 -> 1.5 RRL = 2.00 worth it
R6 2-year SMS contract RE 1.2 -> 0.6 RRL = 0.60 weak
তিনটি জিনিস লক্ষ করুন। প্রথমত, মোট প্রত্যাশিত ক্ষতি ৳৪৩.৯ লাখ, যার অর্ধেকের বেশি (১২ + ৮ + ৬ = ২৬) মাত্র তিনটি ঝুঁকিতে — সব ঝুঁকিতে সমান মনোযোগ দেওয়ার দরকার নেই। দ্বিতীয়ত, দুই পদ্ধতির ক্রম মেলেনি: R5 (কৃষকের তথ্য ফাঁস) RE অনুযায়ী দ্বিতীয়, কিন্তু heat map-এ মাত্র “MED”, কারণ সম্ভাবনার band ১; আবার R4 (requirement বদল) heat map-এ “HIGH”, কিন্তু RE মাত্র ৳৪.২ লাখ। কম সম্ভাবনা-বড় ক্ষতির ঝুঁকিকে heat map প্রায়ই ছোট দেখায় — এজন্য অনেক দল নিয়ম রাখে, impact band ৫ হলেই আলাদা আলোচনা। তৃতীয়ত, শেষ চার লাইনে RRL: R3-এর প্রতিকারে প্রতি টাকা খরচে ৳৩.২০ প্রত্যাশিত ক্ষতি কমে, আর SMS চুক্তিতে মাত্র ৳০.৬০ — খরচের চেয়ে কম লাভ।
সংখ্যাগুলো অনুমান, সত্য নয়। “সম্ভাবনা ০.৫” কেউ মেপে পাননি — এটি দলের বিচার। তাই দুই দশমিক পর্যন্ত নিখুঁত RE দেখে আত্মতুষ্ট হবেন না। পরিমাণগত হিসাবের আসল লাভ হলো আলোচনাকে স্পষ্ট করা (“আপনি ০.২ ভাবছেন, আমি ০.৬ — কেন?”) আর ঝুঁকিগুলোকে টাকার একই ভাষায় তুলনা করা। সময় আর খরচের অনুমানের পদ্ধতি দেখবেন পর্ব ৬০-এ (Software estimation).
৪ · Risk register, trigger, contingency আর RMMM
বিশ্লেষণ করা ঝুঁকিগুলো রাখা হয় একটি জীবন্ত তালিকায় — risk register. বিয়েবাড়ির আয়োজনের তালিকার মতো: কোন কাজে কী গোলমাল হতে পারে, কে দায়িত্বে, আগে কী করা হবে, আর গোলমাল হলে বিকল্প কী (বাবুর্চি না এলে কোন হোটেলে ফোন)। Register সাধারণত একটি spreadsheet বা issue tracker-এর বিশেষ ধরনের টিকিট; ফরম্যাট প্রতিষ্ঠানভেদে আলাদা, কিন্তু মূল ঘরগুলো প্রায় একই। নিচে R3-এর সারিটি ধাপে ধাপে পূরণ করা দেখুন।
| ID ও শিরোনাম | |
| Risk statement | |
| ধরন ও owner | |
| P · L · RE · score | |
| Trigger | |
| Response | |
| Contingency | |
| অবস্থা |
- ID আর ছোট শিরোনাম। প্রতিটি ঝুঁকির একটি স্থায়ী ID (R3), যাতে meeting, টিকিট আর commit message-এ একই নামে ডাকা যায়। শিরোনাম ছোট রাখা হয় — বিস্তারিত পরের ঘরে।
- Risk statement. কারণ → ঘটনা → ফল আকারে লেখা। “কয়েক গুণ” কথাটি অনুমান — পরে আগের মাসের অর্ডারের তথ্য দিয়ে যাচাই করতে হবে, তাই বন্ধনীতে চিহ্ন দেওয়া।
- ধরন আর owner. প্রধানত product (technical) ঝুঁকি, সাথে business-এর দিকও আছে। Owner একজন নির্দিষ্ট মানুষ (এখানে ভূমিকার নাম, backend lead) — “পুরো দল” owner হলে বাস্তবে কেউই নন।
- বিশ্লেষণ। P = ০.৫, L = ৳২৪ লাখ, তাই RE = ০.৫ × ২৪ = ৳১২ লাখ। Band ৩ আর ৫, score ১৫ — লাল ঘর। দুটি হিসাবেই এটি তালিকার শীর্ষে।
- Trigger. Trigger হলো আগাম সংকেত, যা দেখা দিলে ঝুঁকিটি “জেগে উঠছে” বলে ধরা হবে: load test-এ p95 latency ৮০০ ms ছাড়ানো, বা ঈদের তিন সপ্তাহ আগে সাপ্তাহিক অর্ডার ৩০% বাড়া। Trigger মাপা যায় এমন হতে হয়, নইলে কেউ টের পান না কখন কাজ শুরু করতে হবে।
- Response. কৌশল mitigate (কমানো): load test আর autoscaling, খরচ ৳৩ লাখ, ঈদের চার সপ্তাহ আগে শেষ করতে হবে। এতে P নামবে ০.১-এ, বাকি থাকা ঝুঁকি (residual risk) RE = ০.১ × ২৪ = ৳২.৪ লাখ।
- Contingency আর অবস্থা। সব প্রতিকারের পরও ঝুঁকি ঘটতে পারে, তাই contingency plan: ঘটলে অপেক্ষার সারির পাতা, নতুন deploy বন্ধ, বাড়তি server ভাড়া, খরচের আগাম অনুমোদিত সীমা ৳১ লাখ। অবস্থা “খোলা”, প্রতি সপ্তাহে review — register মরে গেলে পুরো পদ্ধতিই অকেজো।
Mitigation বনাম contingency
দুটি গুলিয়ে ফেলা খুব সাধারণ ভুল। Mitigation আগেই করা হয়, সম্ভাবনা বা ক্ষতি কমাতে — খরচ নিশ্চিত, ঝুঁকি ঘটুক বা না ঘটুক। Contingency শুধু ঝুঁকি ঘটলে বা trigger জ্বললে চালু হয় — আগে থেকে শুধু পরিকল্পনা আর অনুমোদন নেওয়া থাকে। লোডশেডিংয়ের উদাহরণে: IPS কিনে রাখা mitigation; বিদ্যুৎ গেলে কোন কাজ আগে বন্ধ করবেন, কার কাছে জেনারেটর ভাড়া পাবেন — contingency. বাজেটে contingency-র জন্য আলাদা সংরক্ষিত অর্থ (contingency reserve) রাখার রীতি project management-এর বইয়ে প্রচলিত।
RMMM plan (Pressman)
Roger Pressman-এর পাঠ্যবই Software Engineering: A Practitioner's Approach ঝুঁকির পরিকল্পনাকে RMMM নামে তিন ভাগে লিখতে বলে — Risk Mitigation (এড়ানো বা কমানোর ব্যবস্থা), Monitoring (কোন সূচক দেখে বুঝবেন ঝুঁকি বাড়ছে) আর Management (ঝুঁকি ঘটলে কী করবেন, অর্থাৎ contingency). বাস্তবে অনেক দল আলাদা RMMM দলিল না রেখে register-এর ঘরগুলোতেই এই তিনটি তথ্য রাখে — নাম নয়, তিনটি প্রশ্নের উত্তর থাকা জরুরি।
৫ · ঝুঁকির জবাব — avoid, transfer, mitigate, accept আর RRL
প্রতিটি ঝুঁকির জন্য একটি risk response কৌশল বাছতে হয়। Project Management Institute (PMI)-এর PMBOK Guide আর বেশিরভাগ পাঠ্যবই ক্ষতিকর ঝুঁকির (threat) জন্য চারটি মূল কৌশল বলে:
🚫 Avoid — এড়ানো
পরিকল্পনা বদলে ঝুঁকির কারণটাই সরিয়ে দেওয়া। দলের অচেনা নতুন database-এর বদলে চেনা PostgreSQL; ঈদের সপ্তাহে বড় release না করা।
P → প্রায় ০🤝 Transfer — হস্তান্তর
ক্ষতির দায় অন্য পক্ষকে দেওয়া: বিমা, নির্দিষ্ট দামের চুক্তি, SLA-সহ managed service. ঝুঁকি মোছে না — শুধু কে টাকা দেবেন তা বদলায়, আর এর একটি দাম আছে।
L-এর বাহক বদলায়🛡️ Mitigate — কমানো
সম্ভাবনা বা ক্ষতি কমানোর কাজ: load test, prototype, pair programming, backup. সবচেয়ে প্রচলিত কৌশল (risk mitigation).
P বা L কমে✋ Accept — মেনে নেওয়া
কিছু না করা, কারণ প্রতিকার ঝুঁকির চেয়ে দামি। Active acceptance-এ contingency রাখা হয়; passive-এ শুধু নজর রাখা।
ছোট RE, কম RRLঝুঁকি সবসময় খারাপ নয় — অনিশ্চয়তা ভালো দিকেও যেতে পারে (opportunity): ধরুন একটি সরকারি কৃষি-তথ্য সেবা নতুন open API দিতে পারে, যা পেলে দামের তথ্য বিনা খরচে দেখানো যাবে। PMBOK-এর ষষ্ঠ সংস্করণ (২০১৭) সুযোগের জন্য exploit (নিশ্চিতভাবে কাজে লাগানো), share (অংশীদারের সাথে ভাগ করা), enhance (সম্ভাবনা বা লাভ বাড়ানো) আর accept বলে, আর দুই দিকেই escalate (project-এর বাইরের উচ্চতর কর্তৃপক্ষের কাছে পাঠানো) যোগ করে। পরের সংস্করণগুলো নীতিভিত্তিক হওয়ায় তালিকার উপস্থাপনা বদলেছে, তাই পরীক্ষার উত্তরে কোন সংস্করণ মানছেন উল্লেখ করা নিরাপদ।
Risk reduction leverage — কোন প্রতিকার আগে
টাকা সীমিত, প্রতিকারের প্রস্তাব অনেক। Boehm-এর ১৯৯১ সালের প্রবন্ধের risk reduction leverage (RRL) এই সিদ্ধান্তের একটি সরল মাপ:
RRL ১-এর বেশি মানে খরচের চেয়ে বেশি প্রত্যাশিত ক্ষতি কমছে; যত বড়, তত ভালো বিনিয়োগ। নিচে R3-এর জন্য দুটি প্রস্তাব তুলনা করা হলো।
| প্রতিকারের আগে | |
| A: load test + autoscaling | |
| B: checkout নতুন করে, queue + CDN | |
| RRL | |
| খরচ + residual RE | |
| A-র পরে B যোগ করলে |
- শুরুর অবস্থা। R3-এর RE = ০.৫ × ২৪ = ৳১২ লাখ। দুটি প্রস্তাব এসেছে; কোনটি করবেন?
- প্রস্তাব A. Load test আর autoscaling, খরচ ৳৩ লাখ। দলের অনুমানে সম্ভাবনা ০.৫ থেকে ০.১-এ নামবে, ক্ষতি একই থাকবে: RE = ০.১ × ২৪ = ৳২.৪ লাখ।
- প্রস্তাব B. Checkout অংশ নতুন করে লেখা — অর্ডার আগে queue-তে, ছবি CDN থেকে। খরচ ৳৬ লাখ। সম্ভাবনা ০.০৫-এ নামবে, আর ঘটলেও আংশিক কাজ চলবে বলে ক্ষতি ৳১৬ লাখে: RE = ০.০৫ × ১৬ = ৳০.৮ লাখ। Residual ঝুঁকি A-র চেয়ে কম।
- RRL তুলনা। A: (১২ − ২.৪) ÷ ৩ = ৩.২০; B: (১২ − ০.৮) ÷ ৬ = ১১.২ ÷ ৬ ≈ ১.৮৭। দুটিই ১-এর বেশি, অর্থাৎ দুটিই লাভজনক; কিন্তু প্রতি টাকায় A প্রায় দ্বিগুণ কাজ করে।
- মোট প্রত্যাশিত খরচ। আরেকভাবে দেখুন — খরচ + বাকি থাকা RE: কিছু না করলে ১২, A-তে ৩ + ২.৪ = ৫.৪, B-তে ৬ + ০.৮ = ৬.৮। A-ই সবচেয়ে কম। (দুটি মাপ এখানে একই উত্তর দিল; সবসময় দেয় না, তাই বড় সিদ্ধান্তে দুটিই দেখুন।)
- দুটো একসাথে? A করার পরে B যোগ করলে ধরা যাক P ০.০৩, L ১৬ → RE ০.৪৮। B-র বাড়তি লাভ ২.৪ − ০.৪৮ = ১.৯২, খরচ ৬, বাড়তি RRL মাত্র ০.৩২ — খরচের চেয়ে লাভ কম। সিদ্ধান্ত: A করুন, B পরের বছরের জন্য রাখুন। একটি প্রতিকারের RRL সবসময় তখনকার RE থেকে মাপতে হয়।
প্রতিকার নিজেও নতুন ঝুঁকি আনতে পারে — একে বলে secondary risk. Autoscaling-এ ভুল সীমা দিলে এক রাতে cloud-এর বিল আকাশছোঁয়া হতে পারে; তাই এই প্রতিকারের সাথে register-এ “খরচের সীমা আর বিলের alert” নামে নতুন একটি ছোট ঝুঁকি যোগ হয়।
৬ · Expected monetary value আর decision tree
কিছু সিদ্ধান্ত একটি ঝুঁকির প্রতিকারের চেয়ে বড় — যেমন payment আর হিসাবের অংশটি নিজেরা বানাবেন (build), নাকি তৈরি একটি software কিনবেন (buy). প্রতিটি পথে আলাদা অনিশ্চয়তা। এখানে কাজে লাগে expected monetary value (EMV): প্রতিটি সম্ভাব্য ফলের মূল্য তার সম্ভাবনা দিয়ে গুণ করে যোগফল, অর্থাৎ EMV = Σ (Pi × মূল্যi). RE আসলে EMV-রই একটি বিশেষ রূপ — শুধু খারাপ ফলটি ধরে।
একাধিক ধাপের সিদ্ধান্ত আঁকা হয় decision tree দিয়ে। এতে দুই রকম শাখা-বিন্দু: decision node (□, যেখানে আপনি বাছেন) আর chance node (○, যেখানে ভাগ্য বাছে, সম্ভাবনাসহ)। হিসাব চলে ডান থেকে বাঁয়ে (rollback): chance node-এ সম্ভাবনা দিয়ে গড়, decision node-এ খরচ বাদ দিয়ে সবচেয়ে বড়টি।
| পথ | খরচ | ফল (৩ বছরের লাভ, লাখ টাকা — কাল্পনিক) |
|---|---|---|
| Build | ৪০ | সময়মতো শেষ (০.৬) → ১২০; দেরি (০.৪) → আবার সিদ্ধান্ত: চালিয়ে যাওয়া (আরও ১০ খরচ; ০.৫ → ৮০, ০.৫ → ৪০) বা বাদ দেওয়া (যা বাঁচে, ১৫) |
| Buy | ৩০ | ভালো মিল (০.৮) → ৯৫; দুর্বল মিল (০.২) → ৪৫ |
# Build vs buy: decision tree rolled back by expected monetary value (EMV).
# Values in lakh taka (fictional). Leaf = benefit over 3 years; cost on the branch.
tree = ("decision", {
"build": (40, ("chance", [
(0.6, ("leaf", 120)), # finished on time
(0.4, ("decision", { # late: continue or stop?
"continue": (10, ("chance", [(0.5, ("leaf", 80)), (0.5, ("leaf", 40))])),
"abandon": (0, ("leaf", 15)), # salvage value
})),
])),
"buy": (30, ("chance", [(0.8, ("leaf", 95)), (0.2, ("leaf", 45))])),
})
def emv(node, depth=0, label="start"):
kind, body = node
pad = " " * depth
if kind == "leaf":
return body # payoff, nothing to print
if kind == "chance":
value = sum(p * emv(child, depth + 1, f"p={p}") for p, child in body)
else: # decision: pick the branch with the largest (EMV - cost)
options = {name: emv(child, depth + 1, name) - cost
for name, (cost, child) in body.items()}
best = max(options, key=options.get)
value = options[best]
print(f"{pad} choose {best!r}: " +
", ".join(f"{k}={v:.1f}" for k, v in options.items()))
print(f"{pad}{label}: {kind} EMV = {value:.1f}")
return value
emv(tree)
# Sensitivity: build EMV = 120p + 50(1-p) - 40; at what p does build tie with buy?
p_tie = (55 - 50 + 40) / (120 - 50)
print(f"build beats buy only if P(on time) > {p_tie:.3f}")আউটপুট:
continue: chance EMV = 60.0
choose 'continue': continue=50.0, abandon=15.0
p=0.4: decision EMV = 50.0
build: chance EMV = 92.0
buy: chance EMV = 85.0
choose 'buy': build=52.0, buy=55.0
start: decision EMV = 55.0
build beats buy only if P(on time) > 0.643
হিসাবটি ভেতর থেকে বাইরে পড়ুন। দেরি হলে “চালিয়ে যাওয়া”-র chance node: ০.৫ × ৮০ + ০.৫ × ৪০ = ৬০, বাড়তি খরচ ১০ বাদে ৫০ — বাদ দেওয়ার ১৫-র চেয়ে ভালো, তাই দেরির শাখার মূল্য ৫০। Build-এর chance node: ০.৬ × ১২০ + ০.৪ × ৫০ = ৯২, খরচ ৪০ বাদে ৫২। Buy: ০.৮ × ৯৫ + ০.২ × ৪৫ = ৮৫, খরচ ৩০ বাদে ৫৫। সর্বোচ্চ EMV ৫৫, তাই buy. শেষ লাইনটি সবচেয়ে কাজের: Build-এর EMV = ১২০p + ৫০(১ − p) − ৪০ = ১০ + ৭০p; এটি ৫৫ ছাড়াতে p > ৪৫ ÷ ৭০ ≈ ০.৬৪৩ লাগে। অর্থাৎ দল যদি সত্যিই বিশ্বাস করে যে ৬৫% বা বেশি সম্ভাবনায় সময়মতো শেষ করবে, উত্তর উল্টে যায়। এই break-even সম্ভাবনা নিয়ে আলোচনা “build ভালো না buy ভালো” তর্কের চেয়ে অনেক ফলপ্রসূ।
EMV গড়ের হিসাব — একবারের সিদ্ধান্তে আপনি গড় পান না, একটি ফলই পান। ছোট প্রতিষ্ঠানের জন্য যে খারাপ ফল দেউলিয়া করে দিতে পারে (যেমন Build-এর ১৫), সেখানে শুধু EMV দেখে সিদ্ধান্ত নেওয়া বিপজ্জনক; ঝুঁকি-বিমুখ সিদ্ধান্ত (সবচেয়ে খারাপ ফল কতটা খারাপ) পাশাপাশি দেখুন।
৭ · Quality management — quality planning, QA আর QC
Risk management প্রশ্ন করে “কী খারাপ হতে পারে?”; quality management প্রশ্ন করে “ভালো বলতে কী বুঝি, আর নিশ্চিত করব কীভাবে?” Quality কী আর কীভাবে মাপা হয় — ISO/IEC 25010, MTBF, DRE, cost of quality — তা পর্ব ০৩-এ দেখেছেন। এখানে প্রশ্নটি ব্যবস্থাপনার: কোন কাজ কে কখন করবেন, যাতে quality দুর্ঘটনা না হয়ে নিয়মিত ফল হয়।
রেস্তোরাঁর রান্নাঘর ভাবুন। Quality planning: মেনুর প্রতিটি পদের রেসিপি খাতা, কোন মশলা কতটা, কোন তাপমাত্রায় মাংস রাখতে হবে। Quality assurance: মালিক মাঝে মাঝে দেখেন বাবুর্চিরা রেসিপি আর পরিচ্ছন্নতার নিয়ম মানছেন কি না, নতুনদের প্রশিক্ষণ হচ্ছে কি না। Quality control: পরিবেশনের আগে প্রধান বাবুর্চি প্রতিটি প্লেট চেখে দেখেন — লবণ কম হলে প্লেট ফেরত।
| Quality planning | Quality assurance (QA) | Quality control (QC) | |
|---|---|---|---|
| মূল প্রশ্ন | কোন মান চাই, কীভাবে পৌঁছাব? | ঠিক প্রক্রিয়া মানা হচ্ছে তো? | এই পণ্যটি মান পূরণ করে কি? |
| দৃষ্টি | লক্ষ্য ও পরিকল্পনা | প্রক্রিয়া, প্রতিরোধমূলক | পণ্য, শনাক্তকারী |
| Software-এ উদাহরণ | quality plan: লক্ষ্য (escape rate ১০%-এর নিচে), কোন review ও test লাগবে, “done”-এর সংজ্ঞা | process audit, review-এর নিয়ম মানা হচ্ছে কি না দেখা, প্রশিক্ষণ, checklist উন্নত করা | test চালানো, code review-এ defect খোঁজা, release-এর আগে acceptance test |
| কখন | project-এর শুরুতে, পরে হালনাগাদ | পুরো সময় জুড়ে | প্রতিটি কাজ বা release-এর পরে |
ISO 9000:2015-এর সংজ্ঞার ভাব অনুযায়ী, QA হলো quality management-এর সেই অংশ যা “quality requirement পূরণ হবে” এমন আস্থা দেয়, আর QC সেই অংশ যা requirement পূরণ করার দিকে মনোযোগ দেয়। বাস্তবে software শিল্পে “QA” শব্দটি প্রায়ই tester-এর পদবি হিসেবে ব্যবহৃত হয় — যে কাজটি আসলে বেশিরভাগই QC. শব্দের এই ঢিলেঢালা ব্যবহার জানা থাকলে চাকরির বিজ্ঞপ্তি আর পাঠ্যবইয়ের মধ্যে বিভ্রান্তি হয় না। Software QA প্রক্রিয়ার একটি মানদণ্ড IEEE Std 730 (সর্বশেষ বড় সংস্করণ ২০১৪, আমাদের জানামতে)। Verification আর validation-এর পার্থক্য, আর test-এর স্তর পর্ব ৪৫-এ আছে।
QC একা থাকলে দল defect ধরতে ভালো হয়, কিন্তু একই defect বারবার তৈরি হতে থাকে। QA সেই প্রশ্ন তোলে — “এই ধরনের defect কেন হচ্ছে, কোন ধাপ বদলালে আর হবে না?” এভাবে quality-র খরচ appraisal আর failure থেকে prevention-এর দিকে সরে (পর্ব ০৩-এর cost of quality).
৮ · Process improvement — CMMI, ISO 9001, Six Sigma, PDCA আর PSP/TSP
QA-র বড় প্রশ্ন: আমাদের প্রক্রিয়া কতটা পরিপক্ব, আর কীভাবে উন্নত করব? এর জন্য কয়েকটি প্রতিষ্ঠিত কাঠামো আছে।
CMMI — পাঁচটি maturity level
CMMI (Capability Maturity Model Integration)-এর শিকড় SEI-তে Watts Humphrey-র কাজ আর software CMM-এ (সংস্করণ ১.০ ১৯৯১, ১.১ ১৯৯৩); পরে বিভিন্ন CMM মিলিয়ে CMMI আসে (প্রথম সংস্করণ ২০০০ সালের দিকে; বহুল ব্যবহৃত v1.3, ২০১০)। Staged representation-এ প্রতিষ্ঠানের প্রক্রিয়াকে পাঁচটি maturity level-এ রাখা হয়:
CMMI-র পাঁচটি maturity level — সিঁড়ি
Each step builds on the one below; you cannot skip a step
প্রতিটি level-এ কিছু process area (v2.0 থেকে নাম practice area) থাকে — যেমন requirement management, project planning, configuration management, peer review. একটি প্রতিষ্ঠান level ৩ “পেয়েছে” মানে, একটি আনুষ্ঠানিক appraisal-এ (v1.3-এ SCAMPI নামের পদ্ধতি) দেখা গেছে ওই level পর্যন্ত সব নির্ধারিত অংশ নিয়মিত চর্চা হচ্ছে। এটি পণ্যের মানের সনদ নয়, প্রক্রিয়ার মূল্যায়ন। নিচে একটি অংশ — peer review — কীভাবে ধাপে ধাপে ওপরে ওঠে, তার একটি উদাহরণমূলক চিত্র (CMMI-র আসল practice-এর ভাষা নয়, ধারণাটি বোঝানোর জন্য সরল রূপ)।
| Level | |
| কীভাবে হয় | |
| প্রমাণ | |
| যা মাপা হয় | |
| দুর্বলতা |
- Level ১ — Initial. Review হয় কখনো কখনো, নির্ভর করে কে কতটা সচেতন তার ওপর। কাজ হয়ে যায় “বীরত্বে” — কয়েকজন দক্ষ মানুষের কারণে। তাঁরা ছুটিতে গেলে বা চলে গেলে quality হঠাৎ পড়ে যায়।
- Level ২ — Managed. অন্তত এই project-এ নিয়ম লেখা আর মানা হয়: প্রতিটি pull request-এ একজন reviewer, একটি checklist, branch protection (পর্ব ১৬)। রেকর্ড থাকায় দেখা যায় কত ভাগ PR review হলো। কিন্তু পাশের project-এর নিয়ম সম্পূর্ণ আলাদা।
- Level ৩ — Defined. প্রতিষ্ঠান একটি মানক review প্রক্রিয়া বানায় (কোড review-এর ভালো চর্চা পর্ব ৪৪-এ), প্রতিটি project নিজের প্রয়োজনে তা মানিয়ে নেয় (tailoring), নতুনদের প্রশিক্ষণ হয়। সব project একই সংজ্ঞায় তথ্য রাখে — এখন project-গুলো তুলনা করা যায়।
- Level ৪ — Quantitatively Managed. জমানো তথ্য থেকে প্রতিষ্ঠান জানে “স্বাভাবিক” কী — যেমন প্রতি KLOC-এ review-এ গড়ে কত defect, আর তার control limit. কোনো review সীমার বাইরে গেলে (খুব দ্রুত শেষ, খুব কম defect) কারণ খোঁজা হয় — অংশ ৯-এর control chart এখানেই কাজে লাগে।
- Level ৫ — Optimizing. ধরা যাক escape হওয়া defect বিশ্লেষণে দেখা গেল বড় একটি অংশ null-এর ভুল সামলানো থেকে। Checklist-এ নতুন প্রশ্ন আর একটি static analysis নিয়ম যোগ হলো, আগে দুটি দলে পরীক্ষা, আগে-পরে escape rate মেপে উন্নতি নিশ্চিত হলে সবার জন্য চালু। এটাই ধারাবাহিক উন্নতি — PDCA-র চক্র।
সংস্করণ নিয়ে সতর্কতা। CMMI এখন SEI নয়, CMMI Institute দেখাশোনা করে, যা ২০১৬ সাল থেকে ISACA-র অংশ (আমাদের জানামতে)। CMMI V2.0 (২০১৮) process area-র বদলে practice area, capability level ০–৩ আর একটি নতুন appraisal পদ্ধতি আনে; maturity level-এর নামগুলো মোটামুটি একই থাকে। CMMI V3.0 (২০২৩) নিরাপত্তা, safety, data আর people-এর মতো আরও ক্ষেত্র যোগ করে। পূর্ণ model লাইসেন্স নিয়ে পড়তে হয়; পরীক্ষার জন্য বেশিরভাগ পাঠ্যবই v1.3-এর পাঁচ নাম ধরেই চলে।
ISO 9001 — quality management system
ISO 9001 একটি সাধারণ মানদণ্ড, যা যেকোনো শিল্পের প্রতিষ্ঠানের quality management system (QMS)-এর শর্ত বলে — software, পোশাক কারখানা বা হাসপাতাল, সবার জন্য একই। লেখার সময়ে প্রচলিত সংস্করণ ISO 9001:2015 (২০২৪ সালে জলবায়ু-বিষয়ক একটি ছোট সংশোধনী যোগ হয়েছে; নতুন সংস্করণের কাজ চলছে বলে জানা যায়)। ২০১৫ সংস্করণে আছে অন্যান্য ISO management system মানদণ্ডের সাথে মেলানো ১০টি clause-এর কাঠামো, risk-based thinking (clause ৬.১-এ ঝুঁকি ও সুযোগ বিবেচনা) আর ISO 9000-এর সাতটি নীতির ভিত্তি — যেমন customer focus, process approach আর evidence-based decision making.
Software-এ ISO 9001 কীভাবে প্রয়োগ করবেন, তার নির্দেশিকা ISO/IEC/IEEE 90003 (সর্বশেষ সংস্করণ ২০১৮, আমাদের জানামতে)। মনে রাখুন: ISO নিজে সনদ দেয় না; স্বাধীন certification body audit করে সনদ দেয়। আর ISO 9001 সনদ বলে প্রতিষ্ঠানের একটি নথিবদ্ধ, নিরীক্ষিত quality ব্যবস্থা আছে — প্রতিটি পণ্য ভালো, এমন নিশ্চয়তা দেয় না।
PDCA আর Six Sigma
PDCA (Plan–Do–Check–Act) সবচেয়ে সরল উন্নতির চক্র: পরিকল্পনা করুন, ছোট পরিসরে করুন, ফল মাপুন, তারপর ভালো হলে স্থায়ী করুন বা না হলে বদলান। এর শিকড় Bell Labs-এর পরিসংখ্যানবিদ Walter Shewhart-এর ১৯২০–৩০-এর দশকের কাজে; W. Edwards Deming ১৯৫০ সালে জাপানে বক্তৃতায় এটি ছড়ান, জাপানি প্রকৌশলীরা PDCA রূপ দেন, আর Deming নিজে পরে “Check”-এর বদলে “Study” (PDSA) পছন্দ করতেন। Scrum-এর retrospective আর Kanban-এর kaizen (পর্ব ০৬) এই চক্রেরই আত্মীয়।
Six Sigma ১৯৮০-র দশকের মাঝামাঝি Motorola-তে শুরু (প্রকৌশলী Bill Smith-এর নাম প্রায়ই আসে), ১৯৯০-এর দশকে General Electric-এ বিখ্যাত হয়। লক্ষ্য প্রক্রিয়ার ওঠানামা কমানো; “প্রতি দশ লাখ সুযোগে ৩.৪টি defect” সংখ্যাটি দীর্ঘ মেয়াদে ১.৫σ সরে যাওয়ার একটি বিতর্কিত অনুমানের ওপর দাঁড়ানো। উন্নতির প্রকল্প চলে DMAIC ধাপে: Define (সমস্যা আর লক্ষ্য), Measure (বর্তমান অবস্থা মাপা), Analyze (মূল কারণ), Improve (সমাধান পরীক্ষা) আর Control (উন্নতি ধরে রাখা, প্রায়ই control chart দিয়ে)।
PSP আর TSP
Humphrey-র আরেকটি অবদান Personal Software Process (PSP; বই A Discipline for Software Engineering, ১৯৯৫): একজন ডেভেলপার নিজের সময়, আকার আর defect মেপে নিজের অনুমান আর quality উন্নত করেন — যেন একজন ব্যক্তির জন্য ছোট CMMI. দলের রূপ Team Software Process (TSP). মাপজোখের শ্রমের কারণে এদের ব্যবহার সীমিত, তবে “নিজের defect কোথা থেকে আসে, মেপে দেখা” ধারণাটি আজও কাজের।
৯ · Software metric programme — GQM, metric-এর ধরন, ফাঁদ আর control chart
“চলুন সব কিছু মাপি” — এভাবে শুরু হওয়া metric programme প্রায়ই dashboard-ভর্তি সংখ্যায় শেষ হয়, যা কেউ ব্যবহার করেন না। ভালো software metric শুরু হয় উল্টো দিক থেকে: আগে প্রশ্ন, তারপর সংখ্যা।
GQM — Goal, Question, Metric
Victor Basili ও David Weiss ১৯৮৪ সালে NASA-র software প্রকল্পের তথ্য সংগ্রহ নিয়ে একটি প্রবন্ধে যে পদ্ধতির ভিত্তি দেন, পরে Basili, Caldiera ও Rombach (১৯৯৪) তা Goal–Question–Metric (GQM) নামে গুছিয়ে লেখেন। তিন স্তর:
- Goal — কী অর্জন করতে চাই, কার দৃষ্টিতে। প্রচলিত ছাঁচ: “বস্তু-কে বিশ্লেষণ করা, উদ্দেশ্য-এ, কোন গুণ-এর দিক থেকে, কার দৃষ্টিতে, কোন প্রেক্ষাপটে।”
- Question — লক্ষ্য পূরণ হচ্ছে কি না বুঝতে কোন প্রশ্নের উত্তর লাগবে।
- Metric — প্রতিটি প্রশ্নের উত্তর দিতে কোন সংখ্যা, কোন সংজ্ঞায়, কোথা থেকে।
কৃষি-বাজার অ্যাপের দল লক্ষ্য ঠিক করল: “Release প্রক্রিয়াকে বিশ্লেষণ করা, ব্যবহারকারীর কাছে পৌঁছানো defect কমানোর উদ্দেশ্যে, ব্যবহারকারীর (কৃষক ও ক্রেতা) দৃষ্টিতে।” দুটি প্রশ্ন আর তিনটি metric — যার একটি নতুন: escape rate, অর্থাৎ মোট defect-এর কত ভাগ release-এর পরে ব্যবহারকারী পেলেন (= ১ − DRE).
# Goal-Question-Metric: print the tree and compute each metric from a data table.
releases = [ # fictional: size, defects before/after release, fix days (sample)
{"v": "r1", "kloc": 20, "pre": 72, "post": 18, "fix_days": [2, 5, 1, 9, 3]},
{"v": "r2", "kloc": 24, "pre": 95, "post": 12, "fix_days": [1, 2, 4, 2]},
{"v": "r3", "kloc": 30, "pre": 88, "post": 22, "fix_days": [6, 3, 8, 2, 11]},
]
def escape_rate(r): return r["post"] / (r["pre"] + r["post"])
def post_density(r): return r["post"] / r["kloc"]
def median_fix(r):
d = sorted(r["fix_days"]); n = len(d)
return d[n // 2] if n % 2 else (d[n // 2 - 1] + d[n // 2]) / 2
gqm = {
"goal": "Reduce defects that reach farmers and buyers (viewpoint: users)",
"questions": [
("Q1 How many defects escape to users?",
[("M1 escape rate = post/(pre+post)", escape_rate, "{:.1%}"),
("M2 post-release defects per KLOC", post_density, "{:.2f}")]),
("Q2 How fast do we fix what escapes?",
[("M3 median days to fix", median_fix, "{:.1f}")]),
],
}
print("G :", gqm["goal"])
for q, metrics in gqm["questions"]:
print(" " + q)
for name, fn, fmt in metrics:
values = " ".join(r["v"] + "=" + fmt.format(fn(r)) for r in releases)
print(" " + name.ljust(34) + values)
targets = {"M1": (escape_rate, 0.15), "M2": (post_density, 0.8), "M3": (median_fix, 3)}
last = releases[-1]
print("latest", last["v"], "vs target:", ", ".join(
k + (" ok" if fn(last) <= t else " MISSED") for k, (fn, t) in targets.items()))আউটপুট:
G : Reduce defects that reach farmers and buyers (viewpoint: users)
Q1 How many defects escape to users?
M1 escape rate = post/(pre+post) r1=20.0% r2=11.2% r3=20.0%
M2 post-release defects per KLOC r1=0.90 r2=0.50 r3=0.73
Q2 How fast do we fix what escapes?
M3 median days to fix r1=3.0 r2=2.0 r3=6.0
latest r3 vs target: M1 MISSED, M2 ok, M3 MISSED
Metric-গুলো একসাথে পড়লে গল্প দাঁড়ায়। r3-এ প্রতি KLOC-এ পৌঁছানো defect r1-এর চেয়ে কম (০.৯০ → ০.৭৩), তাই কেউ বলতে পারেন “উন্নতি হয়েছে”। কিন্তু escape rate আবার ২০% — অর্থাৎ release-এর আগের test আর review নতুন কোডের অনুপাতে আগের মতোই দুর্বল; কোড বড় হওয়ায় density কম দেখাচ্ছে। আর পৌঁছানো defect সারাতে মধ্যমা সময় ২ থেকে ৬ দিনে উঠেছে। শুধু একটি সংখ্যা দেখলে ভুল সিদ্ধান্ত হতো — GQM-এর প্রশ্নগুলো তা ঠেকায়। মধ্যমা নেওয়া হয়েছে কারণ একটি ১১ দিনের ঘটনা গড়কে অনেক টেনে তোলে।
তিন ধরনের metric
| ধরন | কী মাপে | উদাহরণ ও কোথায় বিস্তারিত |
|---|---|---|
| Product metric | software-এর নিজের গুণ | defect density, MTBF (পর্ব ০৩), cyclomatic complexity (পর্ব ৫০), coupling (পর্ব ২৫) |
| Process metric | কাজের প্রক্রিয়া কতটা কার্যকর | DRE (পর্ব ০৩), escape rate, lead time (পর্ব ০৬, পর্ব ৫৯), review-এর গতি |
| Project metric | পরিকল্পনার তুলনায় অগ্রগতি | schedule variance, cost variance (earned value), velocity; পরিকল্পনার ভিত্তি পর্ব ৬১ |
Project metric-এর একটি ছোট হিসাব: Earned value পদ্ধতিতে PV (planned value — এ পর্যন্ত যতটুকু কাজের বাজেট পরিকল্পনায় ছিল), EV (earned value — আসলে যতটুকু কাজ শেষ, তার বাজেট-মূল্য) আর AC (actual cost — আসলে খরচ)। Schedule variance SV = EV − PV, cost variance CV = EV − AC. ধরুন PV ৳৫০ লাখ, EV ৳৪০ লাখ, AC ৳৫৫ লাখ: SV = −১০ (পিছিয়ে), CV = −১৫ (বাজেট ছাড়িয়ে), SPI = EV ÷ PV = ০.৮, CPI = EV ÷ AC ≈ ০.৭৩। অর্থাৎ পরিকল্পনার ৮০% গতিতে চলছে, আর প্রতি টাকা খরচে ৭৩ পয়সার কাজ হচ্ছে।
Metric-এর ফাঁদ
- Goodhart-এর সূত্র: সংখ্যা লক্ষ্য হলে মানুষ সংখ্যাটিই ঠিক করেন, আসল গুণ নয় — coverage-এর উদাহরণ পর্ব ৫০-এ দেখেছেন। “Escape rate ১০%-এর নিচে” বোনাসের সাথে জুড়লে ব্যবহারকারীর অভিযোগ “feature request” নামে লেখা শুরু হতে পারে।
- Vanity metric: যে সংখ্যা সবসময় বাড়ে আর ভালো লাগে, কিন্তু কোনো সিদ্ধান্ত বদলায় না — মোট download, মোট commit, মোট লেখা লাইন। Eric Ries-এর The Lean Startup (২০১১) শব্দটি জনপ্রিয় করে। পরীক্ষা: “এই সংখ্যা খারাপ হলে আমরা কী আলাদা করব?” উত্তর না থাকলে সেটি vanity.
- মানুষ মাপা আর সংজ্ঞাহীন সংখ্যা: ব্যক্তির defect-সংখ্যা দিয়ে মূল্যায়ন করলে মানুষ defect লুকান; আর “defect” কোনটি লেখা না থাকলে মাসে মাসে তুলনা অর্থহীন।
সময়ের সাথে সংখ্যা পড়া — statistical process control
এই সপ্তাহে defect ১৭টি, গত সপ্তাহে ১০টি — এটা কি সমস্যা? সব প্রক্রিয়ায় স্বাভাবিক ওঠানামা থাকে (common cause variation); আবার কখনো নির্দিষ্ট কোনো কারণ থাকে, যেমন তাড়াহুড়ার একটি release (special cause). Shewhart ১৯২৪ সালে Bell Labs-এ এ দুটি আলাদা করার জন্য control chart প্রস্তাব করেন — statistical process control (SPC)-এর মূল হাতিয়ার। একটি স্থির সময়ের তথ্য থেকে মাঝের রেখা (mean) আর দুই সীমা টানা হয়: UCL = mean + 3σ, LCL = mean − 3σ. সীমার বাইরের বিন্দু বা অস্বাভাবিক নকশা (pattern) special cause-এর সংকেত। Western Electric-এর ১৯৫৬ সালের Statistical Quality Control Handbook-এ এমন কয়েকটি নিয়ম আছে; বহুল উদ্ধৃত একটি হলো, মাঝের রেখার একই পাশে পরপর ৮টি বিন্দু (বইভেদে সংখ্যা ৭, ৮ বা ৯ দেখা যায়)।
// Control chart for weekly defect counts (fictional team, seeded data).
function mulberry32(a) { return function () {
a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a);
t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }
const rnd = mulberry32(62);
const weeks = [];
for (let w = 1; w <= 24; w++) {
let mean = 12;
if (w >= 15) mean = 15; // a quiet process change from week 15
let x = Math.round(mean + (rnd() + rnd() + rnd() - 1.5) * 4);
if (w === 13) x += 14; // one bad release in week 13
weeks.push(x);
}
const base = weeks.slice(0, 12); // limits come from weeks 1-12 only
const m = base.reduce((s, x) => s + x, 0) / base.length;
const sd = Math.sqrt(base.reduce((s, x) => s + (x - m) ** 2, 0) / (base.length - 1));
const UCL = m + 3 * sd, LCL = Math.max(0, m - 3 * sd);
console.log("mean", m.toFixed(2), " sigma", sd.toFixed(2),
" UCL", UCL.toFixed(2), " LCL", LCL.toFixed(2));
let run = 0, side = 0;
weeks.forEach((x, i) => {
const s = Math.sign(x - m); // +1 above centre, -1 below
run = (s !== 0 && s === side) ? run + 1 : 1; side = s;
const flags = [];
if (x > UCL || x < LCL) flags.push("OUT of limits");
if (run >= 8 && s !== 0) flags.push("run of " + run + (s > 0 ? " above" : " below"));
const bar = "#".repeat(x);
console.log(String(i + 1).padStart(2), String(x).padStart(3), bar.padEnd(28), flags.join(", "));
});আউটপুট:
mean 11.75 sigma 2.67 UCL 19.75 LCL 3.75
1 10 ##########
2 9 #########
3 17 #################
4 11 ###########
5 10 ##########
6 14 ##############
7 9 #########
8 14 ##############
9 13 #############
10 13 #############
11 13 #############
12 8 ########
13 27 ########################### OUT of limits
14 7 #######
15 18 ##################
16 15 ###############
17 14 ##############
18 14 ##############
19 14 ##############
20 14 ##############
21 16 ################
22 16 ################ run of 8 above
23 14 ############## run of 9 above
24 16 ################ run of 10 above
সীমা টানা হয়েছে শুধু প্রথম ১২ সপ্তাহের তথ্য থেকে: mean ১১.৭৫, σ ২.৬৭, তাই UCL = ১১.৭৫ + ৩ × ২.৬৭ ≈ ১৯.৭৫ আর LCL ≈ ৩.৭৫। সপ্তাহ ৩-এর ১৭টি defect উদ্বেগজনক দেখালেও সীমার ভেতরে — স্বাভাবিক ওঠানামা; এর জন্য কাউকে জবাবদিহি করানো ভুল (Deming একে বলতেন tampering). সপ্তাহ ১৩-র ২৭ সীমার বাইরে — নির্দিষ্ট কারণ খুঁজুন (program-এ ওই সপ্তাহে একটি খারাপ release বসানো আছে)। আর সূক্ষ্মতম সংকেত: সপ্তাহ ১৫ থেকে প্রতিটি বিন্দু মাঝের রেখার ওপরে, কোনোটি UCL ছোঁয়নি, তবু সপ্তাহ ২২-এ পরপর ৮টি — run rule জানিয়ে দিল প্রক্রিয়ার গড় সরে গেছে (program-এ গড় ১২ থেকে ১৫ করা হয়েছিল)। খেয়াল করুন, যদি সপ্তাহ ১৩-র মতো বিন্দু ভিত্তি-সময়ের ভেতরে থাকত, σ ফুলে উঠে সীমা চওড়া হয়ে যেত — তাই ভিত্তি-তথ্য থেকে জানা special cause বাদ দিতে হয়।
পদ্ধতিগত সতর্কতা: এখানে সরলতার জন্য σ নেওয়া হয়েছে নমুনার standard deviation থেকে। আনুষ্ঠানিক individuals (XmR) chart-এ σ সাধারণত পরপর দুটি মানের পার্থক্য (moving range) থেকে অনুমান করা হয়, আর গণনার তথ্যের (যেমন defect-সংখ্যা) জন্য c-chart-এ σ = √mean ধরা হয় — এখানে √১১.৭৫ ≈ ৩.৪৩, UCL ≈ ২২.০৩। Software-এ control chart আলোচনা শুরুর হাতিয়ার, রায় নয় (প্র ০৫)।
আরও গভীরে: Risk management-এর সাধারণ আন্তর্জাতিক নির্দেশিকা ISO 31000 (সর্বশেষ ২০১৮), আর software ও systems project-এর জন্য ISO/IEC/IEEE 16085. Boehm-এর ১৯৯১ সালের IEEE Software প্রবন্ধ আর ১৯৮৯ সালের টিউটোরিয়াল বই Software Risk Management RE ও RRL-এর মূল উৎস; Tom DeMarco ও Timothy Lister-এর Waltzing with Bears (২০০৩) পড়তে সহজ। Process improvement-এ Humphrey-র Managing the Software Process (১৯৮৯) ক্লাসিক, আর metric-এ Fenton ও Bieman-এর Software Metrics: A Rigorous and Practical Approach বহুল ব্যবহৃত পাঠ্যবই।
পরীক্ষা ও ইন্টারভিউতে — বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এ ধরনের প্রশ্ন আসতে পারে:
- P = ০.৩, L = ৳৪০ লাখ; প্রতিকারে খরচ ৳২ লাখ, P নামে ০.১-এ — RRL? RE ১২ → ৪; (১২ − ৪) ÷ ২ = ৪।
- RMMM-এর পূর্ণরূপ আর তিন অংশ। Risk Mitigation, Monitoring and Management — কমানোর ব্যবস্থা, নজরের সূচক, আর ঘটলে করণীয়।
- CMMI-র পাঁচ maturity level. Initial, Managed, Defined, Quantitatively Managed, Optimizing.
- QA আর QC-র পার্থক্য। QA প্রক্রিয়াভিত্তিক ও প্রতিরোধমূলক; QC পণ্যভিত্তিক ও শনাক্তকারী (test, inspection).
- Mean ২০, σ ৩ — control limit? UCL ২৯, LCL ১১; সীমার বাইরের বিন্দু বা একপাশে পরপর ৮টি বিন্দু special cause-এর সংকেত।
এই পর্বের ধরনের সংখ্যা-নির্ভর আরও প্রশ্ন, পূর্ণ সমাধানসহ, পাবেন পর্ব ৬৬-এ (Numerical সমস্যার অনুশীলন)।
১০ · AI-এর যুগে risk আর quality management
AI এক মিনিটে চল্লিশটি ঝুঁকির তালিকা বা একটি পুরো quality plan লিখে দিতে পারে। দেখতে পেশাদার, কিন্তু তালিকা লেখা risk management নয় — সম্ভাবনা আর ক্ষতির বিচার, দায়িত্ব আর নজরদারিই আসল কাজ, আর সেগুলো আপনার project-এর তথ্য ছাড়া হয় না। এই কাজে AI-এর সাধারণ ভুল:
| AI যা করে | কেন বিপজ্জনক | যাচাইয়ের উপায় |
|---|---|---|
| সব ঝুঁকিতে আত্মবিশ্বাসী সম্ভাবনা বসিয়ে দেয় (“P = 0.35”) | অনুমান তথ্যের মতো দেখায়; দলের আলোচনা বাদ পড়ে | প্রতিটি সংখ্যার উৎস জিজ্ঞেস করা; দলের সাথে আবার অনুমান |
| CMMI বা ISO 9001-এর clause, সংস্করণ বা level-এর নাম বানিয়ে বা মিশিয়ে বলে | audit বা চুক্তির দলিলে ভুল যায় | CMMI Institute ও ISO-র অফিসিয়াল পাতা, নির্ভরযোগ্য পাঠ্যবই মিলিয়ে নেওয়া |
| “৭০% project ব্যর্থ হয়”-এর মতো সূত্রহীন পরিসংখ্যান দেয় | ভুল ভিত্তিতে বাজেট ও সিদ্ধান্ত | মূল সূত্র চাওয়া; না মিললে বাদ (CHAOS রিপোর্টের মতো সূত্রও বিতর্কিত) |
| RE, RRL বা EMV-র গুণ-ভাগে ভুল করে, বা RRL আগের RE থেকে না মেপে মূল RE থেকে মাপে | ভুল প্রতিকার বাছাই | ছোট script বা হাতে আবার হিসাব |
| সুন্দর dashboard-এর জন্য অনেক metric প্রস্তাব করে, লক্ষ্য ছাড়াই | vanity metric আর Goodhart-এর ফাঁদ | প্রতিটি metric-এর জন্য GQM-এর goal ও question লেখা |
| Prompt-এ আসল গ্রাহকের তথ্য, চুক্তির দাম বা নিরাপত্তা-দুর্বলতার বিবরণ পেস্ট করা হয় | গোপন তথ্য বাইরে যায় — নিজেই একটি নতুন ঝুঁকি | নাম-সংখ্যা বদলে, সাধারণ রূপে প্রশ্ন করা |
AI সবচেয়ে কাজে লাগে ঝুঁকি খোঁজার সঙ্গী হিসেবে — যে ঝুঁকি আপনার দলের চোখ এড়িয়েছে, তা মনে করিয়ে দিতে। সংখ্যা বসানোর দায়িত্ব নিজের কাছে রাখুন:
AI-এর দেওয়া ঝুঁকি বা quality-র কাজ হাতে পেলে — যাচাইয়ের চেকলিস্ট
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।
প্র ০১RE = P × L যদি প্রত্যাশিত ক্ষতি হয়, তবে কম সম্ভাবনা কিন্তু বিশাল ক্ষতির ঝুঁকি কীভাবে সামলাবেন?
RE-র পেছনের যুক্তি পরিসংখ্যানের প্রত্যাশিত মান: অনেক বার একই রকম বাজি ধরলে গড়ে যা হারাবেন। বড় প্রতিষ্ঠান অনেক project চালায়, তাই সেখানে গড়ের যুক্তি ভালো খাটে। কিন্তু একটি project-এর জন্য ঝুঁকিটি একবারই আসে — হয় ঘটে, নয় ঘটে না। ০.০১ সম্ভাবনায় ৳১০ কোটির ক্ষতির RE ৳১০ লাখ, ঠিক ০.৫ সম্ভাবনায় ৳২০ লাখের ক্ষতির সমান। দুটি কি সমান উদ্বেগের? ছোট একটি প্রতিষ্ঠানের জন্য প্রথমটি ঘটলে প্রতিষ্ঠানই থাকবে না; দ্বিতীয়টি কষ্টের, কিন্তু টিকে থাকা যায়।
Knight Capital-এর ২০১২ সালের ঘটনা এর একটি বহুল আলোচিত উদাহরণ। মার্কিন নিয়ন্ত্রক SEC-র পরবর্তী প্রতিবেদন অনুযায়ী, নতুন trading software deploy-এর সময় একটি server-এ পুরোনো কোড রয়ে যায়, আর এক ঘণ্টারও কম সময়ে কয়েকশো মিলিয়ন ডলার (সূত্রভেদে প্রায় ৪৪০–৪৬০ মিলিয়ন) ক্ষতি হয়, আর কিছুদিন পরে প্রতিষ্ঠানটি অন্য একটি প্রতিষ্ঠানের সাথে একীভূত হয়। আগে থেকে কেউ হয়তো এমন ঝুঁকির সম্ভাবনা খুব কম ধরতেন — RE-র হিসাবে সেটি তালিকার নিচে পড়ে যেত।
তাই অভিজ্ঞ দল কয়েকটি বাড়তি নিয়ম রাখে। প্রথমত, impact-এর একটি সীমা: ক্ষতি নির্দিষ্ট অঙ্কের বেশি হলে (heat map-এর impact band ৫) সম্ভাবনা যতই কম হোক, আলাদা আলোচনা আর অন্তত একটি contingency বাধ্যতামূলক। দ্বিতীয়ত, সম্ভাবনার অনুমান নিয়ে বিনয়: খুব কম সম্ভাবনা মাপা প্রায় অসম্ভব, আর মানুষ সাধারণত কখনো না-দেখা ঘটনার সম্ভাবনা কম ধরেন। Nassim Nicholas Taleb-এর “black swan” ধারণা (২০০৭) এই অন্ধত্ব নিয়েই। তৃতীয়ত, transfer কৌশল — বিমা বা চুক্তির মাধ্যমে বিশাল ক্ষতির কিছু অংশ অন্য পক্ষের কাছে পাঠানো; বিমা কোম্পানি অনেক গ্রাহকের ঝুঁকি একসাথে রাখে বলে তাদের জন্য গড়ের যুক্তি খাটে। চতুর্থত, নকশায় ক্ষতির সীমা টানা: স্বয়ংক্রিয় kill switch আর ধাপে ধাপে release (canary).
মূল উপলব্ধি: RE সাজানোর ভালো হাতিয়ার, কিন্তু একমাত্র মাপকাঠি নয়। “গড়ে কত হারাব” প্রশ্নের পাশে সবসময় জিজ্ঞেস করুন “সবচেয়ে খারাপ হলে টিকে থাকব কি?”
প্র ০২একটি প্রতিষ্ঠান CMMI level ৫ — তাহলে কি তাদের বানানো software ভালো হবেই?
না, আর এই পার্থক্য বোঝা CMMI বোঝার মূল চাবি। CMMI প্রক্রিয়ার পরিপক্বতা মূল্যায়ন করে — প্রতিষ্ঠান পরিকল্পনা করে কি না, মাপে কি না, প্রক্রিয়া নিয়ন্ত্রণ ও উন্নত করে কি না। এর পেছনের অনুমান হলো ভালো প্রক্রিয়া থেকে গড়ে ভালো, পূর্বাভাসযোগ্য ফল আসে। কিন্তু একটি নির্দিষ্ট project, দল বা পণ্যের মান তার নিশ্চয়তা নয়।
ইতিহাসটি এখানে শিক্ষণীয়। ১৯৮০-র দশকে মার্কিন প্রতিরক্ষা বিভাগ দেখছিল, software ঠিকাদারদের অনেক project দেরিতে, বাজেটের বাইরে আর ত্রুটিপূর্ণ। কোন ঠিকাদারকে কাজ দেবেন, বুঝতে একটি মাপকাঠি দরকার ছিল। Humphrey-র নেতৃত্বে SEI প্রথমে একটি প্রশ্নমালাভিত্তিক মূল্যায়ন (১৯৮৭) আর পরে software CMM বানায়। অর্থাৎ শুরু থেকেই এটি ছিল ক্রেতার দৃষ্টিতে “এই প্রতিষ্ঠানের কাজের ধারা কতটা নির্ভরযোগ্য” প্রশ্নের উত্তর। ফলে level একটি বাজারের সংকেতও হয়ে দাঁড়ায় — অনেক বড় চুক্তিতে নির্দিষ্ট level চাওয়া হতে থাকে, আর তাতে কিছু প্রতিষ্ঠান appraisal-এর জন্য কাগজপত্র তৈরিতে মনোযোগ দেয়, আসল চর্চায় কম।
আরও কয়েকটি সীমা: appraisal সাধারণত প্রতিষ্ঠানের একটি অংশ বা নির্দিষ্ট কয়েকটি project-এর নমুনা দেখে, পুরো প্রতিষ্ঠান নয়; ফল একটি নির্দিষ্ট সময়ের ছবি, আর মেয়াদ সীমিত। ২০০০-এর দশকে Agile পদ্ধতির উত্থানে CMMI-কে ভারী আর দলিলনির্ভর বলে সমালোচনা হয়; SEI নিজেই ২০০৮ সালে একটি technical note-এ (শিরোনাম মোটামুটি “CMMI or Agile: Why Not Embrace Both!”) দেখায় যে দুটি একসাথে চলতে পারে — CMMI বলে কী অর্জন করতে হবে, Agile বলে কীভাবে।
তবু level-এর মূল্য আছে। Level ৪–৫-এর প্রতিষ্ঠানে তথ্যভিত্তিক সিদ্ধান্ত, স্থির প্রক্রিয়া আর মূল কারণ বিশ্লেষণের চর্চা থাকার কথা — যা ভালো quality-র সম্ভাবনা বাড়ায়। ক্রেতা হিসেবে level দেখার পাশাপাশি জিজ্ঞেস করুন: আমাদের project-এ কোন দল কাজ করবে, তারা কি সেই appraisal-এর অংশ ছিল, আর তাদের সাম্প্রতিক escape rate বা lead time-এর তথ্য দেখাতে পারবে কি?
মূল উপলব্ধি: Maturity level প্রক্রিয়ার সক্ষমতার সংকেত, পণ্যের মানের সনদ নয়। সংকেতকে ফলের সাথে মিলিয়ে দেখতে হয়।
প্র ০৩ISO 9001 সনদ পাওয়া একটি software প্রতিষ্ঠান কি “ভালো quality-র” প্রতিষ্ঠান?
ISO 9001 যা দাবি করে, তা হলো প্রতিষ্ঠানের একটি quality management system আছে — নীতি, লক্ষ্য, নথিবদ্ধ প্রক্রিয়া, অভ্যন্তরীণ audit, ব্যবস্থাপনার পর্যালোচনা আর উন্নতির ব্যবস্থা — আর স্বাধীন certification body তা নিরীক্ষা করে মানদণ্ডের সাথে মিল পেয়েছে। পণ্যটি নির্দিষ্ট মানের, এমন কোনো দাবি সনদে নেই।
১৯৮৭ সালে প্রথম প্রকাশের পর ISO 9000 পরিবার দ্রুত ছড়ায়, বিশেষত যখন অনেক ক্রেতা সরবরাহকারীর কাছে সনদ চাইতে শুরু করে। ১৯৯০-এর দশকে একটি পরিচিত সমালোচনা ছিল যে মানদণ্ডটি “আপনি যা বলেন তা করুন, আর যা করেন তা লিখে রাখুন” — খারাপ প্রক্রিয়াও নিখুঁতভাবে নথিবদ্ধ হলে সনদ পেতে পারে। আরেকটি সমস্যা: মানদণ্ডটি কারখানার প্রেক্ষাপটে তৈরি, তাই software-এ “design”, “production” আর “inspection” কী, তা বোঝাতে আলাদা নির্দেশিকা লাগে — সেজন্যই ISO 9000-3 আর পরে ISO/IEC 90003 এসেছে।
২০০০ আর ২০১৫ সালের সংশোধনীতে মানদণ্ড অনেক বদলেছে। ২০০০ সংস্করণে প্রক্রিয়াভিত্তিক দৃষ্টি (process approach) আর গ্রাহক-সন্তুষ্টির ওপর জোর আসে; ২০১৫ সংস্করণে দলিলের কঠোর তালিকা কমে, আর risk-based thinking যুক্ত হয় — প্রতিষ্ঠানকে নিজের প্রেক্ষাপটের ঝুঁকি ও সুযোগ বিবেচনা করে QMS সাজাতে হয়। ফলে আধুনিক রূপে এটি এই পর্বের দুই ভাগ — risk আর quality — জুড়ে দেয়।
বাস্তবে সনদের মূল্য নির্ভর করে প্রতিষ্ঠান এটিকে কীভাবে নেয় তার ওপর। কেউ এটিকে শুধু টেন্ডারের শর্ত হিসেবে দেখে, audit-এর আগের সপ্তাহে কাগজ গোছায়; কেউ অভ্যন্তরীণ audit আর corrective action-কে সত্যিই PDCA-র চক্র হিসেবে চালায়। একটি software প্রতিষ্ঠান বাছাইয়ের সময় তাই সনদের পাশাপাশি দেখুন — তাদের review, test, release আর incident-এর পরের পর্যালোচনা (postmortem) আসলে কেমন।
মূল উপলব্ধি: ISO 9001 একটি ব্যবস্থা থাকার প্রমাণ, ব্যবস্থাটি ভালো ফল দিচ্ছে কি না তার প্রমাণ নয়। ফলের প্রমাণ আসে মাপা তথ্য থেকে।
প্র ০৪অনেক metric programme কেন ব্যর্থ হয়? “যা মাপা যায় তা-ই গুরুত্বপূর্ণ” কথাটির বিপদ কোথায়?
Metric programme ব্যর্থ হওয়ার সবচেয়ে সাধারণ কারণ হলো সংখ্যা আগে, প্রশ্ন পরে। Tool সহজে যা দেয় — লাইন, commit, টিকিট, coverage — তা-ই dashboard-এ ওঠে, কারণ সেগুলো বিনা খরচে পাওয়া যায়। কিন্তু যা সহজে মাপা যায়, তা সবসময় যা জরুরি তা নয়। GQM ঠিক এই উল্টো ক্রম ঠিক করতে বানানো: Basili-র NASA-র অভিজ্ঞতা ছিল যে লক্ষ্য ছাড়া সংগ্রহ করা তথ্যের বড় অংশ পরে অকেজো বা অসংগত প্রমাণিত হয়।
দ্বিতীয় কারণ Goodhart-এর সূত্র। Software-এর ইতিহাসে লাইন-সংখ্যা দিয়ে উৎপাদনশীলতা মাপার চেষ্টা বারবার হয়েছে, আর প্রতিবারই একই ফল: কোড লম্বা হয়, পুনর্ব্যবহার কমে, ভালো refactoring (যা লাইন কমায়) “নেতিবাচক উৎপাদন” দেখায়।
তৃতীয় কারণ মানুষের প্রতিক্রিয়া। Metric যদি ব্যক্তির মূল্যায়ন বা শাস্তির সাথে জোড়া হয়, তথ্য বিকৃত হয়: defect রিপোর্ট কমে, ছোট সমস্যা লুকানো হয়, কাজ ভাগ হয় সংখ্যা দেখে। Deming-এর quality দর্শনের একটি পরিচিত নীতি ছিল ভয় দূর করা — ভয় থাকলে মানুষ সত্য তথ্য দেন না।
উল্টো উদাহরণও আছে। DORA গবেষণা দলের চারটি delivery metric (deploy-এর হার, lead time, change failure rate, পুনরুদ্ধারের সময়; বিস্তারিত পর্ব ৫৯) জনপ্রিয় হয়েছে কারণ এগুলো একটি স্পষ্ট লক্ষ্যের সাথে বাঁধা (দ্রুত ও নিরাপদ delivery), দুটি করে জোড়ায় একে অপরকে ভারসাম্যে রাখে (গতি বনাম স্থিতি), আর দলের স্তরে মাপা হয়, ব্যক্তির নয়। তবু DORA-র লেখকেরাও সতর্ক করেন — এগুলোকে দলের তুলনা বা লক্ষ্যমাত্রা বানালে একই ফাঁদ।
মূল উপলব্ধি: একটি metric তখনই কাজের, যখন তার পেছনে একটি প্রশ্ন আছে, তার সংজ্ঞা লেখা আছে, তাকে ঠকানো কঠিন বা অন্য metric তার ভারসাম্য রাখে, আর সে শেখার কাজে লাগে, শাস্তির নয়।
প্র ০৫কারখানার জন্য বানানো statistical process control কি software-এ খাটে?
Walter Shewhart ১৯২০-এর দশকে Western Electric-এর টেলিফোন যন্ত্রাংশ কারখানার সমস্যা নিয়ে কাজ করছিলেন। তাঁর মূল অন্তর্দৃষ্টি ছিল: প্রতিটি প্রক্রিয়ায় দুই রকম ওঠানামা আছে — অসংখ্য ছোট কারণের মিলিত স্বাভাবিক ওঠানামা, আর নির্দিষ্ট খুঁজে পাওয়া যায় এমন কারণ। প্রথমটির প্রতিক্রিয়ায় প্রতিটি বিচ্যুতিতে প্রক্রিয়া বদলালে অবস্থা আরও খারাপ হয় — Deming তাঁর বিখ্যাত “funnel experiment”-এ এটি দেখাতেন। দ্বিতীয়টি খুঁজে সরিয়ে ফেলতে হয়। Control chart এই দুটি আলাদা করার একটি অর্থনৈতিক নিয়ম দেয়: ৩σ-এর সীমা বেছে নেওয়া হয়েছিল কারণ এতে ভুল সতর্কতা আর ধরা না পড়া সমস্যার মধ্যে বাস্তবে ভালো ভারসাম্য পাওয়া যায়।
Software-এ এর ব্যবহার প্রথমে আসে CMMI-র level ৪-এর মাধ্যমে, যেখানে প্রক্রিয়া পরিমাণগতভাবে নিয়ন্ত্রণ করতে হয়; inspection-এর গতি আর প্রতি KLOC-এ পাওয়া defect ছিল জনপ্রিয় উদাহরণ। কিন্তু চ্যালেঞ্জ অনেক। কারখানায় একই যন্ত্রাংশ লাখ বার তৈরি হয়; software-এ প্রতিটি feature আলাদা, তাই “একই প্রক্রিয়া” ধরা কঠিন। তথ্যবিন্দু কম — সপ্তাহে একটি বিন্দু হলে এক বছরে মাত্র ৫২টি। আর দলের গঠন, প্রযুক্তি, requirement বারবার বদলায়, তাই ভিত্তি-সময় দ্রুত পুরোনো হয়ে যায়।
তবু মূল চিন্তা আজ software অপারেশনের সব জায়গায়। Monitoring-এ latency বা error-এর alert-এর সীমা, flaky test শনাক্ত করা, build-এর সময়ের অস্বাভাবিক বৃদ্ধি ধরা — সবই “স্বাভাবিক ওঠানামা বনাম সংকেত” প্রশ্ন। ব্যবস্থাপনায়ও এটি কাজের: velocity এক Sprint-এ কমলে দলকে প্রশ্ন করার আগে দেখুন, সেটি আগের ওঠানামার সীমার ভেতরে কি না। ভেতরে হলে কারণ খোঁজা সময়ের অপচয়, আর মানুষকে দোষ দেওয়া অন্যায়।
তাই নিরাপদ ব্যবহার হলো: পর্যাপ্ত তথ্য জমা হলে, তুলনামূলক স্থির প্রক্রিয়ায়, সতর্ক সংজ্ঞায় control chart ব্যবহার — আর সংকেতকে সিদ্ধান্ত নয়, প্রশ্ন হিসেবে নেওয়া।
মূল উপলব্ধি: SPC-র সবচেয়ে বড় উপহার একটি সূত্র নয়, একটি অভ্যাস — প্রতিটি সংখ্যার ওঠানামায় প্রতিক্রিয়া না দেখিয়ে আগে জিজ্ঞেস করা, “এটি কি স্বাভাবিক?”
অনুশীলন
খাতা-কলম নিয়ে বসুন; হিসাবগুলো হাতে করে তারপর উত্তর মেলান।
-
হিসাব — RE আর RRL: একটি কাল্পনিক বিশ্ববিদ্যালয়ের ফলাফল পোর্টালে ঝুঁকি X: “ফল প্রকাশের দিন database বসে যাওয়া”, সম্ভাবনা ০.৪, ক্ষতি ৳২৫ লাখ। দুটি প্রতিকার: M1 — read replica আর caching, খরচ ৳২ লাখ, সম্ভাবনা নামবে ০.১৫-এ। M2 — পুরো নতুন architecture, খরচ ৳৫ লাখ, সম্ভাবনা ০.০৫ আর ক্ষতি ৳২০ লাখ। (ক) X-এর RE কত? (খ) দুটি প্রতিকারের residual RE আর RRL কত? (গ) খরচ + residual RE তুলনা করে কোনটি বাছবেন?
(ক) RE = ০.৪ × ২৫ = ৳১০ লাখ।
(খ) M1: residual RE = ০.১৫ × ২৫ = ৳৩.৭৫ লাখ; RRL = (১০ − ৩.৭৫) ÷ ২ = ৬.২৫ ÷ ২ = ৩.১২৫। M2: residual RE = ০.০৫ × ২০ = ৳১ লাখ; RRL = (১০ − ১) ÷ ৫ = ১.৮।
(গ) কিছু না করলে প্রত্যাশিত খরচ ১০; M1-এ ২ + ৩.৭৫ = ৫.৭৫; M2-এ ৫ + ১ = ৬.০। M1 বাছুন — RRL বেশি আর মোট প্রত্যাশিত খরচও কম। তবে M2-এর residual ঝুঁকি কম; ফল প্রকাশের দিনে ব্যর্থতা যদি প্রতিষ্ঠানের সুনামের জন্য অগ্রহণযোগ্য হয় (প্র ০১-এর যুক্তি), M1-এর সাথে একটি contingency (যেমন স্থির HTML-এ ফলের বিকল্প পাতা) যোগ করা ভালো।
-
হিসাব — EMV: একটি কাল্পনিক অনলাইন বাজার অ্যাপের দল ঈদের আগে তিনটি বিকল্প ভাবছে। A: এখনই server বড় করা, খরচ ৳৬ লাখ; তাতে বসে যাওয়ার সম্ভাবনা ০.০৫, বসে গেলে ক্ষতি ৳৩০ লাখ। B: কিছু না করা; সম্ভাবনা ০.৪, ক্ষতি ৳৩০ লাখ। C: কিছু না করে একটি জরুরি সহায়তার চুক্তি করা, খরচ ৳২ লাখ; সম্ভাবনা ০.৪ থাকে, কিন্তু দ্রুত সারানোয় ক্ষতি নামে ৳১০ লাখে। (ক) প্রতিটির প্রত্যাশিত মোট খরচ কত, কোনটি বাছবেন? (খ) C-তে বসে যাওয়ার সম্ভাবনা কত হলে A আর C সমান হয়?
(ক) এখানে সব মান খরচ, তাই EMV-কে ঋণাত্মক ধরলে সবচেয়ে কম খরচই সবচেয়ে বড় EMV. A: ৬ + ০.০৫ × ৩০ = ৬ + ১.৫ = ৳৭.৫ লাখ। B: ০ + ০.৪ × ৩০ = ৳১২ লাখ। C: ২ + ০.৪ × ১০ = ২ + ৪ = ৳৬ লাখ। C বাছুন (EMV = −৬, সবচেয়ে বড়)। খেয়াল করুন, C সম্ভাবনা কমায় না, ক্ষতি কমায় — mitigation সবসময় P-তে নয়, L-এও হয়।
(খ) ২ + ১০p = ৭.৫ → p = ৫.৫ ÷ ১০ = ০.৫৫। অর্থাৎ বসে যাওয়ার সম্ভাবনা ০.৫৫-এর বেশি মনে হলে A ভালো। দলের অনুমান ০.৪ — break-even থেকে খুব দূরে নয়, তাই অনুমানটি আরেকবার যাচাই (যেমন একটি ছোট load test) করার মূল্য আছে।
-
আউটপুট অনুমান করুন: নিচের JavaScript চালালে কী ছাপা হবে? দ্বিতীয় লাইন থেকে কোন শিক্ষা পাওয়া যায়?
const r = [{id:"A",p:0.2,L:40},{id:"B",p:0.6,L:10},{id:"C",p:0.9,L:5}]; r.forEach(x => x.re = x.p * x.L); r.sort((a, b) => b.re - a.re); console.log(r.map(x => x.id + ":" + x.re).join(" ")); const zone = x => (x.p >= 0.5 && x.L >= 10) ? "HIGH" : "low"; console.log(r.map(zone).join(" "));আউটপুট:
A:8 B:6 C:4.5 low HIGH lowRE: A = ০.২ × ৪০ = ৮, B = ০.৬ × ১০ = ৬, C = ০.৯ × ৫ = ৪.৫; বড় থেকে ছোটে সাজানো তাই A, B, C. দ্বিতীয় লাইনে সরল নিয়ম (“সম্ভাবনা ০.৫ বা বেশি আর ক্ষতি ১০ বা বেশি হলে HIGH”) শুধু B-কে HIGH বলে — অথচ সবচেয়ে বড় প্রত্যাশিত ক্ষতি A-র। কম সম্ভাবনা-বড় ক্ষতির ঝুঁকি এমন গুণগত নিয়মে চোখ এড়িয়ে যায়; তাই impact-এর জন্য আলাদা সীমা বা RE পাশাপাশি দেখতে হয়।
-
সমালোচনা — একটি metric programme: একটি কাল্পনিক software প্রতিষ্ঠানের নতুন নিয়ম: “প্রতি মাসে প্রত্যেক ডেভেলপারের (১) লেখা লাইনের সংখ্যা, (২) বন্ধ করা টিকিট, (৩) তাঁর কোডে পাওয়া bug গোনা হবে; শীর্ষ তিনজন বোনাস পাবেন, নিচের তিনজনকে সতর্ক করা হবে। Dashboard-এ মোট download আর মোট commit-ও দেখানো হবে।” সমস্যাগুলো চিহ্নিত করুন আর GQM দিয়ে একটি ভালো বিকল্প প্রস্তাব করুন।
সমস্যা: (১) কোনো goal নেই — সংখ্যাগুলো কোন প্রশ্নের উত্তর দেবে, বলা নেই। (২) লাইন-সংখ্যা উৎপাদনশীলতার ভুল মাপ; refactoring আর পুনর্ব্যবহারকে শাস্তি দেয়, কোড লম্বা করতে উৎসাহ দেয় (Goodhart). (৩) টিকিট গোনায় সহজ টিকিট বেছে নেওয়া বা একটি কাজ কয়েক টিকিটে ভাগ করার প্রবণতা বাড়বে। (৪) ব্যক্তির bug-সংখ্যা শাস্তির সাথে জুড়লে bug লুকানো হবে, review-এ সহকর্মীর ভুল ধরতে মানুষ দ্বিধা করবেন, কঠিন অংশে কেউ কাজ করতে চাইবেন না। (৫) মোট download আর মোট commit vanity metric — সবসময় বাড়ে, কোনো সিদ্ধান্ত বদলায় না। (৬) Software দলীয় কাজ; ব্যক্তিভিত্তিক র্যাঙ্কিং সহযোগিতা নষ্ট করে।
GQM-ভিত্তিক বিকল্প: Goal — “Delivery প্রক্রিয়াকে বিশ্লেষণ করা, ব্যবহারকারীর কাছে পৌঁছানো defect আর অপেক্ষার সময় কমানোর উদ্দেশ্যে, ব্যবহারকারী ও দলের দৃষ্টিতে।” Question ১: কত ভাগ defect ব্যবহারকারীর কাছে পৌঁছায়? → escape rate, post-release defect density (দলের স্তরে, release অনুযায়ী)। Question ২: একটি পরিবর্তন চাওয়া থেকে চালু হতে কত সময় লাগে? → lead time-এর মধ্যমা ও ৮৫তম percentile. Question ৩: release কতটা নিরাপদ? → change failure rate আর পুনরুদ্ধারের সময়। নিয়ম: সংখ্যা দলের, ব্যক্তির নয়; প্রতি মাসে retrospective-এ আলোচনা, বোনাসের সাথে সরাসরি যোগ নয়; প্রতিটি metric-এর সংজ্ঞা লিখে রাখা; প্রবণতা control chart-এ দেখা।
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি software project-এ risk management-এর কাজগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- 🔍 Checklist আর দলের আলোচনায় সম্ভাব্য ঝুঁকি চিহ্নিত করা
- ⚖️ প্রতিটি ঝুঁকির সম্ভাবনা ও ক্ষতি অনুমান করে RE বা score বের করা
- 🗂️ অগ্রাধিকার অনুযায়ী সাজিয়ে প্রতিটি বড় ঝুঁকির response, owner ও trigger ঠিক করা
- 🛠️ প্রতিকারের কাজ করা আর contingency প্রস্তুত রাখা
- 📡 নিয়মিত trigger দেখা আর register হালনাগাদ করা
একটি ঝুঁকির risk exposure প্রতিকারের আগে ৳১০ লাখ, পরে ৳২ লাখ, আর প্রতিকারের খরচ ৳৪ লাখ। Boehm-এর risk reduction leverage (RRL) কত?
- ৮
- ২
- ০.৫
- ২.৫
CMMI-র staged representation-এ যে maturity level-এ প্রতিষ্ঠানের একটি মানক প্রক্রিয়া থাকে, আর প্রতিটি project তা নিজের প্রয়োজনে মানিয়ে নেয় — সেটির নাম কী?
- Managed (level ২)
- Quantitatively Managed (level ৪)
- Defined (level ৩)
- Optimizing (level ৫)
নিচের কোন কাজটি quality control (QC)-এর উদাহরণ, quality assurance (QA)-র নয়?
- Release-এর আগে নতুন build-এ regression test চালিয়ে defect খোঁজা
- দলগুলো code review-এর নিয়ম মানছে কি না audit করা
- নতুন ডেভেলপারদের secure coding-এর প্রশিক্ষণ দেওয়া
- বারবার দেখা defect থেকে review checklist হালনাগাদ করা
একটি দল তাদের payment অংশ একটি বাইরের প্রতিষ্ঠানকে নির্দিষ্ট দামের চুক্তিতে দিল, যেখানে দেরি হলে জরিমানা ওই প্রতিষ্ঠান দেবে। এটি কোন risk response কৌশল?
- Avoid
- Mitigate
- Accept
- Transfer
Goal–Question–Metric (GQM) পদ্ধতিতে কাজের সঠিক ক্রম কোনটি?
- আগে সহজে পাওয়া metric, তারপর তা থেকে goal
- Goal → question → metric
- Question → metric → goal
- Dashboard → metric → question
একটি দলের সাপ্তাহিক defect-সংখ্যার control chart-এ mean ২০ আর σ ৩। পরপর ৮ সপ্তাহের মান ২২, ২৪, ২১, ২৫, ২৩, ২২, ২৬, ২৪ — কোনোটিই upper control limit ছোঁয়নি। সবচেয়ে যুক্তিসঙ্গত ব্যাখ্যা কোনটি?
- সব বিন্দু সীমার ভেতরে, তাই প্রক্রিয়া পুরোপুরি স্বাভাবিক
- এগুলো স্বাভাবিক ওঠানামা, কারণ খোঁজার দরকার নেই
- প্রক্রিয়ার গড় সম্ভবত সরে গেছে — একটি special cause খোঁজা দরকার
- Lower control limit ভেঙেছে
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- Risk management চক্র: identify → analyse → plan → monitor; ঝুঁকি তিন ধরনের — project, product (technical), business; লিখুন কারণ → ঘটনা → ফল আকারে।
- Heat map দ্রুত সাজায়, RE = P × L টাকার ভাষায়; কম সম্ভাবনা-বড় ক্ষতির ঝুঁকি heat map-এ ছোট দেখায়।
- Response: avoid, transfer, mitigate, accept (সুযোগে exploit, share, enhance); RRL = (RE আগে − RE পরে) ÷ খরচ, তখনকার RE থেকে মাপুন; বড় সিদ্ধান্তে EMV ও decision tree.
- Register-এ owner, trigger, response, contingency আর residual RE; RMMM = mitigation, monitoring, management. QA প্রক্রিয়া, QC পণ্য।
- CMMI: Initial, Managed, Defined, Quantitatively Managed, Optimizing; ISO 9001 একটি QMS-এর প্রমাণ, পণ্যের নয়; metric বাছুন GQM দিয়ে, আর ওঠানামা পড়ুন control chart-এ।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ৬৩ · দলগত কাজ আর open source — documentation, communication আর software licenseপরবর্তী পর্বদলের যোগাযোগ, লেখা দলিল আর license বোঝা।
- সফটওয়্যার ইঞ্জিনিয়ারিং ও Git · কোর্স হোম৭০টি পর্বপুরো কোর্সের রোডম্যাপ — process থেকে Git internals পর্যন্ত।
- পর্ব ০৩ · Software quality — ISO/IEC 25010, maintainability, reliability আর quality মাপাভিত্তিMTBF, DRE, defect density আর cost of quality-র হিসাব।
- System Design · Observabilityগভীরে যানMetric, log, trace আর alert-এর সীমা — চলমান system-এ সংখ্যা পড়া।
- System Design · Resilience patternপাশের ট্র্যাকTimeout, retry, circuit breaker — technical ঝুঁকি কমানোর নকশা।