چگونه یک پروژه نرم افزاری را با موفقیت انجام دهیم ؟!


 





 
در دوران دانشجویی و حتی قبل از دانشجویی برای من خیلی پیش آمد که برای کسی برنامه بنویسم و پروژه نرم افزاری انجام بدم . بعضی هایش را قبول کردم و برخی را به علت هایی رد کردم . اوایل که جوگیر شده بودم و فکر میکردم خیلی برنامه نویسم ، اگر هر پروژه ای به من واگذار میشد ، نه نمی گفتم . خوشبختانه آن اوایل به جز یک برنامه ، پیشنهاد دیگری به من نشد! به هر حال ، در این اواخر رویه ای را پیش گرفتم در پروژه گرفتن و پروژه انجام دادن ، که فکر میکنم رویه درستی است و از آن نتیجه های خوبی هم گرفتم . اگر دانشجو هستید و مثل من کم تجربه ، حتماً قبل از گرفتن پروژه مسائلی که در این مطلب ذکر کردم را در نظر داشته باشید .

پروژه را قبول کنیم یا خیر !
 

قبل از اینکه جواب این سئوال را بدهید ، باید پروژه ای که قرار است انجام دهید را بفهمید . برای این کار هم باید به صورت حضوری با کارفرما ملاقات کنید و اگر ملاقات حضوری در دسترس نیست ، بوسیله تلفن با او صحبت کنید . سئوالات و ابهامتان را در مورد پروژه از کارفرما بپرسید . سعی کنید تمام سئوال هایتان را از قبل در یک برگه بنویسید تا هنگام صحبت با کارفرما سئوالی را فراموش نکنید ، چون معمولاً کارفرما را کمتر در طول انجام پروژه ملاقات می کنید . بعضی از کارفرمایان عادت دارند که از جواب دادن به سئوالات شما فرار کنند و با گفتن جمله ای شبیه به " ببینید من فقط میخواهم این پروژه کار من را راه بیندازد و فلان کار را به خوبی انجام دهد " و از این دست جمله ها ، سر و ته صحبت را به هم بیاورند . شما باید بتوانید هر اطلاعاتی که لازم دارید از زیر زبان کارفرما بیرون بکشید . این یک مهارت است . خیلی وقت ها کارفرمایان شما از سیستم های کامپیوتری چیزی نمی دانند و نباید تعجب کنید که حتی دستشان به ماوس هم نخورده باشد ! اگر کاربر سیستم شما همان کارفرما باشد که کارتان خیلی سخت خواهد بود . در غیر این صورت حتماً بعد از صحبت با کارفرما با کاربرانی که قرار است با سیستم شما کار کنند نیز صحبت کنید و از سطح آشنایی با کامپیوتر و سواد آن ها اطلاع پیدا کنید . آشنایی با کاربران سیستم ، دید شما را بازتر خواهد کرد .

امکان سنجی کنید
 

بعد از اینکه فهمیدید کارفرما واقعاً چه می خواهد ، امکان سنجی کنید که آیا می توانید با دانش خود و ابزارهای موجود این پروژه را انجام دهید یا خیر . به هر حال خودتان بهتر می دانید چه توانایی هایی دارید و با چه ابزارهایی آشنایی دارید . اگر پروژه ای فقط با یک ابزار خاص باید انجام شود و شما کار با آن ابزار را بلد نیستید ، خیلی راحت پروژه را قبول نکنید . هرگز به امید اینکه طی انجام پروژه ، کار با ابزاری را یاد خواهید گرفت ، پروژه ای را قبول نکنید . فاکتورهای بسیار مهم دیگری که باید تخمین بزنید و در نظر بگیرید ، زمان و هزینه پروژه هستد . معمولاً زمان تحویل را کارفرما تعیین می کند ، اگر حتی یک درصد هم امکان می دهید که این زمان برای انجام چنین پروژه ای کم است ، پروژه را قبول نکنید یا وقت بیشتری از کارفرما بخواهید . اگر زمان تحویل دست خودتان است ، زمانی که تخمین می زنید را دو برابر کنید و در قرارداد ذکر کنید . دستمزد انجام پروژه معمولاً دست شما نسیت و کارفرما آنقدر چانه زنی می کند که شما را از رو خواهد برد . اگر پول برایتان مهم نیست و فقط برای کسب تجربه پروژه انجام می دهید که هیچ ، اما اگر دستمزدتان برایتان مهم است حتماً قیمت معقولی را بر اساس حجم کار و زمانی که از شما خواهد گرفت ، بدهید . این قیمت می تواند تحت تاثیر اعتبارتلن نیز قرار گیرد . به هر حال من خودم هنوز به فرمول مشخصی برای قیمت دادن نرسیدم .

