সফটয়্যার ইঞ্জিনিয়ারিং: ব্যবহারিক আঙ্গিক-৫


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

দলে কাজ করতে শেখা

স্টুডেন্ট প্রজেক্টগুলোতে সাধারনত একটা টিমের বৈশিষ্ট্য থাকে-

  • আপনার টিমের এক/দুইজন দক্ষ এবং বাকিরা নবীশ থাকে, আপনারা যে ক্ষেত্রে কাজ করতে চান সেখানকার ব্যাপারে।
  • টিমের সাইজ ফিক্সড থাকে এবং এটা সাধারনত খুব বড় হয় না।
  • আপনি প্রজেক্ট চলাকারীন সময়ে টিমমেম্বার বাড়াতে বা ছাটাই করতে পারবেন না।
  • আপনি বাইরের কাইকে দিয়ে কাজ করিয়ে নিতে(আউটসোর্সিং) পারবেন না।

টিমিং আপ

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

টিম তৈরী করার সময় টিমটা যাতে ব্যালান্স হয় সেদিকে লক্ষ্য রাথতে হবে। টিমের সবাই যদি শুধুমাত্র একটি বিষয়েই পারদর্শী হয় তাহলে কাজের আউটপুট ভাল হবে না। তাই টিম তৈরী করার সময়, ডিজাইনার, গ্রাফিক্যাল ইউজার ইন্টারফেস(GUI) এক্সপার্ট, প্রোগ্রামার, ডেটাবেজ এক্সপার্টদের সমন্বয়ে টিম তৈরী করা উচিৎ।

টিমে যদি আপনার ঘনিষ্ট বন্ধুরা থাকে তাহলে আপনি অনেক সুবিধা পাবেন, তবে এর অসুবিধাও আছে। আপনি এক্ষেত্রে কাজ করার সময় প্রফেশনাল এটমোস্ফিয়ার ধরে রাখতে পারবেন না। এছাড়া কোন সদস্য ঠিকমত কাজ করতে না পারলেও আপনি বন্ধুত্বের খাতিরে কিছু বলতেও পারবেন না। তবে এ সমস্যা কিভাবে সমাধান হবে তার উত্তর আমার জানা নেই।

একটা টেমর বিভিন্ন দিকে কাজ করতে হয়, এমনকি যেদিকে কোন সদস্যেরই দক্ষতা নেই সেদিকেও। এক্ষেত্রে প্রত্যেকটা অংশ ভাগ ভাগ করে একজন করে সদস্যকে সে অংশের দায়িত্ব দিয়ে দেয়া উচিৎ। তার কাজ হবে সে অংশ সম্পর্কে যথাযত ধারনা অর্জন করা এবং টিমের অন্যান্য সদস্যদেরকে তা জানানো। উদাহরনসরূপ, যে টেস্টিংয়ের দায়িত্বে থাকবে তার দায়িত্ব হচ্ছে বিভিন্ন টেস্টিং টুল সম্পর্কে জানা, টেস্টিং পলিসি কি হবে সেটা নির্ধারন করা, টেস্ট প্ল্যান নির্ধারন করা, টেস্টিংয়ের সময় কিভাবে ট্রাবলশুটিং করা হবে সেটা জানা এবং সদস্যদেরকে সেটা জানানো।

টিমের প্রত্যেক সদস্যদের কেমন হওয়া উচিৎ তা নিয়ে একটা কথা খুব প্রচলিত আছে, “Jack of all trades and a master of at least one”. অর্থাৎ প্রত্যেক সদস্যের সব বিষয়েই একটা মোটামুটি ধারনা থাকতে হবে এবং কমপক্ষে একটা ক্ষেত্রে ভাল দক্ষতা থাকতে হবে।

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

সফটয়্যার ইঞ্জিনিয়ারিং: ব্যবহারিক আঙ্গিক-৪


প্রজেক্ট ঝুঁকি

এই পর্বে আমরা দেখবো একটা প্রজেক্ট করতে গেলে সাধারনত কি কি ঝুঁকিতে পড়তে হয় এবং সমস্যা সমাধানের জন্য আমাদের কি কি করতে হবে। প্রজেক্ট চলাকালে যে কোন সমস্যা দ্রুত ধরতে পারা এবং তা সমাধানের জন্য দ্রুত ব্যবস্থা নেয়া অত্যন্ত গুরুত্বপূর্ণ।

ঝুঁকি: আপনি হয়তো প্রজেক্ট রিকোয়ারমেন্ট ভালভাবে বুঝতে পারেন নি এবং ভুল প্রোডাক্ট তৈরী করে সময় নষ্ট করছেন।

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

ঝুঁকি: কোন কোন গ্রুপ মেম্বার হয়তো আশানুরূপ কাজের আউটপুট দিতে পারছে না বা প্রজেক্টে কাজ করা অন্যান্য সদস্যদের সাথে ভাল ব্যবহার করছে না।

