راه‌اندازی «داشبورد VTS»

«داشبورد VTS» زیرینه کاربر و میانای کاربر (UI) برای مشاهده نتایج آزمایش از سیستم یکپارچه‌سازی مداوم VTS ارائه می‌دهد. این ابزار از توسعه آزمون‌محور با ابزارهایی مثل اعلان‌های وضعیت آزمون پشتیبانی می‌کند تا به توسعه‌دهندگان کمک کند مناطق پسرفت را درطول چرخه توسعه پیدا و از آن‌ها جلوگیری کنند (شامل پشتیبانی از پایش آزمون و اولویت‌بندی).

واسط کاربر «داشبورد VTS» از ویژگی‌های ارائه‌شده توسط زیرساخت VTS (مثل پوشش کد بومی) پشتیبانی می‌کند و پایش عملکرد پیوسته را برای فعال کردن توسعه ابزارهای عملکرد بهینه‌سازی‌شده و خوش‌تعریف ارائه می‌دهد.

الزامات

سرویس‌های زیر برای استفاده از «داشبورد VTS» لازم است:

مشاهده پوشش آزمایشی به REST API به سرور کد منبع (مثلاً Gerrit) متکی است که سرویس وب را قادر می‌سازد کد منبع اصلی را مطابق با فهرست‌های کنترل دسترسی موجود واکشی کند.

معماری

داشبورد VTS از معماری زیر استفاده می‌کند:

شکل ۱. معماری داشبورد VTS.

نتایج وضعیت آزمایش به‌طور پیوسته ازطریق میانای REST در پایگاه داده Cloud Datastore بارگذاری می‌شود. دونده VTS به‌طور خودکار نتایج را پردازش می‌کند و آن‌ها را بااستفاده از قالب Protobuf سریال‌سازی می‌کند.

کارسازهای وب نقطه دسترسی اصلی برای کاربران را تشکیل می‌دهند و داده‌ها را از پایگاه داده Datastore ارائه و پردازش می‌کنند. سرویس‌دهنده‌ها شامل این موارد است: سرویس‌دهنده اصلی برای ارائه همه آزمایش‌ها، سرویس‌دهنده اولویت‌ها برای مدیریت موارد دلخواه کاربر، سرویس‌دهنده نتایج برای پر کردن جدول آزمایش، سرویس‌دهنده نمودار برای آماده کردن داده‌های نمایه‌سازی، و سرویس‌دهنده پوشش برای آماده کردن داده‌های پوشش برای مشتری.

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

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

ساختار کد

عناصر ضروری «داشبورد VTS» شامل سرویس‌گرهای پیاده‌سازی‌شده در Java، فایل‌های پیکربندی، برگه‌های سبک CSS، و JSPهای پیش‌کار است. فهرست زیر مکان‌ها و شرح‌های این عناصر را به‌تفصیل بیان می‌کند (همه مسیرها نسبت به test/vts/web/dashboard است):

  • pom.xml
    فایل تنظیمات که متغیرهای محیطی و وابستگی‌ها در آن تعریف شده‌اند.
  • src/main/java/com/android/vts/api/
    حاوی نقاط پایانی برای تعامل با داده‌ها ازطریق REST است.
  • src/main/java/com/android/vts/entity/
    شامل مدل‌های جاوا از نهادهای Datastore است.
  • src/main/java/com/android/vts/proto/
    حاوی فایل‌های Java برای Protobuf، ازجمله VtsReportMessage.java، که یک پیاده‌سازی Java از نوع Protobuf است که برای توصیف نتایج آزمایش VTS استفاده می‌شود.
  • src/main/java/com/android/vts/servlet/
    حاوی فایل‌های Java برای سرویس‌دهنده‌ها است.
  • src/main/java/com/android/vts/util/
    شامل فایل‌های جاوا برای توابع و کلاس‌های کمکی است که توسط سرولت‌ها استفاده می‌شود.
  • src/test/java/com/android/vts/
    شامل آزمایش‌های میانای کاربر برای سرویس‌دهنده‌ها و ابزارها است.
  • src/main/webapp/
    شامل فایل‌های مربوط به رابط کاربری (JSP، CSS،‏ XML):
    • js/. حاوی فایل‌های جاوا اسکریپت مورداستفاده در صفحه‌های وب است.
    • ‫WEB-INF/. حاوی فایل‌های پیکربندی و میانای کاربر است.
    • jsp/. حاوی فایل‌های JSP برای هر صفحه وب است.
  • appengine-web.xml
    فایل تنظیمات که در آن متغیرهای محیطی در متغیرها بار می‌شود.
  • web.xml
    فایل تنظیمات که در آن نگاشت‌های سرویس‌دهنده و محدودیت‌های امنیتی تعریف شده است.
  • cron.xml
    فایل تنظیمات تعریف‌کننده تکالیف زمان‌بندی‌شده (یعنی خدمات اعلان).

