• تست وب سرویس

    الگوی محاسبات سرویس گرا (SOC) امکان تعامل سیستم های کامپیوتری با یکدیگر را فراهم می سازد. SOC اجازه می دهد اپلیکیشن های توزیع شده، مستقل از بستر پیاده سازی با یکدیگر ترکیب شوند و لذا هزینه ها کاهش پیدا کرده و توسعه سیستم‌ ها نیز راحت تر و سریع تر می گردد. در حال حاضر وب سرویس ها به دلیل عدم وابستگی به پلتفرم یا زبان برنامه نویسی یکی از پذیرفته شده ترین تکنولوژی های مبتنی بر سرویس هستند. در هر حال وب سرویس نیز چالش هایی دارد. برای مثال، تست client-side وب سرویس به دلیل ماهیت پیچیده وب سرویس و عدم دسترسی به کد منبع از تست دیگر نرم افزارهای سنتی سخت تر است. در این مقاله به بررسی تاریخچه تست وب سرویس، نقاط ضعف و قوت استراتژی های تست وب سرویس و شناسایی مسائل برای اقدامات آتی می پردازیم. تست وب سرویس شامل تست عملکردهای اصلی وب سرویس، تست تعامل پذیری وب سرویس، تست کارایی شامل تست بار و فشار، تست امنیت و غیره می باشد.

    تست وب سرویس

    تست وب سرویس

    1.ایجاد موارد آزمون (Test-Case)

    براساس استانداردهای تست IEEE، مورد آزمون عبارت است از "مشخصات ورودی های تست، نتایج مورد انتظار و شرایط اجرا برای هر آیتم تست". بنابراین برای ایجاد موارد آزمون ابتدا باید ورودی های آزمون را ایجاد نمود. برای ایجاد ورودی های تست باید به سیستمی که می خواهیم تست کنیم توجه نموده و با بررسی مواردی از جمله رفتار سیستم، مشخصات سیستم، سورس کد، نیازمندی های سیستم و غیره ورودی های تست را به دست آوریم. در تست وب سرویس ها، از دو روش تست مبتنی بر مشخصات (specification-based) و مبتنی بر مدل (model-based) برای تولید ورودی های آزمون استفاده می شود.

    تست وب سرویس

    ایجاد موارد آزمون

    تست مبتنی بر مشخصات، صحت سنجی سیستم را با استفاده از سندهای مرجع مثل مشخصات رابط کاربری، لیست نیازمندی ها، سند طراحی و غیره بررسی می کند. به طور معمول تست مبتنی بر مشخصات، تنها با سندهایی که برای سیستم موجود است قابل اجراست و مواردی که در اسناد نیامده باشند قابل تست نیستند. در وب سرویس از مهم ترین سندهایی که باید بررسی شوند WSDL specifications و XML Schema Datatype هستند.

    2.تست پارتیشن (Partition Testing)

    تست پارتیشن یک تکنیک تست است که هدف از آن یافتن زیرمجموعه هایی از موارد آزمون موجود است که بتواند به اندازه کافی یک سیستم را تست کند. هدف از تست پارتیشن آن است که دامنه ورودی سیستم تحت تست را به زیر دامنه هایی تقسیم نمود. بنابراین انتخاب یا ایجاد تعدادی از موارد آزمون از هر زیر دامنه برای تست کل دامنه کافی خواهد بود. نتایج نشان می دهد که تست پارتیشن می تواند با کاهش تعداد موارد آزمون مورد نیاز برای تست و در نتیجه کاهش تعداد تست ها، منجر به کاهش هزینه های تست شود[1].

    تست وب سرویس

    تست پارتیشن

    3.تست واحد وب سرویس (Unit Testing of Web Services)

    تست واحد می تواند یک روش تست پایه برای هر سیستم باشد. در تست واحد، واحدهای مجزای یک سیستم که می توانند به صورت مستقل اجرا شوند، به عنوان پایه در نظر گرفته می شوند. از دیدگاه وب سرویس ، عملیات ارائه شده توسط یک سرویس می تواند به عنوان واحد تحت تست مورد توجه قرار گیرد. تست واحد وب سرویس ، با ارسال و دریافت پیام های SOAP توسط تستر انجام می شود. تستر پیام های SOAP را از طریق اطلاعات فایل WSDL برای عملیات تحت آزمون تولید می کند. در این روش تست واحد می تواند صحت WSDL و عملکرد درست سیستم تحت تست را تأیید کند.
    یکی از مسائل اصلی آزمون عملکردی وب سرویس، هزینه بالای آن است[1]. تست واحد یکی از مهمترین سطوح تست است که هر سیستم نرم افزاری اصولا باید از آن استفاده نماید. چالش اصلی در تست واحد وب سرویس، هزینه های بالای تست است که می تواند با خودکار سازی فرآیند تست به حداقل برسد. برای تست واحد، ابزارهایی برای ارائه تست های خودکار مانند Parasoft SOAtest ، SOAP Sonar، HP service Test و Oracle Application Testing Suite ارائه شده است. با اینکه این ابزارها به کاهش کار دستی مورد نیاز برای تولید موارد آزمون و تهیه گزارشات تست کمک می کنند، ولی روند تست اتوماتیک را به طور کامل انجام نمی دهند. در استفاده از تمام این ابزارها، موارد آزمون توسط تستر تولید و ابزار، درخواست های SOAP را برای هر مورد آزمون تولید می کند.

    تست وب سرویس

    تست واحد وب سرویس


    یکی از مشکلات عمده تست نرم افزار، مشکل اوراکل است [3 ، 2]. اوراکل مکانیزمی است که برای تعیین خروجی مورد انتظار برای هر ورودی آزمون مورد استفاده قرار می گیرد. در تست وب سرویس، کاربر سرویس اغلب هیچ تست قابل اعتمادی از اوراکل ندارد. عدم وجود یک تست اوراکل یکی از چالش های تست وب سرویس خودکارسازی شده است.

    4.تست مبتنی بر مدل و تأیید رسمی وب سرویس

    تست مبتنی بر مدل یک روش تست است که در آن موارد آزمون با استفاده از یک مدل که رفتار سیستم تحت تست را توصیف می کند، تولید می شوند. مزایای تست مبتنی بر مدل، از قبیل فرآیند تولید اتوماتیک موارد آزمون و توانایی تحلیل کیفیت محصول به صورت ایستا، آن را یک روش تست محبوب کرده است.

    4-1. تست مبتنی بر مدل با استفاده از اجرای نمادین (Symbolic Execution)


    اجرای نمادین به عنوان مبنایی برای یک روش تایید استفاده می شود که بین تایید رسمی و غیر رسمی قرار دارد. در آزمون نمادین، سیستم تحت تست بطور نمادین با استفاده از مجموعه ای از ورودی های انتزاعی به جای مجموعه ورودی های واقعی آزمون اجرا می شود. یک کلاس ورودی انتزاعی، به عنوان یک نماد، نشان دهنده مجموعه ای از مقادیر ورودی ممکن است. خروجی اجرای نمادین به صورت یک تابع از ورودی تولید می شود.
    یک روش نمونه که با استفاده از اجرای نمادین موارد آزمون تولید می کند، روش BZ-Testing-Tools (BZ-TT) است [4]. روش BZ-TT مشخصات B و Z و State-chart را به عنوان ورودی می گیرد و بر روی آنها چندین استراتژی تست مانند تجزیه پارتیشن، تست اثر علت، تست مرزی، تست دامنه و چندین تست مدل پوشش، مانند شرایط چندگانه پوشش مرزی و پوشش انتقال را انجام می دهد.

    4-2. تست مبتنی بر مدل با استفاده از وارسی مدل (Model-Checking)


    وارسی مدل یک روش تایید رسمی است و به عنوان یک روش برای تایید سیستم های همزمان حالت محدود به کار می رود [5]. وارسی مدل اطمینان می دهد که آیا مدل سیستم می تواند خواص داده شده را به صورت یک منطق زمانی انطباق دهد یا خیر. برای انجام وارسی مدل، یک ابزار به نام Checker Model مورد استفاده قرار می گیرد. در طول فرایند اثبات، model checker مدارک و مثال نقض برای ویژگی ارائه شده را تشخیص می دهد. مدارک و مثال نقض، مسیری در مدل اجرایی هستند. یک مدرک، مسیری است که ویژگی های آن رضایت بخش است، در حالی که یک مثال نقض، یک مسیر یعنی دنباله ای از ورودی هاست که در آن سیستم حالت محدود، خود را از حالت اولیه به حالتی که در آن مالکیت نقض شده است، می برد. مثال های نقض برای تولید موارد آزمون مورد استفاده قرار می گیرند.

    تست وب سرویس

    تست مبتنی بر مدل با استفاده از وارسی مدل

    4-3. تست مبتنی بر مدل با استفاده از Petri-Net

    Petri-Net (Place / Transition Net) یک روش مدل سازی ریاضی و گرافیکی برای تعیین و تحلیل سیستم های همزمان، غیر همزمان، توزیع شده، موازی، غیرمتمرکز و تصادفی است [6] Petri-Net . تحلیل های مختلفی را برروی مدل مانند دسترسی، محدودیت، بن بست ، زنده بودن، برگشت پذیری، عدالت و تحلیل حفاظت امکان پذیر می سازد. Petri-Net همچنین می تواند برای اندازه گیری پوشش موارد آزمون استفاده شود. Petri-Net برای تست مبتنی بر مدل وب سرویس نیز مورد استفاده قرار می گیرد. به عنوان مثال، دونگ و یو روش تست Petri-Net را مطرح کرده اند که در آن High level Petri-Net (HPN)، مشابه Petri-Net ها از فایل های WSDL ساخته شده است[7 , 8]. این روش از HPNs تولید شده برای پوشش خطای بالا (fault-coverage) استفاده می کند. موارد آزمون با استفاده از HPNs و ایجاد داده های تست مبتنی بر محدودیت (constraint) تولید می شود. محدودیت های تعریف شده توسط کاربر برای انواع داده XML و محدودیت های مبتنی بر خط مشی مشخص شده توسط تستر، محدودیت های لازم برای تولید داده های تست را فراهم می کند.

    تست وب سرویس

    مدل شبکه پتری

    تست مبتنی بر مدل یک روش تست محبوب است. تست مبتنی بر مدل، یک سیستم را با استفاده از مدلی تست می کند که رفتار مورد انتظار سیستم تحت تست را برای تست هدف به شکلی مناسب توصیف کند. برای ترکیبات BPEL، یک مدل که می تواند به اندازه کافی نمایانگر فرایند باشد، ایجاد شده و بدین ترتیب تست های مبتنی بر مدل و تأیید رسمی اعمال می شود. تأیید رسمی گردش کارهای یک موضوع به طور گسترده مورد بررسی قرار گرفته است و محبوبیت این موضوع در میزان کارهایی که درباره تایید رسمی BPEL صورت گرفته است، منعکس می شود. متاسفانه، یک مدل مبتنی بر مشخصات WSDL ممکن است رفتار کاملی از وب سرویس را به دلیل کمبود اطلاعات رفتاری نشان ندهد. از سوی دیگر، مشخصات وب سرویس معنایی مانند OWL-S و WSDL-S اطلاعات بیشتری را در مورد رفتار ارائه می دهد و اجازه می دهد که یک مدل بهتر از سیستم تحت تست ایجاد شود ولذا امکان تست موثرتری بر اساس مدل فراهم گردد.

    5. تست مبتنی بر قرارداد وب سرویس ها (Contract-Based)

    DBC یک شیوه توسعه نرم افزار است که در آن قراردادها، پیش شرایط یک مولفه قابل دسترس را تعریف می کنند و همچنین پس شرایطی را که باید پس از اجرای متدهای مولفه با پیش شرایط مشخص شده نگه داشته شود، تعیین می کنند[10]. با استفاده از قراردادها، برخی از رفتارهای غیرمنتظره سیستم تحت تست را می توان تشخیص داد. اطلاعات مربوط به قرارداد نیز می تواند برای افزایش فرایند تست استفاده شود. از آنجایی که وب سرویس سنتی فقط اطلاعات رابط را فراهم می کند، محققان پیشنهاد استفاده از قراردادها را در جنبه های مختلف SOA مانند انتخاب خدمات، ساختار سرویس و تأیید سرویس پیشنهاد کرده اند. این قراردادها اطلاعاتی در مورد جنبه های مختلف SOA مانند رفتار سرویس و کیفیت سرویس را ارائه می دهد. این اطلاعات اضافی در مورد رفتار یک سرویس مانند پیش شرایط و پس شرایط عملیات، تست پذیری خدمات را افزایش می دهد. این نوع اطلاعات برای تست بسیار ارزشمند است. تست های وب سرویس با استفاده از قراردادها توسط بسیاری از محققین انجام شده است. برای مثال Heckel و Lochmann استفاده از روش DBC را برای وب سرویس پیشنهاد داده اند و در مورد دلایل قراردادهایی که در سطوح مختلف مانند سطح پیاده سازی، سطح XML و سطح مدل در نظر گرفته شده، بحث نموده اند[11]. قراردادهای تعریف شده در سطح مدل از خصوصیات سطح مدل استخراج شده و دلیل آن به حداقل رساندن تلاش لازم برای ایجاد قرارداد است. قرارداد های ایجاد شده در تست واحد سرویس ها، برای بررسی اینکه آیا سرویس مطابق با مشخصات آن است، استفاده می شود. با استفاده از قراردادها، روش تست پیشنهاد شده امکان ایجاد خودکار موارد آزمون و تست اوراکل را فراهم می سازد.
    تست های مبتنی بر قرارداد وب سرویس می تواند تست بهتر و کارآمدتری نسبت به تست مبتنی بر WSDL را ارائه نماید طوریکه تست پذیری افزایش یابد. همچنین اجازه می دهد تا تولید موارد آزمون خودکار و ایجاد تست اوراکل کارآمدتر باشد. صرف نظر از مزایایی که قراردادها ارائه می دهند، هزینه ایجاد قراردادها باعث می شود که DBC به طور گسترده ای مورد استفاده قرار گیرد.

    6. تست مبتنی بر خطای وب سرویس

    هدف از آزمون مبتنی بر خطا آن است که اثبات کند سیستم تحت تست، هیچ خطای مجازی ندارد [12]. تفاوت بین موارد آزمون مبتنی بر خطا و موارد آزمون معمول، آن است که موارد آزمون مبتنی بر خطا، به جای تلاش برای یافتن خطاهای موجود، خطای شناخته شده را ثابت می کنند. تست مبتنی بر خطا می تواند سرویس های وب را برای خطاهای معمولی که می تواند در محیط SOA وجود داشته باشد و قابلیت اطمینان سرویس را افزایش دهد، تحت بررسی قرار دهد. هانا و مونرو تولید داده تست را برای تکنیک های تست مختلف طبقه بندی کرده و همچنین تحقیقات تستی مبتنی بر خطا را در حوزه وب سرویس انجام داده اند[13]. این تکنیک های تست عبارتند از:

    1. تحلیل انتشار رابط که توسط برهم زدن تصادفی ورودی به یک مولفه نرم افزار انجام میشود.
    2. تست ثبات مبتنی بر مقدار مرزی که در آن داده های آزمون در اطراف مرزهای پارامتر ورودی انتخاب می شوند.
    3. تست syntax با ورودی نامعتبر که در آن قوانین مشخصات پارامتر ورودی نقض می شوند.
    4. پارتیشن بندی هم ارز با کلاس پارتیشن معتبر که در آن فضای ورودی یا دامنه به تعداد محدودی از کلاس های هم ارز با داده های نامعتبر تقسیم می شود.

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

    اختلالات پیام XML / SOAP

    تزریق خطای سطح شبکه

    تغییر مشخصات وب سرویس

    6-1. اختلال XML / SOAP

    اختلالات XML / SOAP با ضبط پیام های SOAP بین سرویس ها و کاربران آنها انجام می شود. پیام هایی که شامل خطا هستند، به وسیله تزریق خطا به پیام های ارسال شده ، قبل از ارسال آنها یا فقط با ارسال پیام SOAP معیوب به وب سرویس ایجاد می شوند. پس از اختلال (Perturbation)، رفتار وب سرویس با پیام معیوب جهت تأیید مشاهده می شود.
    یکی از اولین نمونه های اختلال SOAP توسط Offutt و Xu پیشنهاد شده است [25]. Offutt و Xu سه نوع اختلال مختلف را پیشنهاد داده اند.

    1. اختلال ارزش داده (DVP) که توسط اصلاح مقادیر در یک پیام SOAP انجام می شود.
    2. روش های از راه دور باعث اختلال در ارتباطات (RCP) می شود که با اصلاح استدلال روش های از راه دور انجام می شود.
    3. اختلالات ارتباطات داده (DCP)که برای تست پیام هایی که شامل روابط و محدودیت های پایگاه داده هستند، استفاده می شود.

    نتایج حاصل از اختلالات SOAP ، اثربخشی این رویکرد را در آشکار سازی خطاها در خدمات وب اثبات کرده است. به عنوان مثال در آزمایشات Offutt و Xu، 18 خطا در سیستم ارتباطات ربات مارپیچ (MRCS) قرار می گیرند و صد تست DVP و پانزده تست RCP و 27 تست DCP تولید می شوند. تست های تولید شده، میزان نرخ کشف خطای 78٪ در خطاهای بذرافشانی شده را به دست آورده (14 از 18) و همچنین دو خطای طبیعی را نشان داده است.

    6-2. تزریق خطای سطح شبکه

    تزریق خطای سطح شبکه (NLFI) ، یک روش تزریق خطاست که در آن خطاها با تخریب، رها کردن و مرتب سازی بسته های شبکه تزریق می شوند. Looker و همکاران استفاده از این تکنیک را همراه با چارچوبی به نام ابزار تزریق خطای وب سرویسپیشنهاد می کنند. تزریق تاخیر در سطح شبکه را می توان با اختلال SOAP انجام داد [14]. WS-FIT می تواند هر دو اختلال SOAP و تزریق تاخیر را انجام دهد. Looker و همکاران همچنین یکی دیگر از روش های تزریق خطا را پیشنهاد می دهند که یک سرویس معیوب را شبیه سازی می کند. تزریق سرویس معیوب با جایگزینی مقادیر در پیام های SOAP با مقادیر اشتباه و در محدوده مشخص از پارامتر انجام میشود. Looker و همکاران همچنین یک آنتولوژی مدل خطای توسعه یافته را پیشنهاد می کنند که برای تولید خطاها و حالت های شکست استفاده می شود، و آنتولوژی نوع خطاها را مشخص می کند.

    تست وب سرویس

    اختلال SOAP با قرار دادن پارامترهای اشتباه

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

    6-3. تغییر مشخصات وب سرویس (Mutation)

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

    تست وب سرویس

    تغییر مشخصات وب سرویس

    اپراتورهای تغییر در وب سرویس به طور کلی مشخصات وب سرویس را به کارمی برند. مشخصات WSDL اجازه ایجاد تغییر در سطح رابط را می دهد. سطوح دیگری از تغییر مانند کد منبع یا سطح شیء به علت محدودیت در SOA، در جامعه محققان در نظر گرفته نمی شود. نمره تغییر در سطح رابط با تعداد اشتباهاتی که در هنگام اجرای موارد آزمون به وجود می آید، با استفاده از رابط های معیوب تعیین می شود.
    به طور طبیعی، یکی از اولین نمونه های تست تغییر وب سرویس به مشخصات WSDL اعمال می شود. سیبلی و منصور استفاده از تغییر WSDL را برای تشخیص خطاهای رابط در سرویس های وب پیشنهاد داده اند[15]. برای تولید مشخصات وب سرویس تغییر یافته، 9 اپراتور تغییر برای سه گروه مختلف از عناصر WSDL تعریف شده است:

    1. انواع المان ها: هفت اپراتور مختلف برای این عنصر وجود دارد.

    الف) تغییر نوع در نوع داده پیچیده

    ب) تغییر ویژگی های یکسان در نوع داده پیچیده

    پ) اضافه یا حذف عنصر در یک نوع داده پیچیده

    ت) اضافه یا حذف یک ویژگی اختیاری در یک نوع داده پیچیده

    ث) تنظیم ویژگی nil در یک نوع داده پیچیده

    ج) تغییر عناصر انواع داده های مشابه

    چ) تغییر ویژگی های انواع داده های مشابه

    2. المان پیام: سوئیچ کردن قطعات بین انواع پیام های مشابه

    3. المان PortType : سوئیچ پیام های مشابه در المان عملیات

    H. Mei و L. Zhang اپراتور تغییر را برای قرارداد تعریف کرده اند. قراردادهای این رویکرد در مشخصات WSDL گسترش یافته گنجانده شده است[16]. قراردادهای تغییر یافته در انتخاب داده های آزمون استفاده می شوند. اپراتورهای تغییر تعریف شده توسط H. Mei و L. Zhang عبارتند از:

    1. اپراتور تخفیف قرارداد
    2. اپراتور مبادله وضعیت
    3. اپراتور تضعیف پیش شرط
    4. اپراتور تقویت پس شرط
    5. قرارداد گیرنده اپراتور

    گام بعدی در تست تغییر وب سرویس، تغییر در وب سرویس معنایی بود. مقدار اطلاعاتی که توسط OWL-S ارائه می شود، امکان استفاده از اپراتورهای تغییر در سطوح مختلف را نسبت به تغییر WSDL فراهم می کند. به عنوان مثال، لی و همکاران یک تغییر مبتنی بر آنتولوژی را برای اندازه گیری مناسب آزمون معنایی برای خدمات وب ترکیبی و جهت شناسایی خطاهای معنایی پیشنهاد داده اند [17]. لی و همکاران چهار نوع تغییر برای OWL-S تعریف نموده اند:

    1. تغییر داده ورودی / خروجی که در آن اپراتورهای تغییر، تعاریف کلاس آنتولوژی OWL را تغییر می دهد
    2. تغییر شرایط که در آن اپراتور تغییر، مشخصات شرایط را تغییر می دهد
    3. کنترل جریان تغییر که در آن اپراتور تغییر، یک ساختار کنترل را با یک جایگزین معتبر، جایگزین می کند.
    4. تغییر جریان داده ها که در آن اپراتورهای تغییر تعاریف و خواص وابستگی های مختلف را تغییر می دهد

    تست وب سرویس

    کلاس های انتخابی و خواص نمایه

    R. Wang و N. Huang یک تست تغییردیگری مبتنی بر آنتولوژی را پیشنهاد داده اند که از مدل الزامات OWL-S استفاده می کند[18]. R. Wang و N. Huang یک نسخه اصلاح شده از الگوی مورد نیاز را با زبان معنایی وب (SWRL) به منظور کمک به تولید تغییر ارائه نموده اند[19]. رویکرد پیشنهادی از محدودیت های اعمال شده در این مدل، برای تولید تغییر ها با استفاده از رویکرد برنامه ریزی جهت گرا استفاده می کند. AOP اجازه می دهد که به منبع کد اصلی برای تولید تغییر نیاز پیدا کند. R. Wang و N. Huang هشت اپراتور مختلف تغییر را تعریف کرده اند:

    1. پارامتر خالی که جایگزین پارامترهای یک روش با رشته خالی یا مقدار صفر است
    2. پارامتر مبادله که پارامترهای یک روش را مبادله می کند
    3. وارد کردن اپراتور غیرمستقیم که عملگرها را به پارامترها اعمال می کند
    4. تغییر پارامتر که عملگر تغییر را به پارامترها اعمال می کند
    5. تغییر طول پارامتر که محدودیت هایی را که طول نوع داده ها را تعریف می کنند، تغییر می دهد.
    6. تخصیص پارامتر که پارامترها را به مقادیر مرزی خود با استفاده از محدودیت های تعریف شده ،تنظیم می کند
    7. زمان پاسخگویی به سرویس فرزند که اگر یک محدودیت زمان تعریف شود، فراخوانی درخواست خدمات دیگر را به تاخیر می اندازد
    8. مبادله رابط سرویس فرزند که جایگزین واسط های خدماتی است که در زمان فراخوانی مورد استفاده قرار می گیرند

    با توجه به نتایج رویکردهای پیشنهادی، آزمون تغییر (موتاسیون) برای سنجش کفایت مورد آزمون در خدمات وب مؤثر است. امتیاز موتاسیون، در تغییر WSDL Mei و Zheng به 95٪، در تغییر OWL-S متعلق به Wang و Huang به 98.7٪ و در تغییر OWL-S لی و همکاران به 99.4٪ رسید [16 , 17 , 18]. نتایج همچنین اثر بخشی آزمون تغییر در انتخاب سوییت آزمون را اثبات نموده است. رویکرد Mei و Zheng با کاهش 96٪ و 81.5٪ در موارد آزمون در حالی که پوشش تست حفظ شده باشد، همراه بود.
    تست مبتنی بر خطای وب سرویس ، زمانی که سرویس گیرنده می خواهد خطاهای رایج مانند خطاهای رابط، خطاهای معنایی و خطاهای ناشی از پلت فرم وب سرویس را بررسی کند، می تواند یک روش تست بسیار موثری باشد.

    7. تست مشترک (Collaborative)

    تست مشترک نرم افزار، مفهومی است که در آن چندین گروه در یک وب سرویس، مانند توسعه دهنده، تستر و کاربر، در فرایند تست شرکت می کنند. تست مشترک معمولا در تکنیک های تست استفاده می شود. چالش هایی که شامل تست سیستم های سرویس گرا هستند توسط Canfora و Di Penta شناسایی شده است و برخی از این چالش ها نیازمند راه حل های مشارکتی است[1]. چالش هایی که ممکن است نیاز به راه حل های مشارکتی داشته باشند عبارتند از:

    1. کاربرانی فاقد سوییت آزمون واقعی
    2. کاربران فاقد رابط کاربری برای تست سیستم های وب سرویس
    3. نیاز به تست شخص ثالث و تایید QoS به جای تست توسط هر کاربر سرویس

    تست وب سرویس

    تست مشترک نرم افزار

    رویکردهای تست مشترک پیشنهاد شده، برای حل برخی از چالش های درگیر در تست وب سرویس است. مزایای ادعا شده از این رویکردها، ضرورت تست مشترک در محیط های سرویس گرا را ثابت می کند.

    8. تست رگرسیون وب سرویس

    تست رگرسیون استفاده مجدد از موارد آزمون موجود از تست های قبلی سیستم است. تست رگرسیون زمانی انجام می شود که یک سیستم موجود اصلاح شود یا چیزی به آن اضافه شود. در تست رگرسیون سنتی فرض می شود که تستر به کد منبع دسترسی داشته و تست رگرسیون با روش سفارشی انجام می شود. انجام تست رگرسیون جعبه سفید، به طور عمده به مدیریت موارد آزمون کمک می کند.
    تعدادی از روش های مدیریت موارد آزمون و روش های اولویت بندی مانند روش اجرای نمادین و رویکرد مبتنی بر برش پویا، دسترسی تسترها به کد منبع را نیاز دارند. با این حال، روشی مانند رویکرد GWA که نیازی به دسترسی به کد منبع ندارد، می تواند در تست رگرسیون وب سرویس (WSRT) استفاده شود[20]. دلیل مهم برای تشخیص روش های انتخاب رگرسیون (RTS) که نیاز به دسترسی به کد منبع دارند، مشخص کردن روش های RTS مناسب برای آزمایش وب سرویس است. از آنجایی که تست وب سرویس به عنوان یک تست جعبه سیاه محسوب می شود، روش های RTS که نیاز به دسترسی به کد منبع دارند، برای سرویس های وب غیرقابل استفاده هستند.

    تست وب سرویس

    تست رگرسیون وب سرویس

    یکی از مسائل اصلی در WSRT آن است که کاربر نمی داند چه زمانی تست رگرسیون را اجرا کند [1]. از آنجا که کاربر سرویس هیچ کنترلی بر تکامل وب سرویس ندارد، ممکن است از تغییرات در وب سرویس اطلاع نداشته باشد. دو سناریو ممکن برای اطلاع دادن به کاربر سرویس در مورد تغییرات وجود دارد. این سناریوها بر اساس دانش ارائه دهنده سرویس، در مورد کاربران سرویس است.
    اولین سناریو زمانی رخ می دهد که سیستم تحت تست با یک کارگزار UDDI ثبت می شود. سرویس اشتراک در UDDI نسخه سه، آگاه شدن خودکار کاربران را هنگام تغییر یک سرویس، امکان پذیر می سازد. برای سرویس ارائه شده فرض می شود که ارائه دهنده سرویس جزئیات کاربران سرویس را از طریق روش های صورتحساب و یا موافقت نامه های سرویس به دست می آورد. در این سناریو اطلاع دادن به کاربران سرویس در مورد تغییرات وب سرویس مشکل نخواهد بود. با این حال، هنوز یک جای کوچک برای خطا وجود دارد. اگر کاربران سرویس به درستی در مورد تغییر روش های وب سرویس مطلع نشده باشند، ممکن است یک سری تست ها را انجام دهند؛ حتی اگر توابع مورد استفاده آنها تحت تاثیر قرار نگیرند یا به دلیل کمبود اطلاعات ، اجرای تست های ضروری با شکست روبه رو شود.
    سناریوی دوم زمانی رخ می دهد که وب سرویس نیاز به تست رگرسیون دارد. یک وب سرویس عمومی بدون ثبت نام UDDI است و ارائه دهنده اطلاعاتی در مورد کاربران آن ندارد. این سناریو مشکل ساز است، زیرا کاربر سرویس تنها می تواند با مشاهده خطاها در رفتار سیستم یا تغییرات در عملکرد سیستم، از تغییرات آگاهی پیدا کند. در طول تغییرات یک سرویس و کاربر آن، ممکن است به دلیل خطاها یا کاهش کیفیت سرویس، کشف تغییرات، اعتماد به سرویس کاهش یابد.
    چالش دیگری در WRST مسائل همروندی (concurrency) است که ممکن است در حین تست به وجود آید. زیرا تستر روی همه وب سرویس مشترک کنترل ندارد. مشکل مربوط به این مسئله محلی سازی خطا نامیده می شود. در طول فرایند تست رگرسیون، اگر یک تستر در مورد تغییراتی در وب سرویس،که توسط سیستم تحت تست فراخوانی می شود، اطلاع نداشته باشد، خطاهای ناشی از این سرویس را می توان به عنوان خطاهای سیستم تحت تست مشاهده کرد.
    روش های پیشنهادی توسط محققان معمولا در روش گراف های جریان کنترل(CFG) متفاوت هستند. CFG یک زبان نمایشی است که از نماد گراف برای نشان دادن تمام مسیرهایی که ممکن است در طی اجرای برنامه نادیده گرفته شود استفاده می کند [21].

    تست وب سرویس

    برخی مثال های ساده شده گراف جریان کنترل

    9. تست تعاملات وب سرویس (Interoperability)

    تعاملات، قابلیت مولفه های چندگانه برای همکاری با یکدیگر، یعنی برای تبادل اطلاعات و پردازش اطلاعات مبادله شده است. تعامل یک مسئله بسیار مهم در پلت فرم های باز مانند SOA است. با وجود اینکه وب سرویس باید با پروتکل های استاندارد و مشخصات سرویس مطابقت داشته باشند، مسائل ناسازگاری هنوز هم ممکن است بوجود آیند.
    نیاز به قابلیت تعامل وهمکاری در میان مشخصات سرویس توسط صنعت و سازمان صنعتی WS-I ، که توسط شرکت های پیشرو فناوری اطلاعات تشکیل شده، به رسمیت شناخته شده است. این سازمان یک سند استاندارد WS-I را برای تطبیق قابلیت همکاری وب سرویس تعریف کرد[22]. سازمان WS-I سناریوهای همکاری را که باید مورد تست قرار گیرند، و تعدادی از ابزارهای کمک به فرآیند تست را ارائه می دهد.

    تست وب سرویس

    تست تعاملات وب سرویس

    محققان همچنین نیازمند تست قابلیت همکاری در میان سرویس ها هستند. به عنوان مثال، بارتولینو و پولینی چارچوبی را پیشنهاد می دهند که قابلیت همکاری سرویس را با استفاده از سرویس فایل WSDL همراه با پروتکل PSM ارائه می کند[23 ,24]. نمودار PSM اطلاعاتی را براساس دستور فراخوانی عملیات برای یک سرویس شامل می شود. چارچوب پیشنهادی، نظم اعلان وب سرویس را در بین وب سرویس های مختلف بررسی می کند و تلاش می کند تا مشکلات احتمالی قابلیت همکاری را مشخص کند.

    10. تست یکپارچه سازی وب سرویس

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

    11. نتیجه گیری

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

    1. میزان مورد نیاز تست
    2. تست بدون اختلال در عملکرد سرویس
    3. تعیین زمانی که تست مورد نیاز بوده و اینکه کدام عملیات باید مورد آزمایش قرار گیرد

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

    شرکت مهندس پیشگان آزمون افزار یاس، خدمات زیر را در حوزه تست وب سرویس ارائه می دهد:

    تست عملکردی وب سرویس

    تست پرفورمنس (تست بار و فشار) وب سرویس

    تست امنیت و نفوذ وب سرویس

    برون سپاری تست نرم افزارهای وب سرویسی

    ارائه مشاوره در حوزه تست وب سرویس

    ارائه استاندارد، متدولوژی، ابزار و چک-لیست در حوزه تست وب سرویس

    تهیه و آموزش ابزار SOATest برای تست عملکردی وب سرویس

    تهیه و آموزش ابزار WPLT برای تست کارایی (تست بار و فشار) وب سرویس

    تهیه و آموزش ابزار WebInspect و AppScan برای تست نفوذ وب سرویس

    بررسی کیفیت و امنیت نرم افزارهای وب سرویسی از طریق ابزارهای تحلیل ایستا (مرور سورس کد) همچون Checkmarx

  • مانیتور کردن شاخص های کارایی وب سرویس از طریق ابزارهای مدیریت کارایی همچون AppDynamics


    نویسنده : شرکت مهندس پیشگان آزمون افزار یاس


    مراجع

    [1]-G. Canfora and M. Di Penta, “Testing services and service-centric systems: challenges and opportunities,” IT Professional, vol. 8, pp. 10–17, March 2006.

    [2]-W. T. Tsai, Y. Chen, Z. Cao, X. Bai, H. Huang, and R. A. Paul, “Testing web services using progressive group testing,” in Advanced Workshop on Content Computing (AWCC 2004) (C.-H. Chi and K.-Y. Lam, eds.), vol. 3309 of Lecture Notes in Computer Science, pp. 314–322, Zhenjiang, Jiangsu, China, 2004, Springer.

    [3]-R. Shukla, D. Carrington, and P. Strooper, “A passive test oracle using a component’s API,” in APSEC ’05: Proceedings of the 12th Asia-Pacific Software Engineering Conference, pp. 561–567, Tapei, Taiwan, Dec. 2005, IEEE Computer Society.

    [4]-B. Legeard, “BZ-Testing-Tools: Model-based test generator,” in The 18th IEEE International Conference on Automated Software Engineering (ASE 2003) - Demo Paper, Montreal, Canada, Oct. 2003.

    [5]-E. M. Clarke and B.-H. Schlingloff, “Model checking,” in Handbook of Automated Reasoning (J. A. Robinson and A. Voronkov, eds.), vol. 2, ch. 24, pp. 1635–1790, Amsterdam, The Netherlands: Elsevier Science Publishers B. V., 2001.

    [6]-T. Murata, “Petri nets: Properties, analysis and applications,” Proceedings of the IEEE, vol. 77, pp. 541– 580, Apr 1989.

    [7]-W.-L. Dong and H. YU, “Web service testing method based on fault-coverage,” in EDOC Workshops: The 10th IEEE International Enterprise Distributed Object Computing Conference (EDOC’06), pp. 43–43, Hong Kong, China, Oct. 2006, IEEE Computer Society.

    [8]-High-level Petri Nets - Concepts, Definitions and Graphical Notation, [Online] http://www.petrinets.info/docs/pnstd-4.7.1.pdf.

    [9]-Y. Wang, X. Bai, J. Li, and R. Huang, “Ontology-based test case generation for testing web services,” in ISADS ’07: Proceedings of the Eighth International Symposium on Autonomous Decentralized Systems, pp. 43–50, Sedona, AZ, USA, Mar. 2007, IEEE Computer Society

    [10]-B. Meyer, “Applying ‘Design by Contract’,” Computer, vol. 25, pp. 40–51, Oct 1992.

    [11]-R. Heckel and M. Lohmann, “Towards contract-based testing of web services,” in Proceedings of the International Workshop on Test and Analysis of Component Based Systems (TACoS 2004), vol. 116, pp. 145– 156, Barcelona, Spain, March 2005. Proceedings of the International Workshop on Test and Analysis of Component Based Systems (TACoS 2004).

    [12]-L. J. Morell, “A theory of fault-based testing,” IEEE Transactions on Software Engineering, vol. 16, no. 8, pp. 844–857, 1990.

    [13]-S. Hanna and M. Munro, “Fault-based web services testing,” in ITGN: 5th International Conference on Information Technology: New Generations (ITNG 2008), pp. 471–476, Las Vegas, NV, USA, April 2008, IEEE Computer Society.

    [14]- L. Li, W. Chou, and W. Guo, “Control flow analysis and coverage driven testing for web services,” in ICWS ’08: Proceedings of the 2008 IEEE International Conference on Web Services, pp. 473–480, Beijing, China, Sept. 2008, IEEE Computer Society

    [15]-R. Siblini and N. Mansour, “Testing web services,” in Proceedings of the 3rd ACS/IEEE International Conference on Computer Systems and Applications, p. 135, Cairo, Egypt, Jan. 2005, IEEE Computer Society

    [16]-H. Mei and L. Zhang, “A framework for testing web services and its supporting tool,” in SOSE ’05: Proceedings of the 2005 IEEE International Workshop on Service-Oriented System Engineering, pp. 199–206, Beijing, China, Oct. 2005, IEEE Computer Society.

    [17]-S. Lee, X. Bai, and Y. Chen, “Automatic mutation testing and simulation on OWL-S specified web services,” in ANSS-41 ’08: Proceedings of the 41st Annual Simulation Symposium, pp. 149–156, Ottawa, Canada, April 2008, IEEE Computer Society

    [18]-R. Wang and N. Huang, “Requirement model-based mutation testing for web service,” in NWESP ’08: Proceedings of the 2008 4th International Conference on Next Generation Web Services Practices, pp. 71–76, Seoul, Korea, Oct. 2008, IEEE Computer Society

    [19]-SWRL: A Semantic Web Rule Language, [Online] http://www.w3.org/Submission/SWRL/.

    [20]-G. Rothermel and M. J. Harrold, “A safe, efficient regression test selection technique,” ACM Transactions on Software Engineering and Methodology (TOSEM), vol. 6, no. 2, pp. 173–210, 1997.

    [21]-B. A. Cota, D. G. Fritz, and R. G. Sargent, “Control flow graphs as a representation language,” in WSC ’94: Proceedings of the 26th conference on Winter Simulation, pp. 555–559, Orlando, Florida, United States, Dec. 1994, Society for Computer Simulation International.

    [22]-Web Service Interoperability Organisation (WS-I), “Basic Profile 1.2,” [Online] http://www.ws-i.org /deliverables/workinggroup.aspx?wg=basicprofile.

    [23]-A. Bertolino and A. Polini, “The audition framework for testing web services interoperability,” in Proceedings of the 31st EUROMICRO Conference on Software Engineering and Advanced Applications (SEAA), pp. 134–142, Porto, Portugal, Aug. 2005, IEEE Computer Society.

    [24]-D. Pilone and N. Pitman, UML 2.0 in a Nutshell (In a Nutshell (O’Reilly)). O’Reilly Media, Inc., 2005.

    [25]-J. Offutt and W. Xu, “Generating test cases for web services using data perturbation,” ACM SIGSOFT Software Engineer24ing Notes, vol. 29, no. 5, pp. 1–10, 2004

  • معماری بومی ابر

    معماری بومی ابر

    صنایع پایداری که سالها تحت سلطه رهبران خود جا افتاده بوده اند، درحال مختل شدن توسط صنعت نرم افزار هستند. شرکت هایی مانند Square ، Uber ، Netflix ، Airbnb و Tesla همچنان دارای ارزش بازار خصوصی هستند که به سرعت در حال رشد است. اشتراک این شرکت های نوآور در چیست؟

    سرعت نوآوری

    سرویس های دسترس پذیر

    مقیاس وب

    تجارب کاربر مبتنی بر موبایل

    حرکت به سمت ابر، تحولی طبیعی در تمرکز برروی نرم افزار بوده و معماری برنامه های کاربردی بومی، در مرکز رسیدن به ویژگی های حیاتی این شرکت هاست. منظور از ابر، هر محیط محاسباتی است که در آن می توان منابع محاسباتی ، شبکه ای و ذخیره سازی را بصورت سلف سرویس بر اساس تقاضا تهیه و آزاد نمود. این تعریف شامل زیرساخت‌های ابری عمومی همچون سرویس‌های وب آمازون ، Google Cloud یا Microsoft Azure و زیرساخت‌های ابری خصوصی مانند VMware vSphere یا OpenStack است.

    در این مقاله توضیح خواهیم داد که چگونه معماری برنامه های بومی ابر، این ویژگی ها را قادر می‌سازد. سپس چند جنبه اصلی از معماری برنامه های بومی ابر را بررسی خواهیم کرد.

    چرا معماری برنامه بومی ابر؟

    ابتدا انگیزه های رایج در انتقال به معماری کاربردی بومی ابر را بررسی می نماییم.

    سرعت

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

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

    شرکتهای اینترنتی اغلب به دلیل عملکرد خود صدها بار در روز مستقرسازی را انجام می دهند. چرا استقرار دائمی (Continuous Deployment) مهم است؟ اگر بتوان صدها بار در روز نرم افزار را مستقر کرد، تقریبا می توان بلافاصله از خطاها خلاص شد. اگر بتوانید تقریباً بلافاصله از اشتباهات خلاص شوید، می توانید ریسک بیشتری کنید. اگر می توانید بیشتر ریسک کنید، می توانید آزمایشات بیشتر و حساستری را امتحان کنید که نتایج این کار می تواند به مزیت رقابتی بعدی شما تبدیل شود!

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

    امنیت

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

    چگونه سریع و ایمن پیش برویم؟

    قابلیت دیده شدن یا پدیداری

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

    ایزوله‌سازی اشتباه

    برای محدود کردن خطر همراه با خرابی، باید دامنه اجزا (components) یا ویژگی هایی را که می توانند تحت تأثیر خرابی قرار گیرند، محدود کنیم. اگر هربار که موتور توصیه‌ها از کار می‌افتد، کسی نتواند از سایت Amazon.com محصولی را خریداری کند، این فاجعه بار خواهد بود. معماری‌های برنامه یکپارچه، اغلب دارای این نوع حالت خرابی هستند. معماری برنامه بومی ابر معمولا از میکرو سرویس‌ها استفاده می‌کنند.

    تحمل خطا

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

    بازیابی خودکار

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

    مقیاس

    با افزایش تقاضا، ما باید ظرفیت خود را برای ارائه خدمات به این تقاضا مقیاس‌پذیر کنیم. در گذشته با مقیاس‌گذاری عمودی تقاضای بیشتری را برطرف می‌کردیم: سرورهای بزرگتری خریداری می‌کردیم. سرانجام اهداف خود را به دست آوردیم، اما به آرامی و با هزینه زیاد. این امر منجر به برنامه‌ریزی ظرفیت براساس پیش بینی اوجِ استفاده شد. ما پرسیدیم "بیشترین قدرت محاسباتی این سرویس چقدر است؟" و سپس سخت افزار کافی را برای پاسخگویی به آن خریداری کردیم. بسیاری از اوقات ما این اشتباه را پیدا کرده ایم و هنوز هم در طی رویدادهایی مانند جمعه سیاه ظرفیت موجود را از بین می بریم. اما غالباً با ده ها یا صدها سرور با CPU هایی که عملاً بیکار هستند روبرو می شویم که منجر به معیارهای ضعف استفاده می‌گردد. شرکت های نوآور با دو حرکت پیشگامانه با این مشکل کنار آمده اند:

    • آنها بجای ادامه خرید سرورهای بزرگتر، نمونه های برنامه را در تعداد زیادی از ماشین های ارزان قیمت مقیاس بندی می‌کنند. دستیابی (ویا مونتاژ) این ماشین ها و استقرار سریع آنها راحتتر است.
    • با استفاده از مجازی سازی چندین سرور کوچکتر و استفاده از چندین بار کاری جدا شده در آنها، استفاده ضعیف از سرورهای بزرگ موجود بهبود یافت.

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

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

    برنامه های تلفن همراه و تنوع مشتری

    در ژانویه 2014، دستگاه های تلفن همراه 55 درصد میزان استفاده از اینترنت را در ایالات متحده تشکیل دادند. دیگر، روزهای اجرای برنامه‌ها برای کاربرانی که روی پایانه‌های رایانه‌ای متصل به میز کار می‌کنند، گذشته است. درعوض باید تصور کنیم که کاربران ما با اَبَررایانه‌های چندهسته ای در جیب خود، در حال قدم زدن هستند. این امر، پیامدهای جدی برای معماری برنامه های ما دارد چراکه به طور تصاعدی کاربران بیشتری می‌توانند در هر زمان و هر مکان با سیستم های ما ارتباط برقرار کنند.

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

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

    برنامه‌های تلفن همراه اغلب مجبورند با چندین سیستم قدیمی و همچنین چندین میکروسرویس در یک معماری برنامه ابری تعامل داشته باشند. این سرویس ها را نمی‌توان برای تأمین نیازهای منحصر به فرد هر یک از سیستم عامل‌های مختلف تلفن همراهِ مورد استفاده مشتریان طراحی کرد. مجبور کردن بار ادغام این سرویس های متنوع برروی توسعه دهنده تلفن همراه، تأخیر و ترافیک شبکه را افزایش می‌دهد که این امر منجر به کندی زمان پاسخ‌دهی و مصرف زیاد باتری شده و در نهایت کاربران منجر به حذف برنامه شما می‌شوند! معماری‌های برنامه‌های بومی ابری از مفهوم توسعه همراه اول از طریق الگوهای طراحی مانند API Gateway پشتیبانی می‌کنند که بار تجمیع خدمات را به سمت سرور منتقل می‌کند.

    تعریف معماری بومی ابری

    معماری بومی ابر

    اکنون چند ویژگی اصلی معماری برنامه های بومی ابر را بررسی خواهیم کرد. همچنین خواهیم دید که چگونه این ویژگی‌ها مواردی را که قبلاً بحث کردیم، برطرف می‌سازد.

    Twelve-Factor Applications یا برنامه های دوازده عاملی

    برنامه دوازده عاملی مجموعه‌ای از الگوهای معماری کاربردهای بومی ابر است که در ابتدا توسط مهندسین Heroku توسعه یافته است. این الگوها، توصیف می‌کنند که "چرا" معماری برنامه های بومی ابر آنها را بهینه می‌کند. آنها بر سرعت، ایمنی و مقیاس‌پذیری با تکیه بر پیکربندی اعلانی و فرایندهای بدون‌حالت که به صورت افقی مقیاس می‌شوند و یک اتصال کلی shell به محیط استقرار، تمرکز دارند. سیستم عامل‌های برنامه‌های ابری همچونCloud Foundry ، Heroku و Amazon Elastic Beanstalk برای استقرار برنامه های دوازده عاملی بهینه شده‌اند.

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

    • CodeBase: هر برنامه قابل اجرا به عنوان یک پایگاه کد در فرایند بازبینی ردیابی می‌شود. ممکن است موارد زیادی در چندین محیط مستقر شده باشد.
    • Dependencies: یک برنامه صراحتا وابستگی‌ها را از طریق ابزار مناسبی همچونMaven ، Bundler ، NPM اعلام و جدا می‌کند تا اینکه وابستگی‌های ضمنی آن را در محیط استقرار خود انجام دهد.
    • Config: پیکربندی یا هر چیزی که احتمالاً بین محیط‌های استقرار متفاوت باشد (به عنوان مثال محیطهای توسعه، تست، عملیات) از طریق متغیرهای محیطی در سطح سیستم عامل تنظیم می‌شود.
    • Backing services: خدمات پشتیبان‌گیری، مانند پایگاه داده یا کارگزار پیام، به عنوان منابع پیوست شده تلقی شده و در تمام محیط‌ها به طور یکسان مصرف می‌شوند.
    • Build, release, run: مراحل ساخت آرتیفکتِ برنامه‌ی قابل اجرا، ترکیب آن آرتیفکت با پیکربندی و شروع یک یا چند فرآیند از آنها کاملاً تفکیک شده اند.
    • Processes: برنامه بصورت یک یا چند فرآیند stateless اجرا می‌شود.
    • Port binding: برنامه خودمختار است و همه خدمات را از طریق اتصال به پورت ارائه می‌دهد.
    • Concurrency: همزمانی معمولاً با مقیاس‌گذاری افقی فرآیندهای برنامه انجام می شود.
    • Disposability: استحکام از طریق فرآیندهایی که به سرعت شروع شده و با ظرافت پایان می‌یابند ، به حداکثر میزان خود می‌رسد.
    • Dev/Prod parity: تحویل و استقرار دائمی با حفظ محیط‌های توسعه، تست و عملیات بسیار شبیه هم می‌شود.
    • Logs: به جای مدیریت ثبت وقایع سیستم، گزارشات را به عنوان جریان‌های رویداد در نظر گرفته و به محیط اجرا اجازه می‌دهید تا از طریق سرویس‌های متمرکز، رویدادها را گردآوری، تجمیع، نمایه‌سازی و تحلیل کند.
    • Admin processes: وظایف مدیریتی همچون انتقال پایگاه داده، به عنوان فرایندهای یکبار مصرف در محیطی مشابه با برنامه‌های طولانی مدت اجرا می‌شود.

    میکروسرویس ها

    میکروسرویس‌ها تجزیه سیستم‌های تجاری یکپارچه به خدمات مستقر مستقلی را نشان می دهند که "یک کار را به خوبی انجام می دهند". این یک کار، معمولاً نشان دهنده یک توانایی تجاری یا کوچکترین واحد خدمات "اتمی" است که ارزش تجاری را ارائه می‌دهد. معماری‌های میکروسرویس به چندین روش؛ سرعت، ایمنی و مقیاس‌پذیری را فعال سازد:

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

    زیرساخت چابک self-service

    تیم‌هایی که در حال توسعه معماری برنامه‌های بومی ابری هستند، معمولاً مسئول استقرار و فعالیت‌های مستمر آنها هستند. پذیرندگان موفق برنامه‌های بومی ابری، تیم‌ها را با پلتفرم‌های سِلف سرویس توانمند کرده‌اند.

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

    بهترین این سیستم عامل‌ها لایه انتزاعی اولیه را برای مصرف کنندگان خود افزایش می‌دهند. با استفاده از زیرساخت به عنوان سرویس (IAAS) از API خواستیم تا موارد سرور مجازی، شبکه‌ها و فضای ذخیره سازی ایجاد نماید تا اَشکال مختلف مدیریت پیکربندی و اتوماسیون را برای فعال کردن برنامه ها و سرویس های پشتیبانی خود اعمال کنیم. اکنون سیستم عامل‌هایی در حال ظهور هستند که به ما امکان می‌دهند درباره برنامه‌ها و خدمات پشتیبانی فکر کنیم.

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

    • مقیاس‌گذاری خودکار و درخواست نمونه های برنامه
    • مدیریت سلامت برنامه
    • مسیریابی پویا و توازن بار درخواست‌ها در نمونه‌های مختلف برنامه
    • جمع‌آوری گزارشات و معیارها

    همکاری مبتنی بر API

    تنها حالت تعامل بین سرویس‌ها در معماری برنامه بومی ابر از طریق API های منتشر شده و نسخه‌سازی شده است. این API ها معمولاً به سبک HTTP REST با سریال سازی JSON هستند اما می‌توانند از پروتکل‌های دیگر و قالب‌های سریال‌سازی نیز استفاده کنند.

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