مدل بلوغ نرم افزار CMM

Capability maturity model

 ۱-  مقدمه

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

در نوامبر ۱۹۸۶، انستیتو مهندسی نرم افزار (SEI) با همیاری کمپانی میترِ (Mitre)  شروع به توسعه یک چارچوب برای بلوغ نرم افزارها نمود تا سازمانها بتوانند با استفاده از آن چارچوب به توسعه نرم افزارهای خود بپردازند. در سپتامبر ۱۹۸۷، SEI توصیف مختصری از چارچوب بلوغ فرآیند را منتشر نمود که بعدها در کتاب همفری (Humpherey) توسعه یافت و تحت عنوان مدیریت فرآیند نرم افزار عرضه شد. دو روش “تشخیص فرآیند نرم افزار”[۱]
 و ” ارزیابی قابلیت نرم افزار”[۲] و یک پرسشنامه بلوغ، برای تخمین بلوغ فرآیند نرم افزار نیز تهیه شد.

پس از چهارسال تجربه با چارچوب بلوغ فرآیند نرم افزار و نسخه اولیه پرسشنامه بلوغ، SEI اولین ویرایش CMM برای نرم افزار را منتشر نمود. در این مجموعه، توصیه های لازم برای انجام تمریناتی از تعدادی فرآیندهای کلیدی که در قابلیت فرآیند نرم افزار پیشرفته وجود دارد، ارائه شده است. CMM  برمبنای دانش حاصل شده از ارزیابی های فرآیند نرم افزار و بازخوردهای وسیع از صنعت و شیوه مدیریت آن، بنا نهاده شده است.

CMM که برای سازمانهای نرم افزاری تهیه شده است در خود راهنمایی هایی را برای تعالی مدیریت، چگونگی دستیابی به کنترل فرآیندهای توسعه و پشتیبانی نرم افزار و رشد فرهنگ مهندسی نرم افزار،  دارا می باشد.

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

نسخه اولیه CMM، طی سالهای ۱۹۹۱ و ۱۹۹۲ توسط یک کمیته نرم افزاری مورد بازنگری قرار گرفت. درآوریل ۱۹۹۲ یک کارگاه CMM با مشارکت حدود ۲۰۰ متخصص نرم افزار راه اندازی شد. نسخه مذکور (CMM V ۱٫۱.)  نتیجه بازخوردهای این کارگاه و بازخوردهای مداوم از کمیته نرم افزار است.

   ۱-۱- سازمانهای نرم افزاری بالغ و نابالغ

تعیین اهداف ملموس برای توسعه فرآیندها و درک تفاوتهای فی مابین سازمانهای نرم افزاری بالغ و نابالغ، یکی از نیازهای اساسی جامعه ما است. ویژگیهای سازمانهای بالغ و نابالغ نرم افزاری ذیلاً ارائه می گردد:

        ۱-۱-۱-  سازمان نرم افزاری بالغ

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

قوانین و مسئولیتها در فرآیندهای تعریف شده در سرتاسر سازمان و حین انجام پروژه واضح و روشن است. در سازمان بالغ، مدیریت سازمان، کیفیت محصولات نرم افزاری و فرآیند تهیه آنها را زیر نظر دارد.

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

        ۲-۱-۱- سازمان نرم افزاری نابالغ

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

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

   ۲-۱-  مفاهیم پایه ای متضمن بلوغ فرآیند

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

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

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

 ۲-  پنج سطح بلوغ فرآیند نرم افزار

توسعه مستمر فرآیند بر مبنای تعدادی مراحل تحولی و تکاملی به جای تغییرات انقلابی، بنا شده است. ساختار مراحل CMM بر مبنای اصول کیفیت محصول مورد اعتقاد والتر شوارت، ادوارد دمینگ، ژوزف یوران و فیلیپ کرازبی، بنا شده است. ( مرجع CMM V1.1 )

CMM
 چارچوبی برای ساماندهی به این مراحل توسعه تدریجی در ۵ مرحله بلوغ که منجر به زیرسازی موفقیت آمیزی برای توسعه مستمر فرآیند خواهد شد، ارائه نموده است. این ۵ مرحله بلوغ، درجه بندی کمّی برای اندازه گیری بلوغ فرآیند نرم افزار سازمان و ارزیابی قابلیت فرآیند نرم افزاررا  تعریف می کند. این سطوح همچنین نسبت به تشخیص اولویت های نیازمند تلاش برای تجزیه و تحلیل و نیز فاصله دستیابی به توسعه سازمان، کمک خواهد نمود.

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