بسیاری از سازمانها و شرکتها از پایپلاین های یکپارچه سازی مستمر/تحویل مستمر (همون CI/CD با ترجمه سخت فارسی) استفاده میکنند تا فرآیند تحویل نرمافزار را به صورت خودکار انجام دهند. با این حال، هنگامی که یک سازمان خطوط پایپلاین خود را برای هماهنگی تست و ارتقای نرم افزار ایجاد می کند، این پایپلاین ها اغلب ثابت میمانند و بررسی مجدد نمیشوند. در نتیجه نرمافزار از طریق زنجیرههای CI/CD تکامل مییابد، اما فرآیندهای انتشار نرمافزار اغلب تکامل نمییابند.
هنگامی که یک برنامه تغییر میکند، معماران سیستم باید بررسی ها را شروع کرده و مشخص کنند که آیا برنامه بهطور مؤثری تست و بهروزرسانی میشود یا خیر.
این مقاله پنج استراتژی تست را توصیه میکند که میتوانید در پایپلاین های خود گنجانده و استفاده کنید. صرف نظر از پیادهسازی CI/CD شما، معرفی این استراتژیهای تست میتواند کیفیت انتشارهای نرمافزار شما را بهبود بخشد.
در چند سال گذشته، روی API (وبسرویس) ها و ارزشی که می توانید با استفاده از آنها به طور گسترده ایجاد کنید، تمرکز فزاینده ای شده است. یک API یکی از حیاتی ترین اجزای هر برنامه کاربردی است که نقش رابط را بین سیستم های مختلف عمل می کند. موجودیت های مختلفی که به API وابسته هستند همیشه در حال گسترش هستند، از دستگاه های تلفن همراه گرفته تا فناوری اینترنت اشیا (IoT)، کاربران انسانی و برنامه های کاربردی.
به طور معمول، API ها به عنوان اندپوینت های مبتنی بر REST یا SOAP تعریف میشوند، و تا زمانی که مصرفکنندگان و تولیدکنندگان API بتوانند در مورد یک قرارداد به توافق برسند، میتوانند به طور جهانی با آنها تعامل داشته باشید. پس انتظار داریم تا این قرارداد ثابت مانده و نتایج مورد انتظار را ارائه دهد.
بسیاری از ابزارهای محبوب به راحتی به هر پایپ لاین CI/CD متصل می شوند. برخی از این ابزارها عبارتند از SoapUI، Swagger و Red Hat's 3scale. این ابزارها به شما این امکان را میدهند که تست های API را مستقیماً در پایپ لاین خود اجرا کنید، بنابراین میتوانید بررسی کنید که آیا API های شما در طول فرآیند انتشار نرمافزار مطابق انتظار عمل میکنند یا خیر.
درست مانند یک API، ثبات و عملکرد رابط های گرافیکی کاربر (GUI) برای موفقیت در عرضه یک برنامه ضروری است. فرض کنید اجزای رابط کاربری گرافیکی آنطور که انتظار میرود رفتار نمیکنند، و شما قبل از انتقال تغییرات به محیط پروداکشن، متوجه آن نمیشوید. در این صورت، مشکلاتی نمایان می شوند زیرا کاربران نمی توانند به برنامه یا بخش هایی از عملکرد آن دسترسی داشته باشند. با توجه به اینکه این مشکلات ممکن است در محیطهای ایزوله و یا مرورگر نمایان شوند، عیبیابی آنها میتواند چالش برانگیز باشد.
با تعریف یک مجموعه از تست های GUI قوی که کلاینت ها و مرورگرهای پشتیبانی شده را پوشش دهد، می توانید قبل از اینکه کاربران این مشکلات را ببینند، متوجه آنها شوید. ابزارهای تست GUI نقاط و کلیکهایی را که یک کاربر انسانی از رایانه خود برای اجرای دنبالهای از اقدامات استفاده میکند را شبیهسازی میکند و سپس نتایج مورد انتظار را با نتایج واقعی مقایسه میکنند.
از ابزارهای محبوب تست GUI، میتوان به Selenium و Appium اشاره کرد، که قابل افزودن به پایپ لاین CI/CD هستند و از طریق هر دو میتوانید دنبالهای از مراحل را ایجاد کنید که کاربر سیستم با استفاده از رابط کاربری طی میکند. با گنجاندن این تستها به عنوان بخشی از چرخه انتشار خودکار، میتوانید اطمینان بیشتری داشته باشید که رابط کاربری گرافیکی همانطور که در پلتفرمها و مرورگرهای مختلف انتظار میرود کار میکند و اجزای آن در طول تغییرات منطق برنامه در سمت سرور دست خوش تغییرات نشده اند.
آیا تا به حال آرزو کرده اید که راهی وجود داشته باشد که تیم های خود را بهتر برای شکست ها و شکست های برنامه ریزی نشده آماده کنید؟ آیا فکر افزایش غیرمنتظره ترافیک باعث نگرانی شما در مورد ندانستن نحوه رفتار سیستم می شود؟ شاید وقت آن رسیده است که به ابزارهای تست غیر کاربردی (Non Functional) توجه کنید.
تست Non Functional زیرمجموعه وسیعی از تستینگ است که نحوه عملکرد برنامه تحت عوامل خارجی و اغلب غیرقابل کنترل، مانند بار، استرس، حجم، و همچنین رویدادها یا خرابی های محیطی غیرمنتظره و نادر (قطع اتصال شبکه، ارتقاء و موارد دیگر) را در بر می گیرد.
معمولا در محیط پروداکشن است، که با مسائل مربوط به جنبه های Non Functional مواجه می شوید. عوامل محیطی مانند اختلال شبکه در مرکز داده یا تاریخهای کلیدی در تجارت که میتواند باعث افزایش نامتعارف ترافیک شود، اغلب موقعیتهایی هستند که ممکن است در صورتی که برنامه نتواند با این رویدادها به خوبی برخورد کند، به بروز بحران منجر شوند. هنگامی که این فرآیند ها در حال اجرا هستند، آماده شدن برای آنها و پروسه ریکاوری عموما بسیار دشوار است.
جهت آمادهسازی برای رویدادهای غیرمنتظره و درک عملکرد برنامه در هنگام افزایش ترافیک یا خرابی محیط، میتوانید قبل از انتشار اپلیکیشن در محیط پروداکشن، ساز و کاری را برای تست های غیر عملکردی در پایپ لاین قرار دهید. این نوع از تست دسته بندی بزرگی را شامل میشود، پس برای هر دامنه آن ابزارهای مختلفی دارید که میتوانید در پایپ لاین CI/CD قرار دهید.
در بسیاری از شرکتها، امنیت تا زمانی که چرخه انتشار برنامه به فازهای پایانی میرسد، مورد توجه قرار نمیگیرد. با معرفی DevSecOps تمرکز بیشتری بر ادغام نقاط کنترل امنیتی در طول چرخه انتشار برنامه پدید میآید، به جای اینکه به عنوان یک ایده پسااجرا مطرح شود. با گنجاندن اسکن امنیتی در قالب پایپ لاین CI/CD، میتوانید با استفاده از اتوماسیون موجود به طور مداوم اجرای اسکن امنیتی را اعمال کنید. هر چه زودتر با آسیبپذیری های امنیتی مواجه شوید، هزینه رفع آنها کمتر خواهد بود. ابزارهای اسکن امنیتی مختلفی وجود دارد و تیمها از ابزارهای اسکن امنیتی متفاوتی استفاده میکنند.
ابزارهای تست امنیت ثابت (Static Application Security Testing) بر تجزیه و تحلیل کد در سورس کنترل تمرکز دارند. از جمله این ابزارها میتوان به SonarCube و Veracode اشاره کرد، که میتوانید به پایپ لاین خود اضافه کنید و آسیب پذیری های احتمالی در کد را در حین چرخه توسعه شناسایی کنید.
ابزارهای تست امنیت پویا (Dynamic Application Security Testing) برنامه ها را در حالت اجرا تحلیل میکنند. این تست کمک میکند تا آسیب پذیری هایی که فقط هنگام اجرای برنامه ظاهر میشوند را شناسایی کرد (مانند SQL Injection)
تکنولوژی اسکن کانتینر در چند سال اخیر به دلیل استفاده بیشتر تیمها از کانتینرهای لینوکس برای محیط های پروداکشن، محبوبیت بیشتری کسب کرده است. این ابزارها ایمیج های کانتینر را بررسی میکنند تا مسائل موجود در محتوایی که کانتینر را تشکیل میدهد، شناسایی شوند. از آنجایی که کانتینرها لایههای مختلفی دارند که هر کدام شامل پکیجها و پیکربندی خود هستند، بنابراین داشتن پلتفرمی که بتواند محتویات یک کانتینر را بررسی کند، اهمیت مییابد. از جمله این ابزارها میتوان به Stackrox, Aqua و Blackduck اشاره کرد.
هر اندازه رویکرد اسکن امنیتی پایپلاین های شما جامعتر باشد، جایگاه امنیتی کلی سازمان شما بیشتر خواهد بود. معرفی چک پوینت های زودهنگام و مکرر، روشی عالی برای تأثیرگذاری بر کیفیت نرمافزارهای منتشرشده است.
عموما در نرمافزار ها (بسته به مقدار Coupling یا در در هم تنیدگی که در کد وجود دارد) اعمال تغییرات در یک کامپوننت و اثر گذاری آن تغییر در کامپوننت های دیگر امری متعارف است. از آنجایی که نرمافزارهای امروزی شامل بخشهای متصل به هم متعددی هستند، ایجاد یک استراتژی تست Regression (بازگشتی) قوی بسیار مهم است.
این تست باید بخشی از هر انتشار برنامه باشد. باید بدون توجه به تغییراتی که در سیستم ایجاد شده است، تمرکز خود را بر روی اعتبارسنجی عملکرد موجود و کاربردی قرار دهید. بدون انجام این تست اشکالات و آسیبپذیریها ممکن است در اجزایی از سیستم ظاهر شوند که هیچ تغییری در آنها ایجاد نشده است. شناسایی و تشخیص این مشکلات پس از انتشار برنامه دشوارتر می شود و تیمهایی که عیبیابی میکنند ممکن است ندانند از کجا شروع کنند، به خصوص اگر انتشار حاوی تغییرات در کامپوننت های مشکل دار باشد.
عموما استراتژی این تست را میتوان به ۳ فاز مختلف تقسیم کرد:
ابزارهایی مانند Healenium به مهندسان کمک میکنند تا تستها را با تکامل برنامه بهروز نگه دارند.