সমাধান: এ ব্যাপারে শুরুতেই ব্যবস্থা নেয়া উচিৎ এবং অভিযুক্ত সদস্যকে জানিয়ে দেয়া উচিৎ যে তার ব্যবহার ঠিক হচ্ছে না। প্রত্যেককে শুধুমাত্র তাদের উপর অর্পিত দায়িত্বই পালন করার কথা মনে করিয়ে দেয়া উচিৎ। সবচেয়ে ভাল হয় গুগলডক্সে একটা স্পেডশিট তৈরী করা সেখানে সবার দায়িত্ব দিয়ে দেয়া এবং সেটা নিয়মিত মূল্যায়ন করা। সবার সাথে স্পেডশিটটি শেয়ার করলেও ভাল হয়। তবে মূল্যায়ন সবার সাথে শেয়ার করা উচিৎ না।

ঝুঁকি: কিছু সদস্যের হয়তো প্রজেক্টে কাজ করার জন্য প্রয়োজনীয় দক্ষতা নেই। বিশেষ করে স্টুডেন্ট প্রজেক্টগুলো করার ক্ষেত্রে এই সমস্যায় প্রায়সই পড়তে হয়।

সমাধান: যদিও এক্সটার্নাল রিসোর্স যেমন- বই, টিউটোরিয়াল ইত্যাদি স্কীল তৈরীতে খুব সাহায্য করে তবে ব্যবহারিক কাজ করার ক্ষেত্রে গ্রুপে কাজ করলে এক্ষেত্রে আরো বেশি সুবিধা পাওয়া যায়। টিমের দক্ষ সদস্যদের উচিৎ নবীশদের সাহায্য করা। এক্ষেত্রে পেয়ার প্রোগ্রামিং মেথড ব্যবহার করলে খুব ভাল ফল পাওয়া যায়।

ঝুঁকি: প্রজেক্টের সম্পূর্ণ টিমকে যদি আলাদা আলাদা সাব-গ্রুপে ভাগ করে কাজ করা যায় তবে অনেক ভাল ফলাফল পাওয়া যায়। তবে অনেক সময়ই একটি সাব-গ্রুপ কাজ খারাপ করলে পুরো প্রজেক্টে এর খারাপ প্রভাব পড়ে।

সমাধান: সাব-গ্রুপ তৈরী করার সময় স্কীল, কমিটমেন্ট এ সূচকগুলোর দিকে খেয়াল রেখে ব্যালেন্স দল তৈরী করা উচিৎ। এছাড়া ক্রস টেস্টিং(এক গ্রুপের কাজ অন্য গ্রুপের দ্বারা মূল্যায়ন) এক্ষেত্রে খুব ভাল কাজ করে এবং সাব-গ্রুপগুলোর মধ্যে একটা প্রতিযোগীতার মনোভাব তৈরী করে।

ঝুঁকি: স্টুডেন্ট প্রজেক্টগুলোর ক্ষেত্রে একটা কমন সমস্যা হচ্ছে এর নির্দিষ্ট ডেডলাইনের মধ্যে কাজ শেষ করতে না পারা।

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

ঝুঁকি: প্রজেক্ট করার সময় অনেকসময়ই নানা আনএক্সপেক্টেড ডিলে হয়ে যায়, যেমন কোন সদস্য হঠাৎ করে অসুস্থ হয়ে যাওয়া, কোন সদস্য টিম হতে বেরিয়ে যাওয়া ইত্যাদি।

সমাধান: কখনোই কোন একজন সদস্যদের উপর অনেক বেশি নির্ভরশীল হওয়া উচিৎ না। এছাড়া বাফার টাইমিং ব্যবহার করা উচিৎ অর্থাৎ, প্রজেক্টের প্রত্যেকটা অংশের কাজ শেষ করতে যে সময় লাগবে তার চেয়ে কিছুটা বেশি সময় হাতে রাখা।

ঝুঁকি: অনেক সময়ই যে সময়ে কাজ শেষ করা যাবে বলে ধারনা করা হয়েছিল, ইচ্ছা সত্ত্বেও সে সময়ে কাজ শেষ করা যায় না।

সমাধান: প্রজেক্টের অপরিচিত(Unfamiliar) অংশগুলোর কাজ প্রথমেই করা উচিৎ। কঠিন অংশের কাজ শুরুতেই করে ফেলা উচিৎ। বলা হয়ে থাকে যদি অনেক খাবার একসঙ্গে খেতে হয় তাহলে বিদঘুটে খাবারগুলোই প্রথমে খেয়ে নেয়া উচিৎ। এছাড়া একই ধরনের কাজগুলো একসঙ্গে করলে সময়ের সাশ্রয় হয়।

