এই পর্বে যা শিখবেন
- লিখিত উত্তর নম্বর-ভাগের ক্রমে সাজানো, আর খাতায় পরিষ্কার UML class, sequence ও অন্যান্য ছবি আঁকা
- Process model, Scrum, Git-এর আচরণ, requirement engineering আর SOLID-এর নির্ভুল মডেল উত্তর
- Design pattern, architecture, refactoring, testing-এর স্তর ও কৌশল — উদাহরণ আর যাচাই করা সংখ্যাসহ
- CI/CD pipeline, branching strategy, risk management plan, COCOMO আর CPM-এর ছোট হিসাব
- ভাইভায় দুই–চার বাক্যে উত্তর, follow-up সামলানো, আর AI-এর দেওয়া উত্তর যাচাই করা
১ · উত্তর লেখার কৌশল — কাঠামো, নম্বর-ভাগ, খাতায় UML আর সময়
লিখিত পরীক্ষায় একই জ্ঞানে দুজন আলাদা নম্বর পান। যিনি সংজ্ঞার পরে একটি ছবি আঁকেন, একটি তুলনার টেবিল দেন আর শেষে বলেন “কোন অবস্থায় কোনটি”, তিনি বেশি পান। পরীক্ষকের হাতে থাকে একটি মার্ক-স্কিম — কোন অংশে কত নম্বর। দর্জি যেমন মাপের খাতায় বুক, কোমর, হাতা আলাদা ঘরে লেখেন, উত্তরের অংশগুলোও আলাদা শিরোনামে লিখলে পরীক্ষক প্রতিটি নম্বর সহজে খুঁজে পান।
- সংজ্ঞা (এক–দুই বাক্য): নির্ভুল, আর সম্ভব হলে উৎসসহ — “Boehm-এর ভাষায় verification হলো ‘are we building the product right?’”
- কীভাবে কাজ করে: নম্বর দেওয়া ধাপে — কোন কাজের পরে কোনটি, কে কী সিদ্ধান্ত নেয়।
- ছবি বা টেবিল: process-এর flow, UML, commit graph, test pyramid বা pipeline. “পার্থক্য লিখুন” প্রশ্নে টেবিল প্রায় বাধ্যতামূলক।
- উদাহরণ বা সংখ্যা: একটি কাল্পনিক project ধরে — “একটি বিশ্ববিদ্যালয়ের ফলাফল পোর্টাল”. হিসাবে সূত্র → মান → একক।
- সুবিধা-অসুবিধা: কী পেলেন, কী দিলেন, কখন এটি বেছে নেবেন না।
- উপসংহার: এক–দুই বাক্যে কোন অবস্থায় কোনটি।
নিচের প্রতিটি মডেল উত্তর এই ক্রম মেনেছে। মুখস্থ নয় — কাঠামোটি শিখুন।
প্রশ্নের ক্রিয়াপদ কী চায়
| প্রশ্নে লেখা | সাধারণ নম্বর | যা দিতেই হবে |
|---|---|---|
| সংজ্ঞা দিন / কী? | ২–৩ | শর্তসহ এক বাক্য + কেন লাগে + একটি উদাহরণ |
| পার্থক্য লিখুন / বনাম | ৪–৫ | একই মাপকাঠির অন্তত চারটি সারির টেবিল + শেষে “কখন কোনটি” |
| স্তর বা তালিকা দিন, যুক্তিসহ | ৪–৫ | সঠিক ক্রমে নম্বর দেওয়া তালিকা, প্রতিটির পাশে এক লাইনের কারণ বা উদাহরণ |
| ছবিসহ ব্যাখ্যা করুন | ৮–১০ | লেবেলসহ ছবি, নম্বর দেওয়া ধাপ, একটি উদাহরণ, সুবিধা-অসুবিধা |
| নকশা বা diagram আঁকুন | ১০ | অনুমান লিখে শুরু → সঠিক notation-এ ছবি → multiplicity ও লেবেল → ছবির নিচে দুই–তিন লাইনের ব্যাখ্যা |
| হিসাব করুন | ৩–১০ | সূত্র → বসানো মান → একক সহ ফল → এক লাইনে মানে |
খাতায় UML — পরিষ্কার আঁকার নিয়ম
- আগে পেন্সিলে বাক্স, পরে রেখা: class-গুলো আগে সাজান যাতে রেখা কম কাটাকাটি করে; base class ওপরে, subclass নিচে।
- Class-এর তিন ঘর: নাম; attribute
- due : Date; operation+ fine() : Money. Abstract class-এর নাম তির্যক বা পাশে{abstract}— হাতে তির্যক বোঝা কঠিন, তাই{abstract}লেখাই নিরাপদ। - প্রান্তের চিহ্ন বড় আর স্পষ্ট: হীরা সমগ্রের দিকে (ফাঁপা = aggregation, ভরাট = composition), ফাঁপা ত্রিভুজ base class-এর দিকে। ছোট গোল দাগে পরীক্ষক হীরা আর তীর আলাদা করতে পারেন না।
- প্রতিটি association-এর দুই প্রান্তে multiplicity:
1,0..*,1..*,0..5— এটিই ব্যবসার নিয়ম, আর এখানেই সবচেয়ে বেশি নম্বর কাটে। - Sequence diagram-এ সময় ওপর থেকে নিচে: ওপরে lifeline-এর বাক্স (
:LoanService), নিচে ড্যাশ রেখা; ভরাট তীর = synchronous call, খোলা তীর = asynchronous, ড্যাশ রেখা = reply; শর্তেaltবাopt-এর ফ্রেম। - ছবির নিচে অনুমান: “ধরা হয়েছে একজন সদস্য একসাথে সর্বোচ্চ ৫টি বই নিতে পারেন” — অস্পষ্ট প্রশ্নে অনুমান লিখলেই যুক্তিসংগত উত্তর পূর্ণ নম্বর পায়।
- আধা পাতা, রুলার, কম বাক্স: ৬–৮টির বেশি class লাগলে দুটি ছবিতে ভাগ করুন; পূর্ণ মডেল উত্তর অংশ ঘ-০৫-এ।
কোন প্রশ্নে কোন ছবি
| প্রশ্ন | ছবি | যা প্রায়ই বাদ পড়ে |
|---|---|---|
| Process model | Waterfall-এর সিঁড়ি, V-এর দুই বাহু, spiral-এর চার quadrant | V-এর আড়াআড়ি জোড়া (requirement ↔ acceptance); spiral-এ ঝুঁকি বিশ্লেষণের quadrant |
| Git-এর প্রশ্ন | Commit graph — বৃত্ত, parent-এর দিকে তীর, branch আর HEAD-এর লেবেল | Rebase-এর পরে নতুন hash (C′), merge commit-এর দুই parent |
| Testing | V-model, test pyramid, control-flow graph | CFG-তে node আর edge গোনার স্পষ্ট নম্বর |
| CI/CD, requirement engineering | বাঁ থেকে ডানে ধাপের flow, ফিরতি তীর (feedback) | ব্যর্থ হলে কোথায় থামে আর কার কাছে খবর যায় |
| CPM | Activity-on-node network, প্রতিটি node-এ ES, EF, LS, LF | Critical path মোটা দাগে, float-এর হিসাব |
সময় ভাগ
নিয়মটি সরল: মোট মিনিট ÷ মোট নম্বর। ধরা যাক ১৮০ মিনিটে ৯০ নম্বর — প্রতি নম্বরে দুই মিনিট, একটি ১০ নম্বরের প্রশ্নে কুড়ি মিনিট। শুরুতে পাঁচ মিনিট প্রশ্ন বাছাইয়ে, শেষে দশ মিনিট মেলাতে; দীর্ঘ প্রশ্নে প্রথম দুই মিনিট মার্জিনে খসড়া। আটকে গেলে কাঠামো আর সূত্র লিখে এগিয়ে যান — পদ্ধতির নম্বর থাকে।
নিচের stepper-এ একটি ১০ নম্বরের প্রশ্নের উত্তর ধাপে ধাপে গড়া হয়েছে — প্রতিটি অংশ যোগ হলে নম্বর আর সময় কীভাবে জমে:
| যোগ হলো | |
| খাতায় যা লিখলেন | |
| জমা নম্বর | |
| খরচ হওয়া সময় |
- পরিকল্পনা। মার্জিনে পাঁচ শব্দের খসড়া — দুই মিনিটে কাঠামো ঠিক, কোনো অংশ বাদ পড়বে না।
- সংজ্ঞা — ১ নম্বর। SDLC আর process model আলাদা করে বলুন: প্রথমটি কাজের ধাপ, দ্বিতীয়টি সেই ধাপগুলোর ক্রম ও পুনরাবৃত্তির নিয়ম।
- চারটি ছোট ছবি — আরও ৩ নম্বর। প্রতিটি মডেলের একটি করে ছোট ছবি আর দুই লাইনের বর্ণনা। V-এ আড়াআড়ি জোড়া (requirement ↔ acceptance test, architecture ↔ integration test) আর spiral-এ ঝুঁকি বিশ্লেষণের quadrant না আঁকলে নম্বর কাটে।
- তুলনার টেবিল — আরও ৩ নম্বর। একই পাঁচটি মাপকাঠির সারি, প্রতিটি ঘরে দুই–চার শব্দ। “ভালো/খারাপ” নয়, নির্দিষ্ট কথা — “প্রথম কাজের অংশ শেষ ধাপে” বা “প্রতি loop-এ”।
- Scenario-তে বাছাই — আরও ২ নম্বর। প্রশ্নের project-এর বৈশিষ্ট্য থেকে যুক্তি: কোন অংশ স্থির, কোথায় অনিশ্চয়তা, ঝুঁকি কোথায়। একটি মডেল বেছে বিকল্পটি কেন নয়, তাও এক বাক্যে।
- উপসংহার — শেষ ১ নম্বর। একটি প্রচলিত ভুল ধারণা শুধরে দিন (Royce-এর ১৯৭০ সালের লেখা এক-পাসের রূপের পক্ষে ছিল না), বলুন বাস্তবে প্রায়ই hybrid, আর এক লাইনের সিদ্ধান্ত। উনিশ মিনিটে দশ নম্বর।
কোন মডিউলের প্রশ্ন কোথায়
| কোর্সের মডিউল | পর্ব | লিখিত প্রশ্ন | ভাইভা প্রশ্ন |
|---|---|---|---|
| ১ · Software engineering-এর ভিত্তি | ১–৬ | অংশ ২ (ক-০১–ক-০৭) | ভ-০১–ভ-০৪ |
| ২, ৩ · Git-এর মৌলিক আর দলগত কাজ; ৯-এর Git অংশ | ৭–১৯, ৫২–৫৭ | অংশ ৩ (খ-০১–খ-০৯) | ভ-০৫–ভ-১৭ |
| ৪ · Requirement engineering | ২০–২৪ | অংশ ৪ (গ-০১–গ-০৫) | ভ-১৮–ভ-২০ |
| ৫, ৬ · Design-এর নীতি, UML আর design pattern | ২৫–৩৭ | অংশ ৫ (ঘ-০১–ঘ-০৯) | ভ-২১–ভ-২৪ |
| ৭ · Architecture, clean code আর maintenance | ৩৮–৪৪ | অংশ ৬ (ঙ-০১–ঙ-০৫) | ভ-২৫–ভ-২৬ |
| ৮ · Testing আর code quality | ৪৫–৫১ | অংশ ৭ (চ-০১–চ-০৬) | ভ-২৭–ভ-২৯ |
| ৯-এর CI আর ১০ · Delivery, project management আর পেশাদারি | ৫৮–৬৫ | অংশ ৮ (ছ-০১–ছ-০৭) | ভ-৩০–ভ-৩২ |
এই পাতার কোনো প্রশ্ন কোনো নির্দিষ্ট পরীক্ষা, প্রতিষ্ঠান বা কোম্পানির ইন্টারভিউ থেকে নেওয়া নয়; এ ধরনের প্রশ্ন বিশ্ববিদ্যালয়, চাকরি আর ইন্টারভিউর পরীক্ষায় প্রায়ই আসে। নম্বর-ভাগ আনুমানিক — আপনার পরীক্ষার নিয়ম আলাদা হতে পারে। সব project কাল্পনিক; সব অনুমান প্রশ্নেই লেখা।
২ · অংশ ক — Software engineering-এর ভিত্তি আর process model (মডিউল ১)
রিভিশন: পর্ব ১ (সংজ্ঞা, Brooks-এর চার কঠিনতা), পর্ব ২ (software crisis, NATO ১৯৬৮), পর্ব ৩ (ISO/IEC 25010, DRE, MTBF), পর্ব ৪ (waterfall থেকে spiral, risk exposure), পর্ব ৫ (Scrum Guide 2020, velocity) আর পর্ব ৬ (WIP limit, Little-এর সূত্র).
ক-০১Software engineering-এর সংজ্ঞা দিন। Programming থেকে এটি কীভাবে আলাদা? Brooks-এর মতে software কেন স্বভাবগতভাবে কঠিন? — ৪ নম্বর (সহজ)
সংজ্ঞা: IEEE-র প্রচলিত সংজ্ঞায় software engineering হলো software-এর উন্নয়ন, পরিচালনা আর রক্ষণাবেক্ষণে একটি নিয়মবদ্ধ, শৃঙ্খলাপূর্ণ আর মাপা যায় এমন পদ্ধতির প্রয়োগ। Programming আজকের সমস্যার কোড লেখা; software engineering সেই কোডকে বহু বছর, বহু মানুষ মিলে নিরাপদে বদলানোর বিদ্যা — তাই এতে requirement, নকশা, test, version control, দলগত কাজ আর maintenance-ও পড়ে।
Brooks-এর চার কঠিনতা (“No Silver Bullet”, ১৯৮৬): complexity (অংশগুলোর পারস্পরিক জটিলতা), conformity (বাইরের নিয়ম আর system-এর সাথে মানিয়ে চলা), changeability (ক্রমাগত বদলের চাপ), invisibility (গঠন চোখে দেখা যায় না)।
নম্বর কোথায়: সংজ্ঞা (১), পার্থক্যে দুটি নির্দিষ্ট দিক (১), চার কঠিনতা নামসহ (২)। পর্ব ১
যেখানে নম্বর কাটে: “ভালো কোড লেখা” বলে থেমে যাওয়া; maintenance আর দলের দিকটি বাদ দেওয়া।
ক-০২Software crisis কী ছিল? ১৯৬৮-র NATO সম্মেলনের গুরুত্ব লিখুন। Brooks’s law ব্যাখ্যা করুন: ৬ জনের দলে আরও ২ জন যোগ দিলে যোগাযোগের পথ কতটি বাড়ে? — ৫ নম্বর (সহজ)
Software crisis: ১৯৬০-এর দশকের শেষে বড় project প্রায়ই দেরিতে শেষ হতো, বাজেট ছাড়াত আর ভুলে ভরা থাকত; হার্ডওয়্যার যত দ্রুত বড় হচ্ছিল, প্রোগ্রাম লেখার পদ্ধতি তত দ্রুত এগোয়নি। NATO সম্মেলন (Garmisch, ১৯৬৮) “software engineering” নামটিকে জনপ্রিয় করে — লক্ষ্য ছিল প্রোগ্রাম বানানোকে প্রকৌশলের নিয়মে আনা।
Brooks’s law (The Mythical Man-Month, ১৯৭৫): দেরি হওয়া project-এ লোক বাড়ালে প্রায়ই আরও দেরি — নতুনদের শেখাতে সময় যায়, আর যোগাযোগের পথ বাড়ে n(n−1)/2 হারে।
- ৬ জনে: ৬ × ৫ ÷ ২ = ১৫টি পথ।
- ৮ জনে: ৮ × ৭ ÷ ২ = ২৮টি পথ — ১৩টি বাড়ল, অথচ মানুষ বাড়ল মাত্র ২ জন।
নম্বর কোথায়: crisis-এর লক্ষণ (১), NATO-র সাল ও গুরুত্ব (১), Brooks’s law ও কারণ (১.৫), হিসাব (১.৫)। পর্ব ২ · পর্ব ১
যেখানে নম্বর কাটে: পথের সংখ্যা n² বা n লেখা; Brooks’s law-কে “কখনো লোক বাড়াবেন না” বলে চরম করে লেখা — project-এর শুরুতে বা স্বাধীন কাজে লোক বাড়ানো কাজে আসতে পারে।
ক-০৩Fault, error আর failure-এর পার্থক্য লিখুন। Release-এর আগে ৯০টি আর পরে ১০টি defect ধরা পড়লে DRE কত? MTBF ৫০০ ঘণ্টা, MTTR ২ ঘণ্টা হলে availability কত? — ৫ নম্বর (মাঝারি)
পার্থক্য: fault = কোডের ভুল (যেমন >-এর জায়গায় >=), ঘুমিয়ে থাকতে পারে; error = নির্দিষ্ট ইনপুটে fault জেগে ভুল অবস্থা তৈরি করে; failure = সেই ভুল বাইরে দেখা দেয় — ব্যবহারকারী ভুল ফল পান।
- DRE = release-এর আগে ধরা ÷ মোট = ৯০ ÷ (৯০ + ১০) = ০.৯০, অর্থাৎ ৯০%.
- Availability = MTBF ÷ (MTBF + MTTR) = ৫০০ ÷ ৫০২ ≈ ০.৯৯৬০, অর্থাৎ প্রায় ৯৯.৬%.
মানে: MTTR অর্ধেক করলে (১ ঘণ্টা) availability প্রায় ৯৯.৮% — দ্রুত মেরামতও reliability-র মতোই গুরুত্বপূর্ণ।
নম্বর কোথায়: তিন সংজ্ঞা আর একটি উদাহরণ (২), DRE সূত্র ও মান (১.৫), availability (১.৫)। পর্ব ৩
যেখানে নম্বর কাটে: DRE-তে ৯০ ÷ ১০ = ৯ লেখা; MTTR-কে MTBF-এর সাথে যোগ না করা; fault আর failure গুলিয়ে ফেলা।
ক-০৪Waterfall বনাম spiral model — পার্থক্য লিখুন। কোন ধরনের project-এ কোনটি? — ৫ নম্বর (সহজ)
| মাপকাঠি | Waterfall | Spiral (Boehm, ১৯৮৬/১৯৮৮) |
|---|---|---|
| চলার ধরন | ধাপে ধাপে এক দিকে, একবার | বারবার loop, প্রতিটি loop-এ চার quadrant |
| চালিকাশক্তি | নথি আর ধাপের শেষ (document-driven) | ঝুঁকি (risk-driven): RE = P × L-এ সবচেয়ে বড় ঝুঁকি আগে |
| Requirement | শুরুতেই স্থির ধরে নেয় | অনিশ্চিত হলেও চলে; prototype দিয়ে পরিষ্কার হয় |
| প্রথম কাজের অংশ | একদম শেষে | প্রথম loop-এর prototype থেকেই |
| দেরিতে পরিবর্তনের খরচ | অনেক বেশি | কম, কিন্তু ঝুঁকি বিশ্লেষণের দক্ষতা আর খরচ লাগে |
কখন কোনটি: requirement স্থির, ছোট, নিয়মে বাঁধা কাজে (যেমন পুরোনো system-এর হুবহু স্থানান্তর) waterfall; বড়, দামি, প্রযুক্তি-ঝুঁকির project-এ (নতুন payment বা রেলের সংকেত) spiral.
নম্বর কোথায়: চার–পাঁচ সারির টেবিল (৪), কখন কোনটি (১)। পর্ব ৪
যেখানে নম্বর কাটে: spiral-এর চার quadrant-এর নাম না জানা (লক্ষ্য ও বিকল্প → ঝুঁকি বিশ্লেষণ ও prototype → তৈরি ও যাচাই → পরের পরিকল্পনা); spiral-কে শুধু “বারবার waterfall” বলা।
ক-০৫SDLC-এর প্রধান process model — waterfall, V-model, incremental/iterative, spiral আর Agile — তুলনা করুন, ছবির বর্ণনাসহ। কোন অবস্থায় কোনটি উপযুক্ত? — ১০ নম্বর (মাঝারি)
সংজ্ঞা: SDLC হলো requirement → design → construction → testing → deployment → maintenance ধাপের জীবনচক্র; process model ঠিক করে ধাপগুলো কোন ক্রমে, কতবার আর কোন যাচাই-বিন্দু মেনে চলবে।
ছবি (খাতায় পাঁচটি ছোট স্কেচ): waterfall — ওপর থেকে নিচে সিঁড়ি; V-model — বাঁ বাহুতে requirement → system design → architecture → module design, তলায় coding, ডান বাহুতে unit → integration → system → acceptance test, আর প্রতিটি জোড়ার মাঝে আড়াআড়ি ড্যাশ রেখা; incremental — পরপর কয়েকটি ছোট waterfall, প্রতিটির শেষে একটি release; spiral — ভেতর থেকে বাইরে ঘোরা loop, চার quadrant; Agile — ছোট sprint-এর বৃত্ত, প্রতিটির শেষে কাজ করা increment আর feedback-এর তীর।
| মডেল | Requirement | ঝুঁকি সামলায় | প্রথম ব্যবহারযোগ্য অংশ | উপযুক্ত |
|---|---|---|---|---|
| Waterfall | স্থির | দুর্বল, শেষে ধরা পড়ে | শেষে | ছোট, চেনা, চুক্তিতে বাঁধা কাজ |
| V-model | স্থির | test পরিকল্পনা আগে, তাই কিছুটা | শেষে | নিয়ন্ত্রিত, নিরাপত্তা-সংবেদী ক্ষেত্র |
| Incremental / iterative | মূল অংশ জানা, বাকিটা বদলায় | ছোট ধাপে | প্রথম increment-এ | দ্রুত মূল সুবিধা দরকার এমন product |
| Spiral | অনিশ্চিত | সবচেয়ে ভালো — প্রতি loop-এ | prototype থেকে | বড়, দামি, নতুন প্রযুক্তির project |
| Agile (Scrum) | প্রতিনিয়ত বদলায় | ছোট sprint আর feedback-এ | প্রথম sprint-এর শেষে | গ্রাহকের সাথে ঘনিষ্ঠ, বদলানো বাজার |
উপসংহার: কোনো মডেল সব জায়গায় সেরা নয়; requirement-এর স্থিরতা, ঝুঁকি আর চুক্তি দেখে বাছাই — বাস্তবে প্রায়ই hybrid. উত্তরটি ধাপে ধাপে গড়া আছে অংশ ১-এর stepper-এ।
নম্বর কোথায়: সংজ্ঞা (১), ছবির বর্ণনা (৩), টেবিল (৩), কখন কোনটি (২), উপসংহার (১)। পর্ব ৪ · পর্ব ৫
যেখানে নম্বর কাটে: incremental আর iterative এক বলে লেখা (প্রথমটি অংশ যোগ, দ্বিতীয়টি বারবার উন্নত করা — বাস্তবে একসাথে চলে); V-model-এর আড়াআড়ি জোড়া বাদ।
ক-০৬Scrum framework ব্যাখ্যা করুন — দায়িত্ব, event আর artifact. একটি দলের শেষ তিন sprint-এর velocity ১৮, ২২, ২০; backlog-এ ১২০ story point বাকি — কত sprint লাগতে পারে? — ১০ নম্বর (মাঝারি)
ভিত্তি: Agile Manifesto (২০০১) — ৪টি মূল্যবোধ, ১২টি নীতি। Scrum তার একটি হালকা কাঠামো; নিচের কথাগুলো Scrum Guide-এর ২০২০ সংস্করণ অনুযায়ী (আগের সংস্করণে “role” আর “Development Team” বলা হতো)।
- তিন দায়িত্ব: Product Owner (মূল্য বাড়ানো, Product Backlog-এর মালিক), Scrum Master (Scrum-এর কার্যকারিতা, বাধা দূর — project manager নন), Developers (প্রতিটি sprint-এ ব্যবহারযোগ্য increment).
- পাঁচ event: Sprint (এক মাস বা কম), Sprint Planning (এক মাসের sprint-এ সর্বোচ্চ ৮ ঘণ্টা), Daily Scrum (১৫ মিনিট), Sprint Review (সর্বোচ্চ ৪ ঘণ্টা), Sprint Retrospective (সর্বোচ্চ ৩ ঘণ্টা)।
- তিন artifact ও তার commitment: Product Backlog → Product Goal; Sprint Backlog → Sprint Goal; Increment → Definition of Done.
ছবি: বাঁয়ে Product Backlog-এর স্তূপ → Sprint Planning → Sprint Backlog → একটি বড় বৃত্ত (sprint) আর তার ওপরে ছোট বৃত্ত (Daily Scrum) → Increment → Review আর Retrospective থেকে backlog-এ ফেরার তীর।
Forecast: গড় velocity = (১৮ + ২২ + ২০) ÷ ৩ = ২০; ১২০ ÷ ২০ = ৬ sprint. সৎ উত্তর পরিসরে: ধীরতম ১৮ ধরলে ১২০ ÷ ১৮ ≈ ৬.৭, অর্থাৎ ৭ sprint; দ্রুততম ২২-এ ১২০ ÷ ২২ ≈ ৫.৫, অর্থাৎ ৬ sprint. তাই “৬ থেকে ৭ sprint”.
নম্বর কোথায়: দায়িত্ব (২), event ও timebox (৩), artifact ও commitment (২), ছবি (১), forecast পরিসরসহ (২)। পর্ব ৫
যেখানে নম্বর কাটে: Scrum Master-কে দলের boss বলা; velocity-কে দলের পারফরম্যান্সের মাপ বা দুই দলের তুলনার সংখ্যা হিসেবে ব্যবহার; একটি মাত্র সংখ্যায় প্রতিশ্রুতি।
ক-০৭Scrum আর Kanban-এর পার্থক্য লিখুন। একটি Kanban board-এ গড়ে ১২টি কাজ চলমান, দল দিনে গড়ে ৩টি শেষ করে — গড় cycle time কত? WIP limit ৬ করলে? — ৫ নম্বর (মাঝারি)
| মাপকাঠি | Scrum | Kanban |
|---|---|---|
| ছন্দ | নির্দিষ্ট দৈর্ঘ্যের sprint | ধারাবাহিক flow, sprint নেই |
| কাজের সীমা | sprint-এ কতটা নেওয়া হবে | প্রতিটি কলামে WIP limit |
| নির্দিষ্ট দায়িত্ব | PO, Scrum Master, Developers | বাধ্যতামূলক নেই |
| মাপ | velocity, burndown | lead time, cycle time, throughput |
হিসাব (Little-এর সূত্র): গড় cycle time = গড় WIP ÷ গড় throughput = ১২ ÷ ৩ = ৪ দিন. Throughput একই থাকলে WIP ৬-এ নামালে ৬ ÷ ৩ = ২ দিন — কম কাজ একসাথে, তাড়াতাড়ি শেষ।
নম্বর কোথায়: চার সারির টেবিল (২.৫), সূত্র (১), দুই মান (১.৫)। পর্ব ৬
যেখানে নম্বর কাটে: সূত্র উল্টো লেখা (throughput ÷ WIP); “WIP কমালে throughput কমবে” ধরে নেওয়া — সূত্রটি গড়ের সম্পর্ক, ধরে নেয় system মোটামুটি স্থিতিশীল।
৩ · অংশ খ — Git: মৌলিক, দলগত কাজ আর ভেতরের কথা (মডিউল ২, ৩, ৯)
রিভিশন: পর্ব ৭, পর্ব ৮, পর্ব ৯, পর্ব ১১, পর্ব ১২, পর্ব ১৩, পর্ব ১৪, পর্ব ১৫, পর্ব ১৬, পর্ব ১৭, পর্ব ১৮, পর্ব ৫২ আর পর্ব ৫৩. সব transcript একটি কাল্পনিক ফলাফল পোর্টালের scratch repository-তে Git ২.৫৩ দিয়ে চালানো (author Rahim, নির্দিষ্ট তারিখ), তাই hash হুবহু মিলবে। Command-কেন্দ্রিক আরও প্রশ্ন পর্ব ৬৯-এ।
খ-০১Centralized আর distributed version control-এর পার্থক্য লিখুন। Git কেন distributed? — ৪ নম্বর (সহজ)
| মাপকাঠি | Centralized (যেমন Subversion) | Distributed (যেমন Git) |
|---|---|---|
| ইতিহাস কোথায় | শুধু server-এ | প্রতিটি clone-এ পুরো ইতিহাস |
| Offline কাজ | commit, log-এ server লাগে | commit, log, diff, branch — সব local |
| ঝুঁকি | server-ই single point of failure | যেকোনো clone থেকে পুনরুদ্ধার |
| Branch আর merge | তুলনামূলক ভারী | হালকা, দৈনন্দিন |
Git কেন: ২০০৫ সালে Linux kernel-এর দল যে tool ব্যবহার করত, তার বিনামূল্যের লাইসেন্স বন্ধ হলে Linus Torvalds Git লেখা শুরু করেন — গতি আর হাজারো developer-এর স্বাধীন কাজই ছিল লক্ষ্য। Git আর GitHub এক নয়: প্রথমটি tool, দ্বিতীয়টি repository রাখার অনলাইন সেবা।
নম্বর কোথায়: টেবিল (৩), Git-এর জন্ম ও কারণ (১)। পর্ব ৭
যেখানে নম্বর কাটে: “distributed মানে server নেই” লেখা — দলে সাধারণত একটি কেন্দ্রীয় remote থাকে, তবে সেটি প্রথা, বাধ্যবাধকতা নয়।
খ-০২Git-এর তিনটি এলাকা ছবিসহ ব্যাখ্যা করুন। git status -s-এ M fee.conf, M fee.conf আর ?? notes.txt কী বোঝায়? — ৫ নম্বর (সহজ)
তিন এলাকা: working tree (যেখানে আপনি লেখেন) → git add → staging area বা index (পরের commit-এ যা যাবে) → git commit → repository (জমা হওয়া commit, .git-এর ভেতরে)। ছবিতে তিনটি বাক্স বাঁ থেকে ডানে, ওপরে ডানমুখী তীরে add আর commit, নিচে বাঁমুখী তীরে restore --staged আর restore.
দুই অক্ষরের মানে: বাঁ অক্ষর index-এর খবর, ডান অক্ষর working tree-র।
M— বদল stage করা, পরের commit-এ যাবে।M— বদল হয়েছে কিন্তু stage হয়নি।??— untracked, Git এখনো চেনে না।
নম্বর কোথায়: তিন এলাকা ও ছবি (৩), তিনটি অবস্থা (২)। পর্ব ৮ · পর্ব ৯
যেখানে নম্বর কাটে: “commit ফোল্ডার থেকে নেয়” লেখা — commit নেয় index থেকে; add-এর পরে আবার বদলালে নতুন বদল commit-এ যায় না।
খ-০৩git reset-এর --soft, --mixed আর --hard-এর পার্থক্য লিখুন। Push হয়ে যাওয়া commit বাতিল করতে কোনটি ব্যবহার করবেন? — ৫ নম্বর (মাঝারি)
| রূপ | Branch pointer | Index | Working tree |
|---|---|---|---|
--soft | সরে | অপরিবর্তিত | অপরিবর্তিত |
--mixed (ডিফল্ট) | সরে | লক্ষ্যের মতো হয় | অপরিবর্তিত |
--hard | সরে | লক্ষ্যের মতো হয় | লক্ষ্যের মতো — অসংরক্ষিত কাজ মোছে |
প্রমাণ (একই বদল নিয়ে পরপর তিনটি command):
$ git commit -m "Raise fee to 650"
[main 1df2880] Raise fee to 650
1 file changed, 1 insertion(+), 1 deletion(-)
$ git reset --soft HEAD~1
$ git status -s
M fee.conf
$ git reset
Unstaged changes after reset:
M fee.conf
$ git status -s
M fee.conf
$ git reset --hard
HEAD is now at 453a5c6 Document SMS alerts
$ git status -s
$ git revert --no-edit HEAD
[main 29c941b] Revert "Document SMS alerts"
Date: Thu Jan 15 10:08:00 2026 +0600
1 file changed, 1 deletion(-)--soft-এর পরে বদল staged (M ), git reset-এর পরে unstaged ( M), --hard-এর পরে বদল নেই। Push-করা commit-এ revert: পুরোনো commit না মুছে একটি নতুন উল্টো commit যোগ হয়, তাই সহকর্মীদের clone ভাঙে না।
নম্বর কোথায়: টেবিল (৩), revert-এর যুক্তি (২)। পর্ব ১১
যেখানে নম্বর কাটে: --hard-এর ঝুঁকির কথা না বলা; push-করা commit-এ reset আর push --force লেখা।
খ-০৪Git-এ branch আর HEAD কী? Detached HEAD কখন হয়, আর সেখানে commit করলে কী ঝুঁকি? — ৪ নম্বর (সহজ)
Branch: একটি নাম, যা একটি commit-এর দিকে নির্দেশ করে — ভেতরে ৪১ বাইটের একটি ছোট ফাইল (৪০ অক্ষরের hash আর newline), file-এর কপি নয়; তাই বানানো প্রায় বিনা খরচে। HEAD: “আপনি এখানে” — সাধারণত একটি branch-এর নাম ধরে রাখে; নতুন commit-এ শুধু সেই branch সামনে সরে।
Detached HEAD: কোনো commit বা tag সরাসরি checkout করলে (git switch --detach v1.0) HEAD কোনো branch নয়, সরাসরি commit ধরে। সেখানে commit করে branch না বানিয়ে চলে গেলে commit-টি কোনো নাম থেকে পৌঁছানো যায় না; git reflog থেকে hash নিয়ে git branch rescue <hash> দিয়ে বাঁচানো যায়।
নম্বর কোথায়: branch (১), HEAD (১), detached কখন (১), ঝুঁকি ও উদ্ধার (১)। পর্ব ১২
যেখানে নম্বর কাটে: “branch মানে পুরো ফোল্ডারের কপি”; detached HEAD-কে “ভুল” বা “repository নষ্ট” বলা।
খ-০৫git merge বনাম git rebase — commit graph এঁকে ব্যাখ্যা করুন। Fast-forward আর three-way merge কখন হয়? কখন rebase করবেন না? — ১০ নম্বর (মাঝারি)
পরিস্থিতি: main-এ একটি commit (7f41025) থেকে feature/sms branch খোলা হলো, তাতে দুটি commit; এর মধ্যে main-এ একটি নতুন commit এল।
$ git log --oneline --graph --all
* d6026a4 Raise fee to 600
| * 5d30014 Document SMS alerts
| * a1aa3eb Add SMS config
|/
* 7f41025 Add fee config and README(ক) Merge: main-এ থেকে git merge feature/sms. দুই tip আর তাদের merge base (7f41025) মিলিয়ে three-way merge; ফল দুই parent-ওয়ালা একটি merge commit. পুরোনো commit-এর hash অপরিবর্তিত।
$ git merge --no-edit feature/sms
Merge made by the 'ort' strategy.
README.md | 1 +
sms.conf | 1 +
2 files changed, 2 insertions(+)
create mode 100644 sms.conf
$ git log --oneline --graph --all
* 2e1c093 Merge branch 'feature/sms'
|\
| * 5d30014 Document SMS alerts
| * a1aa3eb Add SMS config
* | d6026a4 Raise fee to 600
|/
* 7f41025 Add fee config and README(খ) Rebase: একই শুরুর অবস্থা থেকে feature/sms-এ git rebase main. Branch-এর নিজস্ব দুটি commit main-এর মাথার ওপর একে একে আবার বসে; parent বদলায়, তাই hash বদলায় (a1aa3eb → 71af9ef, 5d30014 → 453a5c6). তারপর main-এ merge করলে শুধু fast-forward.
$ git rebase main
Successfully rebased and updated refs/heads/feature/sms.
$ git log --oneline --graph --all
* 453a5c6 Document SMS alerts
* 71af9ef Add SMS config
* d6026a4 Raise fee to 600
* 7f41025 Add fee config and README
$ git switch main
Switched to branch 'main'
$ git merge feature/sms
Updating d6026a4..453a5c6
Fast-forward
README.md | 1 +
sms.conf | 1 +
2 files changed, 2 insertions(+)
create mode 100644 sms.conf| মাপকাঠি | Merge | Rebase |
|---|---|---|
| History | আসল ক্রম, শাখাসহ | এক সরল রেখা |
| পুরোনো hash | অপরিবর্তিত | নতুন commit, নতুন hash |
| Conflict | একবার, merge-এর সময় | প্রতিটি replay হওয়া commit-এ আসতে পারে |
| শেয়ার করা branch-এ | নিরাপদ | বিপজ্জনক — অন্যদের history ভাঙে |
কখন কোনটি: fast-forward হয় যখন বর্তমান branch অন্যটির পূর্বপুরুষ (নিজে কোনো নতুন commit নেই); না হলে three-way. সোনালি নিয়ম: অন্যরা যে commit-এর ওপর কাজ করছেন, তা rebase করবেন না; নিজের PR branch rebase করলে push --force-with-lease দিয়ে।
নম্বর কোথায়: দুই সংজ্ঞা (২), দুটি graph (৩), টেবিল (২), ff বনাম three-way (১.৫), সোনালি নিয়ম (১.৫)। পর্ব ১৩ · পর্ব ১৫
যেখানে নম্বর কাটে: rebase-এর পরেও পুরোনো hash লেখা; merge commit-এর একটি parent আঁকা; “rebase কাজ মুছে দেয়” — পুরোনো commit ORIG_HEAD আর reflog-এ থাকে।
খ-০৬git fetch আর git pull-এর পার্থক্য লিখুন। Push কেন rejected হয়, আর --force-with-lease কেন --force-এর চেয়ে নিরাপদ? — ৫ নম্বর (মাঝারি)
Fetch শুধু নতুন commit আর remote-tracking ref (origin/main) আনে, আপনার branch ছোঁয় না; pull = fetch + merge (--rebase দিলে rebase, --ff-only দিলে শুধু fast-forward). pull.rebase বা pull.ff কিছুই ঠিক না থাকলে Git ২.৫৩ ভিন্ন হয়ে যাওয়া branch-এ থেমে যায় (fatal: Need to specify how to reconcile divergent branches.) — তাই নীতিটি একবার ঠিক করে নিন।
Rejected: সহকর্মী Nasrin আগে push করেছেন, তাই remote-এ এমন commit আছে যা Rahim-এর কাছে নেই। Push শুধু fast-forward হলে গৃহীত হয়:
$ git push origin main
To …/origin.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to '…/origin.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. …সমাধান: fetch → merge বা rebase → আবার push. Force-with-lease: সাধারণ --force remote-এর অন্যের কাজ নীরবে মুছে দিতে পারে; lease আগে মিলিয়ে নেয় remote ঠিক আপনার জানা অবস্থায় আছে কি না, না থাকলে push বাতিল।
নম্বর কোথায়: fetch বনাম pull (২), rejected-এর কারণ ও সমাধান (১.৫), lease (১.৫)। পর্ব ১৪
যেখানে নম্বর কাটে: “rejected হলে --force দিন” লেখা; origin/main-কে একটি branch ভেবে তাতে commit করার কথা বলা।
খ-০৭একটি কাল্পনিক ফলাফল পোর্টালে ৬ জন developer, সপ্তাহে কয়েকবার web-এ deploy হয়, আর একটি পুরোনো mobile app-এর v2.x-এ এক বছর bug fix দিতে হবে। একটি branching strategy প্রস্তাব করুন, ছবির বর্ণনা ও যুক্তিসহ; Git Flow-এর সাথে তুলনা করুন। — ১০ নম্বর (কঠিন)
অনুমান: CI আছে, main protected, PR-এ অন্তত একজনের review লাগে; web আর app একই repository-তে।
প্রস্তাব: trunk-based development (ছোট ধাপে GitHub Flow-এর মতো) + পুরোনো version-এর জন্য একটি release branch.
- main = trunk: সবসময় deploy করার মতো; প্রতিটি কাজ এক–দুই দিনের
feature/…branch → PR → review আর CI সবুজ → merge → web deploy. - অসমাপ্ত কাজ: feature flag-এর পেছনে merge, যাতে branch দীর্ঘজীবী না হয়।
release/2.x: v2.0.0 tag থেকে কাটা; শুধু bug fix. Fix আগে main-এ, তারপরgit cherry-pick -xদিয়ে release branch-এ; সেখান থেকেv2.3.1-এর মতো patch tag.- নিয়ম লিখিত: Conventional Commits, SemVer, CONTRIBUTING-এ এই প্রবাহ।
ছবি: একটি লম্বা আনুভূমিক রেখা main, ওপরে-নিচে ছোট ছোট feature-এর বাঁক যা কয়েক commit পরেই ফেরে; v2.0.0 tag থেকে নিচে নেমে যাওয়া release/2.x, main-এর fix commit থেকে সেখানে ড্যাশ তীর (cherry-pick).
| মাপকাঠি | প্রস্তাবিত (trunk + release branch) | Git Flow (Driessen, ২০১০) |
|---|---|---|
| স্থায়ী branch | main (আর পুরোনো version-এর release branch) | main আর develop |
| Branch-এর আয়ু | এক–দুই দিন | feature দীর্ঘ হতে পারে |
| ঘন deploy | মানানসই | release branch-এর ধাপে ধীর |
| একাধিক চালু version | release branch দিয়ে | স্বাভাবিকভাবেই, hotfix/* দিয়ে |
উপসংহার: ঘন web deploy-এ trunk-based; Git Flow তখনই, যখন নির্দিষ্ট দিনে version নম্বরসহ release আর অনেক version একসাথে চালু। Branch যত দীর্ঘজীবী, conflict-এর ঝুঁকি তত বেশি।
নম্বর কোথায়: অনুমান (১), প্রস্তাবের নিয়ম (৩), ছবি (২), তুলনা (২), পুরোনো version-এর fix পথ (১), উপসংহার (১)। পর্ব ১৭ · পর্ব ১৬ · পর্ব ১৮
যেখানে নম্বর কাটে: scenario না দেখে মুখস্থ Git Flow; পুরোনো version-এর fix কীভাবে যাবে না বলা; “সবাই সরাসরি main-এ push” — review আর CI ছাড়া।
খ-০৮Git-এর blob, tree আর commit object কী? একটি byte বদলালে commit-এর ID কেন বদলায়? ভুল reset --hard-এর পরে commit কীভাবে ফেরাবেন? — ৫ নম্বর (কঠিন)
Object: blob = ফাইলের লেখা (নাম ছাড়া); tree = নাম, mode আর hash-এর তালিকা (একটি folder); commit = একটি tree, parent, author, committer, সময় আর বার্তা। Git একটি content-addressed ভাণ্ডার: ID = SHA-1("<type> <size>\0<content>"). যেমন echo hello | git hash-object --stdin যেকোনো কম্পিউটারে দেয় ce01362….
Hash-এর শিকল: এক byte বদলালে blob-এর hash বদলায় → tree-র লেখা বদলায় → tree-র hash → commit-এর লেখা ও hash → পরের সব commit-এর parent-এর লেখা ও hash. তাই ইতিহাস গোপনে বদলানো ধরা পড়ে।
উদ্ধার: git reflog-এ HEAD-এর প্রতিটি চলাচল লেখা থাকে; HEAD@{1} বা hash দেখে git reset --hard HEAD@{1} বা git branch rescue <hash>. কিন্তু কখনো add বা commit না করা লেখা Git জানেই না — সেটি ফেরে না।
নম্বর কোথায়: তিন object (২), hash-এর শিকল (১.৫), reflog আর সীমা (১.৫)। পর্ব ৫২ · পর্ব ৫৩
যেখানে নম্বর কাটে: “Git প্রতিটি commit-এ শুধু diff রাখে” — যুক্তিতে পূর্ণ snapshot, ডিস্কে packfile-এ delta; reflog-কে চিরস্থায়ী ভাবা (মেয়াদ আর gc আছে)।
খ-০৯SemVer 2.0.0 অনুযায়ী v1.4.2-এর পরে (ক) একটি fix:, (খ) একটি feat:, (গ) feat!: commit এলে পরের version কী? — ৩ নম্বর (সহজ)
SemVer: MAJOR.MINOR.PATCH — ভাঙা পরিবর্তনে MAJOR, পুরোনো ব্যবহার না ভাঙা নতুন সুবিধায় MINOR, bug fix-এ PATCH; বড়টি বাড়লে ছোটগুলো শূন্য। Conventional Commits 1.0.0-এ ! বা BREAKING CHANGE: footer মানে ভাঙা পরিবর্তন।
(ক) 1.4.3 · (খ) 1.5.0 · (গ) 2.0.0.
নম্বর কোথায়: প্রতিটি সঠিক version (১ করে)। পর্ব ১৮
যেখানে নম্বর কাটে: (খ)-তে 1.5.2 লেখা — MINOR বাড়লে PATCH শূন্য হয়।
৪ · অংশ গ — Requirement engineering (মডিউল ৪)
রিভিশন: পর্ব ২০ (RE চক্র, elicitation, feasibility), পর্ব ২১ (FR, NFR, SRS, EARS), পর্ব ২২ (use case, INVEST, Given-When-Then), পর্ব ২৩ (use case diagram, domain model, state diagram) আর পর্ব ২৪ (prioritization, traceability, scope creep).
গ-০১Requirement engineering process ছবিসহ ব্যাখ্যা করুন। Elicitation-এর তিনটি কৌশল আর feasibility study-র দিকগুলো লিখুন। — ১০ নম্বর (মাঝারি)
সংজ্ঞা: Requirement engineering হলো “কী বানাতে হবে” খুঁজে বের করা, লেখা, যাচাই করা আর পুরো project জুড়ে সামলানোর নিয়মবদ্ধ কাজ। কারণ: ভুল জিনিস নিখুঁতভাবে বানানোই সবচেয়ে দামি ভুল।
ধাপ (বহুল প্রচলিত সাত ভাগ):
- Inception: সমস্যা, লক্ষ্য, stakeholder চিহ্নিত — power/interest grid-এ বসানো।
- Elicitation: চাহিদা সংগ্রহ।
- Elaboration: model আর বিস্তারিত বিবরণ।
- Negotiation: পরস্পরবিরোধী চাহিদা আর অগ্রাধিকার মেলানো।
- Specification: SRS, user story বা use case-এ লেখা।
- Validation: review, prototype, requirement থেকে test case — “ঠিক জিনিস লিখেছি তো?”
- Management: baseline, পরিবর্তন নিয়ন্ত্রণ, traceability.
ছবি: সাতটি বাক্স বৃত্তাকারে, ঘড়ির কাঁটার দিকে তীর; validation থেকে elicitation-এ আর management থেকে শুরুতে ফিরতি ড্যাশ তীর — একবার নয়, পুরো project জুড়ে চক্র।
Elicitation-এর কৌশল: interview (গভীর, কিন্তু মানুষ যা করেন সবসময় বলেন না); observation (কাজের জায়গায় দেখা — অলিখিত বা tacit জ্ঞান ধরা পড়ে); prototype (কাগজে বা স্ক্রিনে নকশা দেখিয়ে মত) — এছাড়া workshop, প্রশ্নমালা, পুরোনো নথি পড়া।
Feasibility-র পাঁচ দিক: প্রযুক্তি, অর্থনীতি (payback, NPV), মানুষ ও সংগঠন, সময়সূচি, আইন।
নম্বর কোথায়: সংজ্ঞা (১), ধাপ (৩), ছবি (২), কৌশল (২), feasibility (২)। পর্ব ২০ · পর্ব ২৪
যেখানে নম্বর কাটে: process-কে এক সরল রেখায় আঁকা; শুধু interview লেখা; যিনি টাকা দেন আর যিনি ব্যবহার করেন একই মানুষ ধরে নেওয়া।
গ-০২Functional আর non-functional requirement-এর পার্থক্য উদাহরণসহ লিখুন। “System দ্রুত হবে” — এই NFR-কে মাপা যায় এমন করে লিখুন। — ৫ নম্বর (সহজ)
Functional = system কী করবে (“ছাত্র roll দিয়ে ফলাফল দেখতে পারবেন”); non-functional = কতটা ভালোভাবে করবে — গতি, নিরাপত্তা, ব্যবহার-সহজতা, availability; constraint = কোন পথে করতেই হবে বা করা যাবে না।
মাপা যায় এমন রূপ: “ফল প্রকাশের দিন সেকেন্ডে ২০০টি অনুরোধে ফলাফল পাতার p95 latency 800 ms-এর কম হবে।” — এটাই fit criterion. EARS-এর ছাঁচে: “When a student submits a roll number, the system shall display the result within 2 seconds.”
ভালো requirement-এর গুণ (ISO/IEC/IEEE 29148): প্রয়োজনীয়, দ্ব্যর্থহীন, সম্পূর্ণ, একক, সম্ভব, যাচাইযোগ্য।
নম্বর কোথায়: দুই সংজ্ঞা ও উদাহরণ (২), মাপা যায় এমন NFR (২), গুণ (১)। পর্ব ২১
যেখানে নম্বর কাটে: সংখ্যা ছাড়া NFR; “user-friendly” বা “secure” লিখে থেমে যাওয়া।
গ-০৩Use case আর user story-র পার্থক্য লিখুন। INVEST কী? “বই ফেরতের জরিমানা” নিয়ে একটি user story আর একটি Given-When-Then acceptance criterion লিখুন। — ৫ নম্বর (মাঝারি)
পার্থক্য: use case একটি পূর্ণ গল্প — actor, লক্ষ্য, main success scenario আর extension; user story একটি ছোট প্রতিশ্রুতি — কার্ডে অল্প কথা, বাকিটা আলাপে আর acceptance criteria-তে (Card, Conversation, Confirmation).
INVEST: Independent, Negotiable, Valuable, Estimable, Small, Testable.
Story: “As a librarian, I want the fine calculated automatically, so that members are charged consistently.”
Criterion: Given প্রতিদিনের জরিমানা ৫ টাকা আর ফেরতের শেষ দিন ১০ তারিখ, When সদস্য ১৩ তারিখে বই ফেরত দেন, Then জরিমানা হয় ১৫ টাকা।
নম্বর কোথায়: পার্থক্য (১.৫), INVEST (১), story-র তিন অংশ (১), সংখ্যাসহ Given-When-Then (১.৫)। পর্ব ২২
যেখানে নম্বর কাটে: story-তে “so that” বাদ; criterion-এ সংখ্যা ছাড়া “সঠিক জরিমানা হবে”।
গ-০৪Use case diagram-এ «include» আর «extend»-এর পার্থক্য উদাহরণসহ লিখুন। Domain model-এ কী থাকে, কী থাকে না? — ৪ নম্বর (মাঝারি)
«include»: base use case প্রতিবার included অংশটি চালায় — ড্যাশ রেখা, খোলা তীর base থেকে included-এর দিকে। যেমন “বই ধার” → «include» → “সদস্য যাচাই”। «extend»: শর্ত পূরণ হলে তবেই — তীর extending থেকে base-এর দিকে, extension point-সহ; যেমন “জরিমানা আদায়” → «extend» → “বই ফেরত” [দেরি হলে]।
Domain model: সমস্যার জগতের ধারণা (class), attribute আর association-এর multiplicity; এই স্তরে method, database table বা UI নেই।
নম্বর কোথায়: দুই সম্পর্ক ও তীরের দিক (২.৫), domain model (১.৫)। পর্ব ২৩
যেখানে নম্বর কাটে: «extend»-এর তীর উল্টো আঁকা; use case diagram-কে flowchart বানিয়ে ধাপের ক্রম দেখানো।
গ-০৫Requirement prioritization-এর দুটি কৌশল লিখুন। একটি feature-এর reach ২,০০০, impact ২, confidence ৮০%, effort ৪ person-week — RICE score কত? Traceability matrix আর scope creep কী? — ৫ নম্বর (মাঝারি)
MoSCoW: Must, Should, Could, Won’t (এবার নয়)। RICE = Reach × Impact × Confidence ÷ Effort = ২,০০০ × ২ × ০.৮ ÷ ৪ = ৮০০. (Kano, WSJF-ও চলে।)
Traceability matrix: requirement → design → code → test-এর সুতো, দুই দিকেই; test-হীন requirement, অনাথ test আর পরিবর্তনের প্রভাব (impact analysis) দেখায়। Scope creep: নিয়ন্ত্রণ ছাড়া ধীরে ধীরে requirement যোগ হওয়া; প্রতিকার baseline, change request আর change control board.
নম্বর কোথায়: দুই কৌশল (১.৫), RICE (১.৫), traceability (১), scope creep (১)। পর্ব ২৪
যেখানে নম্বর কাটে: confidence-কে ৮০ ধরে গুণ (ফল ৮০,০০০); scope creep আর gold-plating গুলিয়ে ফেলা (দ্বিতীয়টি developer-এর নিজের যোগ করা, কেউ চায়নি)।
৫ · অংশ ঘ — Design-এর নীতি, UML আর design pattern (মডিউল ৫, ৬)
রিভিশন: পর্ব ২৫ (coupling, cohesion, I, A, D), পর্ব ২৬ (DRY, KISS, YAGNI, Law of Demeter), পর্ব ২৭, পর্ব ২৮, পর্ব ২৯, পর্ব ৩০, পর্ব ৩১, পর্ব ৩২, পর্ব ৩৩, পর্ব ৩৪, পর্ব ৩৫, পর্ব ৩৬ আর পর্ব ৩৭. SOLID আর pattern-এর ইন্টারভিউ-ধাঁচের প্রশ্ন পর্ব ৭০-এ।
ঘ-০১Coupling-এর স্তরগুলো খারাপ থেকে ভালো ক্রমে, আর cohesion-এর স্তরগুলো দুর্বল থেকে শক্ত ক্রমে লিখুন — প্রতিটির এক লাইনের ব্যাখ্যাসহ। — ৫ নম্বর (সহজ)
Coupling = module-দের পারস্পরিক নির্ভরতা (কম ভালো); cohesion = একটি module-এর ভেতরের মিল (বেশি ভালো)।
- Content — অন্যের ভেতরের data বা কোড সরাসরি ছোঁয়া।
- Common — একই global data অনেকে পড়ে-লেখে।
- External — বাইরে থেকে চাপানো format বা protocol ভাগ করা (যেমন ব্যাংকের CSV).
- Control — flag পাঠিয়ে অন্যের ভেতরের পথ বাছাই।
- Stamp — পুরো record পাঠানো, যদিও লাগে একটু।
- Data — শুধু দরকারি সরল মান parameter-এ।
Cohesion: coincidental (সম্পর্কহীন, “Utils”) → logical (একই ধরনের, flag দিয়ে বাছাই) → temporal (একই সময়ে চলে) → procedural (নির্দিষ্ট ক্রমে) → communicational (একই data নিয়ে) → sequential (একটির output পরেরটির input) → functional (এক module, এক কাজ)।
নম্বর কোথায়: দুই সংজ্ঞা (১), coupling-এর ক্রম ও ব্যাখ্যা (২), cohesion-এর ক্রম ও ব্যাখ্যা (২)। পর্ব ২৫
যেখানে নম্বর কাটে: ক্রম উল্টে ফেলা। বইভেদে নাম আর external-এর জায়গা একটু আলাদা — যে তালিকা লিখছেন তার উৎস (Myers বা Yourdon–Constantine) উল্লেখ করলে নিরাপদ।
ঘ-০২একটি package-কে ২টি package ব্যবহার করে (Ca = 2), আর এটি ৬টি package ব্যবহার করে (Ce = 6); এর ১০টি class-এর ১টি abstract. Instability I, abstractness A আর main sequence থেকে দূরত্ব D বের করুন। — ৩ নম্বর (মাঝারি)
- I = Ce ÷ (Ca + Ce) = ৬ ÷ ৮ = ০.৭৫ — বেশ অস্থির, বদলের চাপ বাইরে থেকে আসে।
- A = Na ÷ Nc = ১ ÷ ১০ = ০.১.
- D = |A + I − 1| = |০.১ + ০.৭৫ − ১| = ০.১৫ — main sequence-এর কাছে, ভালো ভারসাম্য।
নম্বর কোথায়: প্রতিটি সূত্র ও মান (১ করে)। পর্ব ২৫
যেখানে নম্বর কাটে: Ca আর Ce উল্টে I = ০.২৫ লেখা; D-তে পরম মান না নেওয়া (−০.১৫)।
ঘ-০৩DRY, KISS, YAGNI আর Law of Demeter — প্রতিটির সংজ্ঞা আর একটি উদাহরণ দিন। — ৪ নম্বর (সহজ)
- DRY: প্রতিটি জ্ঞানের একটি উৎস — জরিমানার হার তিন file-এ নয়, একটি constant-এ। দেখতে এক কিন্তু আলাদা কারণে বদলায় এমন কোড জোড়া লাগানো DRY নয়।
- KISS: যতটা সম্ভব সরল — তিন লাইনের
if-এর জায়গায় plugin কাঠামো নয়। - YAGNI: এখন যা লাগে না, তা বানাবেন না — “পরে হয়তো দশ ভাষা লাগবে” বলে আজ translation engine নয়।
- Law of Demeter: শুধু কাছের বন্ধুর সাথে কথা —
order.customer.pay(x),order.customer.wallet.balance -= xনয়।
নম্বর কোথায়: প্রতিটি নীতি ও উদাহরণ (১ করে)। পর্ব ২৬
যেখানে নম্বর কাটে: DRY-কে “কোনো দুই লাইন যেন এক না হয়” বলা; উদাহরণ ছাড়া শুধু পূর্ণ রূপ লেখা।
ঘ-০৪SOLID-এর পাঁচটি নীতি উদাহরণসহ ব্যাখ্যা করুন। প্রতিটি নীতি ভাঙলে কী সমস্যা হয়? — ১০ নম্বর (মাঝারি)
ভূমিকা: Robert C. Martin প্রায় ২০০০ সালের দিকে নীতিগুলো একসাথে লেখেন; “SOLID” নামটি পরে প্রচলিত হয়। লক্ষ্য: কম coupling, বেশি cohesion, যাতে বদল সস্তা হয়। উদাহরণ একটি কাল্পনিক ফলাফল পোর্টালের।
| নীতি | মূল কথা | ভাঙার উদাহরণ → সমাধান |
|---|---|---|
| SRP | একটি module-এর দায় একটি actor-এর কাছে (যে একদল মানুষ এর বদল চান) | ResultCard GPA হিসাব (পরীক্ষা নিয়ন্ত্রক), PDF নকশা (প্রকাশনা) আর email (IT) একসাথে করে → তিনটি আলাদা class |
| OCP | বাড়ানো যায়, পুরোনো কোড বদলাতে হয় না (Meyer ১৯৮৮; Martin-এর abstraction-ভিত্তিক রূপ) | প্রতিটি নতুন grading নিয়মে if/elif যোগ → GradingPolicy interface আর প্রতিটি নিয়মের আলাদা class |
| LSP | Base type-এর জায়গায় subtype বসালে আচরণ ভাঙবে না (Liskov ১৯৮৭; Liskov ও Wing ১৯৯৪) | Square extends Rectangle: width বদলালে height-ও বদলায় → প্রতিশ্রুতি ভাঙে; আলাদা type |
| ISP | Client যা ব্যবহার করে না, তার ওপর নির্ভর করবে না | একটি Printer-এ print, scan, fax → Printable, Scannable role interface |
| DIP | Policy আর detail দুটিই abstraction-এর ওপর নির্ভর করে; abstraction-এর মালিক policy | ResultService সরাসরি MySQL class বানায় → ResultRepository interface, MySQL adapter সেটি implement করে; test-এ in-memory fake |
ছবি (DIP): আগে ResultService → MySqlResults (নিচের দিকে তীর); পরে ResultService → «interface» ResultRepository ◁┄ MySqlResults — detail থেকে তীর এখন ওপরের দিকে, তাই “inversion”.
সতর্কতা: নীতিগুলো আইন নয়। প্রথম বদল আসার আগেই সব জায়গায় interface বানানো YAGNI-র লঙ্ঘন; এক method-এর অগণিত class SRP নয়, ছড়িয়ে পড়া কোড।
নম্বর কোথায়: পাঁচ নীতি, প্রতিটির সংজ্ঞা ও উদাহরণ (৮), একটি ছবি (১), সীমা (১)। পর্ব ২৭ · পর্ব ২৮
যেখানে নম্বর কাটে: SRP-কে “একটি class একটি কাজ” বলে থামা; DIP আর dependency injection এক বলে লেখা; LSP-র উদাহরণে কোন প্রতিশ্রুতি ভাঙল তা না বলা।
ঘ-০৫একটি কাল্পনিক বিশ্ববিদ্যালয় লাইব্রেরি: সদস্য (ছাত্র বা শিক্ষক) একসাথে সর্বোচ্চ ৫টি বই ধার নিতে পারেন; একটি বইয়ের (ISBN, শিরোনাম) কয়েকটি কপি থাকে, প্রতিটির নিজস্ব barcode; প্রতিটি ধারে একটি কপি আর ফেরতের শেষ তারিখ। (ক) একটি UML class diagram আঁকুন। (খ) “বই ধার” কাজের একটি sequence diagram আঁকুন — কপি না থাকলে কী হয়, তাও দেখান। — ১০ নম্বর (কঠিন)
অনুমান: সদস্য হিসেবে কেউ সরাসরি থাকেন না — ছাত্র বা শিক্ষক (তাই Member abstract); Loan মানে চলমান ধার — একটি ধারে ঠিক একটি কপি, আর একটি কপি একসাথে সর্বোচ্চ একটি চলমান ধারে (ফেরত হওয়া ধারের ইতিহাস আলাদা record-এ); কপি তার বইয়ের অংশ।
(ক) মডেল উত্তর — class diagram
Library class diagram: abstract Member with two subclasses, association to Loan with multiplicity 0..5, Loan to BookCopy, composition from Book
(খ) মডেল উত্তর — sequence diagram “বই ধার”
Borrow sequence: synchronous calls, a self-call, a reply, an alt fragment with a create message and an error reply
alt-এর দুই ভাগ; :Loan-এর বাক্স create বার্তার উচ্চতায়, কারণ object তখনই জন্মায়।ছবির নিচে: checkLimit() দেখে চলমান ধার ৫-এর কম কি না। Composition-এর বদলে aggregation-ও যুক্তিসহ গ্রহণযোগ্য।
নম্বর কোথায়: (ক) class ও attribute (১.৫), সঠিক সম্পর্কের চিহ্ন (১.৫), multiplicity (১.৫), abstract ও অনুমান (০.৫); (খ) lifeline ও ক্রম (১.৫), call বনাম reply-এর তীর (১), alt ও create (১.৫), ব্যাখ্যা (১)। পর্ব ২৯ · পর্ব ৩০ · পর্ব ২৩
যেখানে নম্বর কাটে: হীরা ভুল প্রান্তে (অংশের দিকে) আঁকা; generalization-এ খোলা তীর আঁকা; “০..৫” না লিখে শুধু “*”; sequence-এ reply-কে কঠিন রেখায় আঁকা; শর্ত if-else-এর জন্য দুটি আলাদা diagram.
ঘ-০৬Association, aggregation আর composition-এর পার্থক্য notation আর উদাহরণসহ লিখুন। — ৪ নম্বর (সহজ)
| সম্পর্ক | Notation | অংশের জীবন | উদাহরণ |
|---|---|---|---|
| Association | সাধারণ রেখা, দরকারে খোলা তীর | স্বাধীন | Ticket — Passenger |
| Aggregation | সমগ্রের প্রান্তে ফাঁপা হীরা | স্বাধীন, অংশ ভাগ হতে পারে | Route ◇— Stop (একটি stop অনেক route-এ) |
| Composition | সমগ্রের প্রান্তে ভরাট হীরা | সমগ্রের হাতে; একসাথে একটিমাত্র মালিক | Bus ◆— Seat |
নম্বর কোথায়: তিন সংজ্ঞা ও notation (৩), উদাহরণ (১)। পর্ব ২৯
যেখানে নম্বর কাটে: হীরা অংশের প্রান্তে আঁকা; aggregation আর composition-কে কোড দেখে নিশ্চিতভাবে আলাদা করা যায় বলে দাবি — list[Seat] থেকে বোঝা যায় শুধু “অনেক”, মালিকানা নকশার সিদ্ধান্ত।
ঘ-০৭Design pattern কী? Gang of Four-এর তিন পরিবার লিখুন। Strategy, Observer আর Decorator-এর উদ্দেশ্য ও কাঠামো (class-এর বর্ণনা) দিন। কখন pattern ব্যবহার করবেন না? — ১০ নম্বর (মাঝারি)
সংজ্ঞা: Design pattern হলো একটি নির্দিষ্ট প্রেক্ষাপটে বারবার ফিরে আসা নকশার সমস্যার নাম দেওয়া, পরীক্ষিত সমাধানের ছাঁচ — কপি করার কোড নয়। ধারণা Christopher Alexander-এর স্থাপত্য (১৯৭৭) থেকে; Gamma, Helm, Johnson আর Vlissides-এর ১৯৯৪ সালের বই ২৩টি pattern-কে বিখ্যাত করে।
তিন পরিবার: creational ৫টি (object তৈরি — singleton, factory method, abstract factory, builder, prototype), structural ৭টি (জোড়া দেওয়া — adapter, decorator, facade, proxy, composite, bridge, flyweight), behavioral ১১টি (আচরণ আর দায় ভাগ — strategy, observer, command, state ইত্যাদি)।
- Strategy: একই কাজের বদলযোগ্য পদ্ধতি। কাঠামো:
Context-এর ভেতরে একটি«interface» Strategy-এর reference (association);DiscountEid,DiscountStudentফাঁপা ত্রিভুজের ড্যাশ রেখায় (realization) Strategy implement করে। Context শুধুapply(price)ডাকে। - Observer: একটি object বদলালে অনেক শ্রোতাকে খবর। কাঠামো:
Subject(attach,detach,notify) 1 — 0..*«interface» Observer(update());SmsAlert,EmailAlertObserver implement করে। ফল প্রকাশ হলে notify সবার update ডাকে। - Decorator: interface না বদলে আচরণ যোগ (log, retry, cache). কাঠামো:
«interface» Notifier;BasicNotifierআরLoggingDecoratorদুটিই implement করে, আর decorator-এর ভেতরে একটিNotifierথাকে (is-a আর has-a একসাথে)। মোড়কের ক্রম বদলালে ফল বদলায়।
কখন নয়: প্রমাণিত সমস্যা ছাড়া pattern বসানো নিজেই anti-pattern; Python বা JavaScript-এ strategy প্রায়ই একটি function মাত্র।
নম্বর কোথায়: সংজ্ঞা ও ইতিহাস (১.৫), তিন পরিবার ও সংখ্যা (১.৫), তিন pattern-এর উদ্দেশ্য ও কাঠামো (২ করে, ৬), কখন নয় (১)। পর্ব ৩২ · পর্ব ৩৫ · পর্ব ৩৪
যেখানে নম্বর কাটে: pattern-এর নাম আর কোড দিয়ে উত্তর, কোন সমস্যা মেটায় তা নয়; Strategy আর State গুলিয়ে ফেলা (গঠন এক, কিন্তু Strategy বাছেন client, State বদলায় নিজে); Decorator আর Adapter এক বলা (Adapter interface বদলায়)।
ঘ-০৮Design by contract কী? Precondition, postcondition আর invariant-এর দায় কার? LSP-র সাথে এর সম্পর্ক লিখুন। — ৪ নম্বর (মাঝারি)
Design by contract (Bertrand Meyer, Eiffel ভাষা): প্রতিটি operation একটি চুক্তি। precondition মানা ডাকার পক্ষের (caller) দায় — যেমন withdraw(amount)-এ amount > 0; postcondition কাজ-করা পক্ষের (supplier) দায় — balance ঠিক amount কমেছে; invariant সবসময় সত্য — balance ≥ 0. কোনটি ভাঙল দেখেই বোঝা যায় bug কার।
LSP: subtype precondition কড়া করতে পারে না, postcondition দুর্বল করতে পারে না, invariant রক্ষা করবে — নইলে base type-এর জন্য লেখা কোড ভাঙে।
নম্বর কোথায়: সংজ্ঞা (১), তিনটির দায় ও উদাহরণ (২), LSP-র নিয়ম (১)। পর্ব ৩১ · পর্ব ২৮
যেখানে নম্বর কাটে: বাইরের input যাচাইয়ে assert প্রস্তাব — python -O সব assert মুছে দেয়; trust boundary-তে সবসময়-চলা check লাগে।
ঘ-০৯Dependency inversion, dependency injection আর inversion of control — তিনটির পার্থক্য লিখুন। “Inheritance-এর বদলে composition” কেন? — ৪ নম্বর (মাঝারি)
DIP একটি নীতি (কে কার ওপর নির্ভর করবে — abstraction-এর ওপর); dependency injection একটি কৌশল (নির্ভরতা বাইরে থেকে দেওয়া — সাধারণত constructor-এ, সব জোড়া এক জায়গায়, composition root-এ); inversion of control একটি বড় ধারণা (কে কাকে ডাকবে তার নিয়ন্ত্রণ framework-এর হাতে — “আমাদের ডাকবেন না, আমরাই ডাকব”)।
Composition: base class-এর একটি “নিরীহ” বদল subclass ভেঙে দিতে পারে (fragile base class); object রেখে কাজ delegate করলে আচরণ চলার সময়েই বদলানো যায়। Inheritance রাখুন খাঁটি “is-a” আর LSP-মানা সম্পর্কে।
নম্বর কোথায়: তিন সংজ্ঞা (৩), composition-এর যুক্তি (১)। পর্ব ৩৭
যেখানে নম্বর কাটে: তিনটিকে সমার্থক লেখা; service locator-কে DI বলা — locator নির্ভরতা আবার লুকিয়ে ফেলে।
৬ · অংশ ঙ — Architecture, clean code আর maintenance (মডিউল ৭)
রিভিশন: পর্ব ৩৮ (style, ADR), পর্ব ৩৯, পর্ব ৪০, পর্ব ৪১, পর্ব ৪২, পর্ব ৪৩ আর পর্ব ৪৪. বড় মাপের architecture-এর জন্য দেখুন System Design · Microservices.
ঙ-০১Layered, pipe-and-filter আর event-driven architecture-এর তুলনা করুন। ADR কী, তাতে কী কী থাকে? — ৫ নম্বর (মাঝারি)
| Style | গঠন | সুবিধা | দাম |
|---|---|---|---|
| Layered | presentation → business → data, প্রতিটি শুধু নিচেরটিকে ডাকে | বোঝা সহজ, দল ভাগ সহজ | শুধু পাস করে দেওয়া স্তর (sinkhole), একটি বদল সব স্তরে |
| Pipe-and-filter | filter-এর শিকল, প্রতিটি input নিয়ে output দেয় | filter বদলানো ও পুনর্ব্যবহার সহজ | ইন্টারঅ্যাকটিভ কাজে অনুপযোগী, format-এর বাঁধন |
| Event-driven | উৎপাদক event ছাড়ে, broker দিয়ে গ্রাহক শোনে | কম coupling, নতুন গ্রাহক সহজ | প্রবাহ চোখে কম দেখা যায়, debug আর ক্রম কঠিন |
ADR (architecture decision record): একটি কঠিন-বদল সিদ্ধান্তের ছোট নথি — title, status, context, decision, consequences; কোডের পাশে docs/adr/-এ Git-এ।
নম্বর কোথায়: টেবিল (৩), ADR ও তার অংশ (২)। পর্ব ৩৮
যেখানে নম্বর কাটে: প্রতিটি style-এর শুধু সুবিধা লেখা; ADR-এ consequences বাদ।
ঙ-০২MVC আর MVVM-এর পার্থক্য লিখুন। Business logic কোথায় রাখবেন? — ৪ নম্বর (সহজ)
MVC: model নিজের বদলের খবর view-কে দেয় (observer); controller ব্যবহারকারীর input নিয়ে model-কে ডাকে। Web framework-এর “MVC”-তে controller HTTP request সামলায় — একটু আলাদা রূপ। MVVM: view model state আর command প্রকাশ করে; data binding নিজে থেকে screen মেলায়, তাই view model UI ছাড়াই test হয়।
Business logic: model বা service layer-এ — view বা controller-এ নয় (massive view controller একটি পরিচিত anti-pattern).
নম্বর কোথায়: দুটি গঠন (৩), logic-এর জায়গা (১)। পর্ব ৩৯
যেখানে নম্বর কাটে: controller-এ হিসাব রাখার পরামর্শ; two-way binding-এর অসীম চক্রের ঝুঁকি না জানা।
ঙ-০৩Refactoring কী? তিনটি code smell আর তাদের refactoring লিখুন। Technical debt-এর Fowler quadrant আর Lehman-এর প্রথম দুই সূত্র উল্লেখ করুন। — ৫ নম্বর (মাঝারি)
Refactoring (Fowler, ১৯৯৯; ২য় সংস্করণ ২০১৮): বাইরে থেকে দেখা আচরণ একই রেখে ভেতরের কাঠামো উন্নত করা — আগে test, তারপর ছোট ধাপ, প্রতিটির পরে commit. Bug ঠিক করা বা feature যোগ refactoring নয়।
- Long function → Extract Function.
- একই
switchবারবার → Replace Conditional with Polymorphism. - লম্বা parameter-এর তালিকা → Introduce Parameter Object.
Technical debt (Cunningham, ১৯৯২): শর্টকাট হলো principal, প্রতিটি পরের বদলে বাড়তি সময় interest. Fowler-এর quadrant: জেনেশুনে বা অজান্তে × বিবেচনা করে বা বেপরোয়াভাবে। Lehman: (১) ব্যবহৃত software-কে ক্রমাগত বদলাতে হয়, নইলে কম কাজের হয়ে যায়; (২) যত্ন না নিলে বদলের সাথে জটিলতা বাড়ে।
নম্বর কোথায়: সংজ্ঞা (১), তিন smell ও প্রতিকার (১.৫), debt ও quadrant (১.৫), Lehman (১)। পর্ব ৪২ · পর্ব ৪৩
যেখানে নম্বর কাটে: refactoring-এর সাথে আচরণ বদল মেশানো; সব debt-কে খারাপ বলা — বিবেচনা করে নেওয়া ধার কখনো ঠিক সিদ্ধান্ত।
ঙ-০৪Code review-এ কী দেখবেন, কোন ক্রমে? ভালো review মন্তব্যের তিনটি বৈশিষ্ট্য লিখুন। — ৪ নম্বর (সহজ)
যন্ত্র আগে: formatting, অব্যবহৃত variable, type-এর ভুল ধরবে formatter, linter, type checker আর static analysis. মানুষ যা দেখেন, বড় থেকে ছোট: সঠিকতা আর test → নকশায় মানানসই কি না → পড়ার সুবিধা ও নাম → নিরাপত্তা → দরকারে performance → error handling → নথি।
মন্তব্য: নির্দিষ্ট আর কারণসহ; অবস্থা স্পষ্ট (blocking, nit, প্রশ্ন — লেবেল দিয়ে); আদেশের বদলে প্রশ্ন, আর ভালো কাজের প্রশংসা।
নম্বর কোথায়: ক্রম (২), মন্তব্যের তিন গুণ (২)। পর্ব ৪৪ · পর্ব ৪১
যেখানে নম্বর কাটে: review-কে শুধু bug ধরা বলা — জ্ঞান ভাগাভাগি আর সামঞ্জস্যও বড় ফল; মানুষের সময় formatting-এ খরচ।
ঙ-০৫Hexagonal (port ও adapter) আর Clean Architecture-এর মূল নিয়ম ব্যাখ্যা করুন। এর দাম কী? — ৪ নম্বর (কঠিন)
Hexagonal: কেন্দ্রে application core; বাইরের জগতের সাথে কথা core-এর নিজের সংজ্ঞা দেওয়া port দিয়ে। Driving adapter (web, CLI, test) core-কে চালায়; driven adapter-কে (database, payment, SMS) চালায় core নিজে। Clean Architecture: entities, use cases, interface adapters, frameworks & drivers — চার বৃত্ত, আর source code-এর নির্ভরতা শুধু ভেতরের দিকে (dependency rule).
দাম: বেশি file, indirection আর data-র রূপান্তর; চার field-এর CRUD app-এ প্রায়ই over-engineering.
নম্বর কোথায়: port ও adapter-এর দুই ধরন (১.৫), dependency rule (১.৫), দাম (১)। পর্ব ৪০
যেখানে নম্বর কাটে: port-কে network port ভাবা; বৃত্তে তীর বাইরের দিকে আঁকা।
৭ · অংশ চ — Testing আর code quality (মডিউল ৮)
রিভিশন: পর্ব ৪৫ (V&V, স্তর, black-box বনাম white-box), পর্ব ৪৬, পর্ব ৪৭ (EP, BVA, decision table), পর্ব ৪৮, পর্ব ৪৯, পর্ব ৫০ (coverage, V(G), mutation) আর পর্ব ৫১.
চ-০১Verification বনাম validation — পার্থক্য লিখুন, প্রতিটির দুটি কৌশলসহ। — ৩ নম্বর (সহজ)
Verification: “জিনিসটি ঠিকভাবে বানাচ্ছি তো?” (Boehm: are we building the product right?) — spec মানা হয়েছে কি না; কৌশল: review ও inspection, static analysis, unit test. Validation: “ঠিক জিনিসটি বানাচ্ছি তো?” (are we building the right product?) — আসল প্রয়োজন মেটে কি না; কৌশল: acceptance test, prototype দেখানো, beta বা ব্যবহারকারীর সাথে পরীক্ষা।
নম্বর কোথায়: দুই সংজ্ঞা (১.৫), কৌশল (১.৫)। পর্ব ৪৫
যেখানে নম্বর কাটে: দুটির সংজ্ঞা উল্টে লেখা; verification-কে শুধু “কোড না চালিয়ে” বলা — unit test-ও spec-এর বিরুদ্ধে verification.
চ-০২Testing-এর স্তর আর কৌশল ব্যাখ্যা করুন — V-model-এর ছবি, black-box ও white-box কৌশল, আর একটি করে উদাহরণসহ। — ১০ নম্বর (মাঝারি)
ভূমিকা: Dijkstra-র কথায়, test ভুলের উপস্থিতি দেখাতে পারে, অনুপস্থিতি নয়।
স্তর (কতটুকু জোড়া লাগিয়ে দেখছেন):
- Unit — একটি function বা class; দ্রুত, অনেক।
- Integration — কয়েকটি অংশ বা database-এর সাথে জোড়া; interface-এর ভুল।
- System — পুরো system, functional আর non-functional দুই দিক।
- Acceptance — গ্রাহক বা ব্যবহারকারীর দৃষ্টিতে, requirement-এর বিরুদ্ধে।
ছবি: একটি V — বাঁ বাহুতে ওপর থেকে requirement → system design → architecture → module design, তলায় coding, ডান বাহুতে নিচ থেকে unit → integration → system → acceptance; প্রতিটি জোড়ার মাঝে আড়াআড়ি ড্যাশ রেখা, লেবেল “test পরিকল্পনা এখানেই”।
| মাপকাঠি | Black-box | White-box |
|---|---|---|
| ভিত্তি | requirement, কোড না দেখে | কোডের গঠন |
| কৌশল | equivalence partitioning, boundary value, decision table, state transition | statement, branch, MC/DC coverage; basis path (V(G)) |
| উদাহরণ | বয়স ১৮–৬০: ১৭, ১৮, ৬০, ৬১ | if-এর দুই দিকই চালানো |
| যা ধরে | বাদ পড়া আচরণ | না-চলা কোড, ভুল শাখা |
ধরন বনাম স্তর: regression, performance, security, smoke — এগুলো test-এর ধরন, যেকোনো স্তরে হতে পারে। উপসংহার: test pyramid — নিচে অনেক unit, ওপরে অল্প end-to-end.
নম্বর কোথায়: ভূমিকা (১), চার স্তর (২), V-ছবি (২), black-box ও white-box কৌশল ও উদাহরণ (৪), উপসংহার (১)। পর্ব ৪৫ · পর্ব ৪৭ · পর্ব ৫১
যেখানে নম্বর কাটে: স্তর আর ধরন মিশিয়ে ফেলা (“regression একটি স্তর”); V-এর জোড়া ভুল (unit ↔ requirement); কৌশলের নাম দিয়ে উদাহরণ না দেওয়া।
চ-০৩একটি চাকরির আবেদনে বয়স পূর্ণসংখ্যায় ১৮ থেকে ৬০ (দুটিই সহ) হলে গ্রহণযোগ্য। Equivalence partition আর ২-মান ও ৩-মান boundary value-র test case লিখুন। — ৫ নম্বর (মাঝারি)
- Partition: অবৈধ < ১৮ (প্রতিনিধি ১০), বৈধ ১৮–৬০ (৩৫), অবৈধ > ৬০ (৭০); সাথে অবৈধ ধরন — ফাঁকা, দশমিক (২৫.৫), অক্ষর।
- ২-মান BVA: প্রতিটি সীমা আর তার বাইরের প্রতিবেশী — ১৭, ১৮, ৬০, ৬১.
- ৩-মান BVA: সীমার দুই পাশের প্রতিবেশীসহ — ১৭, ১৮, ১৯, ৫৯, ৬০, ৬১.
নম্বর কোথায়: তিনটি partition ও প্রতিনিধি (২), অবৈধ ধরন (০.৫), ২-মান (১), ৩-মান (১.৫)। পর্ব ৪৭
যেখানে নম্বর কাটে: শুধু বৈধ partition; সীমা ১৮ আর ৬০ নিজেই বাদ দেওয়া; প্রতিটি সংখ্যার জন্য আলাদা partition.
চ-০৪নিচের function-এর control-flow graph আঁকুন আর তিনভাবে cyclomatic complexity বের করুন। Basis path-এর test input দিন। — ৫ নম্বর (মাঝারি)
def fine(days, teacher):
amount = 0 # node 1
if days > 7: # node 2
amount = (days - 7) * 5 # node 3
else:
log("on time") # node 4
if teacher: # node 5
amount = amount // 2 # node 6
return amount # node 7Graph: ৭টি node; edge ১→২, ২→৩, ২→৪, ৩→৫, ৪→৫, ৫→৬, ৫→৭, ৬→৭ — মোট ৮টি।
- V(G) = E − N + 2P = ৮ − ৭ + ২ = ৩.
- V(G) = decision + ১ = ২ + ১ = ৩ (node ২ আর ৫).
- Region: দুটি ভেতরের (২-৩-৫-৪ আর ৫-৬-৭) + বাইরের একটি = ৩.
Basis path ও input: ১-২-৪-৫-৭ → (৩, False) → ০; ১-২-৩-৫-৭ → (১০, False) → ১৫; ১-২-৩-৫-৬-৭ → (১০, True) → ৭.
নম্বর কোথায়: সঠিক graph (১.৫), তিন হিসাব (২), basis path ও প্রত্যাশিত ফল (১.৫)। পর্ব ৫০
যেখানে নম্বর কাটে: সূত্রে P বাদ বা ভুল (এক function-এ P = ১); else-কে আলাদা decision গোনা; region গুনতে বাইরের region ভুলে যাওয়া।
চ-০৫Test double-এর পাঁচ ধরন লিখুন। Mutation testing কী? ৫০টি mutant-এর ৪০টি kill হলো আর ৫টি equivalent — mutation score কত? — ৫ নম্বর (মাঝারি)
Test double (Meszaros, ২০০৭): dummy — শুধু জায়গা ভরে; stub — ঠিক করা উত্তর দেয়; spy — ডাকগুলো লিখে রাখে; mock — আগে থেকে প্রত্যাশা জানে আর নিজে যাচাই করে; fake — সত্যি কাজ করে কিন্তু সরলভাবে (in-memory database). নামের ব্যবহার framework আর লেখকভেদে আলাদা — Python-এর Mock object দিয়ে stub-ও বানানো যায়।
Mutation testing: কোডে ছোট ভুল (যেমন >= → >) ঢুকিয়ে দেখা test fail করে কি না — test-এর test. Score = killed ÷ (মোট − equivalent) = ৪০ ÷ ৪৫ ≈ ০.৮৮৯, অর্থাৎ ৮৮.৯%.
নম্বর কোথায়: পাঁচ ধরন (২.৫), mutation-এর সংজ্ঞা (১), হিসাব (১.৫)। পর্ব ৪৯ · পর্ব ৫০
যেখানে নম্বর কাটে: ৪০ ÷ ৫০ = ৮০% লেখা (equivalent বাদ না দেওয়া); mock আর stub এক বলা।
চ-০৬TDD-এর red-green-refactor চক্র ব্যাখ্যা করুন। Test pyramid কী, আর ice-cream cone কেন এড়াতে হয়? — ৫ নম্বর (সহজ)
TDD (Kent Beck, ২০০২): red — একটি ব্যর্থ test লিখুন; green — পাস করানোর সবচেয়ে সরল কোড; refactor — test সবুজ রেখে কোড পরিষ্কার। প্রতিটি চক্র কয়েক মিনিটের, একবারে একটিই নতুন আচরণ। লাভ: ছোট interface, কম coupling — test উপজাত ফল।
Test pyramid: নিচে অনেক দ্রুত unit test, মাঝে কম integration, ওপরে অল্প ধীর end-to-end. Ice-cream cone (অনেক হাতে করা আর UI test, অল্প unit) ধীর, দামি আর flaky — feedback দেরিতে আসে। আকার নিয়ে বিতর্ক আছে (testing trophy, honeycomb), তবে cone এড়ানোয় সবাই একমত।
নম্বর কোথায়: তিন ধাপ (২), TDD-র লাভ (১), pyramid ও cone (২)। পর্ব ৪৮ · পর্ব ৫১
যেখানে নম্বর কাটে: red ধাপ বাদ (test আগে fail করতে দেখা জরুরি — নইলে test হয়তো কিছুই যাচাই করে না); refactor-এ নতুন আচরণ যোগ।
৮ · অংশ ছ — CI/CD, project management আর পেশাদারি (পর্ব ৫৮, মডিউল ১০)
রিভিশন: পর্ব ৫৮, পর্ব ৫৯ (DORA), পর্ব ৬০ (COCOMO, function point), পর্ব ৬১ (CPM, PERT, earned value), পর্ব ৬২ (RE, RRL, CMMI), পর্ব ৬৩ (license, bus factor), পর্ব ৬৪ আর পর্ব ৬৫. এখানে অঙ্কের ছোট অংশ; function point, crashing আর পূর্ণ দৈর্ঘ্যের অঙ্ক পর্ব ৬৬-এ।
ছ-০১একটি CI/CD pipeline ছবিসহ ব্যাখ্যা করুন। Continuous integration, continuous delivery আর continuous deployment-এর পার্থক্য কী? DORA-র চারটি metric লিখুন। — ১০ নম্বর (মাঝারি)
সংজ্ঞা: continuous integration একটি অনুশীলন, tool নয় — সবাই ছোট পরিবর্তন অন্তত দিনে একবার mainline-এ মেলান, আর প্রতিটিতে স্বয়ংক্রিয় build ও test চলে। Continuous delivery — প্রতিটি সবুজ পরিবর্তন release-যোগ্য, production-এ পাঠানো একটি বোতামের সিদ্ধান্ত; continuous deployment সেই বোতামও তুলে দেয়।
ছবি (বাঁ থেকে ডানে): push বা PR (trigger) → checkout → dependency (cache থেকে) → lint ও build → unit test → integration test ও security scan → artifact (একবার build, একটি digest) → staging-এ deploy ও acceptance test → [বোতাম] → production. প্রতিটি বাক্সের নিচ থেকে developer-এর দিকে লাল ফিরতি তীর “ব্যর্থ হলে থামা, খবর দেওয়া”।
- Fail fast: সস্তা আর দ্রুত ধাপ আগে; একটি ধাপ ব্যর্থ হলে নির্ভরশীল ধাপগুলো বাদ।
- Build একবার, deploy বহুবার: একই artifact dev থেকে prod; বদলায় শুধু config.
- Main সবুজ রাখা: required check; লাল হলে আগে revert.
- নিরাপত্তা: secret masked, ন্যূনতম অনুমতি, fork-এর PR-এ secret নয়।
DORA-র চার metric (Accelerate, ২০১৮): deployment frequency, lead time for changes (commit থেকে production), change failure rate, time to restore service — প্রথম দুটি গতি, শেষ দুটি স্থিতি; জোড়ায় দেখুন, লক্ষ্য বানালে নষ্ট হয় (Goodhart).
নম্বর কোথায়: তিন সংজ্ঞা (৩), ছবি (৩), নীতি (২), DORA (২)। পর্ব ৫৮ · পর্ব ৫৯ · System Design · Deployment
যেখানে নম্বর কাটে: “Jenkins থাকলেই CI” লেখা; delivery আর deployment এক বলা; প্রতিটি environment-এ আবার build-এর পরামর্শ।
ছ-০২Basic COCOMO (organic: a = 2.4, b = 1.05, c = 2.5, d = 0.38) দিয়ে ২০ KLOC-এর একটি কাল্পনিক ফলাফল পোর্টালের effort, সময় আর গড় দলের আকার বের করুন। ব্যবস্থাপক বলছেন, “১০ জন দিলে অর্ধেক সময়ে হবে” — মন্তব্য করুন। — ৫ নম্বর (মাঝারি)
- E = a × KLOCb = 2.4 × 201.05 ≈ 2.4 × 23.23 ≈ ৫৫.৮ person-month.
- D = c × Ed = 2.5 × 55.80.38 ≈ ১১.৫ মাস.
- দল = E ÷ D ≈ ৫৫.৮ ÷ ১১.৫ ≈ ৪.৮ জন, অর্থাৎ প্রায় ৫ জন।
মন্তব্য: effort আর সময় অদলবদলযোগ্য নয় — COCOMO-র সময়ের সূত্র effort-এর দুর্বল ঘাত (০.৩৮), আর Brooks’s law অনুযায়ী বেশি লোকে যোগাযোগের পথ বাড়ে (৫ জনে ১০টি, ১০ জনে ৪৫টি)। Basic মডেল শুধু আকার দেখে; পরীক্ষায় দেওয়া ধ্রুবকই ব্যবহার করুন।
নম্বর কোথায়: E (২), D (১.৫), দল (০.৫), মন্তব্য (১)। পর্ব ৬০ · পর্ব ৬৬
যেখানে নম্বর কাটে: COCOMO 81-এর a আর COCOMO II-এর exponent মেশানো; D-র সূত্রে KLOC বসানো; একক (PM, মাস) বাদ।
ছ-০৩একটি কাল্পনিক project-এর কাজ (দিনে): A = ৩; B = ৪ (A-র পরে); C = ২ (A-র পরে); D = ৫ (B-র পরে); E = ৩ (C-র পরে); F = ২ (D আর E-র পরে)। (ক) Network এঁকে forward ও backward pass করুন, critical path আর float বের করুন। (খ) Critical path-এর তিন-বিন্দু অনুমান (a, m, b): A (২, ৩, ৪), B (২, ৪, ৬), D (৩, ৫, ১৩), F (১, ২, ৩) — PERT-এ প্রত্যাশিত সময় আর ১৬ দিনে শেষের সম্ভাবনা কত? — ১০ নম্বর (কঠিন)
Network (activity-on-node): Start → A; A থেকে দুই শাখা B → D আর C → E; D আর E মিলে F → End. প্রতিটি node-এ চার ঘর: ES, EF ওপরে; LS, LF নিচে।
| কাজ | সময় | ES | EF | LS | LF | Float |
|---|---|---|---|---|---|---|
| A | ৩ | ০ | ৩ | ০ | ৩ | ০ |
| B | ৪ | ৩ | ৭ | ৩ | ৭ | ০ |
| C | ২ | ৩ | ৫ | ৭ | ৯ | ৪ |
| D | ৫ | ৭ | ১২ | ৭ | ১২ | ০ |
| E | ৩ | ৫ | ৮ | ৯ | ১২ | ৪ |
| F | ২ | ১২ | ১৪ | ১২ | ১৪ | ০ |
(ক) Forward pass: ES = পূর্বসূরিদের EF-এর সর্বোচ্চ (F-এর ES = max(১২, ৮) = ১২); backward pass: LF = উত্তরসূরিদের LS-এর সর্বনিম্ন। Critical path A → B → D → F = ১৪ দিন; C আর E-র total float ৪ দিন.
(খ) PERT: te = (a + 4m + b) ÷ 6, σ² = ((b − a) ÷ 6)².
- te: A = ৩, B = ৪, D = (৩ + ২০ + ১৩) ÷ ৬ = ৬, F = ২ → μ = ১৫ দিন (D-র অনুমান ডানে হেলানো, তাই ১৪ নয়)।
- σ²: ০.১১ + ০.৪৪ + ২.৭৮ + ০.১১ = ৩.৪৪ → σ ≈ ১.৮৬.
- Z = (১৬ − ১৫) ÷ ১.৮৬ ≈ ০.৫৪ → normal টেবিল থেকে P ≈ ০.৭০৫, অর্থাৎ প্রায় ৭০%.
অনুমান ও সীমা: C আর E-র অনিশ্চয়তা দেওয়া নেই; ধরা হলো ৪ দিনের float-এ সেই পথ critical হয় না। PERT শুধু একটি পথ দেখে, তাই হিসাবটি আশাবাদী।
নিচের block-টি একই হিসাব চালিয়ে মিলিয়ে দেয়:
// CPM forward/backward pass + PERT for the critical path + Basic COCOMO
const acts = { A: [3, []], B: [4, ["A"]], C: [2, ["A"]],
D: [5, ["B"]], E: [3, ["C"]], F: [2, ["D", "E"]] };
const ES = {}, EF = {}, LS = {}, LF = {}, ids = Object.keys(acts);
for (const x of ids) { // forward pass
ES[x] = Math.max(0, ...acts[x][1].map(p => EF[p]));
EF[x] = ES[x] + acts[x][0];
}
const T = Math.max(...ids.map(x => EF[x]));
for (const x of [...ids].reverse()) { // backward pass
const succ = ids.filter(y => acts[y][1].includes(x));
LF[x] = Math.min(T, ...succ.map(y => LS[y]));
LS[x] = LF[x] - acts[x][0];
}
for (const x of ids)
console.log(x, "ES", ES[x], "EF", EF[x], "LS", LS[x], "LF", LF[x], "float", LS[x] - ES[x]);
console.log("project length =", T, "days");
const pert = { A: [2, 3, 4], B: [2, 4, 6], D: [3, 5, 13], F: [1, 2, 3] };
let mu = 0, v = 0;
for (const [a, m, b] of Object.values(pert)) { mu += (a + 4 * m + b) / 6; v += ((b - a) / 6) ** 2; }
const sd = Math.sqrt(v);
console.log("PERT mean", mu.toFixed(2), "variance", v.toFixed(2), "sd", sd.toFixed(2),
"Z(16) =", ((16 - mu) / sd).toFixed(2));
const E = 2.4 * 20 ** 1.05, D = 2.5 * E ** 0.38; // organic, 20 KLOC
console.log("COCOMO organic 20 KLOC:", E.toFixed(1), "PM,", D.toFixed(1), "months,",
(E / D).toFixed(1), "people");আউটপুট:
A ES 0 EF 3 LS 0 LF 3 float 0
B ES 3 EF 7 LS 3 LF 7 float 0
C ES 3 EF 5 LS 7 LF 9 float 4
D ES 7 EF 12 LS 7 LF 12 float 0
E ES 5 EF 8 LS 9 LF 12 float 4
F ES 12 EF 14 LS 12 LF 14 float 0
project length = 14 days
PERT mean 15.00 variance 3.44 sd 1.86 Z(16) = 0.54
COCOMO organic 20 KLOC: 55.8 PM, 11.5 months, 4.8 people
প্রতিটি সারি টেবিলের সাথে মেলে। Forward pass object-এর ক্রমে চলে, তাই কাজগুলো পূর্বসূরির পরে লেখা থাকতে হয়; শেষ লাইন ছ-০২-এর COCOMO মিলিয়ে দেয়।
নম্বর কোথায়: network (২), forward ও backward pass (২), critical path ও float (২), te ও μ (১.৫), σ ও Z (১.৫), সম্ভাবনা ও সীমা (১)। পর্ব ৬১ · পর্ব ৬৬
যেখানে নম্বর কাটে: σ যোগ করা (variance যোগ হয়, তারপর বর্গমূল); F-এর ES-এ ছোট মানটি (৮) নেওয়া; float শুধু critical কাজের জন্য গোনা।
ছ-০৪একটি কাল্পনিক ফলাফল পোর্টালের জন্য risk management plan লিখুন: (R1) ফল প্রকাশের দিন server-এ চাপ — সম্ভাবনা ০.৫, ক্ষতি ৳৮ লাখ, প্রতিকার load test ও autoscaling ৳১ লাখ, পরে সম্ভাবনা ০.১; (R2) একমাত্র অভিজ্ঞ developer চলে যাওয়া — ০.৩, ৳২০ লাখ, pair programming ও নথি ৳২ লাখ, পরে ০.১; (R3) SMS gateway-এর API বদল — ০.২, ৳১৫ লাখ, adapter ও contract test ৳১.৫ লাখ, পরে ০.১৫. RE, মোট RE আর RRL বের করে অগ্রাধিকার ঠিক করুন। — ১০ নম্বর (মাঝারি)
প্রক্রিয়া (চার ধাপের চক্র): চিহ্নিত করা (checklist, আগের project, brainstorming) → বিশ্লেষণ (সম্ভাবনা × ক্ষতি) → জবাবের পরিকল্পনা (এড়ানো, কমানো, হস্তান্তর, মেনে নেওয়া) → নজরদারি (প্রতি sprint-এ register হালনাগাদ, trigger). ছবি: চারটি বাক্স বৃত্তাকারে, শেষ থেকে প্রথমে ফিরতি তীর।
| Risk | RE = P × L | পরের RE | RRL = (আগে − পরে) ÷ খরচ | জবাব |
|---|---|---|---|---|
| R1 server-এ চাপ | ০.৫ × ৮ = ৳৪ লাখ | ০.১ × ৮ = ৳০.৮ লাখ | (৪ − ০.৮) ÷ ১ = ৩.২ | কমানো |
| R2 developer চলে যাওয়া | ০.৩ × ২০ = ৳৬ লাখ | ০.১ × ২০ = ৳২ লাখ | (৬ − ২) ÷ ২ = ২.০ | কমানো |
| R3 API বদল | ০.২ × ১৫ = ৳৩ লাখ | ০.১৫ × ১৫ = ৳২.২৫ লাখ | (৩ − ২.২৫) ÷ ১.৫ = ০.৫ | মেনে নেওয়া ও নজরদারি |
ফল: মোট RE = ৪ + ৬ + ৩ = ৳১৩ লাখ. RE-তে ক্রম R2 > R1 > R3, কিন্তু RRL-এ R1 (৩.২) > R2 (২.০) > R3 (০.৫)। তাই আগে R1 আর R2 — RRL ১-এর বেশি, ৳৩ লাখে ৳৭.২ লাখ প্রত্যাশিত ক্ষতি কমে। R3-এর প্রতিকার পোষায় না (RRL < ১); contingency রেখে নজরদারি।
Register-এর কলাম: id, “যদি… তাহলে…” বর্ণনা, P, L, RE, মালিক, প্রতিকার, trigger, অবস্থা।
নম্বর কোথায়: প্রক্রিয়া ও ছবি (২), তিন RE ও মোট (২), RRL (২), অগ্রাধিকারের যুক্তি (২), register-এর কাঠামো ও মালিক (২)। পর্ব ৬২ · পর্ব ৪
যেখানে নম্বর কাটে: শুধু RE দেখে ক্রম; RRL-এ খরচ দিয়ে ভাগ না করা; প্রতিটি risk-এর মালিক না রাখা। মানুষের ক্ষতি বা গোপনীয়তার মতো ঝুঁকি শুধু টাকায় মাপা যায় না — সেটিও এক লাইনে বলুন।
ছ-০৫একটি project-এর এই পর্যন্ত planned value ৳৫০ লাখ, earned value ৳৪০ লাখ, actual cost ৳৪৫ লাখ। SV, CV, SPI আর CPI বের করে অবস্থা বলুন। — ৩ নম্বর (মাঝারি)
SV = EV − PV = −৳১০ লাখ; CV = EV − AC = −৳৫ লাখ; SPI = EV ÷ PV = ০.৮০; CPI = EV ÷ AC ≈ ০.৮৯. দুটিই ১-এর কম: project সময়ে পিছিয়ে আর বাজেট ছাড়িয়েছে — প্রতি ৳১ খরচে ৳০.৮৯-এর কাজ হচ্ছে।
নম্বর কোথায়: চার মান (২), ব্যাখ্যা (১)। পর্ব ৬১
যেখানে নম্বর কাটে: PV − EV লিখে চিহ্ন উল্টানো; CPI-তে AC ÷ EV.
ছ-০৬QA আর QC-র পার্থক্য লিখুন। CMMI-র পাঁচটি maturity level কী কী? — ৪ নম্বর (সহজ)
QA প্রক্রিয়া ঠিক রাখে — প্রতিরোধ (review-এর নিয়ম, checklist, প্রশিক্ষণ); QC পণ্যে defect খোঁজে — ধরা (test, inspection).
CMMI: (১) Initial — কাজ হয় কয়েকজনের দক্ষতায়; (২) Managed — project-স্তরে পরিকল্পনা ও নজর; (৩) Defined — প্রতিষ্ঠান জুড়ে মানক প্রক্রিয়া; (৪) Quantitatively Managed — সংখ্যা ও control limit দিয়ে নিয়ন্ত্রণ; (৫) Optimizing — কারণ বিশ্লেষণ করে ক্রমাগত উন্নতি।
নম্বর কোথায়: QA বনাম QC (১.৫), পাঁচ level ক্রমসহ (২.৫)। পর্ব ৬২
যেখানে নম্বর কাটে: QA-কে শুধু “testing দল” বলা; level-এর ক্রম ভুল।
ছ-০৭ব্যবস্থাপক জানা একটি জরিমানা-হিসাবের bug রেখেই release করতে বলছেন। ACM/IEEE Software Engineering Code অনুযায়ী আপনার করণীয় লিখুন। একটি GPL library কোনো বিতরণ-করা বন্ধ-উৎসের app-এ ব্যবহারে কী সতর্কতা? একটি নির্বাচনী algorithm-এ দুই গোষ্ঠীর বাছাইয়ের হার ৫০% আর ৩০% — four-fifths rule কী বলে? — ৫ নম্বর (মাঝারি)
নৈতিকতা: ACM/IEEE-CS Code (১৯৯৯)-এর আট নীতির প্রথমটি Public — স্বার্থে সংঘাত হলে জনস্বার্থ আগে। করণীয়: bug-এর প্রভাব (কতজন, কত টাকা) লিখিতভাবে জানানো, fix বা প্রকাশ্য সতর্কতার বিকল্প প্রস্তাব, সিদ্ধান্ত লিখে রাখা; ক্ষতি গুরুতর হলে উচ্চতর কর্তৃপক্ষকে জানানো।
License: GPL copyleft — বিতরণ করলে সাধারণত পুরো combined work-এর source একই শর্তে দিতে হয়; বন্ধ-উৎসের app-এ এটি প্রায়ই অসম্ভব। MIT বা Apache-2.0-এর মতো permissive license-এ মূলত notice রাখলেই চলে। সন্দেহে আইনি পরামর্শ।
Four-fifths: ৩০ ÷ ৫০ = ০.৬০, যা ০.৮০-এর কম — বিরূপ প্রভাবের একটি মোটা দাগের সতর্কসংকেত; কারণ খুঁজতে আরও বিশ্লেষণ লাগে, এটি একা প্রমাণ নয়।
নম্বর কোথায়: নীতির নাম ও করণীয় (২), license (১.৫), four-fifths (১.৫)। পর্ব ৬৪ · পর্ব ৬৩
যেখানে নম্বর কাটে: “ব্যবস্থাপকের কথাই শেষ কথা” লেখা; GPL আর LGPL এক বলা; ০.৬-কে “বৈষম্যের প্রমাণ” বলা।
৯ · ভাইভা — মুখে উত্তরের কৌশল, নমুনা ভাইভা আর মডিউলভিত্তিক কুইকফায়ার
ভাইভা-য় পরীক্ষক আপনার উত্তর শুনেই পরের প্রশ্ন বানান (follow-up প্রশ্ন); তাই প্রথম উত্তর এমনভাবে দিন, যাতে পরের প্রশ্ন আপনার চেনা পথে আসে।
তিন বাক্যের কাঠামো
“Technical debt কী?” — “তাড়ার শর্টকাট, যার জন্য পরের প্রতিটি বদলে বাড়তি সময় লাগে (কী)। যেমন test ছাড়া জরিমানার নিয়ম লিখলে প্রতিটি পরিবর্তনে হাতে পরীক্ষা করতে হয় — সেটিই সুদ (উদাহরণ)। তবে বিবেচনা করে নেওয়া ধার, শোধের পরিকল্পনাসহ, কখনো ঠিক সিদ্ধান্ত (সীমা)।” তৃতীয় বাক্যটিই পরের প্রশ্নের দরজা খোলে।
তিনটি অভ্যাস যা নম্বর এনে দেয়
- উদাহরণে কথা বলুন: “coupling কম হওয়া ভালো” নয়, “report module যদি fees-এর global variable পড়ে, fees বদলালেই report ভাঙে”।
- Git-এর প্রশ্নে command আর তার প্রভাব একসাথে: “
git reset --soft HEAD~1— branch এক ধাপ পেছনে, বদল staged থাকে”। কোন এলাকা (working tree, index, ref) বদলায়, সেটিই আসল উত্তর। - না জানলে সৎভাবে: “পুরো নিশ্চিত নই” বলে যা জানেন সেখান থেকে যুক্তি দিন; flag বা সাল বানাবেন না।
একটি নমুনা ভাইভা — follow-up কীভাবে গভীরে নামে
একটি কাল্পনিক ভাইভা, merge দিয়ে শুরু — প্রতিটি উত্তরের শেষ অংশ থেকেই পরের প্রশ্ন আসে।
| পরীক্ষক | |
| প্রার্থী (মূল কথা) | |
| কেন ভালো উত্তর | |
| জোড়া পর্ব |
- শুরু। দুই দিকের সংজ্ঞা, আর নিজে থেকেই “hash বদলায়” — এখান থেকেই পরের প্রশ্ন।
- কারণ থেকে নিয়ম। Push কেন fast-forward হলেই গৃহীত, সেটি জোড়া দেওয়া।
- বিকল্পের যুক্তি। খালি --force নয়, lease — আর শুধু নিজের branch-এ।
- সূক্ষ্ম পার্থক্য। Merge আর rebase-এ ours/theirs-এর অর্থ উল্টো।
- উদ্ধারের ধাপ। Reflog, তারপর নির্দিষ্ট command.
- সীমা। কী ফেরে না, সেটি বলাই পূর্ণ উত্তর।
ভাইভা কুইকফায়ার — দ্রুত প্রশ্ন, ছোট উত্তর
জোরে উত্তর বলুন, তারপর প্রশ্নে চেপে মেলান — প্রতিটিতে ৩০–৬০ সেকেন্ড। “তারপর পরীক্ষক জিজ্ঞেস করতে পারেন…” লাইনে সম্ভাব্য পরের প্রশ্ন আর তার উত্তর।
মডিউল ১ — ভিত্তি আর process (পর্ব ১–৬)
ভ-০১Software আর হার্ডওয়্যার তৈরির মূল পার্থক্য কী? (সহজ)
Software ক্ষয় হয় না কিন্তু বদলের চাপে খারাপ হয়; তৈরির খরচ মূলত নকশা আর মানুষের, কপির খরচ প্রায় শূন্য; আর গঠন চোখে দেখা যায় না।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… তাহলে খরচের বড় অংশ কোথায়? — জীবনকালের maintenance-এ, এমনটিই বহুল উদ্ধৃত; সংখ্যা নিয়ে বিতর্ক আছে। পর্ব ১
ভ-০২Agile Manifesto-র চারটি মূল্যবোধ বলুন। (সহজ)
Process ও tool-এর চেয়ে মানুষ ও পারস্পরিক যোগাযোগ; বিস্তারিত নথির চেয়ে কাজ করা software; চুক্তির দর-কষাকষির চেয়ে গ্রাহকের সাথে সহযোগিতা; পরিকল্পনা মানার চেয়ে পরিবর্তনে সাড়া।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… তাহলে নথি লাগে না? — লাগে; ডান দিকেরও মূল্য আছে, বাঁ দিকের মূল্য বেশি — Manifesto-তেই লেখা। পর্ব ৫
ভ-০৩Scrum Master কি project manager? (মাঝারি)
না। Scrum Master দলের কাছে Scrum কার্যকর করার দায় নেন — বাধা সরানো, coaching; কাজ বণ্টন বা boss-এর ভূমিকা নয়। কী বানানো হবে ঠিক করেন Product Owner, কীভাবে — Developers.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… Daily Scrum কে চালান? — Developers-দের event; Scrum Master নিশ্চিত করেন যে এটি হয় আর ১৫ মিনিটে থাকে। পর্ব ৫
ভ-০৪WIP limit কেন কাজের গতি বাড়ায়? (মাঝারি)
Little-এর সূত্রে cycle time = WIP ÷ throughput; throughput একই থাকলে কম WIP মানে প্রতিটি কাজ তাড়াতাড়ি শেষ, অর্ধেক-শেষ কাজের অপচয় আর context switch কমে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… limit খুব কম হলে? — মানুষ অলস বসে থাকেন, throughput কমে; limit ঠিক হয় পর্যবেক্ষণে। পর্ব ৬
মডিউল ২, ৩, ৯ — Git (পর্ব ৭–১৯, ৫২–৫৭)
ভ-০৫Git আর GitHub কি একই? (সহজ)
না। Git আপনার কম্পিউটারে চলা version control tool; GitHub (বা GitLab, Bitbucket) Git repository রাখার অনলাইন সেবা, সাথে pull request, issue, CI.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… Pull request কি Git-এর command? — না, platform-এর সুবিধা; Git-এর নিজের পথ email-এ patch (format-patch, am). পর্ব ৭ · পর্ব ১৬
ভ-০৬git add আসলে কী করে? (মাঝারি)
ভ-০৭.gitignore-এ যোগ করলাম, তবু file-টি commit-এ আসছে — কেন? (মাঝারি)
ভ-০৮git diff, git diff --staged আর git diff HEAD-এর পার্থক্য? (সহজ)
প্রথমটি working tree বনাম index (যা এখনো stage হয়নি); দ্বিতীয়টি index বনাম শেষ commit (যা commit-এ যাবে); তৃতীয়টি working tree বনাম শেষ commit (সব মিলিয়ে)।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… @@ -5,7 +5,7 @@ মানে? — পুরোনো আর নতুন ফাইলের ৫ নম্বর লাইন থেকে ৭টি লাইনের অংশ। পর্ব ৯
ভ-০৯HEAD~2 আর HEAD^2 কি এক? (মাঝারি)
না। HEAD~2 = প্রথম parent ধরে দুই ধাপ পেছনে (“দাদা”); HEAD^2 = merge commit-এর দ্বিতীয় parent (মিশে আসা branch-এর দিক)।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… সাধারণ commit-এ HEAD^2? — দ্বিতীয় parent নেই, তাই Git ত্রুটি দেখায়। পর্ব ৯
ভ-১০Push হয়ে যাওয়া commit-এ ভুল — reset না revert? (সহজ)
Revert: নতুন একটি উল্টো commit যোগ হয়, ইতিহাস বদলায় না, তাই সহকর্মীদের clone ভাঙে না। Reset শেয়ার করা history মুছে দেয়, তারপর force push লাগে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… একটি merge commit revert করবেন কীভাবে? — git revert -m 1 <merge>: কোন parent-কে মূলধারা ধরবেন, তা বলে দিতে হয়। পর্ব ১১
ভ-১১Conflict marker-এর তিন চিহ্ন কী বোঝায়? (সহজ)
<<<<<<< HEAD থেকে ======= পর্যন্ত বর্তমান branch-এর (ours) লেখা, তার নিচে >>>>>>> feature পর্যন্ত আনা branch-এর (theirs) লেখা। ঠিক করে marker মুছে git add, তারপর commit; ফিরতে git merge --abort.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… base-এর লেখাও দেখতে চাইলে? — merge.conflictStyle diff3 বা zdiff3. পর্ব ১৩ · পর্ব ৫৪
ভ-১২পরিষ্কার merge মানেই কি ঠিক প্রোগ্রাম? (মাঝারি)
না। Git লেখার লাইন মেলায়, অর্থ নয় — একজন function-এর নাম বদলালেন, আরেকজন পুরোনো নামে নতুন ডাক যোগ করলেন; conflict ছাড়াই merge, কিন্তু build ভাঙে (semantic conflict).
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… ধরবেন কীভাবে? — merge-এর পরে test আর CI; ছোট branch, ঘন merge. পর্ব ১৩
ভ-১৩Interactive rebase দিয়ে কী করা যায়? (মাঝারি)
git rebase -i-এর todo list-এ pick, reword, edit, squash, fixup, drop লিখে commit মেলানো, ক্রম বদলানো, বার্তা ঠিক করা বা বাদ দেওয়া যায় — PR-এর আগে ইতিহাস গোছাতে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… squash আর fixup-এর পার্থক্য? — দুটিই আগের commit-এ মেশে; squash বার্তা জোড়া দিতে editor খোলে, fixup নতুনটির বার্তা ফেলে দেয়। পর্ব ১৫
ভ-১৪git bisect কীভাবে কাজ করে? ১,০০০টি commit-এ কত ধাপ? (মাঝারি)
History-র ওপর binary search: একটি ভালো আর একটি খারাপ commit দিলে Git মাঝেরটি checkout করে, আপনি good বা bad বলেন — প্রতি ধাপে সন্দেহের পরিসর অর্ধেক; ১,০০০টিতে প্রায় ⌈log₂ ১০০০⌉ = ১০ ধাপ।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… স্বয়ংক্রিয় করবেন কীভাবে? — git bisect run + script: exit 0 ভালো, 125 skip, 1–127-এর বাকিগুলো খারাপ। পর্ব ৫৫
ভ-১৫Stash কখন, আর apply বনাম pop? (সহজ)
অর্ধেক কাজ commit না করে তুলে রেখে অন্য branch-এ জরুরি কাজে যেতে; git stash push -u untracked file-ও নেয়। apply ফিরিয়ে আনে কিন্তু entry রাখে; pop এনে মুছে দেয় — তবে conflict হলে pop-ও entry রেখে দেয়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… দীর্ঘদিনের জন্য? — stash নয়, একটি WIP commit বা git worktree. পর্ব ৫৬
ভ-১৬Commit-এর author নাম কি পরিচয়ের প্রমাণ? (মাঝারি)
না। user.name আর user.email যে কেউ যা খুশি বসাতে পারেন। প্রমাণ দেয় cryptographic স্বাক্ষর — git commit -S, git tag -s, যাচাইয়ে git verify-commit.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… একটি API key push হয়ে গেলে প্রথম কাজ? — key বাতিল ও নতুন key; history পরিষ্কার পরে, কারণ পুরোনো clone-এ কপি থেকে যায়। পর্ব ৫৭
ভ-১৭Monorepo আর submodule — এক কথায়? (কঠিন)
Monorepo-তে সব project এক ইতিহাসে, তাই একাধিক project-এর বদল এক commit-এ — দাম হলো tooling (affected build, cache). Submodule অন্য repository-র শুধু একটি commit id pin করে রাখে; সেটি নিজে থেকে এগোয় না।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… বড় binary file? — Git LFS: Git-এ ছোট pointer, আসল file আলাদা জায়গায়। পর্ব ১৯
মডিউল ৪ — Requirement (পর্ব ২০–২৪)
ভ-১৮শুধু interview-এ requirement সংগ্রহ কেন যথেষ্ট নয়? (সহজ)
অনেক জ্ঞান tacit — মানুষ যা করেন, তা সবসময় মুখে বলেন না বা বলতে পারেন না; আর একজনের কণ্ঠ পুরো user class নয়। তাই observation, prototype আর পুরোনো নথি লাগে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… stakeholder কারা? — যাঁরা প্রভাবিত হন বা প্রভাব ফেলেন: ব্যবহারকারী, ক্রেতা, operator, নিয়ন্ত্রক। পর্ব ২০
ভ-১৯INVEST-এর “S” আর “T” কেন জরুরি? (সহজ)
Small — একটি sprint-এ শেষ হয়, অনুমান করা যায়; Testable — acceptance criteria দিয়ে “শেষ হয়েছে” যাচাই করা যায়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… বড় story ভাঙবেন কীভাবে? — মূল্য রেখে উল্লম্বভাবে (UI থেকে database পর্যন্ত সরু টুকরো), স্তর ধরে নয়। পর্ব ২২
ভ-২০Requirement validation আর verification-এর পার্থক্য? (মাঝারি)
Requirement validation জিজ্ঞেস করে লেখা চাহিদাই ঠিক চাহিদা কি না (stakeholder-এর সাথে review, prototype); verification পরে দেখে তৈরি জিনিস সেই লেখা চাহিদা মানে কি না।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… কোড লেখার আগে ভুল ধরা কেন সস্তা? — দেরিতে ধরা ভুল নকশা, কোড আর test সব জায়গায় বদল চায়। পর্ব ২৪
মডিউল ৫, ৬ — Design আর pattern (পর্ব ২৫–৩৭)
ভ-২১Low coupling আর high cohesion কেন একসাথে চাওয়া হয়? (সহজ)
Cohesion বেশি হলে এক বদলের কারণ এক জায়গায় থাকে; coupling কম হলে সেই বদল বাইরে ছড়ায় না — দুটো মিলে বদল সস্তা আর নিরাপদ।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… অতিরিক্ত ভাগ করলে? — অগণিত ছোট module-এর মধ্যে যোগাযোগই নতুন coupling; ভারসাম্য লাগে। পর্ব ২৫
ভ-২২Square কি Rectangle-এর subclass হতে পারে? (মাঝারি)
গণিতে হ্যাঁ, কোডে setter থাকলে না: Rectangle-এর প্রতিশ্রুতি “width বদলালে height বদলায় না” Square রাখতে পারে না — LSP ভাঙে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… সমাধান? — immutable shape, বা দুটি আলাদা type একটি Shape interface-এর নিচে। পর্ব ২৮
ভ-২৩Singleton-এর সমস্যা কী? (মাঝারি)
লুকানো global state: যেকোনো জায়গা থেকে বদলানো যায়, test একটি আরেকটির ওপর নির্ভর করে, নির্ভরতা constructor-এ দেখা যায় না।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… একটিমাত্র instance তবু দরকার হলে? — composition root-এ একবার বানিয়ে dependency injection দিয়ে দেওয়া; DI container-এ singleton lifetime. পর্ব ৩৩ · পর্ব ৩৭
ভ-২৪Strategy আর State-এর গঠন একই — তফাত কোথায়? (কঠিন)
দুটিতেই context একটি interface-এর object-কে কাজ দেয়; Strategy বাছেন client (কোন ছাড়ের নিয়ম), State বদলায় object নিজে, ঘটনার জবাবে (ধার → ফেরত → জরিমানা বাকি)।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… State pattern ছাড়া? — বড় switch, যা প্রতিটি নতুন অবস্থায় অনেক জায়গায় বদলায়। পর্ব ৩৬
মডিউল ৭ — Architecture আর maintenance (পর্ব ৩৮–৪৪)
ভ-২৫Legacy code মানে কী? বদলাবেন কীভাবে? (মাঝারি)
Michael Feathers-এর সংজ্ঞায় test ছাড়া কোড। আগে characterization test দিয়ে আজকের আচরণ ধরে রাখা, তারপর ছোট নিরাপদ বদল; নতুন কাজ sprout বা wrap করে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… পুরো নতুন করে লিখলে? — বড় rewrite ঝুঁকিপূর্ণ; strangler fig — নতুন অংশ পাশে বসিয়ে ধীরে ধীরে পুরোনোটি সরানো। পর্ব ৪৩
ভ-২৬Comment কখন লিখবেন? (সহজ)
Comment বলে “কেন” (ব্যবসার নিয়ম, অপ্রত্যাশিত সিদ্ধান্তের কারণ), কোড বলে “কী”। ভালো নাম আর ছোট function বেশিরভাগ “কী”-এর comment অপ্রয়োজনীয় করে; commented-out কোড মুছে ফেলুন — Git মনে রাখে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… formatting নিয়ে review-এ তর্ক? — না; স্বয়ংক্রিয় formatter. পর্ব ৪১
মডিউল ৮ — Testing (পর্ব ৪৫–৫১)
ভ-২৭১০০% coverage মানে কি bug নেই? (সহজ)
না। Coverage বলে কোন কোড চলেছে, ঠিক চলেছে কি না নয় — assertion ছাড়া test-ও ১০০% দিতে পারে। আর বাদ পড়া requirement-এর কোডই নেই, তাই coverage তা ধরে না।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… test কতটা ভালো, মাপবেন কীভাবে? — mutation score. পর্ব ৫০
ভ-২৮Mock আর stub-এর পার্থক্য? কখন mock নয়? (মাঝারি)
Stub ঠিক করা উত্তর দেয় — ফল দেখে যাচাই (state verification); mock প্রত্যাশিত ডাক জানে আর নিজে যাচাই করে (behaviour verification). Value বা ছোট pure কোড mock করবেন না; নিজের নয় এমন API নিজের adapter-এর পেছনে রাখুন।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… বেশি mock-এর ক্ষতি? — implementation-এর সাথে বাঁধা ভঙ্গুর test, আর আসল API বদলালেও test সবুজ (mock drift). পর্ব ৪৯
ভ-২৯Flaky test কী, আর সমাধান কী নয়? (মাঝারি)
কোড না বদলেও কখনো পাস, কখনো ফেল — কারণ প্রায়ই নির্দিষ্ট sleep, ভাগ করা অবস্থা, test-এর ক্রম, সময়-অঞ্চল বা বাইরের service. অন্ধ retry দিয়ে ঢাকা সমাধান নয়।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… তাহলে কী করবেন? — পরিসংখ্যান নিয়ে মালিকসহ quarantine, তারপর কারণ ধরে ঠিক। পর্ব ৫১
CI আর মডিউল ১০ — Delivery আর management (পর্ব ৫৮–৬৫)
ভ-৩০তিন সপ্তাহের feature branch-এ CI চালালে কি continuous integration হয়? (মাঝারি)
না। CI-র “integration” মানে অন্তত দিনে একবার mainline-এ মেলানো; দীর্ঘ branch-এ test চালানো শুধু “branch-এ test”.
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… অসমাপ্ত feature তাহলে কীভাবে main-এ যাবে? — feature flag-এর পেছনে, বা ছোট ছোট নিরাপদ ধাপে। পর্ব ৫৮
ভ-৩১Story point আর ঘণ্টার অনুমানের পার্থক্য কী? (মাঝারি)
Story point আপেক্ষিক আকার — জটিলতা, কাজের পরিমাণ আর অনিশ্চয়তা মিলিয়ে, দলের নিজস্ব মাপ; ঘণ্টা পরম সময়। Planning poker-এ সবাই একসাথে কার্ড দেখান, যাতে প্রথম কথা বলা মানুষের প্রভাব (anchoring) কমে।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… দুই দলের velocity তুলনা? — অর্থহীন; point-এর মাপ দলভেদে আলাদা। পর্ব ৬০
ভ-৩২Bus factor কী, আর কমবেশি কীভাবে বোঝা যায়? (মাঝারি)
কতজন মানুষ হঠাৎ চলে গেলে project আটকে যায়; Git history-তে কে কোন file জানেন দেখে, সবচেয়ে বেশি জানা মানুষকে একে একে সরিয়ে দেখা যায় কখন অর্ধেকের বেশি file অভিভাবকহীন।
তারপর পরীক্ষক জিজ্ঞেস করতে পারেন… বাড়াবেন কীভাবে? — pair programming, code review-এ ঘুরিয়ে reviewer, লেখা নথি। পর্ব ৬৩
১০ · যেসব ভুলে নম্বর কাটে — আর AI-কে কড়া পরীক্ষক বানান
| ভুল | কেন নম্বর কাটে | প্রতিকার |
|---|---|---|
| সংজ্ঞা ছাড়া সরাসরি উদাহরণ | মার্ক-স্কিমের প্রথম ঘর খালি | প্রথম লাইনে এক বাক্যের সংজ্ঞা |
| “পার্থক্য” প্রশ্নে অনুচ্ছেদ | পরীক্ষক মাপকাঠি মেলাতে পারেন না | একই সারির টেবিল + “কখন কোনটি” |
| UML-এ ভুল চিহ্ন বা multiplicity নেই | notation-ই উত্তরের বড় অংশ | হীরা সমগ্রের দিকে, ত্রিভুজ base-এর দিকে, দুই প্রান্তে সংখ্যা |
| Git-এর command, প্রভাব ছাড়া | কোন এলাকা বা ref বদলায়, সেটিই প্রশ্ন | command → working tree / index / branch-এ কী হলো |
| অঙ্কে একক বা সূত্র নেই | পদ্ধতির নম্বর হারায় | সূত্র → মান → একক → মানে |
| Scenario উপেক্ষা করে মুখস্থ উত্তর | “কোনটি বাছবেন, কেন” অংশে শূন্য | প্রশ্নের বৈশিষ্ট্য থেকে যুক্তি, বিকল্প কেন নয় |
| বানানো সাল, standard বা version | একটি ভুল তথ্য পুরো উত্তরে সন্দেহ আনে | নিশ্চিত না হলে সাল বাদ দিয়ে ধারণা লিখুন |
AI দিয়ে প্রশ্ন বানানো আর নিজের উত্তর যাচাই করানো যায় — কিন্তু AI প্রায়ই দেখতে ঠিক অথচ ভুল UML আঁকে (উল্টো হীরা, বানানো multiplicity), পুরোনো Scrum Guide-এর নিয়ম বলে, সতর্কতা ছাড়া reset --hard বা push --force প্রস্তাব করে, অস্তিত্বহীন flag বা standard বানায়, আর COCOMO 81 ও COCOMO II-এর ধ্রুবক মেশায়। তাই তাকে পরীক্ষক বানান, উত্তরদাতা নয়:
AI-এর উত্তর যাচাইয়ের চেকলিস্ট
নিজেকে যাচাই করুন
ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।
ক্রমএকটি ১০ নম্বরের লিখিত উত্তরের অংশগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)
- ✏️ মার্জিনে পাঁচ শব্দের খসড়া
- 📖 এক–দুই বাক্যের সংজ্ঞা
- ⚙️ কীভাবে কাজ করে — নম্বর দেওয়া ধাপ
- 📐 লেবেলসহ ছবি বা তুলনার টেবিল
- ⚖️ উদাহরণ আর সুবিধা-অসুবিধা
- ✅ এক লাইনের উপসংহার — কখন কোনটি
Coupling-এর প্রচলিত ছয় স্তরের (Myers-এর তালিকা) কোনটি সবচেয়ে কাম্য, অর্থাৎ সবচেয়ে কম ক্ষতিকর?
- Stamp coupling
- Data coupling
- Control coupling
- Content coupling
একটি function-এর control-flow graph-এ ১০টি edge আর ৮টি node, graph একটিই (P = 1). Cyclomatic complexity V(G) কত?
- 2
- 18
- 3
- 4
একটি commit করার পর git reset --soft HEAD~1 চালালেন। এখন সেই commit-এর বদলগুলো কোথায়?
- Index-এ staged অবস্থায়, working tree-তেও আছে
- শুধু working tree-তে, unstaged অবস্থায়
- মুছে গেছে, শুধু reflog থেকে ফেরানো যায়
- স্বয়ংক্রিয়ভাবে stash-এ চলে গেছে
main-এ নতুন commit আসার পরে feature branch-এ git rebase main চালানো হলো। Branch-এর নিজস্ব commit-গুলোর hash বদলায় কেন, যদিও file-এর বদল একই?
- Git প্রতিবার hash-এ নতুন এলোমেলো মান যোগ করে
- Rebase commit-এর বার্তা বদলে দেয়
- Commit-এর ভেতরে parent-এর hash থাকে, আর replay-তে parent বদলে যায়
- Rebase hash-এর algorithm SHA-1 থেকে SHA-256 করে দেয়
Boehm-এর পরিচিত ভাষায় verification কোন প্রশ্নের উত্তর দেয়?
- ঠিক জিনিসটি বানাচ্ছি তো?
- জিনিসটি ঠিকভাবে বানাচ্ছি তো?
- বাজেটের মধ্যে শেষ হবে তো?
- ব্যবহারকারী খুশি হবেন তো?
UML class diagram-এ Bus আর Seat-এর মধ্যে একটি রেখা, Bus-এর প্রান্তে একটি ভরাট হীরা। এটি কী বোঝায়?
- Seat, Bus-এর subclass
- Aggregation — Seat অনেক Bus-এ ভাগ হতে পারে
- Bus সাময়িকভাবে Seat ব্যবহার করে (dependency)
- Composition — Seat, Bus-এর অংশ, তার জীবন Bus-এর হাতে
একটি ঝুঁকি ঘটার সম্ভাবনা ০.২৫, ঘটলে ক্ষতি ৳৪০ লাখ। একটি প্রতিকারে ৳২ লাখ খরচে সম্ভাবনা ০.০৫-এ নামে। Risk exposure আর risk reduction leverage (RRL) কত?
- RE = ৳১০ লাখ, RRL = ৪
- RE = ৳১০ লাখ, RRL = ৮
- RE = ৳৪০ লাখ, RRL = ২০
- RE = ৳৪০.২৫ লাখ, RRL = ১
Basic COCOMO (১৯৮১)-র organic mode-এ effort আর সময়ের সূত্র কোনটি?
- E = 2.94 × KLOC^0.91, D = 3.67 × E^0.28
- E = 3.6 × KLOC^1.20, D = 2.5 × E^0.32
- E = 2.4 × KLOC^1.05, D = 2.5 × E^0.38
- E = 2.4 × KLOC^0.38, D = 2.5 × E^1.05
একটি কাজের PERT অনুমান: আশাবাদী a = ২, সম্ভাব্য m = ৫, হতাশাবাদী b = ১৪ দিন। প্রত্যাশিত সময় te আর variance কত?
- te = ৫, variance = ২
- te = ৬, variance = ৪
- te = ৭, variance = ৪
- te = ৬, variance = ২
Scrum Guide-এর ২০২০ সংস্করণ অনুযায়ী Product Backlog-এর জন্য জবাবদিহি কার, আর তার commitment কী?
- Scrum Master; Definition of Done
- Developers; Sprint Goal
- Project manager; Release plan
- Product Owner; Product Goal
UML sequence diagram-এ ড্যাশ রেখা আর খোলা মাথার তীর সাধারণত কী বোঝায়?
- একটি call-এর reply বা ফিরতি বার্তা
- একটি synchronous call
- একটি asynchronous signal
- Object-এর lifeline-এর শেষ
একটি Kanban board-এ গড়ে ১৫টি কাজ চলমান, আর দল দিনে গড়ে ৫টি কাজ শেষ করে। Little-এর সূত্রে গড় cycle time কত?
- ৭৫ দিন
- প্রায় ০.৩৩ দিন
- ৩ দিন
- ২০ দিন
১৮০ মিনিটের একটি লিখিত পরীক্ষায় মোট ৯০ নম্বর। নম্বরের অনুপাতে সময় ভাগ করলে একটি ১০ নম্বরের প্রশ্নে কত মিনিট দেওয়া উচিত?
- ২০ মিনিট
- ১০ মিনিট
- ৩০ মিনিট
- ১৮ মিনিট
pull.rebase = false (merge নীতি) ঠিক করা আছে। এ অবস্থায় git pull আসলে কী করে?
- শুধু remote থেকে নতুন commit এনে origin/main হালনাগাদ করে
- Local commit remote-এ পাঠিয়ে দেয়
- Local branch মুছে remote-এর কপি বসায়
- Fetch করে তারপর বর্তমান branch-এ merge করে
শব্দকোষ
লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:
মনে রাখুন
- কাঠামোই নম্বর: সংজ্ঞা → কীভাবে কাজ করে → ছবি বা টেবিল → উদাহরণ বা সংখ্যা → সুবিধা-অসুবিধা → উপসংহার; “পার্থক্য” প্রশ্নে একই সারির টেবিল আর “কখন কোনটি”।
- খাতায় UML: class-এর তিন ঘর, হীরা সমগ্রের দিকে, ফাঁপা ত্রিভুজ base-এর দিকে, প্রতিটি association-এর দুই প্রান্তে multiplicity; sequence-এ ভরাট তীর call, ড্যাশ reply, শর্তে
alt— আর ছবির নিচে অনুমান। - Git-এর উত্তর মানে প্রভাব: কোন command কোন এলাকা (working tree, index, branch) বদলায়; merge পুরোনো hash রাখে, rebase নতুন hash বানায়; শেয়ার করা history-তে revert আর
--force-with-lease. - সংখ্যা সূত্র থেকে: RE = P × L, RRL = (আগে − পরে) ÷ খরচ, V(G) = E − N + 2P, te = (a + 4m + b) ÷ 6, variance যোগ করে তারপর বর্গমূল, Basic COCOMO-র ধ্রুবক mode ধরে — আর একক।
- ভাইভায় তিন বাক্য: কী → কেন বা উদাহরণ → দাম বা সীমা; সীমাটি নিজে থেকে বলুন, না জানলে সৎভাবে বলুন, আর AI-কে পরীক্ষক বানিয়ে নিজের উত্তর যাচাই করুন।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পর্ব ৬৯ · Git ইন্টারভিউ — ধারণা, পরিস্থিতিভিত্তিক সমস্যা আর command-এর অনুশীলনপরবর্তী পর্বCommand-এর আসল output ধরে পরিস্থিতিভিত্তিক প্রশ্ন।
- পর্ব ৬৬ · Numerical সমস্যার অনুশীলন — COCOMO, function point, CPM-PERT আর complexity, পূর্ণ সমাধানসহঅনুশীলনএখানকার ছোট অঙ্কের পূর্ণ দৈর্ঘ্যের রূপ।
- পর্ব ৬৭ · MCQ প্রশ্নব্যাংক — software engineering ও Gitঅনুশীলনপুরো কোর্সের দ্রুত পুনরালোচনা।
- পর্ব ৭০ · Software engineering ইন্টারভিউ — SOLID, design pattern, testing, code review আর আচরণগত প্রশ্নঅনুশীলনএকই বিষয়, ইন্টারভিউর ধাঁচে।
- সফটওয়্যার ইঞ্জিনিয়ারিং ও Git · কোর্স হোমরোডম্যাপসব ৭০টি পর্বের তালিকা আর মডিউল।
- System Design · লিখিত ও মৌখিক (ভাইভা) প্রশ্নপাশের ট্র্যাকArchitecture আর distributed system-এর লিখিত প্রশ্ন, একই কাঠামোয়।
- System Design · নকশার কাঠামোপাশের ট্র্যাকবড় মাপের নকশার প্রশ্নে কোন ক্রমে এগোবেন।