Showing posts with label Software Ebngineering. Show all posts
Showing posts with label Software Ebngineering. Show all posts

Saturday, July 25, 2020

Design Patterns কি এবং কেন শিখবো ?

একটি কাল্পনিক সফটওয়্যার আর্কিটেকচার । শুধু নজর করে দেখুন আর নিজেরটা কল্পনা করুন।
শুরুতেই বলি Design Pattern কোন স্পেসিফিক Programming language এর টপিক না । এটা কিছু স্ট্যান্ডার্ড সফটওয়্যার Designing Concept প্রেজেন্ট করে। যেকোনো জটিল সিস্টেম সঠিক Design pattern ফলো করে Design করলে সেটা ডেভেলপ করা সহজ হয়, ভাল পারফর্মেন্স পাওয়া যায়, এবং সবচেয়ে গুরুত্বপূর্ণ সিস্টেম মেইন্টেইন, এক্সটেনশন করা আরো সহজ হয়। সোজা কথায় Design pattern হচ্ছে সফটওয়্যার সিস্টেম আর্কিটেকচার ।

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

যায় হোক আমি ঢাকার রাস্তা ঠিক করবো না সেটা নগরপিতারা বুঝবে। আমি আমার কথাই আসি, আমরা কোন সফটওয়্যার সিস্টেম তৈরি করার জন্য কিন্তু শুরুতেই Create New Project খুলে কোড করতে বসে যাবো না । আমরা সিস্টেমের রিকোয়ারমেন্ট বুঝবো, কাজ গুলো ছোট ছোট মডিউলে ভাগ করবো, ডিপেন্ডেন্সি এনালাইসিস করে Intra module এবং Inter module উপযুক্ত Design Pattern ফলো করে খসড়া UML ডিজাইন করবেন। তখন UML দেখলেই আপনি খালি চোখে দেখতে পারবেন কাকে Interface বানাতে হবে, কোনটা Abstract না Concrete Class হবে, কাকে কার থেকে বা কোথায় Extends বা Implement করতে হবে, কাকে কার মধ্যে Associate করতে হবে, কাকে কোন Access Modifier দিবেন । এখন আপনি মডিউল ধরে ধরে কোড লিখবেন এবং অনেক দ্রুত প্রোজেক্ট সম্পন্ন করতে পারবেন। গ্রেট প্রোগ্রামাররা কোডিং এর থেকে সিস্টেম ডিজাইনিং এ বেশি সময় দিয়ে থাকে । এর মহত্ত্ব Eoin Woods এর কথা থেকেই বোঝা যায় -
 Software architecture is the set of design decisions which, if made incorrectly, may cause your project to be cancelled ― Eoin Woods
এটা এতোই গুরুত্বপূর্ণ যে ৩ মাস আর কিছু না করে এগুলা আয়ত্ত করলে নিঃসন্দেহে বলা যায় সময়ের সঠিক ব্যবহার হয়েছে । আর কেউ যদি সুস্পষ্ট ভাবে OOP বুঝতে চাই তার জন্য এটা ফরয । তা সে Design Patterns দিয়েই শুরু করুক আর Class, Object দিয়েই শুরু করুক ।
এই আর্টিকেলে তেমন বিশেষ কিছু দেখাবো না, তাও Design Pattern এর প্রাথমিক বিষয় দিয়েই শেষ করি, Design patterns ৩ ধরনের
  1. Creational | কার অবজেক্ট কিভাবে কখন তৈরি হবে এবং কিভাবে ব্যবহার হবে সেটা নির্ধারণ করে।
  2. Structural | ক্লাস এবং অবজেক্ট একের অপরের সাথে সংযুক্ত হয়ে বড় স্ট্রাকচার দাঁড় করাবে।
  3. Behavioral | ক্লাস এবং অবজেক্ট কার সাথে কিভাবে connected হয়ে কিভাবে কাজ করবে ।  
Design Patterns Classification
Creational এর মধ্যে আছে Singleton, Prototype, Factory Method, Abstract Factory, Builder এই পাঁচটা । অনুরুপ ভাবে Structural এর মধ্যে আছে ৭ টা এবং Behavioral এর মধ্যে আছে আরো ১১ টা ।

অতএব সময়ের উপযুক্ত ব্যবহার শুরু করে দিন সহজতম Singleton Pattern দিয়েই ।

Read more ...

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 ভালো এমন সফটওয়্যার হয়, তাহলে সেটা রিকভার করা যাবে।

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

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

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

Read more ...