সফটয়্যার ইঞ্জিনিয়ারিং: ব্যবহারিক আঙ্গিক-৩


প্রোডাক্ট রিলিজ

এ পর্বটি প্রোডাক্ট রিলিজ নিয়ে লেখা হবে। প্রোডাক্ট রিলিজ করার অনেকগুলো মাধ্যম রয়েছে। প্রথমে সিদ্ধান্ত নিতে হবে কিভাবে প্রোডাক্ট রিলিজ করা হবে সে সিদ্ধান্ত নেয়া। প্রোডাক্ট রিলিজের মধ্যে সবচেয়ে জনপ্রিয় মাধ্যমটি হচ্ছে পাবলিকলি রিলিজ করা।

পাবলিক রিলিজ

পাবলিক রিলিজের সবচেয়ে বড় সুবিধা হচ্ছে এর মাধ্যমে আপনি অনেক বেশি ইউজারের কাছে আপনার প্রোডাক্টটি পৌছে দিতে পারবেন। এক্ষেত্রে সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হচ্ছে চেষ্টা করতে হবে যত বেশি সম্ভব পটেনশিয়াল ইউজারের কাছে প্রোডাক্টটি পৌছে দেয়া। অনেকগুলো সাইট আছে যেমন- softpedia.com, cnet.com, softsea.com, Devhost যারা তাদের সাইটে আপনাদের প্রোডাক্ট ফ্রিতে আপলোড করার সুযোগ দেবে যাতে আপনার প্রোডাক্টের ইউজার তা ডাউনলোড করতে পারে, আপনার সফটয়্যারকে রেটিং দিতে পারে, এমনকি তাদের রিভিউও প্রকাশ করতে পারে। এ ধরনের সাইটগুলোতে আপনার সফটয়্যার হোস্টিংয়ের সবচেয়ে বড় সুবিধা হলো আপনার সফটয়্যার যদি বেশি পরিমান ডাউনলোড হয় তাহলে lifehacker.com, addictivetips.com এ ধরনের সাইটগুলো আপনার সফটয়্যারের রিভিউ ছাপানো শুরু করবে যা আপনার সফটয়্যারের প্রচারের জন্য সবচেয়ে ভাল। সবচেয়ে ভাল হয় যদি আপনার সফটয়্যারের নিজস্ব একটা সাইট থাকে এবং সেটা থাকে নিজস্ব ডোমেইনে। তবে সাধারনত প্রফেশনাল সফটয়্যারের ক্ষেত্রে এমনটা বেশি দেখা যায়। যেমন- টালি আমাদের দেশের অত্যন্ত জনপ্রিয় একটি একাউন্টিং সফটয়্যার। এটার নিজ নামে ডোমেইন আছে।

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

এছাড়া ডেডিকেটেড প্রোজেক্ট হোস্টিং এনভায়রনমেন্টও ফ্রি পাওয়া যায় যেমন গুগল কোড প্রজেক্ট হোস্টিং(GCPH). এই সাইটেও আপনি আপনার প্রোডাক্টের জন্য ফ্রি ওয়েবসাইট খুলতে পারবেন।

এছাড়াও আরো কয়েকটি উপায় রয়েছে প্রোডাক্টকে পাবলিকলি ইউজারের কাছে পৌছে দেয়ার। যেমন-

  • ফেসবুকে একটি ফ্যানপেজ তৈরী করা।
  • ইমেইল সিগনেচারে সফটয়্যারের লিঙ্ক দেয়া।
  • বিভিন্ন ফোরামে সফটয়্যারের রিভিউ পোস্ট করা।

রিলিজ পিরিওড

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

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

মেইনটেইনেন্স

একটা সফটয়্যার তৈরী করে রেখে দিলে এর উপোযোগীতা একসময় ব্যবহারকারীর কাছে আর থাকে না। তাই নিয়মিত নতুন নতুন আপডেট আর বিভিন্ন নতুন ফিচার সফটয়্যারে আনতে হবে। তা না হলে সফটয়্যার এর আবেদন আর ধরে রাখতে পারবে না।

সফটয়্যার ইঞ্জিনিয়ারিং: ব্যবহারিক আঙ্গিক-২


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

প্রজেক্ট প্রস্তাবনা

