تخمین هزینه های یک پروژه نرم افزاری

24 09 2009


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

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

  • تخمین هزینه تا انتهای پروژه به تاخیر انداخته شود
  • بر اساس پروژه های مشابهی که قبلاً انجام شده، تخمین هزینه کنیم
  • از روش های تجربی و سلسله مراتبی استفاده کنیم

متاسفانه، حالت اول در اکثر مواقع عملی نیست. مشتری شما می خواهد قیمت شما را بداند تا هم خودش برآورد هزینه کند و هم قمیت شما را با دیگران مقایسه کند.

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

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

اندازه پروژه

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

پیچیدگی پروژه

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

زمان انجام پروژه

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

منابع انسانی

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

farasun.wordpress.com

حتماً عوامل دیگری در تخمین هزینه دخیل هستند که در این نوشته کوتاه به آن ها پرداخته نشد. سختی این کار اینجاست که برای تخمین مناسب هزینه های یک پروژه، شما بایستی ابتدا بتوانید اندازه، پیچیدگی و زمان مورد نیاز برای انجام پروژه را تخمین بزنید.

شما هم می توانید تجربه خود را با ما توسط فرم نظرات به اشتراک بگذارید.

به روز رسانی : آقای مجید آواژ لطف کردن و مطلبی پخته تر و علمی تر در مورد تخمین هزینه های پروژه های نرم افزاری نوشتند، از اینجا می توانید این مطلب را بخوانید.

مطالب مرتبط :


کارها

اطلاعات

15 جواب

25 09 2009
مجيد

در مهندسي نرم افزار روش هاي شناخته شده ا ی برای اين کار وجود دارد، پروژه هاي معماري اطلاعات و روشهايي ديگر به صورت جامع به اين روش پرداخته است، يکي از آنها بر اساس تعداد Use Case و ديگري که تقريبا ما در بهساد استفاده مي کنيم بر اساس تعداد موجوديت است. که نمونه آن را اگر خواستي در اختيار دوستان قرار مي دهم. البته با همه اين احوال پس از به کار گرفتن همه اين روشها، خوش بود گر محک تجربه آيد به ميان.

27 09 2009
ایمان

ممنون، تجربه شما خیلی برای من و خوانندگان با ارزش خواهد بود.

25 09 2009
tenkai

یک سئوال نامربوط به این پست:
اگه شما پروژه ای رو بگیرین و پیشرفت پروژه منوط باشه به اینکه بعضی از اخلاقیات رو زیر پا بذارین(مثلا به کارمند اداره ای رشوه بدین)، چیکار میکننی؟؟؟

27 09 2009
ایمان

@ tenkai : من نمیتونم در این مورد نظری بدم، آدم تا در موقعیت این چنینی قرار نگیره واقعاً نمیتونه نظری داشته باشه!

9 10 2009
مجيد

آدميزاد در هنگام ضرورت گوشت مرده را هم مي خورد. بستگي به سطح مجبور بودن دارد.
هر کسي يک قيمتي دارد و با توجه به سطح مجبور بودن و قيمت خود گاهي اخلاقيات را زير پا مي‌گذارد.

26 09 2009
افشار

یکی از راه‌هایی که من می‌پسندم انجام پروژه به صورت سه فاز زیر است:
۱- تحلیل و طراحی: استخراج use caseها، استخراج دیگر نمودارهای UMLی مورد نیاز، استخراج ساختار دیتابیس و ساختار UI

۲- پیاده سازی: کد نویسی و اجرای هر آنچه که در مرحل تحلیل و طراحی به دست آمده بود.

۳- نصب، کمک به مهاجرت، آموزش و پشتیبانی: نصب در سرور و محل مشتری، تبدیل اطلاعات سیستم مکانیزه دستی یا قبلی به سیستم جدید، آموزش به مجموعه مشتری و پشتیبانی به صور مختلف چهره به چهره، تلفنی و…

اعتراف می‌کنم که این روش بیشتر به درد پروژه‌های بزرگ می‌خورد اما باور کنید تخمین و پیش‌بینی پروژه را از نظر نیروی هزینه، نیروی انسانی و زمان خیلی راحت‌تر می‌کند.

روش جناب مجید (آواژ) هم روش مطلوب و رایجی است.

27 09 2009
ایمان

@ افشار : با شما موافقم، در این مطلب به صورت کلی به این قضیه نگاه شده. قصدم استفاده از تجربه امثال شما و آقای آواژ بود!

27 09 2009
تخمین هزینه‌های یک پروژه نرم‌افزاری | روزنوشت هاي بهساد

[...] خوبم ایمان، اشاره‌ای داشت به تخمین هزینه‌های یک پروژه نرم‌افزاری، که بر اساس قولی که داده‌ام [...]

27 09 2009
27 09 2009
ایمان

خیلی ممنونم آقای آواژ، لینک مطلب شما اضافه شد.

30 09 2009
علي

سلام .ميخواستم بدونم اين مطلب مرتبط تو چه طوري اين طوري مثل مال تو بكنم (مربع هاي فلش ماند) و اين لينك هاي روزانه رو چه طوري تو وبلاگت از طريق كدوم ابزارك ميزاري.(من تو google reader اكانت دارم ،چنتا سايت تو ليستم هستند چه طوري بايد مطالبي كه از اين سايتا مي خوام تو قسمت لينك روزانه بياد) ممنون ميشم بگي

1 10 2009
ایمان

@ علی : سلام،
این مربع های فلش مانند رو می تونید وقتی در ادیتور وردپرس هستید، کلیدهای Alt+Shift+U را فشار دهید تا ایجاد شوند. (یا دکمه چهارم از سمت راست در نوار ابزار را کلیک کنید)
لینک روزانه ها نیز با استفاده از اکانت گوگل ریدر ایجاد شده. در قسمت “ابزارک ها” یک ابزارک RSS را اضافه کنید و نشانی خوراک RSS را از اکانت گوگل ریدر خود را در آن وارد کنید.

لطفاً از این به بعد سئوالات نامربوط به مباحث وبلاگ را از طریق ایمیل بپرسید، سریعتر هم پاسخ را دریافت خواهید کرد. ممنونم

2 10 2009
Ali

ممنون، ازين به بعدم سوال داشتم ايميل مى زنم .(من مي دونستم اين دكمه چي كار مي كنه ولي تا حالا امتحانش نكرده بودم كه ببينم چه شكليه)

1 10 2009
رضا آجري

سلام

من تازه asp.net شرو كردم دنبال يسري وب سايت تمپبيت ميگردم مثل تمپليت هاي html اما پسوندشون aspx باشه كه بتونم تو .net بازشون كنم.

1 10 2009
ایمان

@ رضا آجری : سلام،
شما می توانید تمپلیت های معمولی HTML را به راحتی به تمپلیت aspx تبدیل کنید. کافیست کدهای آن را در فایل aspx خودتان کپی کنید و تمام فایل ها و استایل های مورد نیازش را در کنار آن قرار دهید. مشکلی نخواهید داشت با این.
تمپلیت HTML هم که به صورت رایگان در وب به راحتی پیدا می شود.

خواهش میکنم از این بعد سئوالتان را در مطلب مرتبط بپرسید.

دیدگاه‌تان را بنویسید: