مجازیسازی سرویس چیست؟
در مهندسی نرم افزار ، مجازی سازی سرویس یا مجازی سازی خدمات روشی است برای تقلید از رفتار اجزای خاص در برنامه های مبتنی بر مولفه های ناهمگن مانند برنامههای مبتنی بر API، برنامههای مبتنی بر ابر و معماری سرویسگرا.
مجازی سازی سرویس امکان دسترسی آسان به اجزای محدودی را که مانع توسعه و آزمون میشوند ، به تیم ها می دهد. این امر معمولاً به صورت محدودیت های محیطی آشکار می شود که در آن اجزایی که از نظر فنی خارج از محدوده آزمون هستند، برای عملکرد کامل لازم هستند.
با مجازی سازی سرویس، میتوان با شبیه سازی وابستگی های پایین دست و جایگزینی عملکرد واقعی با رفتار شبیه سازی شده ، این محدودیت ها را برطرف نمود. وقتی این سیستم بدرستی پیاده سازی شود، میتوان تضمین کرد سیستم شبیه مولفه واقعی رفتار نماید.
بنابراین با قابلیت مجازی سازی سرویس می توان محدودیت های زمانبندی را با دسترسی به یک محیط آزمون شبیه سازی شده از بین برد. همچنین میتوان گلوگاه های فرآیند را با دسترسی سریع به سیستم های وابستهیِ در حال تکامل یا غیرقابل دسترس از بین برد.
مجازی سازی سرویس، رفتار مولفه های نرم افزاری را شبیه سازی میکند تا بتوان محدودیت های وابستگی به تیم های توسعه و آزمون را حذف کرد. این محدودیت ها در محیط های پیچیده رخ میدهد؛ خصوصا در محیطهایی که اجزای یک برنامه ی تحت آزمون به اجزایی که شرایط زیر را داشته باشند متصل باشد، از جمله:
توسعه برخی اجزا به پایان نرسیده باشد
در حال تکامل باشد
توسط شخص ثالث کنترل شود
آزمون آن فقط بصورت محدود و در زمان نامناسب میسر باشد
پیکربندی در محیط آزمون دشوار باشد
دسترسی به سرویس موردنظر با تنوع داده ای دشوار باشد
گرچه اصطلاح مجازی سازی سرویس نشان دهنده تمرکز اولیه این روش بر مجازی سازی سرویسهای تحت وب میباشد، اما مجازی سازی سرویس در حوزه های دیگر نیز کاربرد دارد، مانند سرویس ها، پایگاه های داده ها، فریم ورک های اصلی، ESBها و سایر مولفه هایی که با استفاده از پروتکل های پیام رسان مشترک ارتباط برقرار می کنند.
در مجازی سازی سرویس، صرفا رفتارها و سرویسهایی که توسعه دهندگان و آزمونگرها نیاز دارند تا تراکنش های نقطه به نقطه را به پایان برسانند، شبیه سازی می شوند. به جای مجازی سازی کل سیستم، فقط برشهای خاصی که نیازمند آن است که وظایف بطور کامل انجام شوند، مجازیسازی میشود.
چرا مجازی سازی سرویس مهم است؟
برای دسترسی به کیفیت توامان با سرعت، دسترسی نامحدود به یک محیط آزمون قابل اعتماد و واقع گرایانه ضروری است. از عوامل بسیار مهم این است که بتوان محیطی کامل را شامل برنامه تحت آزمون (AUT) و تمامی اجزای وابسته به آن را تشخیص و فراهم آورد (به عنوان مثال APIها، سرویس های شخص ثالث، پایگاه های داده و ....)
مجازی سازی سرویس، تیم های DevTest را قادر می سازد تا به یک محیط آزمایشی کامل از جمله کلیه اجزای مهم سیستمِ وابسته دسترسی پیدا کنند و همچنین رفتار آن مؤلفه های وابسته ای را شبیهسازی کند که در محیط آزمون مرحله ای غیرممکن باشد ولذا شرایطی ایجاد میگردد که شما قادر باشید آزمونها را سریعتر و کاملتر انجام دهید. همچنین این امکان را فراهم میکند که لایه های مختلف برنامه را برای اشکال زدایی و آزمون جدا کنید.
مجازی سازی سرویس برای آن دسته از تیم های توسعهی آزمون محور(TDD) که میخواهند برنامه تولید خود را با تمرکز بر روی رفع اشکالات خود در لایه API تسریع کنند، ایده آل است. با استفاده از مجازی سازی سرویس، توسعه دهندگان می توانند یکپارچه سازی را زودتر از مواقع دیگر اعتبار سنجی کنند. با توجه به اینکه تجربه کاربری یک برنامه تابعی از اجزاء مختلف آن است، منطقی است که اطمینان حاصل کنیم این اجزاء به همان خوبی که ایجاد شده اند کار میکنند، نه اینکه منتظر یک برنامه کامل باشند. مجازی سازی سرویس می تواند در هر مرحله از توسعه یک برنامه مفید باشد، از کمک به آزمایشات واحد دستی کوچک تا امکان آزمایش عملکرد خودکار یک سیستم یکپارچه.
درک مجازیسازی سرویسها
چه نوع شرایط توسعه ای برای مجازی سازی سرویسها مناسب تر است؟ از آنجاییکه معماری های سرویس گرا بطور روزافزون رایج میشوند، هیچ محدودیتی برای استفاده از مؤلفه های برنامه ای شخص ثالث در جدیدترین ویرایش برنامه خود ندارید. این مؤلفه های برنامه ای شخص ثالث می توانند ازعهده خیلی از کارها برآیند، از مدیریت پایگاه داده مشتری گرفته تا انجام سریع بررسیهای اعتباری، مدیریت اشتراک ایمیل گرفته تا پردازش موجودی کالا و سفارشات در فروشگاههای آنلاین.
امروزه اکثر برنامه ها حتی وب سایت های ساده از مؤلفه های برنامه ای شخص ثالث استفاده گسترده ای می کنند. وجود این مؤلفه ها، توسعه دهندگان را از ایجاد بومی آنها با عملکرد یکسان نجات می دهد. اما اطمینان از اینکه برنامه شما با برنامه های شخص ثالث ارتباط درستی برقرار می کند، می تواند مشکلات زیادی را ایجاد نماید؛ خصوصا زمانیکه برنامه شما متکی برآن مؤلفه های شخص ثالث باشد و یا حتی برای اهداف آزمون در دسترس نباشد.
به عنوان مثال، سناریوی یک خرده فروش آنلاین با چند تامین کننده را در نظر بگیرید. فروشنده خرد، یک برنامه تلفن همراه برای مشتریان خود ایجاد کرده است. این برنامه برای بررسی اعتبار مشتریان از یک سرویس شخص ثالث استفاده میکند. تیم نمیتواند بدون این مولفه وابسته، آزمون را آغاز کند و این مولفه برای آزمون نیز در دسترس نمیباشد. تیم توسعه گزینه های دشواری برای انجام دارد و هیچ یک از این گزینه ها مناسب نیست. اگر تیم توسعه از آزمون های لازم چشم پوشی کند، ممکن است در آینده با خطاهای زیادی مواجه شود که هم دشوار بوده و هم هزینه بر هستند. حتی اگر تیم منتظر بماند تا سرویس شخص ثالث برای آزمون در دسترس قرار گیرد، بهره¬وری تیم توسعه کاهش می یابد و ممکن است فرصت های توسعه نیز از دست برود.
در سناریوی فوق، با مجازی سازی سرویس، مشکل اعتبار سنجی مشتریان برطرف میشود. اما واقعاً چگونه میتوان چنین سرویسی را مجازی سازی نمود؟ نرم افزار مجازی سازی سرویس معمولا از یک یا دو روش بالقوه برای تولید مؤلفه های مجازی شده استفاده میکند.
اولین کار این است که شما با توصیف استاندارد سرویس شروع به کار کنید تا پارامترهای مربوط به مؤلفه نرمافزاری که باید آن را رعایت کنید استخراج کرده و نتیجه را با زبانی خاص پیاده سازی نموده و کد مربوط به آن را تولید کنید.
روش دوم به طور بالقوه (اما نه همیشه) ساده تر است، که شامل استفاده از نرمافزار مجازی سازی سرویس برای ضبط ترافیک با استفاده از تعاملات واقعی سیستم و ارتباطات API ای بین برنامه شما و مؤلفه های وابسته است. با ثبت ترافیک واقعی سیستم، ابزار مجازی سازی سرویس می تواند "پاسخ" شبیه سازی شده بین برنامه ها، اجزای وابسته و حتی سرورهایی که به آنها وابسته هستند، ایجاد نماید. مهم نیست که چگونه نرم افزار مجازی سازی چنین تبادلاتی را یاد گرفته و تولید می کند. این تواناییِ شبیه سازی کامل رفتارهای اصلی سیستم است که مجازی سازی سرویس را به ابزاری باورنکردنی تبدیل کرده است.