প্রজেক্ট প্রস্তাবনা রাখার ক্ষেত্রে কয়েকটি বিষয় খেয়াল রাখা উচিৎ-

  • এমন বিষয় নির্বাচন করা উচিৎ যেটা নির্দিষ্ট সময়ের মধ্যে দলটি দ্বারা করা সম্ভব হবে। বেশিরভাগ প্রজেক্ট করার জন্য সময় থাকে ছয় মাস বা ক্ষেত্রবিশেষে এক বছর। এমন প্রজেক্ট কখনোই নির্বাচন করা উচিৎ হবে না, যা এই সময়ের মধ্যে করা সম্ভব হবে না।
  • প্রজেক্ট নির্বাচনের সময় কোন একজনের সমস্যার সমাধানের চেয়ে বেশি খেয়াল রাখা দরকার এটার ব্যবহারিক প্রয়োগের দিকে। একটা সফটয়্যার প্রজেক্টের টার্গেট পিপল বা ভোক্তা কারা হবে সে বিষয়ে খেয়াল রেখে প্রজেক্ট নির্বাচন করা উচিৎ।
  • যে সফটয়্যার বাজারে ইতোমধ্যে আছে সে ধরনের প্রজেক্ট নির্বাচন করা উচিৎ হবে না। আর নির্বাচন করা হলে অবশ্যই নতুন কোন বৈশিষ্ট্য যুক্ত করতে হবে যা বাজারে বিদ্যমান সফটয়্যারটিতে নেই।
  • একটা প্রজেক্ট নির্বাচন করার পর সেটিতে আস্থা রাখতে হবে। প্রায়সই দেখা যায় একটা প্রজেক্ট নির্বাচন করার কিছুপর সেটা বদলে অন্য প্রজেক্ট নেয়া হয়। এতে করে সময়ের অপব্যবহার হয় এবং আত্নবিশ্বাসে ফাটল ধরে।
  • সত্যিকারের ব্যবহারকারীদের টার্গেট করে সফটয়্যার তৈরী করতে হবে। অনেক সময় দেখা যায়, লাইব্রেরী ম্যানেজমেন্ট সিস্টেম, স্কুল ম্যানেজমেন্ট সিস্টেম বা এই ধরনের প্রজেক্ট নির্বাচন করা হয়, যা হয়তো কখনোই ব্যবহারিক কাজে ব্যবহৃত হবে না। এ ধরনের প্রজেক্ট নির্বাচন করলে যাতে ব্যবহারিক কাজে লাগানো যায় সেদিকে খেয়াল রাখতে হবে।
  • প্রজেক্টের একটি সুন্দর এবং অর্থপূর্ণ নাম রাখতে হবে।

প্রজেক্ট ফিচার

প্রজেক্টের ফিচার কি কি হবে সে দিকে সতর্ক দৃষ্টি রাখতে হবে। কোন কোন ফিচারের দিকে খেয়াল রাখলে প্রজেক্টটি অন্যান্য প্রোডাক্টের চেয়ে ভাল হবে সেদিকে হাইলাইট করতে হবে। প্রজেক্টের শুরুতেই প্রোডাক্টের ইউজার ইন্টারফেস কি হবে সেদিকে খেয়াল রাখতে হবে। প্রোডাক্টটি যাতে এর ইউজারের কাছে আকর্ষনীয় হয়, সেদিকে সর্বোচ্চ গুরুত্ব দিতে হবে।

প্রজেক্ট ফিডব্যাক

প্রজেক্ট চলাকালীন সময়ে প্রজেক্ট সুপারভাইজার বা ক্লায়েন্ট(বানিজ্যিক সফটয়্যারের ক্ষেত্রে) এর মতামত নিতে হবে। এ ক্ষেত্রে আমি সর্বদা মডেল-ভিউ-কন্ট্রোলার মডেল অনুসরনের পরামর্শ দেব। প্রত্যেকটা অংশ সম্পূর্ণ হওয়ার সাথে সাথে সুপারভাইজারের পরামর্শ নিতে হবে। তা না হলে প্রজেক্ট কমপ্লিট করার পর এমন কোন ফরমায়েশ আসতে পারে যার কারনে হয়তো পুরো প্রজেক্টটিকে নতুন করে ঢেলে সাজানোর দরকার পড়বে। সেটা একঘেয়েমীপূর্ণ আর বিরক্তিকর হবে।

সফটয়্যার ইঞ্জিনিয়ারিং: ব্যবহারিক আঙ্গিক-১


শুরুর আগে

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

ভূমিকা

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

সিদ্ধান্ত গ্রহণ

প্রথমেই কোন প্রজেক্টে কাজ করার জন্য সিদ্ধান্ত গ্রহণ করতে হবে। কোন প্রজেক্টে কাজ করবো, আমাদের তৈরী সফটয়্যারের কি কি বৈশিষ্ট্য থাকবে ইত্যাদি ইত্যাদি। এরপর সিদ্ধান্ত নিতে হবে কি কি টুলস ব্যবহার করবো, প্রোগ্রামিং ভাষা কি হবে, সফটয়্যারের প্লাটফরম কি হবে ইত্যাদি। এই প্রত্যেকটি বিষয় নিয়ে ভবিষ্যতে আরো বিস্তারিত আলোচনা করা হবে।

টিমমেট বাছাই

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