تست سیستم(System Testing) چیست؟
System Testing به معنی تست یک محصول نرمافزاری کامل و صد در صد یکپارچه است. معمولا، نرمافزار فقط یک عنصر از یک سیستم کامپیوتری بزرگتر است. در نهایت، نرمافزار با سایر سیستمهای نرمافزاری/سختافزاری مواجه است. تست سیستم در واقع مجموعهای از تستهای مختلف است که تنها هدف آن به کار کشیدن سیستم کامپیوتری میباشد.
یکی از دستهبندیها در حوزه تست نرمافزار آنرا به دو قسمت تقسیم میکند:
- تست جعبه سیاه(Black Box Testing)
- تست جعبه سفید(White Box Testing)
تست سیستم، در حقیقت ذیل تست جعبه سیاه قرار میگیرد.
تست جعبه سفید، تست کردن عملکرد داخلی یا کد اپلیکیشن نرمافزاریست. در مقابل، تست جعبه سیاه و یا تست سیستم بر خلاف تست جعبه سفید است؛ این تست شامل بررسی عملکرد خارجی نرمافزار از منظر کاربر است.
در تست سیستم چه چیزی را Verify میکنید؟
System Testing یک نرمافزار را به اشکال زیر تست میکند:
- تست اپلیکیشنهای کاملا یکپارچه، شامل لوازم جانبی خارجی به منظور بررسی این موضوع که کامپوننتها چگونه با یکدیگر و با کل سیستم تعامل میکنند. این نوع از تست سیستم به تست End-to-End نیز مشهور است.
- Verify کردن از طریق تست هر ورودی در اپلیکیشن برای بررسی خروجیهای مورد نظر.
- تست تجربه کاربری(User Experience-UX) با اپلیکیشن
این یک شرح اولیه از آن چیزیست که در تست سیستم رخ میدهد. شما باید Test Caseها و Test Suiteهای دقیقی ایجاد کنید، که هر جنبهای از اپلیکیشن را که از خارج دیده میشود، بدون بررسی Source Code تست کنند.
سلسله مراتب در تست نرمافزار
مانند اکثر فرآیندهای مهندسی نرمافزار، تست نرمافزار نیز یک دستورالعمل تجویز شده دارد که باید انجام شود. در زیر لیستی از دستههای مختلف تست نرمافزار ارائه شدهاند که باید به ترتیب از بالا به پایین انجام شوند. اینها گامهای اتخاذ شده برای تست کامل یک نرمافزار جدید در زمان آمادهسازی آن برای بازار هستند:
- Unit Testing: تستی که در طول توسعه روی هر کدام از ماژولها یا بلوکها از کد انجام میشود. Unit Testing معمولا توسط همان برنامهنویسی انجام میشود که کد را نوشته است.
- Integration Testing: تستی که قبل، در طول و پس از Integration(یکپارچهسازی) یک ماژول جدید در پکیج اصلی نرمافزار انجام میشود. این تست شامل تست هر کدام از ماژولهای کد است. یک قطعه از نرمافزار میتواند چندین ماژول داشته باشد که اغلب توسط چندین برنامهنویس ایجاد میشوند. تست کردن هر اثر از ماژول در کل مدل برنامه، بسیار مهم است.
- System Testing: در این مرحله، قبل از اینکه محصول به بازار معرفی شود، تست توسط یک تستر حرفهای بر روی محصول کاملِ نرمافزاری انجام میشود.
- Acceptance Testing: تست بتای محصول توسط کاربران واقعی انجام میشود. البته Acceptance Testing ابعاد و اجزای دیگری هم دارد، که در اینجا صرفا به User Acceptance Test در مرحله بتا اشاره شده است.
انواع مختلف تست سیستم
بیش از ۵۰ نوع تست سیستم وجود دارد. در آینده فهرست جامعی از انواع تستهای نرمافزار به همراه شرح مختصری بر هر یک ارئه خواهد شد. در زیر انواع تستهای سیستم را که یک شرکت بزرگ نرمافزاری میتواند به کار بگیرد را فهرست کردهایم:
- Usability Testing(تست کاربردپذیری): تست کاربردپذیری عمدتا بر این موارد متمرکز است: سهولت استفاده از اپلیکیشن توسط کاربر، انعطافپذیری در اداره کنترلها و توانایی سیستم برای رسیدن به اهداف تعیین شده.
- Load Testing(تست بار): تست بار برای درک این موضوع است که سیستم نرمافزاری ما تحت شرایط واقعی بار همچنان به خوبی کار میکند یا خیر. تست بار یک تست ضروریست.
- Regression Testing(رگرسیون تست): تست رگرسیون عبارتست از تستی که برای حصول اطمینان از عدم ایجاد باگهای جدید به دلیل اِعمال تغییرات در روند توسعه، انجام میشود. علاوه بر این تست رگرسیون باعث میشود با افزودن ماژولهای نرمافزاری جدید در طول زمان، باگهای قدیمی ظاهر نشوند.
- Recovery Testing(تست بازیابی): تست بازیابی بدین منظور انجام میشود که اثبات کند راهکار نرمافزاریِ تحت تست، قابل اعتماد بوده و میتواند در اختلالات(Crash) احتمالی موفق عمل نماید.
- Migration Testing(تست مهاجرت): تست مهاجرت به منظور حصول اطمینان از این موضوع است که میتوان بدون هیچ مشکلی، نرمافزار را از زیرساختهای سیستم قدیمی به زیرساختهای سیستم فعلی منتقل کرد.
- Functional Testing(تست کارکرد): این تست که با نام Functional Completeness Testing(تست تمامیت کارکرد) نیز شناخته میشود، تلاش میکند تا روی از دست رفتن احتمالی هر Functionality فکر کرده و آنها را بیابد. از دست رفتن احتمالی به معنی ندیدن یک Functionality و یا کارکرد نادرست آن است. در این میان ممکن است تسترها لیستی از Functionalityهای تکمیلی را ارائه دهند که یک محصول میتواند آن را در طول تستهای کارکردی بهبود بخشد.
- Hardware/Software Testing(تست سختافزار/نرمافزار): IBM این تست را “HW/SW Testing” مینامد. این تست زمانی اجرا میشود که تستر در طول تست توجه خود را بر تداخل بین سختافزار و نرمافزار متمرکز میکند.
چه نوع System Testهایی باید توسط تسترها به کار گرفته شوند
بیش از ۵۰ نوع System Testing وجود دارد. انواع خاصی که توسط یک تستر استفاده میشوند، به چند متغیر بستگی دارند. این متغیرها عبارتند از:
- کسیکه تستر برای او کار میکند: این یک عامل مهم در تعیین نوع تستی است که تستر از آن استفاده خواهد کرد. متدهای استفاده شده توسط شرکتهای بزرگ با آنچه که توسط شرکتهای متوسط و کوچک استفاده میشوند، متفاوت است.
- زمان موجود برای تست: در نهایت، تمام ۵۰ نوع تست میتوانند مورد استفاده قرار گیرند. اما غالب اوقات ما دچار مشکل کمبود وقت هستیم که همین امر ما را صرفا به استفاده از انواعی از تستها محدود میکند که با شرایط پروژه تناسب داشته و برای آن ضرورت دارند.
- منابع موجود برای تستر: برخی از تسترها منابع لازم را برای انجام یک نوع خاص از تست ندارند. به عنوان مثال، اگر شما تستری باشید که برای یک شرکت بزرگ توسعه نرمافزار کار میکنید، باید بدانید ممکن است فقط در این شرکت و یا چند شرکت مشابه بتوانید از یک ابزار خودکارسازی تست گران قیمت استفاده نمایید.
- آموزش تستر نرمافزار: یک منحنی یادگیری خاص برای هر نوع از تست نرمافزار وجود دارد. به منظور بهرهبرداری از برخی نرمافزارهای موجود، تستر باید چگونگی استفاده از آنرا یاد بگیرد.
- بودجه تست: پول در همه شئونات زندگی و صنعت تاثیر گذار است. این پارامتر نه تنها برای شرکتهای کوچکتر و توسعهدهندگان نرمافزارهای شخصی، بلکه برای شرکتهای بزرگ نیز تاثیرگذار است.
این مطلب بخشی از دوره آموزشی رایگان تست نرمافزار بود، که میتوانید تمامی مطالب این دوره رایگان را در اینجا مشاهده نمایید.