حتماً قرارداد ببندید
 

هر چقدر هم پروژه مورد نظر کوچک باشد ، شما باید با طرف مقابل قرارداد محکمی ببندید و حتماً امضا و احتمالاً مهر کارفرما را زیر آن قرارداد داشته باشید . حتماً فاکتور زمان و استثناهایی که ممکن است در طول انجام پروژه پیش بیاید را در بندهای قرارداد جای دهید . هزینه انجام پروژه را به صراحت در قرارداد ذکر کنید و بندی قرار دهید که مثلاً 50 درصد هزینه را کارفرما در طی انجام پروژه پرداخت کند و بقیه را حداکثر تا 10 روز پس از تحویل پروژه بپردازد . اگر کارفرما به پشتیبانی نیاز دارد ، حتماً و تاکید می کنم حتمآً چند بند را در قرارداد برای خدمات پشتیبانی و استثناهای مربوط به آن کنار بگذارید . به طور مثال شما می توانید با همان هزینه انجام پروژه ، یک سال به صورت رایگان پشتیبانی را انجام دهید . در این صورت بطور دقیق تاریخ اتمام یک سال خدمات پشتیبانی رایگان را ذکر کنید . برای استفاده از خدمات پشتیبانی نرخی را در قرارداد ذکرکنید و بندی هم قرار دهید که ممکن است در سال های بعد این نرخ افزایش یابد . حتماً مشخص کنید که این خدمات پشتیبانی فقط مربوط به مشکلات مربوط به نرم افزار شماست نه چیز دیگر . مثلاً ذکر کنید که شما در قبال مشکلات سخت افزاری و نصب ویندوز و این جور چیزها مسئولیتی ندارید .

پروژه را تحلیل کنید
 

نیازهای هر کاربر از سیستم را لیست کنید . سرویس هایی که قرار است سیستم به کاربران مختلف بدهد را مشخص کنید . اگر با مباحث مهندسی نرم افزار آشنایی دارید ، این قسمت همان شناسایی Actor ها و Usecase های سیستم است . هر چقدر شناخت خود را از پروژه افزایش دهید ، کیفیت خروجی کار شما بالاتر خواهد بود و در نتیجه کارفرما راضی تر . پس تا می توانید مرحله شناخت نیازها و تحلیل سیستم را جدی بگیرید . خروجی فسمت تحلیل ، مستنداتی است که بر اساس آن پروژه شکل می گیرد . سعی کنید همه چیز را مستند کنید . از مصاحبه هایی که با کاربران سیستم انجام داده اید تا مسائل فنی را برای خودتان بنویسید . حتی اگر پروژه خیلی هم به نظراتان کوچک باشد ، باز هم این مستندات لازم و حیاتی هستند . در قسمت طراحی و پیاده سازی متوجه خواهید شد که این مستندات چقدر فهم مسئله را ساده تر می کنند . در اینجا می توانید از یکی از روش های معمول مهندسی نرم افزار برای تحلیل استفاده کنید .

فاز طراحی را جدی بگیرید
 

