X
تبلیغات
کارشناسی ارشدکامپیوترعلوم وتحقیقات گیلان

انواع روشهای تخمين هزينه نرم افزار

 مقدمه

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

دلايل اهميت تخمين درست هزينه توليد يک سيستم نرم افزاری عبارتند از :

1.      می تواند به طبقه بندی و اولويت بندی صحيح پروژه ها براساس طرح تجاری سازمان (Business Plan) منجر گردد.

2.      به کمک آن می توان تشخيص داد که چه منابعی و به چه ميزان برای پيشبرد پروژه مورد نياز است.

3.      با استفاده از آن می توان استراتژی های برخورد با تغييرات و انجام برنامه ريزی مجدد را به درستی تدوين کرد.

4.      زمانی که منابع با نيازهای واقعی متناسب باشند، کنترل و مديريت پروژه آسان تر است.

5.      مشتری انتظار دارد که هزينه واقعی پروژه با هزينه تخمين زده شده تناسب داشته باشد.

 

يک تخمين هزينه درست دارای ويژگی های زير است :

1.      برای مدير پروژه و تيم توسعه نرم افزار منطقی و قابل قبول است.

2.      برای تمام ذينفعان پروژه (Stakeholder) مقبول و قابل درک است.

3.      بر اساس يک مدل معتبر و مناسب تهيه شده است.

4.      در محاسبه آن، تجربه کسب شده در پروژه های قبلی مشابه، لحاظ شده است.

5.      جزئيات آن به گونه ای عنوان می شود که ريسکهای ممکن و احتمال موفقيت آن، قابل ارزيابی است.

 

تخمين هزينه پروژه يکی از مهم ترين فعاليت ها برای برنامه ريزی يک پروژه است و شامل مراحل زير می باشد :

1.      تعريف و تدوين اهداف اساسی تخمين هزينه

2.      تدوين يک طرح پروژه (Project Plan) برای منابع و داده های مورد نياز

3.      تعيين دقيق نيازمنديهای نرم افزار تا حد امکان

4.      بيان جرئيات سيستم نرم افزاری مورد نظر تا حد امکان

5.      استفاده از روشهای مختلف تخمين هزينه

6.      مقايسه تخمين های مختلف و تکرار فرآيند تخمين هزينه

7.      پيگيری و بررسی دقيق ميزان هزينه واقعی پروژه و پيشرفت آن در طول اجرای پروژه

 

 اندازه نرم افزار :

يکی از مهم ترين فاکتورها در تخمين هزينه يک سيستم نرم افزاری، اندازه و حجم آن است. برای تخمين اندازه يک سيستم نرم افزاری يکی از معيارهای زير مورد استفاده قرار می گيرد :

1.      Line of Code : تعداد خطوط کد منبع برنامه ای که به کاربر ارائه می شود، به استثناء توضيحات و خطوط خالی و به LOC معروف است و از زبان برنامه نويسی مستقل است. اندازه دقيق LOC پس از پايان پروژه مشخص می شود. يک روش معمول برای تخمين LOC، استفاده از تجربه به همراه تکنيک PERT می باشد. در اين روش سه متغير L برای کمترين اندازه ممکن، H برای بيشترين اندازه ممکن و M برای اندازه معمول کد برنامه در نظر گرفته می شوند. اندازه کد  Sاز فرمول زير تخمين زده می شود :

S = (L + H + 4M)/6

با روش می توان اندازه کد اجزاء (Component) مختلف را تخمين زده و سپس آنها را با هم جمع کنيم.

2.      Software Science : در اين روش از معيارهای طول کد  (Code length)وحجم (Volume) برای تخمين اندازه نرم افزار استفاده می شود. طول کد، برای محاسبه طول کد منبع برنامه است و با فرمول زير محاسبه می شود :

N = P + Q

که P تعداد کل عملگرها و Q تعداد کل عملوندها در برنامه است. حجم بيانگر ميزان فضای مورد استفاده است و به شکل زير محاسبه می شود :

V = N log (p + q)

که p تعداد کل عمگرهای مجزا و q تعداد کل عملوندهای مجزاست.

 

3.       Function Points : اين روش تخمين بر اساس کاربرد نرم افزار می باشد. نوع داده های زير در سيستم بررسی می شوند :

-       نوع داده ورودی کاربر

-       نوع داده خروجی برای کاربر

-       پرس و جوهای انجام شده توسط کاربر

-       فايل های داخلی سيستم

