تصور کنید یک روز صبح به شرکت میروید تا کارهای همیشگی خود را انجام دهید. اما مدیرتان یک پروژه جدید برای شما تعریف میکند و از شما میخواهد همین امروز کارهای قبلی را رها کرده و آن را شروع کنید. شما هیچ راه اعتراضی ندارید. چون مدیر با مشتری جدید قرارداد بسته و حالا از شما میخواهد که پروژه را در زمان مشخصشده تحویل مشتری دهید.
برداشتن اولین گام برای انجام یک کار همیشه سخت و دلهرهآور است. اما از سختی شروع پروژه که بگذریم، چگونگی انجام کار و رسیدن به برنامه زمانی تعیینشده قطعا شما و تیمتان را با اضطراب وحشتناکی روبهرو میکند. هرچند مقصر اصلی در این تخمین زمان اشتباه شما نیستید، اما الان این مشکل ذهن شما را درگیر کرده و تیم شما را تحتفشار قرار داده است. در بعضی از شرکتها، مدیران ردهبالا بهتنهایی و بدون مشارکت اعضای تیم برنامهنویسی، زمان انجام پروژهها را تخمین میزنند؛ تخمینهایی که تیم مطمئن است تحت هیچ شرایطی نمیتواند خود را به آنها برساند.
اما شما بهعنوان مدیر یکی از تیمهای مهندسی و برنامهنویسی برای جلوگیری از چنین مشکلاتی باید چه کاری انجام دهید؟ چگونه میتوانید از قرار گرفتن در چنین موقعیتهای چالشبرانگیز و اضطرابآوری پیشگیری کنید؟ در این مقاله به بررسی کامل تخمین نرمافزار و قوانین آن برای انجام کارهای پیچیده میپردازیم. اگر تخمین نرمافزار یکی از دغدغههای کاری شما است، با ما همراه باشید.
تخمین نرمافزار چیست؟
تخمین در توسعه نرمافزار بهمعنای پیشبینی واقعیترین میزان تلاش برای توسعه یا نگهداری نرمافزار بر اساس متغیرهای مختلفی است که این متغیرها معمولا ناقص، نامشخص و بههمریخته هستند. به بیان سادهتر، تخمین نرمافزار یک فرایند برای یافتن دقیقترین میزان تلاش و اقدام برای انجام یک پروژه نرمافزاری است.
تخمین نرمافزار را میتوان بر حسب ساعت-نفر یا هزینه مادی محاسبه کرد. بهعنوان مثال برای توسعه یک نرمافزار به چند ماه زمان نیاز دارید یا میزان منابع و هزینه موردنیاز چقدر است؟ تخمین نرمافزار میزان تلاش و زمان لازم را برای انجام پروژه به تیم برنامهنویسی میدهد و آنها را از انجام کارها طبق یک برنامه زمانی مشخص مطمئن میکند. از طرفی بعضی از پروژهها هزینههای ثابتی دارند که آگاهی از این هزینهها برای مذاکره با مشتری لازم است. در ادامه با اهمیت تخمین نرمافزار بیشتر آشنا میشوید.
چرا تخمین نرمافزار مهم است؟
نتیجه تخمین نرمافزار همیشه دقیق و عالی نخواهد بود. اما بینقص نبودن تخمین نرمافزار بهمعنای بیهوده و بیمعنی بودن این کار در یک پروژه نرمافزاری نیست. تخمین زدن نهتنها ارتباطات تیمی را بهبود میبخشد، بلکه باعث ایجاد یک فرایند چابک در طول کار میشود. از مهمترین دلایل ضرورت و اهمیت تخمین نرمافزار پیش از شروع پروژه میتوان به موارد زیر اشاره کرد:
- تخمین زدن باعث نگاه کردن به مسئله از چندین بعد متفاوت و بررسی راههای مختلف انجام آن میشود.
- شکست زودهنگام با استفاده از تخمین، قابلپیشبینی و حتی قابلجلوگیری است.
- تخمین نرمافزار به مدیریت عدم قطعیت کمک میکند.
- تخمینها برنامهریزی دقیقتر و بهتری برای تیم به ارمغان میآورند.
فرایند تخمین نرمافزار به چه صورت است؟
همانطور که گفته شد، تخمین نرمافزار یک فرایند است و هر فرایند چندین مرحله را شامل میشود. پس برای رسیدن به یک تخمین خوب، باید مراحل تخمین نرمافزار را بهترتیب زیر طی کنید. این مراحل عبارتاند از:
- محدودهبندی
برای تخمین پروژه نرمافزاری اول از هرچیز پروژه خود را محدود کنید. اگر پروژه شما شرایط لازم برای محدود کردن ندارد، میتوانید برای خود محدودیتهایی فرض کنید یا بعد از تخمین، زمان بیشتری را برای انجام آن در نظر بگیرید.
- تقسیمبندی
در این مرحله، باید نرمافزار خود را به اجزا و عملکردهای کوچکتری تقسیم کرده و آنها را بر اساس عناصری که دارند، در مجموعههای مختلفی قرار دهید. این مرحله از تخمین دقیقا مشابه ساختار شکست کار است که کار را به گامهای کوچکتر تقسیم میکند. اما به یاد داشته باشید که تقسیمبندی را تنها برای اجزای نرمافزار انجام دهید؛ نه تمام فعالیتهای کاری نرمافزار.
- اندازهگیری
بعد از تقسیمبندی نرمافزار، زمان لازم را برای انجام هر یک از اجزای نرمافزار پیشبینی کنید. در واقع در این مرحله، برای هرکدام از عملکردهای نرمافزار یک تخمین اولیه میزنید.
- بررسی توسط متخصص
پس از تخمین اولیه، متوجه میشوید که برای بعضی از موارد خاص، به نظر متخصصان همان حوزه نیاز دارید. متخصص تشخیص میدهد که کدام یک از ویژگیها و عملکردهای نرمافزار به زمان بیشتری برای انجام نیاز دارند. حتی در این مرحله میتوانید از سایر همردههای خود هم برای اطمینان از درست بودن تخمین اولیه کمک بگیرید.
- تخمین نهایی
تخمین نهایی نرمافزار از مجموع تخمینهای هر یک از اجزا به وجود میآید. با مرور دوباره عملکردها و تخمینها و همچنین مشورت با تیم پروژه و مدیریت میتوانید از نتیجه نهایی خود مطمئن شوید.
۱۱ قانون مهم تخمین نرمافزار برای کارهای پیچیده
برای یک تخمین دقیق از زمان موردنیاز توسعه نرمافزار تنها شناخت مراحل آن کافی نیست. بلکه باید در طول این فرایند نکات مهمی را در نظر بگیرید که به واقعیتر شدن نتیجه تخمین نهایی کمک میکند.
۱. بدون توجه به دقت تخمین، کار شما به یک اندازه زمان ميبرد.
برای درک اولین قانون، به عکس زیر توجه کنید و حدس بزنید که در ظرف زیر چند سکه وجود دارد؟ به احتمال زیاد تخمین شما اشتباه خواهد بود. چون از روی عکس حتی فاصله دوربین از کاسه هم مشخص نیست. در هر حال، تخمین شما چه درست باشد، چه غلط تاثیری روی تعداد سکهها نخواهد داشت. بنابراین حدس شما واقعیت را تغییر نمیدهد. پس تصور نکنید که اگر زودتر از زمان موردنیاز تخمین بزنید، کارهایتان سریعتر پیش خواهد رفت.
۲. تخمینها همواره مورداعتماد صددرصد نیستند.
تخمین صرفا یک حدس و پیشبینی با کمک اطلاعات کم و ناقص است. هنگام انجام کارهای پیچیده، اطلاعات کافی ندارید و نباید از خودتان انتظار داشته باشید که دقیقا مطابق تخمینها جلو بروید. پس هرگز به تخمینهای خود اعتماد نکنید و بدانید که شما با بهترین اطلاعاتی که در ابتدای کار داشتید، تخمین زدهاید. بااینحال، تخمین زدن میتواند یک نقطه مناسب برای شروع کار باشد.
۳. تحمیل تخمینها به دیگران بهعنوان یک دستور فاجعهآفرین است.
برای تیمهای فنی، هیچچیز ناامیدکنندهتر از وارد کردن تحمیل به آنها برای رسیدن به تخمینها نیست. باتوجهبه اینکه بیشتر اوقات تخمینها نادرست از آب درمیآیند، تحمیل تخمینها به تیم باعث فشار آوردن روی آنها شده و آنها را برای انجام پروژه دلسرد میکند. اگر میخواهید نتیجه بهتری بگیرید، به اعضای تیم اجازه تخمین زدن بدهید و نظر آنها را هم برای زمان موردنیازشان جویا شوید.
۴. با پیش رفتن پروژه، تخمینها هم دقیقتر میشوند.
هنگام شروع پروژه شما حداقل اطلاعات را دارید و به همین علت، دقت تخمینها بسیار پایین خواهد بود. با پیشرفت پروژه، درک بهتری نسبت به آن پیدا خواهید کرد و با کمک اطلاعات بیشتری که به دست میآورید، تخمینها هم دقیقتر خواهند شد. هرچند در این زمان اهمیت تخمینها کمتر و کمتر میشود؛ اما توجه کنید که حتی وقتی کارتان تمام شده است، باز هم میتوانید چیزی کشف کنید که کل پروژه را تحتتاثیر قرار دهد. مخصوصا در توسعه نرمافزار که مسائل بهظاهر کوچک، میتوانند پیامدهای سنگینی داشته باشند.
۵. بهجای نگرانی در مورد تخمینها، روی سایر مسائل مهمتر تمرکز کنید.
طبق قانون اول، با یا بدون یک تخمین درست، کار شما به یک اندازه طول خواهد کشید. بنابراین بهجای اینکه حواس خود را با تخمین و زمانبندی پروژه پرت کنید، تمرکز خود را روی مسائل مهمتر پروژه قرار دهید.
۶. اگر مهارتی در توسعه نرمافزار نداشته باشید، تخمینهای شما نادرست خواهد بود. اگر یک مهندس ماهر باشید، تخمینهای شما متوسط خواهد بود.
تیمهای قویتر معمولا تخمینهای بهتری ارائه میدهند، اما این بهمعنای دقیق و عالی بودن تخمینهای آنها در تمام شرایط نیست. پس اهمیتی ندارد که چقدر در انجام کارها مهارت و تخصص دارید؛ در هر صورت نمیتوانید انتظار داشته باشید که کارهایتان دقیقا مطابق تخمینها پیش بروند.
۷. بزرگترین ارزش در تخمین زدن خود تخمین نیست، بلکه رسیدن به یک تفاهم مشترک است.
تخمین زمان انجام یک کار از دید دو نفر ممکن است متفاوت باشد. وجود این اختلافنظرها بهدلیل تفاوت در درک اتفاقات طبیعی است که با همفکری میتوان آنها را برطرف کرد. پس رسیدن به یک درک مشترک بزرگترین ارزشی است که یک تیم فنی میتواند به آن برسد.
۸. داشتن دید ساده به مسائل بهترین راه برای افزایش دقت تخمین است.
حذف پیچیدگیها و عدم قطعیت، چه حین انجام کار چه قبل از شروع آن، بهترین راه برای افزایش دقت تخمین است. پس از حاشیهها دوری کنید و تنها به مسائل مهم پروژه بپردازید. البته این را هم بهخاطر داشته باشید که ساده کردن بیش از حد هم دقیقا به اندازه پیچیده کردن بیش از حد، برای پروژه مشکلآفرین است.
۹. برای افزایش دقت تخمین، بهجای صحبت بیش از حد در مورد آن، کارتان را شروع کنید.
صحبت کردن، تجزیهوتحلیل، طراحی، مذاکره و انجام تحقیقات بیش از حد، قبل از شروع کار برای از بین بردن عدم قطعیتها و خطرات جذاب به نظر میرسد. با وجود تمام اینها، باز هم دانش شما در ابتدای کار محدود است. با شروع کار میتوانید مشکلات واقعی را سریعتر پیدا کرده و برای حل آنها برنامهریزی کنید.
۱۰. شکستن کار به کوچکترین اجزا مانع رسیدن شما به زمان تحویل پروژه شود.
تجزیه کار به کوچکترین اجزا زمان ارزشمندتان را برای شروع هدر میدهد. زمانی که پروژه خود را با تمام جزئیات بررسی میکنید، میتوانید بهراحتی خود را فریب دهید که تخمین دقیقی از تحویل پروژه خواهید داشت. اما همانطور که گفتیم تخمینها هیچوقت کاملا دقیق نیستند. پس تحلیل جزئیات را کنار بگذارید و کار را شروع کنید.
۱۱. مجازات بهخاطر تخمین اشتباه مانند تنبیه کودک بهخاطر چیزی است که هنوز نمیداند یا نمیتواند درک کند.
بعضی از شرکتها معتقدند یک تیم قوی و بالغ باید بتواند تخمین دقیقی از پروژه ارائه دهد و در صورت کوچکترین اشتباهی، تیم را مجازات میکنند. مجازات تیم بهخاطر تخمین نادرست، در واقع مجازات افراد بهخاطر مواردی است که تحتکنترل آنها نیست. این موضوع دقیقا مانند زمانی است که یک کودک بهخاطر چیزی که نمیداند یا هنوز قدرت فهم آن را ندارد، تنبیه شود.
کلام آخر
در بحث تخمین نرمافزار، عملکرد گذشته تضمینی برای نتایج آینده ندارد. تخمین تاحدودی مانند شانس است. در سال ۱۹۴۳ در یک کازینوی آمریکایی، رنگ قرمز ۳۲ بار متوالی برند شد. این پیشینه بهراحتی میتواند فرد را فریب دهد که نوعی الگو برای برنده شدن وجود دارد. اما رویدادهای تصادفی از هم مستقل هستند و نمیتوان بر اساس نتایج چند رویداد متوالی در گذشته، آینده آن را پیشبینی کرد. علاوه بر این، بسیاری از تیمها ممکن است خود را بهخاطر تخمین اشتباه سرزنش کنند. اما همانطور که در این مقاله بارها اشاره شد، نهتنها تخمینها هیچگاه درست از آب در نمیآیند، بلکه میتوان گفت یک تخمین درست تنها با شانس همراه بوده است. شما چه تجربهای از تخمین نرمافزار دارید؟ آن را با ما به اشتراک بگذارید.