بلوغ توسعه‌ی نرم‌افزار

در این نوشتار سعی می‌شود از دیدگاهی دیگر افزایش کیفیت محصول مورد بررسی قرار بگیرد و در همین راستا یک مدل بلوغ تولید نرم‌افزار با کیفیت ارائه خواهد شد.

افزایش کیفیت

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

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

از طرفی تضمین کیفیت به پروسه‌ی تولید نرم‌افزار مربوط است. در این روش سعی می‌شود روال‌های مناسب برای تولید نرم‌افزار در نظر گرفته شود. تیم تضمین کیفیت معمولا پروسه‌ی استاندارد تولید نرم‌افزار را مشخص می‌کند و بر اجرای آن نظارت می‌کند.

هر کدام از دو روش بالا با مشکلات شناخته شده‌ای رو‌به‌رو هستند. به طور مثال بسته به توانمندی فنی و فضای همدلی شرکت‌، در اغلب اوقات پروسه‌ی کنترل کیفیت با مشکلات زیر رو به رو می‌شود.

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

در مقابل دیدگاه تضمین کیفیت نیز معمولا باعث بروز مشکلات زیر می‌شود.

  • تیم تولید برای جلب رضایت تیم تضمین کیفیت محصول را تولید می‌کند و نه برای اجرا در محیط واقعی.
  • روال‌های مشخص شده بعد از مدتی بدون در نظر گرفتن هدف اجرا می‌شوند و در واقع کیفیت محصول تغییری نمی‌کند.
  • معمولا اجرای روال‌های تضمین کیفیت با تیم تولید است و ممکن است از اجرای روال‌ها با دلایلی همچون تعدد کار‌های توسعه‌ی محصول شانه خالی کند.
  • مسئولیت افزایش کیفیت محصول با تیم تضمین کیفیت است که در تولید محصول نقش کمتری را نسبت به تیم تولید دارد.

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

توسعه‌ی کیفیت

همانطور که شما بعد از ساخته شدن یک ماشین نمی‌توانید کیفیت آن را با تست‌های مختلف افزایش دهید کیفیت نرم‌افزار را نمی‌توان با انجام آزمون‌های مختلف افزایش داد و برای افزایش کیفیت محصول باید تیم توسعه‌ی محصول تقویت شود. این مساله به خوبی در کتاب How Google Tests Software توضیح داده شده است. این کتاب به خوبی فضای موجود در حوزه‌ی کیفت محصول گوگل را توضیح می‌دهد. در گوگل یک پلکان گواهی آزمون (Test Certified Ladder) وجود دارد و تیم‌های توسعه در صورت نیاز و صلاح‌دید مدیر محصول به مواردی که برای گرفتن این گواهی لازم است می‌پردازند و در این مسیر از تیم کیفیت کمک خواهند گرفت.

مساله‌ی دیگری که در سال‌های اخیر با افزایش محبوبیت رو به رو شده است، مبحث CI/CD است. در این زمینه کتاب Continuous Deliver نوشته‌ی Jezz Humble مباحث CI/CD را به خوبی شرح می‌دهد. در این کتاب که توسط افراد با تجربه در صنعت نرم‌افزار نوشته شده است به مراحل پیاده سازی CI/CD برای محصول‌های مختلف اشاره می‌شود و تجربیات مختلفی را ارائه می‌کند.

با توجه به مطالعاتی که صورت گرفت و تجربیاتی که از گذشته وجود داشت یک کمیته با نام کمیته‌ی کیفیت با حضور بهترین افراد فنی تیم‌های توسعه‌ی محصولات مختلف شرکت و تیم توسعه‌ی کیفیت (تیم کیفیت) در کنار هم جمع شدند. هدف از این کار ایجاد یک مدل بلوغ برای توسعه‌ی محصول با کیفیت بود.

مدل بلوغ به دست آمده ۲ کاربرد داشت

  • ارزیابی کیفیت تولید محصول
  • نشان دادن مسیر رشد برای توسعه‌ی محصول‌ها

در نهایت پس از ۶ ماه اولین نسخه از مدل بلوغ کیفیت محصول به صورت متن باز منتشر شد. در ادامه به تشریح مدل بلوغ می‌پردازیم.

کاتالوگ آیتم‌ها

مدل بلوغ شامل تعدادی از آیتم‌هایی است که می‌توان در توسعه‌ی نرم‌افزار آنها را رعایت کرد. این آیتم‌ها مربوط به بحث‌های آزمون، Build، نصب و توسعه‌ی نرم‌افزار هستند. هر کدام از آیتم‌های کاتالوگ علاوه‌بر توضیح، به راهکار‌های بهینه(Best Practice) موجود نیز اشاره می‌کنند.

پلکان بلوغ

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

شروع با محوریت pipeline

این مدل بلوغ با محور یک Pipeline ساخته شده که شامل قسمت‌های زیر است:

  • Commit Stage
  • Acceptance/Performance Stage
  • Staging

تمامی مواردی که در مدل بلوغ آورده شده، به نوعی با این Pipeline در ارتباط هستند.

نحوه‌ی استفاده از مدل بلوغ

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

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

نحوه‌ی دسترسی به مدل بلوغ و مشارکت در توسعه

مدل بلوغ به صورت متن باز در اختیار همگان قرار گرفته است. مانند هر محصول متن باز این امکان وجود دارد که تجربیات دیگران به بهبود این محصول کمک کند.