Saturday, June 27, 2020

Functional Requirement and Non Functional Requirement all details in বাংলা

একটি সফটওয়্যারে কি কি ফিচার থাকবে সেটাকে বলা হয় Functional Requirement আর সফটওয়্যারে যে সব গুণাবলী বজায় রাখতে হয় সেগুলোকে বলে Non Functional Requirement। আমরা যেসব সফটওয়্যার ইঞ্জিনিয়ারিং ফলো করে কাজ করি, তার সব কিছুই মূলত Non Functional Requirement কে কেন্দ্র করে। Functional Requirement এর জন্য সফটওয়্যার ইঞ্জিনিয়ারিং আসলে দরকার হয় না।

আমাদের দেশে একটি কথা প্রচলিত আছে যে এসব সফটওয়্যার ইঞ্জিনিয়ারিং, ডিজাইন প্যাটার্ন, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং শিখে কি লাভ? আমাদের দেশের বেশিরভাগ কোম্পানিতে তো এগুলো ব্যাবহার না করেই সফটওয়্যার তৈরি হচ্ছে। তাহলে এগুলো আসলে কখন কাজে লাগে এবং কোম্পানিতে ব্যাবহার না হলে আমরা শিখেই বা কি করবো?

Functional and non functional requirements – TC1019 Fall 2016





যেহেতু Functional Requirement আপনি সফটওয়্যার ইঞ্জিনিয়ারিং এপ্লাই না করেই কমপ্লিট করতে পারেন, তার মানে কেউ সফটওয়্যার ইঞ্জিনিয়ারিং ছাড়াই আসলে পুরো প্রোজেক্ট কমপ্লিট করতে সক্ষম। এবং সব ফিচার সেখানে কাজ করবে। তাহলে Non Functional Requirement গুলো আসলে কি কি এবং কেনই বা সেগুলো লাগে সেটা যদি আমরা বুঝতে পারি তাহলে আমরা এটাও বুঝতে পারবো যে সফটওয়্যার ইঞ্জিনিয়ারিং এর দরকার কি।

কিছু Non Functional Requirement হলঃ
১) Reliability
২) Security
৩) Scalability
৪) Maintainability
৫) Interoperability
৬) Robustness
৭) Fault tolerance ইত্যাদি

এগুলো আসলে কি? দেখা যাক –
১) Reliability মানে সফটওয়্যারটি ব্যাবহার করতে গেলে সেটা সব সময় সঠিকভাবে কাজ করে কিনা। মনে করুন আপনি একটি গেম খেলছেন, কিন্তু একটু পর পর সেটা ক্রাস করে। তাহলে সেটা Reliable নয়।

২) Security মানে সফটওয়্যারটি ব্যাবহার করা কতখানি নিরাপদ। যেমন কোন মেডিক্যাল সফটওয়্যার যদি এক্স রে এর মান ভুল প্রয়োগ করে, তাহলে রোগীর ক্ষতি হতে পারে। বা আপনি যদি কোন ইকমারস সফটওয়্যার এ আপনার ক্রেডিট কার্ড নম্বর প্রদান করেন এবং সেখান থেকে হ্যাকার সেটা চুরি করে ফেলে তাহলে সেটার Security ভালো নয়।

৩) Scalability মানে সফটওয়্যারটি কিভাবে অনেক ইউজারকে সার্ভিস দিতে পারে। মনে করুন যদি অনেক ইউজার ওয়েবসাইটে ভিজিট করলে সাইট ডাউন হয়ে যায় তাহলে সেটার Scalability ভালো নয়।

৪) Maintainability মানে একটি সফটওয়্যারে কোন নতুন ফিচার যোগ করতে কত সময় লাগে, বা কোন ফিচার পরিবর্তন করতে কত সময় লাগে। যদি খুব বেশি সময় লাগে তাহলে সেটার Maintainability ভালো নয়।