با استفاده از مستندات قسمت تحلیل ، باید طراحی سیستم نرم افزاری را شروع کنید . کلاس های سیستم را با توجه به مستندات و شناختی که از سیستم دارید مشخص کنید . این کلاس ها ممکن است در زمان پیاده سازی تغییراتی بکنند . شما فعلاً به صورت کلی کلاس ها را ببینید . سعی کنید برای درک بهتر آن ها ، دیاگرام کلاس ها را نیز رسم کنید . در این فاز معماری سیستم نیز مشخص می شود . ابتدا معلوم کنید که پلت فرمی که قرار است سیستم روی آن کار کند چیست . مثلاً قرار است نرم افزار تحت وب کار کند یا تحت ویندوز . البته پلت فرم بسیاری از پروژه ها در هنگام سفارش ، معلوم می شود . اگر پلت فرم بستگی به نظر شما دارد ، سعی کنید پلت فرمی را انتخاب کنید که هم روی آن تجربه و تخصص دارید و هم مناسب انجام این پروژه است .

پیاده سازی
 

اگر فازهای قبلی را به درستی انجام داده باشید ، در پیاده سازی با مشکل حادی برخورد نخواهید کرد . مستندات دو فاز قبلی مشخصات پیاده سازی را تعیین می کنند . اگر پروژه شما نیاز به یک پایگاه داده برای ذخیره اطلاعات دارد ( که در اکثر پروژه ها همینطور است ) ، ابتدا داده هایی که قرار است ذخیره کنید را بر اساس مستندات فازهای قبلی شناسایی کنید . اگر می توانید نمودار روابط بین موجودیت ها یا ERD و Data Model را برای درک بهتر بانک اطلاعاتی سیستم رسم کنید . برای بانک اطلاعاتی خود یک RDBMS مناسب انتخاب کنید . وقتی به طور مثال SQLite یا Access نیاز شما را برطرف می کنند ، بیخودی خود را درگیر پیچیدگی های SQL Server یا Oracle نکنید .
برای پیاده سازی یک پروژه نرم افزاری ، احتیاج به ابزارهای توسعه نرم افزار و یک زبان برنامه نویسی دارید . اگر کارفرما این ها را مشخص کرده که هیچ ، اما اگر بستگی به خودتان دارد ، ابزار و زبانی را انتخاب کنید که در آن تجربه دارید و متناسب با پروژه شماست . پلت فرم ها و محیط های معمول توسعه نرم افزار برای پروژه های شما مناسب هستند ، پس اصلاً نگران انتخاب ابزار و زبان نباشید .
معمولاً بعد از پیاده سازی و تحویل نهایی به کارفرما کارتان تمام نمی شود . تازه بعد از آن است که کارفرما هر روز با شما تماس می گیرد که فلان قسمت برنامه را برایش عوض کنید یا قابلیت جدیدی به آن اضافه کنید . در اینجا فقط یک قرارداد محکم می تواند شما را نجات بدهد . باید در قراردادی که با کارفرما بسته اید ، بندهایی برای تغییر در نرم افزار و اضافه کردن قابلیت جدید به آن در نظر بگیرید که زبان شما هم در مقابل کارفرما دراز باشد .

در آخر
 

اگر صلاحیت فنی و روحی انجام پروژه ای را در خودتان نمی بینید ، به هیچ وجه قبولش نکنید ، چون دردسرهای زیادی برایتان پیش خواهد آورد . سعی کنید به هیچ وجه با کارفرما خودمانی نشوید و شوخی نکنید ، کلاس کاری خود را حفظ کنید و فاکتور زمان را حتمآً رعایت کنید . پروژه را که سروقت تحویل دهید در حقیقت به اعتبارتان افزوده اید . کارفرمایان اصولاً در هنگام پول دادن کم پیدا می شوند و شما اگر بهترین نرم افزار هم برایش تولید کرده باشید ، باز ایراد خواهد گرفت و از شما تخفیف خواهد خواست .
منبع:وفاق
ارسال توسط کاربر محترم سایت : sajad2007