-       فايل های خارجی (فايل هايی که با سيستم های بيرونی به اشتراک گذاشته شده و يا به آنها تحويل می شود)

به هر يک از انواع فوق يکی از کلاسهای پيچيدگی 1 (ساده )، 2 (متوسط)، 3 (پيچيده) و يک مقدار وزنی از 3 (برای نوع داده ورودی ساده) تا 15 (فايل داخلی پيچيده) اختصاص می يابد. unadjusted Function Point Count (UFC) با فرمول زير تعريف می شود :

UFC =

که  و  به ترتيب تعداد و وزن انواع i با پيچيدگی j  هستند. به طور مثال، اگر در يک پروژه 2 ورودی کاربر با وزن 3، 2 خروجی پيچيده با وزن 7 و 1 فايل داخلی پيچيده با وزن 15 داشته باشيم، آنگاه:

UFC = 2*3 + 2*7 + 1*15 = 35

مزيت اين روش در اين است که بر اساس نيازمنديهای سيستم و در همان گامهای اوليه پروژه قابل استفاده است.

 

4.      Feature Point : اين روش الگوريتم را هم به عنوان يک کلاس جديد به موارد پنج گانه منظور در روش Function Point اضافه می کند و آن را توسعه می دهد. به هر يک از الگوريتم های استفاده شده وزنی از 1 (برای الگوريتم های ساده) تا 10 (برای الگوريتم های پيچيده) اختصاص می دهيم. اين روش برای برنامه هايی که ورودی و خروجی کم و پيچيدگی الگوريتمی بالا دارند مناسب است.

 

5.      Object Point : اين روش بر اساس تعداد و پيچيدگی فرمها، گزارشات و اجزاء نرم افزاری زبانهای نسل جديد عمل می کند. هر يک از اشياء فوق بر اساس تعدادشان وزنی از 1 (برای فرم های ساده) و 10 (برای اجزاء زبانهای نسل جديد) را می پذيرند و نتيجه، جمع وزنی موارد فوق است. اين روش هم در گامهای اوليه پروژه قابل اجراست.

  

 تخمين هزينه :

روش های تخمين هزينه نرم افزار به دو دسته کلی الگوريتمی و غير الگوريتمی تقسيم می شوند :

ü    روشهای غيرالگوريتمی :

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

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

 

2.      Expert Judgment : در اين روش تخمين هزينه بر اساس تجربه شخصی و روشهای ابدايی افراد متبحر در زمينه توسعه نرم افزار، صورت می گيرد. سپس برای رفع ناهماهنگی های احتمالی در تخمين های ارائه شده توسط افراد مختلف، از تکنيک هايی که باعث اجماع در تخمين ها می شود، مانند Delphi و PERT استفاده خواهد شد. به طور مثال تکنيک Delphi به شکل زير عمل می کند :

الف ) مشخصات سيستم برای هر يک از افراد شرح داده می شود.

ب ) افراد مستقل از يکديگر و بدون مشورت، تخمين خود را اعلام می کنند.

ج ) تخمين های اعلام شده فهرست می شوند و با اعلام آنها به افراد، مجددا درخواست می شود که تخمين ديگری را انجام دهند و منطق مورد استفاده در تخمين را هم ارائه دهند.

د ) گام های ب و ج، تا رسيدن به کسب نتيجه مناسب تکرار می شوند.

 

3.      Parkinson : در اين روش هزينه نرم افزار تخمين زده نمی شود، بلکه با توجه به منابع موجود (بدون توجه به اهداف پروژه) تعيين می شود. به طور مثال اگر مدت زمان اجری پروژه 12 ماه و تعداد نيروهای موجود 5 نفر باشد، ميزان 60 نفر- ماه تخمين زده می شود. اگر چه اين روش در برخی موارد تخمين قابل قبولی را ارائه می دهد ولی تکنيک مناسبی برای تخمين هزينه پروژه  نيست.

 

4.      Price-to-Win : در اين روش به جای توجه به نرم افزار، قابليت ها و کاربردهای آن، هزينه بر اساس ميزان بودجه کارفرما تخمين زده می شود. به طور مثال اگر تخمين واقعی پروژه 100 نفر- ماه باشد، اما کارفرما بودجه برای 60 نفر- ماه در نظر گرفته باشد، تخمين مجددا بر اساس 60 نفر- ماه انجام می شود.

 

