خلاصه: DevOps چیزی بیش از اتخاذ مجموعه ابزار مناسب است؛ در حقیقت DevOps یک تغییر فرهنگیست که شامل تست در هر مرحله از چرخه حیات پروژه میشود. Continuous Testing یا تست مداوم کلیدی برای گشایش در راستای این تغییر فرهنگ است، چرا که فعالیتهای تست را به هر بخش از فرآیندهای طراحی، توسعه و راهاندازی نرم افزار تسری میدهد. همین موضوع به همه افراد کمک میکند تا بیشتر ارتباط برقرار کنند، بهتر کار کنند و سریعتر به نوآوری بپردازند.
فرایند Agile در مورد استفاده از چرخههای توسعه کوتاه و انعطافپذیر برای پاسخ سریع به نیازهای مشتری است. انجام چنین کاری در این روزها به طور موثر شامل ساخت خط(Piplene) نرمافزار DevOps است تا به سرعت نرمافزار با کیفیت بالا را به دست مشتریان خود رسانده و بازخورد دریافت کند.
اغلب پروژههای DevOps با اتخاذ شیوه Continuous Integration-CI(یکپارچهسازی مداوم) آغاز میشوند، جایی که کد به طور مداوم یکپارچه میشود تا اطمینان حاصل شود همه چیز با هم کار میکند. توسعهدهندگان با Check in کردن کد به مخزن مشترک، آن هم چندین بار در روز شروع به پردازش CI میکنند. هر Check in بوسیله یک فرآیند ساخت خودکار(Automated Building) و برخی تستهای سریعالاجرا ممیزی میشود، که به تیم اجازه میدهد تا در اسرع وقت خطاها(Error) و مغایرتها(Conflict) را شناسایی کند. تستهای رگرسیون(Regressi) حداقل هر شب اجرا میشوند تا بدین ترتیب اطمینان حاصل شود که هر تغییری که در طول روز رخ داده است چیز دیگری را از بین نبرده باشد.
پس از انجام CI، یک فرآیند Continuous Delivery-CD(تحویل مداوم) دنبال میشود، جایی که برنامه بیشتر تحت تست قرار میگیرد، و پس از گذراندن تمام تستهای لازم، برای Release(انتشار) به منظور بهرهبرداری(Production) در دسترس قرار میگیرد. بالاترین مزیت Continuous Deployment(استقرار مداوم) این است که قابلیتهای جدیدی را برای کاربران در عرض چند دقیقه ارائه میدهد و همچنین بازخورد فوری به تیم که امکان پاسخ سریع به خواستههای مشتری را فراهم میکند. تست موثر در طول فرآیند Continuous Deployment شما مهم است، زیرا بدون آن، یک ریسک بزرگ برای انتشار مداوم نرمافزار دارای Bug در تولید وجود دارد.
اجازه ندهید که شیوههای تست، شما را کند کنند
تست مداوم، که اغلب به نام تست shift-left شناخته میشود، یک رویکرد در تست نرمافزار و سیستم است که در آن تست در چرخه زندگی نرمافزار بسیار زود آغاز میشود. اهداف این روش عبارتند از یافتن نواقص(Defect)، افزایش کیفیت نرمافزار، کوتاه شدن چرخههای طولانی تست و کاهش احتمال نقصهای نرمافزاری که راه آنرا در Production به هنگام استقرار قرار میدهد. اگر شرکت شما در حال تلاش برای استفاده از DevOps برای استقرار نرمافزار به صورت مکرر در زمان تولید است، تست مداوم بسیار مهم خواهد بود.
انجام صحیح تست مداوم، بینش مداوم و سریع در مورد سلامت آخرین Build نرمافزار شما را به ارمغان میآورد. سپس این اطلاعات میتواند برای تعیین اینکه آیا برنامه برای پیشرفت از طریق خط تحویل(Delivery Pipline) در هر زمان آماده است یا خیر، مورد استفاده قرار گیرد. از آنجا که تست خیلی زود آغاز میشود و به طور مداوم نیز اجرا میگردد، باگها بعد از معرفی آنها به سرعت دافشا میشوند، که باعث کاهش زمان و تلاش لازم برای یافتن و اصلاح آنها میگردد. در نتیجه، این امکان وجود دارد که سرعت و فرکانسی که در آن نرمافزار به صورت Bug-Free و باکیفیت تحویل داده میشود را افزایش داده و ایضا بدهی فنی(Technical Debt) را نیز کاهش دهید.
بدهی فنی به هزینهای اطلاق میشود که سازمان هنگام انتشار کد بد طراحی شده پرداخت میکند. این یک روش برای محاسبه هزینههای اضافی دوبارهکاری ناشی از انتخاب یک راهکار آسان و سریع به جای استفاده از یک روش بهتر، کم باگ تر و البته مُطَوَلتر است. درست مانند بدهی مالی، بدهی فنی نیز شامل هزینههاییست که باید پرداخت شود، از قبیل افزایش نگهداشت، پشتیبانی یا هزینههای حقوقی. با کوتاه کردن زمان لازم برای اصلاح نرمافزار دارای باگ، تست مداوم به شما کمک خواهد کرد تا با مصون نگه داشتن هزینهها از افزوده شدن، بدهی فنی خود را پرداخت نمایید.
DevOps یک شیفت فرهنگیست که همکاری میان همه تیمها را توسعه میدهد، از جمله توسعه، تضمین کیفیت، بهرهبرداری و دیگران، مانند مدیریت Performance، مدیریت Release و تیمهای نگهداشت(Maintenance). در نتیجه، هیچ محصولی وجود ندارد که بتواند ابزار قطعی DevOps باشد. به همین دلیل اغلب مجموعهای از ابزارهای مختلف در مراحل فرآیند DevOps استفاده میشوند. به Continuous Integration اغلب به عنوان ستون فقرات یک خط تحویل مداوم نگریسته میشود، که محبوبیت ابزارهای CI مانند Jenkins و Bamboo برای Build، تست و استقرار برنامهها به طور خودکار در صورت تغییر نیازمندیها را روشن میسازد.
شرکتهایی که از DevOps استفاده میکنند، اغلب نرمافزارهای جدید را هر روز صدها بار به حالت Production مننتقل میکنند. این شرکتها قطعات کوچکتر نرمافزار، همکاری و نظارت در Production را تحویل میدهند تا جریان مداومِ کد از Check in تا Production را ایجاد نمایند. آنها از فناوری تست مداوم استفاده میکنند تا فعالیتهای تست را به هر بخش از فرایندهای طراحی، توسعه و راهاندازی نرم افزار خود بپوشانند.
به تکنولوژی اجازه دهید کارهای سنگین را انجام دهد
برای انتشار سریعتر کد با کیفیت بالا، سازمان شما باید با استفاده از ابزار و شیوههای نسل آینده(که شما را قادر به تست سریع و اغلب به صورت خودکار و پیوسته میکند)، اجازه دهد تا با استفاده از تکنولوژی کارهای سنگین را انجام دهید.
چنین ابزارهایی با اجرای مجموعهای مناسب از تستها در مرحله مناسبی از خط تحویل(بدون ایجاد گلوگاه) با ارائه بازخورد مناسب در هر مرحله از فرآیند، اصول Agile را اجرا میکنند. این ارتباطات پیشرفته باعث جلوگیری از تکرار تلاشها و افزایش همبستگی میان تیمهای Dev، Ops و تست میشود که به شما اجازه میدهد برنامههای خود را در نرمافزارتان، در زمان مقرر تحویل دهید.
اما این زمانبندیهای ساده تنها در صورتی ممکن هستند که اتوماسیون تست با خط تحویل نرمافزار و زنجیره ابزار DevOps شما یکپارچه شود. اتوماسیون تست تعداد زیادی از تستها را به صورت مرتب اجرا مینماید، تا بدین ترتیب مطمئن شود که یک اپلیکیشن هر بار که یک تغییر جدید معرفی میشود دچار شکست نخواهد شد. تسترهای دستی اغلب در پروژه DevOps مشغول به کار هستند، در حالیکه یک Automation Test Suite دائما در حال اجراست، اما نقش آنها نیازمند شیفت به سمت رویکرد Exploratory Testing مبتنی بر Session است، که روی نواحی پر ریسکتر یا جایی که اتوماسیون موثر نیست متمرکز میشود.