خلاصه: درست مانند برنامهنویسی ازدحامی(Mob Programming)، تست ازدحامی(Mob Testing) نیز کلا درباره گروهی از تسترهاست که با هم همکاری میکنند. دانش تست بسیاری از ما دچار ضعف است. این دانش در ذهن ماست که از سالها انباشت تجربه ما ساخته شده است. اگر تجربیات هر کس در گروه تست با دیگر تجربیات ترکیب شود، قادر خواهیم بود بهترین رویکردهای ممکن را برای کار تست اتخاذ کرده و در دست بگیریم.
Mob Testing درباره گروهی از تسترهاست که با یکدیگر همکاری میکنند. البته اشتباه نکنید، این موضوع به معنی یک باشگاه بزرگ نیست. به علاوه این موضوع درباره Application Mobileها هم نیست. این روش به معنی کار کردن همزمان با هم، روی یک Task تست و آن هم روی یک کامپیوتر برای دریافت بهترین نتیجه است. در این روش همه کمک میکنند، و هر کسی از نوبت خود برای کار با کیبورد که تنها دستگاه ورودی هوشمند است استفاده میکند. در این روش تصمیمگریها از گروهی استخراج میشود که با همه در مورد تستی که در حال انجام است صحبت میکند.
حجم زیادی از دانش ما ضمنیست(اینها در ذهن ما هستند، و بر اساس سالها تجربه ایجاد میشوند). با ترکیب کردن تجربیات افراد حاضر در این گروه، بهترین رویکردهای ممکن برای تستِ کارهای در دست، حاصل خواهد شد.
از Mob Programming تا Mob Testing
چند سال قبل که یک کنفرانس را سازماندهی میکردم، از Woody Zuill(وودی زیل) بنیانگذار Mob Programming دعوت کرده بودیم، تا به عنوان سخنران اصلی برایمان صحبت کند. من با بیاعتمادی عمیقی به صحبتهایش گوش میکردم، چون او در حال معرفی Mob Programming بود: “همه افراد مستعد، در یک زمان، یک فضا، روی یک چیز و روی یک کامپیوتر کار میکنند.” در آن لحظه این موضوع به گمانم بیفایده بود، اما مرا جذب خودش کرده بود، یا به نوعی کنجکاوی مرا برانگیخته بود. من این ایده را در ذهنم به سازمانی که در آن کار میکردم بسط دادم. جاییکه من تنها تتسر غیربرنامهنویس در میان ده برنامهنویس بودم.
اولین تجربه Mob Programming به عنوان یک غیربرنامهنویس ترسناک بود، و چیزی نبود که من خودم برای آن داوطلب شوم. اما اعتقادی راسخ به این موضوع داشتم که ناراحتی من برای بهبود کار و رابطه با برنامهنویسان در تیمی که در آن مشغول هستم، الزامیست. نوبت ۴ دقیقهای من که باید دست به کیبورد میشدم هم مانند هر کس دیگری فرارسید، و کلمه به کلمه به چیزهایی که دیگران به من میگفتند تا برای کد تایپ کنم، گوش میکردم. اولین دور، من احساس یک آدم خرفت را داشتم. دور دوم، میانبرهای کیبورد را متوجه شدم. پس از آن من آرام شدم و شروع کردم به شرکت در بحث که مثلا چه نامی برای متد خوب است، و همچنین صحبت روی مفاهیمی در محدوده کار که به عنوان تستر تیم به خوبی آنها را میشناختم.
من متوجه شدم که این رویکرد، میتواند به خوبی برای تست هم کارایی داشته باشد. Mob Testing برای من دو جور معنی دارد: ۱٫ تجربیاتی که من به عنوان یک تستر دارم، در حالکیه در یک جمعیت(Mob) برنامهنویسی(Programming) کار میکنم، ۲٫ و یا به عنوان یک نفر از اعضای Mob روی فعالیت تست متمرکز هستم. به عنوان یک تستر در یک Mob، به نوبه خودم همه چیز را در فعالیت تست انجام میدادم. اما میتوانستم فعالیت تست را به کل Mob هم گسترش دهم، این کار میتوانست مشتمل بر Exploratory Testing، یا ایجاد انواع مختلفی از Test Automation باشد.
Mobbing روی فعالیتهای تست
پس از کسب اولین تجربه، در محیط آموزشی قوی، که Mob مربوط به برنامهنویسی برای من ایجاد کرد، من تجربه کردن Mob را برای تست آغاز کردم. من میخواستم برنامهنویسان تیمَم را از طریق Exploratory Testing، در یادگیریِ فعالیتهای مرتبط با کیفیت رهبری کنم. متلکهایی از قبیل: “اوه. این کاریه که تو انجام دادی تا تمام مشکلات را پیدا کنی!” شروع شد. آن هم به خاطر راهی که برای تست بهتر توسط توسعهدهنده، وارد آن شده بودیم. این کار یعنی آموزش تست. آن هم در حدی تیم توسعه قادر به درک و هضم آن باشد.
مقدار زیادی از Knowledge تست که ما برای یافتن باگها تولید میکردیم، خوب بود. این دانش از پشتکار، کنجکاوی، و تجارب گذشته، که ما قادر به انعکاس آن بودیم، استخراج میشد. تدریس قسمتهای ضمنیِ تست کار سختیست، که از طریق مستندسازی قابل انتقال نمیباشد.
من و تیمی که در آن بودم، متوقف نشدیم. ما سعی میکردیم به عنوان تستر در کنفرانسهای Open Space، و بعدا در کنفرانسهای منظم و دورههای آموزشی شرکت کنیم. من تمام آموزههای تست را به فرمت Mob تبدیل کردم. میخواستم به افراد Taskای بدهم، و سپس Task را بر مبنای یکی از حالات پایین خُرد کنم:
- خُرد کردن با محدودیتهایی که آنها را سادهتر میکند.
- خُرد کردن به منظور معرفی تکنیکهایی که در دیدگاههای جدید به ارمغان خواهد آمد.
این شیوه به یک روش قدرتمند برای تدریس و یادگیری از طریق انجام Taskها در یک محیط امن و پشتیبانی شده تبدیل شد.
با گذشت زمان، من Taskهای تست را به منظور یادگیریِ توسعۀ تست محور یا TDD و دیگر انواع اتوماسیون تست، از Exploratory Test به ایجاد Selenium Automation بسط دادم. برای دَرک این موضوع، ما باید درباره Mobهای برنامهنویسی صحبت میکردیم.
وجود یک تست در Mob برنامهنویسی
در حالکیه فعالیتهای Mob Testing یک تمرین عالی برای یادگیری بوده و طی آن دانش ضمنی از یک نفر به دیگران منتقل میشود، باید در نظر داشت که تست ازدحامی یا همان Mob Testing برای یک تستر در Mob برنامهنویسی، فعالیتیست که قابلیتهای تیمی را دگرگون میکند.
تیم من یک Mob را برای آموزش هفتگی آغاز کرد. اول روی بازسازی کد(Code Refactoring)، که در حال حاضر بواسطه شناخت خوب روی مفاهیم دامنه، پیشنهادات مناسبی در قسمتهایی از کد ارائه میدهم. دوم درباره به اشتراکگذاری دانشِ اتوماسیونِ سِلِنیوم توسط یک توسعهدهنده بود، که به تنهایی عملیات نگهداشت را انجام میداد. بعلاوه در حال حاضر بسیاری از نفرات تیم(از جمله من) قادر به اضافه کردن اسکریپت سلنیوم هستند.
اکنون میبینم که ایدههای بهتری در مورد اینکه چیه چیزی را چگونه تست کنیم، ارائه دادهام.
دو جلسه که بیش از همه در مورد عملکرد ازدحامی به من اعتماد به نفس بیشتری داد، جایی بود که ما روی افزودن امکانات جدید کار میکردیم. من به وضح کمکهای خودم را در آن میدیدم، که عبارت بودند از:
- اصلاح اشتباهات بدون غرور در بازی: قبول کردن مسالهای که میتوانست از اشتباهات پرهزینه ما باشد، ما را از هفتهها کار با بازخورد سریع نجات داد، و به جای اینکه یک نفر خطا را پیدا کند و یک نفر سرزنش شود، همه ما با هم مشکلات را یافته و مرتفع کردیم.
- تفکر سنجیده: سرعت پایین من در زمان نوشتن کدی که تحت آموزش توسعهدهندگان صورت میگرفت، باعث میشد درباره آنچه آنها به من میگفتند دقیق فکر کنم. آنها متوجه شدند که این روش منتج به خروجیهای بهتری میشود.
- کشف مخفیکاری: ما امکانات بیشتری را بعد از Mobbing آماده میکردیم، چرا که من در خلال توسعه، ایدههای تست را به میان میآوردم. مثلا اینکه: “آیا ما میتوانیم آنرا به کاربر دیگری تغییر دهیم؟” یا “ما میتوانیم برای یک تغییر آنرا در IE9 اجرا کنیم؟”.
- وجود یک وجدان کیفی: همه ما به تمیزکاریِ کد، و پایان کار با Exploratory Test اهمیت میدادیم. زمانهایی بود که بعضیها به من نگاه میکردند و میگفتند: “شما از ما میخواهید که این را انجام دهیم. درست است؟”.
- انتقال مهارتهای تست: توسعهدهندگان گرفتار اصول تست بودند، در حالیکه من دارای مهارتهای عمیقتری بودم، که میتوانستم به آنها منتقل کنم.
آموزش قوی
در یک Mob، قانون کلیای که همیشه باید به یاد داشته باشید “آموزش و کمک” است. اگر هر کس یکی از این دو مورد را انجام دهد، یک Mob کارا خواهیم داشت. همه ما قدرت و مهارتهای خاص خود را داریم، و البته مالک ضعفهای ویژه خود نیز هستیم. زمانیکه ما در یک Mob کار میکنیم، هر کس بهترین کمک خود را در کاری که انجام میدهیم، ارائه میدهد.