راه‌اندازی داشبورد

برای راه‌اندازی «داشبورد VTS»:

  1. یک پروژه Google Cloud App Engine ایجاد کنید و میزبان استقرار را با نصب موارد زیر راه‌اندازی کنید:
    • Java 8
    • کیت توسعه نرم‌افزار Google App Engine
    • Maven
  2. یک شناسه کارخواه OAuth 2.0 در Google Cloud API Manager ایجاد کنید.
  3. «حساب خدمات» و فایل کلید بسازید.
  4. نشانی ایمیلی را به «فهرست فرستندگان مجاز میانای برنامه‌سازی کاربردی ایمیل App Engine» اضافه کنید.
  5. «حساب Google Analytics» را راه‌اندازی کنید.
  6. متغیرهای محیط را در «داشبورد» pom.xml مشخص کنید:
    • شناسه کارخواه را با شناسه OAuth 2.0 (از مرحله ۲) تنظیم کنید.
    • شناسه کارخواه سرویس را با شناسه موجود در فایل کلید (از مرحله ۳) تنظیم کنید.
    • نشانی ایمیل فرستنده را برای هشدارها مشخص کنید (از مرحله ۴).
    • دامنه ایمیلی را مشخص کنید که همه ایمیل‌ها به آن ارسال خواهد شد.
    • نشانی سرور Gerrit REST را مشخص کنید.
    • محدوده OAuth 2.0 را برای استفاده در سرور Gerrit REST مشخص کنید.
    • شناسه Google Analytics را (از مرحله ۵) مشخص کنید.
    • پروژه را بسازید و مستقر کنید.
  7. در پایانه، mvn clean appengine:update را اجرا کنید.

ملاحظات امنیتی

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

برای اجتناب از این تهدید، به‌جای ارائه کد منبع با اطلاعات پوشش، «داشبورد» مستقیماً بردار پوشش را مدیریت می‌کند (یعنی بردار تعداد اجرای مربوط به خطوط در فایل منبع). «داشبورد» علاوه‌بر بردار پوشش، نام و مسیر پروژه Git را نیز دریافت می‌کند تا کارخواه بتواند کد را از میانای برنامه‌سازی کاربردی منبع کد خارجی واکشی کند. مرورگر کارخواه این اطلاعات را دریافت می‌کند و از هم‌رسانی منبع میان‌مبدئی (CORS) در جاوا اسکریپت برای پرسمان از سرور کد منبع برای کد منبع اصلی استفاده می‌کند؛ کد حاصل با بردار پوشش ترکیب می‌شود تا نمایشگر تولید شود.

این رویکرد مستقیم سطح حمله را گسترش نمی‌دهد زیرا «داشبورد» از کوکی‌های کاربر برای اصالت‌سنجی با سرویس خارجی استفاده می‌کند (یعنی کاربری که نمی‌تواند مستقیماً به کد منبع دسترسی داشته باشد نمی‌تواند از «داشبورد» برای مشاهده اطلاعات حساس سوءاستفاده کند).