شرکت گوگل برای تست نرم افزار، سه نقش زیر را درنظر گرفته است:
- Software Engineer
- Software Engineer in Test
- Software Tester
مهندس نرم افزار در تست نرم افزار، در کنار تولید قابلیت های سیستم یعنی Feature development وظیفه تست قابلیت های تولید شده در سطح برنامه را نیز برعهده دارد یعنی Test development نیز انجام می دهد.
در تست نرم افزار در هر صورت برای تولید تستها، از آنجاییکه نیاز به دانش آزمون و خصوصا زیرساخت آزمون می باشد، مهندس تست نرم افزارر (دومین نقش)، وارد کار می شود که فعالیت های اصلی آن در تست نرم افزار عبارت است از: کمک به برنامه نویس (مهندس نرم افزار) برای تولید آزمون واحد، آماده سازی زیرساخت آزمون شامل چارچوب آزمون و ماک-آبجکت ها، و نهایتا آزمون یکپارچه سازی قابلیت ها.
تست نرم افزار، وظیفه آزمون های سطح کاربری و پذیرش را برعهده دارد و به اصطلاح کارUser development را انجام می دهد که شامل تهیه سناریوهای آزمون در سطح کاربری می باشد.
اصول تست نرم افزار و تولید نرم افزار در شرکت گوگل
برخی از اصولی که در تولید نرم افزار در شرکت گوگل بکار گرفته می شود، عبارت است از:
- استفاده از روش تولید مبتنی بر آزمون یا همان Test Driven Development
- ارائه پایه ای ترین (ولی در عوض، موردنیازترین) قابلیت های یک محصول و ارائه آن به مصرف کننده و سپس گرفتن فیدبک کاربرنهایی. البته قبل از تحویل همین نسخه ساده، تست های مورد نیاز در تست نرم افزار در سطح تولید و کاربری برروی آن انجام می شود و بعد از پاس شدن تمام تستهای مورد نیاز، محصول اولیه به کاربر داده می شود.
- استفاده از تکنیک تحلیل ایستا و مرور دستی در کنار آزمون (پویا) + اجرای مجدد تست ها (آزمون رگراسیون) بعد از برطرف سازی مشکلات شناسایی شده در تحلیل و مرور کد.
- استفاده از یک ریپازیتوری مشترک بین تولیدکنندگان با ارائه دسترسی و قرار دادن ماژولهای پایه ای در آن. تولیدکنندگان تا حد امکان باید از ماژولهای پایهای موجود که قبلا تولید و تست شده است، استفاده نمایند.
- استفاده از مکانیزم های تشویقی برای برنامه نویسانی که کد تمیز می نویسند.
- تست نرم افزار در سه سطح Small, Medium, Large که تقریبا معادل آزمونهای زیراست Unit, Integration, System
در شرکت گوگل، چندین اصل و مکانیزم برای رسیدن به Testabilityبالا، لحاظ می شود. اولی Test Driven Developmentاست. وقتی توسعه به صورت مبتنی بر آزمون پیش می رود، طبیعتا آزمون پذیری بالاتری وجود خواهد داشت. در همین رویکرد، وقتی کد یا طراحی سیستم پیچیده می شود، مکانیزم Refactoring برای افزایش خوانایی کد و طراحی مشروح صورت می گیرد. همچنین در شرکت گوگل، اصل بر سادگی یعنی Simplicity است و بکارگیری همین اصل باعث می شود آزمون پذیری کد و سیستم افزوده شود. همچنین تاکید زیاد برروی آزمونهای واحد (برنامه نویسی)، طبیعتا تست-ابیلیتی را افزایش می دهد.
تضمین Testability در وحله اول با معمار سیستم است. در واقع معماری سیستم باید طوری چیده شود که سیستم تولید شده آزمون پذیر باشد. در وحله بعدی، وظیفه برنامه نویسان سیستم است که طوری کد نویسی انجام دهند که امکان تست به راحتی فراهم باشد. گاهی اوقات (خصوصا در سیستم های لگسی) لازم است ریفکتورینگ های لازم برای آزمون پذیر کردن صورت گیرد یا یک نفر (تیم) خاص برای افزودن قابلیتهای لازم برای تست سیستم (ماک-آبجکت ها) لحاظ شود. نهایتا اینکه با تکنیک Code Inspection/Review می توان میزان پیچیدگی و آزمون پذیری را سنجید و متناسب با آن اقدامات لازم را انجام داد.