smh
29-11-07, 00:45
اين مقاله به طور عمده از كتاب -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: اطلاعات پروژهي خاتمه يافته بايد نگهداري شوند.
به عبارت ديگر گزارش انجام يك پروژه ميتواند راهگشاي اجراي پروژههاي بعدي باشد.
-------------------------------------------------------------
نويسنده : بيتا باقري
ناشر : همكاران سيستم
صنعت نرمافزار در سالهاي اخير شكوفايي قابل توجهي داشته و به سمت "دستيابي" روشمند به اهداف و "مهندسي" در حركت بوده است. مديريت پروژههاي نرمافزاري و محيطي كه اين پروژهها در آن اجرا ميشوند، نيازمند دانش مجرد است؛ حقايقي كه از طريق مشاهده و اندازهگيري به دست ميآيند.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: اطلاعات پروژهي خاتمه يافته بايد نگهداري شوند.
به عبارت ديگر گزارش انجام يك پروژه ميتواند راهگشاي اجراي پروژههاي بعدي باشد.
-------------------------------------------------------------
نويسنده : بيتا باقري
ناشر : همكاران سيستم