5.      Button-up : در اين روش هر يک از اجزاء سيستم (Component) به طور مجزا تخمين زده می شوند و سپس مجموع اين تخمين ها به عنوان تخمين هزينه کلی پروژه در نظر گرفته می شود. برای استفاده از اين روش لازم است که در ابتدا يک طراحی اوليه از سيستم انجام دهيم تا ساختار اجزاء را بدست آوريم.

 

6.      Top-Down : اين روش بر خلاف روش قبلی است و هزينه پروژه با استفاده از روشهای الگوريتمی يا غير الگوريتمی به شکل يکجا و بر اساس معيارهای کلی تخمين زده می شود. در گام های بعدی اين هزينه می تواند بين اجزاء مختلف سيستم توزيع شود.

 

ü    روشهای الگوريتمی :

روش های الگوريتمی از مدل های رياضی برای تخمين هزينه پروژه استفاده می کنند. هر مدل الگوريتمی به صورت تابعی از فاکتورهای هزينه تعريف می شود. روشهای الگوريتمی موجود در دو جنبه با يکديگر متفاوت هستند، يکی انتخاب فاکتورهای هزينه و ديگری تعريف تابع محاسبه هزينه. ابتدا فاکتورهای هزينه را بررسی می کنيم و سپس روشها را با توجه به تعريف تابع محاسبه عنوان کرده و تحليلی (Analytical) يا تجربی بودن (Empirical) آنها را بيان می کنيم.

 

فاکتورهای هزينه :

1.      Product Factors : دارا بودن قابليت اطمينان، ميزان پيچيدگی، حجم پايگاه داده، دارا بودن قابليت استفاده مجدد، ميزان مطابقت مستندات پروژه با نيازهای چرخه حيات پروژه.

2.      Computer Factors : محدوديت زمان اجرای سيستم، محدوديت فضای ذخيره سازی، محدوديت راه اندازی مجدد کامپيوتر، تنوع پلتفورم.

3.      Personnel Factors : مهارت تيم تحليل، مهارت کدنويس ها، ميزان تسلط بر پلتفورم، ميزان تسلط بر زبان برنامه نويسی و ابزارها، ميزان هماهنگی اعضاء تيم.

4.      Project Factors : توسعه توزيع شده سيستم(Multisite Development) ، استفاده از ابزارهای نرم افزاری.

 روشهای تخمين هزينه :

1.      Linear Models : اين مدل ها شکل کلی زير را دارند : 

Effort =

پارامترهای  به تعدادی انتخاب می شوند که انواع داده های موجود در پروژه را بپوشانند. 

 

2.      Multiplicative Models : اين مدل ها شکل کلی زير را دارند :

Effort =

مجددا پارامترهای  به تعدادی انتخاب می شوند که انواع داده های موجود در پروژه را بپوشانند.  ها هم مقادير ثابتی دارند، مثلا در روش Doty دامنه اين مقادير 1-، 0، 1 است.

 

3.      Power Function Models : اين مدل ها شکل کلی زير را دارند :

Effort =

که S اندازه کد، a و b توابعی ساده از ساير فاکتورهای هزينه هستند. دو روش پرکاربرد در اين مدل عبارتند از:

ü     COCOMO(Constructive Cost Model) :

در اين روش S، با ضرايب هزار LOC عنوان می شود و محاسبات بر اساس نفر- ماه است.

-       Basic COCOMO : اين مدل بر حسب پيچيدگی نرم افزار سه مجموعه مجزای {a,b} را شامل می شود:

1.      برای برنامه های ساده a = 2.4, b = 1.05

2.      برای اغلب سيستم های پيچيده a = 3.0, b = 1.15

3.      برای سيستم های تعبيه شده a = 3.6, b = 1.20

استفاده از اين روش ساده است و لی بسياری از فاکتورهای هزينه را لحاظ نمی کند.

-       Intermediate COCOMO and Detailed COCOMO : اين مدل هم بر حسب پيچيدگی نرم افزار سه مجموعه مجزای {a,b} را شامل می شود:

1.      برای برنامه های ساده a = 3.2, b = 1.05

2.      برای اغلب سيستم های پيچيده a = 3.0, b = 1.15

3.      برای سيستم های تعبيه شده a = 2.8 , b = 1.20

سپس 15 فاکتور هزينه با مقاديری بين 0.7 تا 1.66 ‎لحاظ می شوند. سپس فاکتورM از حاصلضرب فاکتورهای فوق محاسبه می شود. تخمين نهايی از حاصلضرب M در تخمين صوری اوليه نتيجه می شود. ليست اين فاکتورها در جدول زير آورده شده است. 

Rating

Description

Cost Factor

Very High

High

Nominal

