برآورد اندازهى پروژههاى نرمافزارى
نام نویسنده: بيتا باقرى
همکاران سیستم – اين مقاله به طور عمده از كتاب – IT Project Estimation-A Practical Guide to the Costing of Software اقتباس شده است و سعى بر ارائه كلياتى از تجربه و توصيه يك برآورد كننده حرفه اى، دارد.
صنعت نرمافزار در سالهاى اخير شكوفايى قابل توجهى داشته و به سمت “دستيابى” روشمد به اهداف و “مهندسى” در حركت بوده است. مديريت پروژههاى نرمافزارى و محيطى كه اين پروژهها در آن اجرا مىشوند، نيازمند دانش مجرد است؛ حقايقى كه از طريق مشاهده و اندازهگيرى به دست مىآيند.Tom DeMarco در اين باره مىگويد: “آنچه را كه قابل اندازهگيرى نيست، نمىتوان كنترل و مديريت كرد.”
برآورد اندازهى پروژه به 3 دليل عمده، ضرورى به نظر مىرسد:
1- به منظور تعديل پروژه: مقايسهى هزينه و سود پروژه و ارزيابىهاى “اگر –آنگاهى” براى انتخاب بين گزينههاى كاركردى، محيطى و تكنيكى مختلف.
2- به عنوان بخش جدا نشدنى نظم مهندسى نرمافزار. در پروژههاى توليد نرمافزار بر خلاف ساير پروژهها (براى مثال پروژههاى ساختمانى) در هر زمان از كار ممكن است كه اجزاى بنيادين پروژه تغيير كند، در نتيجه بايد روشى براى كنترل اين تغييرات و اثرات آنها وجود داشته باشد. به گونهاى كه در نهايت اين تغييرات به شكست پروژه منجر نشوند.
3- بهبود فرآيندهاى توليد نرمافزار و ارزيابى تاثيرهاى بهبود فرآيند بر كيفيت محصول.
آيا پروژههاى نرمافزارى، مشابه ساير پروژهها قابل تخمين هستند؟
مطابق نظر [1]Paul Coombs دوازده قانون كور ولى بديهى در تخمين وجود دارد، اولين و مهمترين اين قانونها، به شرح زير است:
قانون 1: تخمينهاى شما اتباه خواهند بود.
چهگونه مىتواند غير از اين باشد وقتى شما قرار است آينده را پيشگويى كنيد! به ويژه در پروژههاى نرمافزارى كه عوامل تاثيرگذار بر آنها بسيار زياد است. بنابراين مديران، مشتريان يا كارفرمايان هرگز نبايد انتظار داشته باشند كه تمام برآوردها دقيق و بىنقص باشند.
اما مىتوان با واقعبينى در كار احتمال اشتباه در برآوردها را به حداقل رساند. هرگز نبايد در برآوردها بسيار بدبين يا بسيار خوشبين بود. يادآورى اين نكته ضرورى است كه هر دونوع تخمين خوشبينانه (Under Estimation) و بدبينانه (Over Estimation) معايبى مانند دست نيافتن به بازار (در حالت بدبينان) و از دست دادن بازار (در حالت خوش بينانه) را به همراه دارند كه در در بازار رقابتى پذيرفته نيست.
چه كسى بايد تخمين را انجام دهد؟
در بهترين حالت كسى بايد تخمين فعاليتهاى پروژه را انجام دهد كه خود مجرى آنهاست. به عبارت ديگر بهترين برآورد را كسى انجام مىدهد كه دربارهى چهگونگى انجام كار اطلاعات كامل و يا در انجام كار مشابه سابقه داشته باشد، بنابراين تعيين و آموزش شخصى به عنوان تخمينزنندهى حرفهاى در بلند مدت موثر نخواهد بود؛ زيرا اين شخص به تدريج با دور شدن از روند اجراى كار، قابليتهاى فنى خود را در تخمين از دست خواهد داد.
از اين رو بهترين خمينزنندهى فعاليتهاى يك پروژهى نرمافزارى مدير يا مدير فنى پروژه خواهد بود. از سوى ديگر، يك مسوول تماموقت براى ارزيابى تخمينها و تعديل آنها لازم است. تا از يك سو با كنترل برآوردهاى كنونى پروژه را در مسير درست خود هدايت كند و از سوى ديگر با مستند سازى و نگهدارى برآوردها، اطلاعات تاريخچهاى معتبرى براى تخمينهاى بعدى فراهم كند. مسووليت اين شخص كنترل اعتبار تخمينهاى انجام شده، كنترل يكپارچگى و هماهنگى اين تخمينها با تخمينهاى بعدى و قبلى و تامين اطلاعات تاريخچهاى معتبر براى تخمينهاى بعدى است.
بهترين زمان براى تخمين پروژه چه موقعى است؟
دومين قانون تخمين به اين سوال پاسخ خواهد داد:
قانون 2: اندازهى پروژه در هر زمان قابل تخمين است.
درست است كه در ابتداى پروژه بسيارى مسايل مانند هدف پروژه، نيازمندىهاى غير كاركردى مورد نظر، Platform مورد نظر، روش مورد استفاده، زبان برنامه نويسى ،تعداد آزمايشهاى لازم و … مشخص و شفاف نيستند اما همواره عددى قابل ارايه است و به تدريج به دقت اين عدد اضافه خواهد شد.
تكنيكهاى تخمين:
به چهار روش مىتوان تخمين را انجام داد:
1- قضاوت افراد با تجربه: استفاده از افراد خبره در ارايهى تخمين فعاليتها.
2- مقايسه: مقايسه پروژهى مورد نظر با ساير پروژههاى مشابه.
3- پايين به بالا: شكستن كار به اجزاى كوچكتر، تخمين هريك از اجزا و سپس جمع زدن تخمينها با هم.
4- محاسبه رياضى: استفاده از مدلهاى محاسباتى براى به دست آوردن برآورد اندازهى كار. در اين روش مقاديرى كه نشان دهندهى ويژگىهاى پروژه هستند، در معادلاتى وارد مىشوند كه نتيجهى اين معادلات تخمين اندازه پروژه در قالب زمان يا هزينه است.
نكته مهم استفاده از ضرايب تعديل در تخمينهاست. هر تخمينى از دو بخش تشكيل شده است؛ عدد پايه و ضريب تعديل. براى مثال تخمين پايهى 20 روز و ضريب تعديل 50% براى يك فعاليت؛ به اين معناست كه اين فعاليت دست پاين (در بهترين حالت) در مدت 20 روز انجام خواهد شد و بيشترين زمان لازم براى انجام آن 30 روز خواهد بود. مقولهى “ريسك” در ضريب تعديل لحاظ خواهد شد، نه در عدد پايه. به عبارت ديگر يكى از عوامل موثر در تعريف ضريب تعديل، ريسكهاى اجراست.
قانون 3: هر تخمينى بايد ضريب تعديل داشته باشد.
به طور منطقى در هر تخمين بايد گامهاى زير پيموده شود:
1- تهيه فهرستى از فعاليتهايى كه بايد تخمين زده شوند.
2- تخمين هر يك از فعاليتهاى فهرستبندى شده.
3- جمع كردن تمام آن تخمينها.
4- اضافه كردن ضريب تعديل.
براى انجام تخمين درست ابتدا بايد مواردى كه نيازمند تخمين هستند مشخص و تعريف شوند. ريسك تخمين نه فقط اشكال در محاسبه تخمين است بلكه در اكثر مواقع اشكال در تخمين به علت فراموش كردن تخمين بعضى فعاليت ها يا ريسك هاست. بنابراين:
قانون 4: تهيهى فهرستى از اقلام نيازمند تخمين به مراتب مشكلتر از تخمين آنهاست.
اقلام نيازمند تخمين مىتوانند نرمافزار، مديريت پروژه، مديريت فنى، سختافزار، گواهىنامهها و پيمانكاران يا به عبارت ديگر تمام عوامل هزينهى سيستم باشند. بنابراين آشنايى با پروژه اهميت زيادى دارد.
قانون 5:كيفيت تخمين به آشنايى با پروژه مورد نظر وابستگى زيادى دارد.
قانون6: هر چهقدر جزيات اقلام نيازمند تخمين را بيشتر كنيد، ديرتر به عدد مشخص تخمين مىرسيد.
اقلام نيازمند تخمين بايد تا سطح معنادارى شكسته شوند. نه آنقدر جزيى باشند كه براى تخمين به زمان زيادى نياز داشته باشند و نه آنقدر كلى كه دقت تخمين را كاهش دهند.
بعضى فعاليتهاى پشتيبانى كه به طور مستقيم در توليد وارد نمىشوند، در حالت عادى فراموش مىشوند و بايد در اين باره بسيار دقت كرد.
پس از تهيهى فهرست اقلام نيازمند تخمين نوبت انجام تخمين است. براى انجام عمل تخمين ابتدا:
قانون 7: مفروضات خود را ثبت كنيد.
با نوشتن مفروضات لحاظ شده، دقت و شرايط تخمين معلوم مىشود. مفروضات مىتوانند به دستهاى خاص از فعاليتها مربوط و يا در كل پروژه حاكم باشند، مانند دسترسى به منابع در زمانهاى مشخص يا ثبات نيازمندىهاى مورد نظر پروژه.
حال بايد ريسكهاى پروژه هم تعريف شوند تا بتوان ضريب تعديل را تعريف كرد.
قانون 8: ضريب تخمين به صورت نسبتى با استفاده از ريسكها تعريف مىشود.
اكنون تخمين اقلامى كه به همراه مفروضات و ريسكها به دقت شناسايى و فهرست شدهاند، امكانپذير است. به خاطر داشتن اين نكته بسيار ضرورى است كه:
قانون 9: هيچ روش كامل و جامعى وجود ندارد.
اگر روش كاملى وجود داشت، همه از آن استفاده مىكردند، همهى پروژهها به موقع انجام مىشدند و به مباحث پيچيده نيازى نبود. تمام روشهاى موجود، به تخمين زنندهها كمك مىكنند تا نسبت به تخمينهاى خود اعتماد بيشترى داشته باشند.
يك روش متداول، تخمين براساس احساس تخمينزننده است. در اين حالت از هيچ مدل رياضى استفاده نمىشود و تخمينزننده براساس فاكتورهايى مانند اندازهى فعاليت، پيچيدگى فعاليت، ميزان آشنايى با فعاليت مورد نظر و كل پروژه، مهارتها و دانش تيم انجام دهندهى كار و … عمل تخمين را انجام مىدهد.
تخمين براساس يك فعاليت پايهى روش ديگر تخمين است. در اين روش زمانى مشخص براى نوع خاصى از فعاليت در نظر گرفته مىشود و تخمين اندازهى ساير فعاليتها در مقايسه با آن فعاليت تعريف مىشود.
براى تخمين اندازهى پروژه مىتوان از مدلهاى محاسباتى مانند Function Point Analysis ,COCOMO و ابزارهايى كه بر پايهى اين روشها تهيه شدهاند، استفاده كرد.
مرحلهى بعدى تخمين مدت زمان يا طول پروژه و به عبارت ديگر برنامهريزى پروژه است.
قانون 10: طول پروژه به ماه بايد بزرگتر از متوسط تعداد افراد تيم باشد.
براساس تخمين هر يك از فعاليتها و به همراه ساير تكنيكهاى برنامهريزى، پروژهى زمانبندى پروژه تهيه مىشود.
قبل از ارسال تخمينها براى مرور، باي يكپارچگى و همخوانى آنها با يكديگر دوباره كنترل و از درستى آنها اطمينان حاصل شود.
قانون 11: كسى غير از تخمينزنندهى اول بايد تخمينها را مرور كند.
اگر براى مرور شخص ديگرى با مسووليت مستقل وجود ندارد، بايد ريسكى به ساير ريسكها اضافه شود.
در نهايت پس از اجراى پروژه بايد تخمينها نگهدارى شوند تا در تحليلهاى بعدى مورد استفاده قرار گيرند.
قانون 12: اطلاعات پروژهى خاتمه يافته بايد نگهدارى شوند.
به عبارت ديگر گزارش انجام يك پروژه مىتواند راهگشاى اجراى پروژههاى بعدى باشد.
[1] – IT Project Estimation-A practical Guide to the Costing of Software