این مقاله ترجمهای از مقاله A Context-Driven Approach to Automation in Testing نوشته جیمز باخ(James Bach) و مایکل بولتون(Michael Bolton) است که دو تن از بزرگان و مشهورترین افراد در حوزه تست نرمافزار دنیا هستند. این مقاله در فوریه ۲۰۱۶ به رشته تحریر در آمده است.
مقاله پیش رو نسبتا طولانیست که احتمالا طی ۷ تا ۱۰ پست منتشر خواهد شد.
ترجمه این مقاله توسط سرکار خانم مهندس اعظم موسویان آماده شده است.
خلاصه: راههای شگفت انگیز بسیاری وجود دارند که میتوان از ابزارها برای کمک به تست نرمافزار استفاده کرد. در حال حاضر از ابزارها استفاده مناسبی نمیشود که این موضوع سردرگمی و مشکلات بسیاری را به آنچه در حال حاضر یک مشکل سخت است، اضافه میکند. چرا اینطور است؟ چه کاری میتوان انجام داد؟ ما فکر میکنیم که مشکل اساسی، نگرش سطحی به استفاده از ابزار است. و این مشکل با یک باور همه گیر و غلط درباره تست، که تست را یک فرآیند تکراری و مکانیکی میداند تشدید شده است. یک تست خوب مانند برنامهنویسی، یک فرآیند فکری و چالشی است. بنابراین تست کردن باید به دست افرادی سپرده شود که پیچیدگیهای ابزارها و تستها را متوجه میشوند. این موضوع در مورد توسعه نرمافزار و برنامهنویسی و در واقع برای هر شغل و مهارتی از نجاری تا داروسازی صدق می کند.
فهرست عناوین:
رباتها! کمک!
مشکل ما در مواجه با خودکارسازی(Automation)
اول: آنها را ابزار بنامید[نه خودکارسازی تست (Test Automation)]
دوم: به تست بسیار بیشتر از چک کردن خروجی(Output Checking) فکر کنید
- تفاوت بین تست کردن و چک کردن
- چک کردن مهم است
سوم: روشهای بسیاری برای استفاده از ابزارها کشف کنید!
- اجازه دهید متن شما، ابزارتان را هدایت کند
- به طور مشخص چطور متن، ابزار را هدایت میکند؟
- روی ابزارهایی سرمایهگذاری کنید که آزادیهای بیشتری در موقعیتهای مختلف به شما بدهند
- روی تستپذیر بودن سرمایهگذاری کنید
اجازه دهید در عمل با ابزارهای پشتیبانی کننده تست آشنا شویم!
- مورد اول: ابزار بدون چک کردن استفاده میشود
- مورد دوم: استفاده از ابزار پشتیبانی همراه با تولید دادههای الگو، برای یک Oracle[پیشبینی کننده نتیجه تست] قدرتمند و پوشش بهتر
- مورد سوم: چک کردن خودکار
- چرا خودکارسازی فعالیتهایی که از طریق واسط گرافیکی کاربر(GUI) انجام میشود بسیار سخت است؟
خودکارسازی فعالیتها یک تاکتیک است و نباید یک کار تکراری و روزمره باشد
در این مقاله، ما یک چشم انداز از تست خودکار ارائه میدهیم که تستر را در مرکز تست قرار میدهد و در عین حال تفکری را ترویج میکند که معتقد است ابزارها میتوانند کارهای بسیاری برای ما انجام دهند. ما ابزارها را بدون کنارهگیری از مسئولیتمان به عنوان یک شخص فنی، میپذیریم تا نمایش را اجرا کنیم.
ابزارها میتوانند قدرتمند باشند و ما قصد داریم چیزهای مهیج و مفیدی راجع به آنها بگوییم. اما خودکارسازی(Automation)، میتواند جنبه منفی هم داشته باشد(به این دلیل که برچسب خودکارسازی، میتواند به موارد مختلفی اطلاق شود). بنابراین باید با نگاهی هوشیارانه به برخی تصورات غلط شروع کنیم، تصوراتی که باعث افزودن سردرگمی و زحمت برای چیزی میشود که انجام آن در بهترین حالت هم سخت و مشکل است. اگر شما نیازمند تست خوب هستید، باید بدانید که پشتیبانی خوب با ابزار، بخشی از آن است و این به این معنی است که شما باید یاد بگیرید چرا ما با ابزارها به مشکل بر میخوریم؟
رباتها! کمک!
ما میتوانیم دیدگاه غالب درباره خودکارسازی تست(Test Automation) را در این عبارت خلاصه کنیم: “با خودکارسازی کاربر، تستها را خودکار کنید”. ادعا نمیکنیم که افراد دقیقا این عبارت را میگویند، آنها فقط سعی میکنند چنین کاری را انجام دهند. ما در اینجا حداقل سه مشکل بزرگ مشاهده میکنیم که تست کردن را بیاهمیت میکند:
- کلمه “خودکارسازی(Automation)” گمراه کننده است. ما نمیتوانیم کاربران را خودکار کنیم. ما برخی از فعالیتهایی که آن ها انجام میدهند را خودکار میکنیم، اما فعالیت کاربران خیلی بیشتر از موارد محدودی است که خودکار میشود.
- چک کردن خروجی(Output Checking)، میتواند خودکار شود، اما تسترها کارهای بسیار بیشتری از چک کردن خروجی انجام میدهند.
- خودکارسازی چک کردن خروجی جذاب است، اما ابزارها کارهای بسیار بیشتری میتوانند برای ما انجام دهند.
خودکارسازی یک موضوع خوشمزه و اشتها برانگیز است: فعالیتهای پیچیده و بینظم انسانها را به رباتهای قابل اعتماد، سریع و کارآمد بسپارید! تصویر ۱ را مشاهده کنید. این تصویر این دیدگاه موثر را به طور عالی خلاصه میکند که “کارهای تکراری و خسته کننده را خودکار کنید”. بسیار خب. این تصویر چه چیزی به ما نشان میدهد؟
این تصویر به ما نشان میدهد که یک ماشین میتواند همانند انسان عمل کند. این ربات شبیه انسان ساخته شده و از یک ابزار که توسط انسان ساخته شده است استفاده میکند، دقیقا همانطور که خود انسان از آن ابزار استفاده میکند، نه از طریق یک رابط(Interface) مناسب برای روباتها. هیچ تصویری از فرآیند برنامهنویسی، کنترل یا اصلاح ربات در صورت بوجود آمدن خطا وجود ندارد و هیچ ربات شکستهای در پس زمینه مشاهده نمیشود. نقش انسان در این تصویر نمایش داده نشده است. هیچ انسانی حتی در پس زمینه وجود ندارد. که این پیام را میرساند: رباتها می توانند در کارهای کسل کننده و تکراری جایگزین انسانها شوند بدون اینکه هیچگونه اثری از حضور، راهنمایی و یا هدایت انسان باشد و بدون اینکه هیچگونه تغییری در ماهیت فرآیند ایجاد شود. آیا خودکارسازی به این معناست؟ و به این صورت کار می کند؟ خیر!
تصویر ۲ را نگاه کنید. البته که این تصویر یک کارتون است و نباید جدی گرفته شود. مشکل اینجاست که در سفرهایی که ما در سراسر صنعت داشتیم، کاربرانی را مشاهده کردیم که درباره تست واقعی، خودکارسازی واقعی و انسانهای واقعی، به این شیوه کارتونی فکر میکنند. مشکلی که از این نوع تفکرات بوجود میآید جدی است. چقدر جدی؟ بر اساس تجربه نویسندگان این مقاله و مشاهده پروژههایی که مربوط به دهه ۸۰ بودند، ما دریافتیم که بیشتر پروژههای خودکارسازی، بیشترین میزان بودجه خودشان را صرف تشخیص خطاهای ابتدایی و مشخصی در سطح GUI میکنند و زمان و انرژی لازم را برای کشف و حل مشکلات جدی اما غیر واضح(که ما آنها را مشکلات عمیق مینامیم) از دست میدهند. علاوه بر آن، این روش معمول خودکارسازی، شخصیت ماشینهای Rube Goldberg را دارد(تصویر ۲)؛ ماشینهای پیچیدهای که با نوعی هنرمندی مبتکرانه برای انجام عملیات ساده طراحی شدهاند و مستعد شکست خوردن هستند.
ما معتقد هستیم بهتر است به جای سرمایهگذاری برای خودکارسازی تست، به طور مستقیم روی انسانهایی که به روشهای پیچیده با محصولات در تعامل هستند(که خطاهای جزیی را هم پیدا میکنند) و همچنین روی ابزارهای پشتیبانی کنندهای که ارزانتر هستند و به تسترها در تست بهتر کمک میکنند، سرمایهگذاری شود.
هیچکس نمیتواند انکار کند که نسخههای تبلیغاتی ابزارهای خودکارسازی، بسیار چشمگیر هستند. چیزی که ما میدانیم این است که مردم در مورد معنی کلمه “خودکارسازی”، چگونگی انجام آن و اینکه چطور نسخههای تبلیغاتی باید به یک کاربرد عملی روی پروژههای معمول تبدیل شوند، توافق ندارند.