Low

Very Low

 

 

 

 

 

Product

 

1.40

1.15

1.00

0.88

0.75

Required Software Reliability

RELY

1.16

1.08

1.00

0.94

-

Database Size

DATA

1.30

1.15

1.00

0.85

0.75

Product Complexity

CPLX

 

 

 

 

 

Computer

 

1.30

1.11

1.00

-

-

Execution Time Constraint

TIME

1.21

1.06

1.00

-

-

Main Storage Constraint

STOR

1.30

1.15

1.00

0.87

-

Virtual Machine Volatility

VIRT

1.15

1.07

1.00

0.87

-

Computer Turnaround Time

TURN

 

 

 

 

 

Personnel

 

0.71

0.86

1.00

1.19

1.46

Analyst Capability

ACAP

0.82

0.91

1.00

1.13

1.29

Application Experience

AEXP

0.70

0.86

1.00

1.17

1.42

Programmer Capability

PCAP

-

0.90

1.00

1.10

1.21

Virtual Machine Experience

VRXP

-

0.95

1.00

1.07

1.14

Language Experience

LEXP

 

 

 

 

 

Project

 

0.82

0.91

1.00

1.10

1.24

Modern Programming Practice

MODP

0.83

0.91

1.00

1.10

1.24

Software Tools

TOOL

1.10

1.04

1.00

1.08

1.23

Development Schedule

SCED

 

روشهای  COCOMOو Intermediate COCOMO هزينه نرم افزار را در سطح سيستم تخمين می زنند ولی Detailed COCOMO اين کار را در سطح زير سيستم ها انجام می دهد و برای سيستم های بزرگ که زير سيستم های ناهمگن دارند، مناسب است.

-       COCOMO II : در اين مدل توان  bدر فرمول محاسباتی، بر اساس فاکتورهايی مانند ميزان انعطاف پذيری پروژه، معماری نرم افزار، روشهای برخورد با ريسک های پروژه، پيوستگی و ارتباط موثر تيم پروژه تغيير می کند. همچنين فاکتورهای هزينه جديدی به منظور يکپارچه کردن معماری پروژه و کاهش ريسک تعريف شده است.

 ü     Putnam’s Model : مشخصه اين روش معادله نرم افزار است که به صورت زير تعريف می شود :

S =

Effort =

 مدت زمان انجام پروژه، E فاکتور محيطی است که قابليت توسعه را نشان می دهد. S براساس LOC است و نفر- سال است.  پارامتری است به نام‎ "تقويت نيروی انسانی" که دامنه تغيير آن از 8 (برای نرم افزارهای جديد با Interface زياد) تا 27 (برای نرم افزارهای بازسازی شده) است.

 

4.      Discrete Models : مدل های گسسته يک فرم جدولی دارند که بوسيله آن ميزان نفر- ساعت، زمان پروژه، سختی و ساير فاکتورهای هزينه را به هم مرتبط می کنند.(به طور مثال Aron Model)

 

5.      مدل های ديگر : مانند Price-S که با تخمين اندازه پروژه، نوع و سختی آن هزينه پروژه تخمين زده می شود. در مدل SoftCost از روشهای اکتشافی (heuristic) برای برخورد با تکنولوژی های جديد و روابط پيچيده ميان فاکتورها استفاده می شود.

 

طبقه بندی مدل های الگوريتمی :

 

Algorithmic Models

Others

Discrete

Power Function

Multiplicative

Linear

 

Price-S

Aron

Boeing

Molverton

COCOMOS

Walston-Felix

Nelson

Empirical

Soft-Cost

 

Putnam

 

 

Analytical

   نتيجه :

1.      هيچ يک از روش های فوق، بهترين روش تخمين برای تمام پروژه های نرم افزاری نيست.

2.      روشهای Parkinson و Price-to-Win برای سازمان هايی که هدف آنها از توليد سيستم نرم افزاری افزايش سطح فعاليت و رقابت با ساير سازمانها است، مناسب نيستند.

3.      به کاربردن ترکيبی از روشهای فوق بهترين گزينه ممکن است.

http://www.civilica.com/Paper-CSCCIT01-CSCCIT01_166.html

http://www.e30now.com

http://barnamenevis.org


موضوعات مرتبط: مهندسی نرم افزار پیشرفته
برچسب‌ها: روشهای تخمين هزينه نرم افزار
[ دوشنبه بیست و هشتم فروردین 1391 ] [ 13:22 ] [ خانم طاهری ]
.:

درباره وبلاگ

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