৫) Interoperability মানে সফটওয়্যারটি অন্য টেকনোলজির সাথে কত সহজে খাপ খায়। মনে করুন, আপনি একটি সফটওয়্যার সি# দিয়ে তৈরি করেছেন, এটা কি এখন অন্য একটি জাভা সফটওয়্যার এর সাথে সহজে কাজ করতে পারবে? যদি না পারে তাহলে সেটার Interoperability ভালো নয়। বা যদি আপনি সেটাকে Windows এবং Linux এ সমানভাবে ব্যাবহার করতে না পারেন তাহলে Interoperability ভালো নয়।

৬) Robustness মানে সফটওয়্যারটি চাপের মুখে কতখানি সঠিকভাবে কাজ করতে পারে। মনে করুন একটি গেম চালাচ্ছেন কিন্তু RAM কম, এখন সেটা কতখানি ভালো কাজ করবে সেটা Robustness এর উপর নির্ভর করে।

৭) Fault tolerance মানে সফটওয়্যার এ কোন সমস্যা ধরা পরলে সেটা কি সামাল দিতে পারে নাকি পারে না। মনে করুন এক্সরে মেশিনে কেউ ভুল করে একটি মান ইনপুট করলো যেটা আসলে সঠিক নয়, তখন সফটওয়্যার কি সেটা ধরতে পারবে এবং সেটাকে ঠিক করে নিতে সাজেস্ট করতে পারবে নাকি পারবে না। বা মনে করুন একটি ফাইলে কিছু সেভ করতে গেলেন এবং এর আগেই সেটা ক্রেস করলো, তাহলে আপনি পরে কি যা লিখেছিলেন সেটা রিকভার করতে পারবেন নাকি পারবেন না। যদি Fault tolerance ভালো এমন সফটওয়্যার হয়, তাহলে সেটা রিকভার করা যাবে।

তো এখন এগুলো কি আমরা সফটওয়্যার কোম্পানিতে যে সফটওয়্যার তৈরি করে থাকি, তাতে আছে নাকি নেই। যদি থাকে তাহলে সেটা কতটুকু পরিমাণে আছে? আমরা সবাই বুঝতে পারি উপরের বিষয়গুলো অবশ্যই গুরুত্বপূর্ণ। এরপরও আমরা যে সফটওয়্যার তৈরি করি সেখানে এগুলো অনুপস্থিত দেখা যায়। এমনকি আমরা সেটা আছে কি নেই, সেটাও যাচাই করে দেখি না। মূলত আমাদের ফিচার কমপ্লিট হয়ে গেলেই কাজ শেষ মনে করি।

তবে সবাই যে এমন তা কিন্তু নয়। কেউ একদম নিয়ম মেনে কাজ করে, আবার অনেকে একদমই করে না। কাজেই আমাদের বুঝতে হবে যে আমাদের সঠিক নিয়মে সফটওয়্যার তৈরি করতে হবে। তা না হলে সফটওয়্যার তৈরি করে আমরা খুব বেশিদূর যেতে পারবো না।

আর এই গুণাবলীগুলো যদি আমরা অর্জন করতে চাই, তখনই দেখতে পাবো যে আমাদের সফটওয়্যার তৈরি করার প্রসেস অনেক জটিল হয়ে যাচ্ছে। তখন সফটওয়্যার ইঞ্জিনিয়ারিং আমাদের সাহায্য করে। কেউ যদি এই গুণাবলীগুলো নিশ্চিত না করে কেবল কোডিং করে ফিচার কমপ্লিট করে তাহলে সে আসলে অনেক সহজ কাজ শেষ করলো। কারণ দেখা যায় এই গুণাবলীগুলো নিশ্চিত করতে হলে সফটওয়্যার তৈরির কাজ প্রায় ১০০ গুণ জটিল হয়ে যেতে পারে। তবে এই গুণাবলী ছাড়া সফটওয়্যার তৈরি করলে সেটা হয় বেশিদিন টিকবে না, নয়ত মুনাফা করতে পারবে না।

No comments:

Post a Comment