تست جوئل قسمت دهم: تست نرم‌افزارها

تست دهم جوئل: آیا بخش تست شما جداست؟

خود آقای اسپالسکی در یک پاراگراف خیلی خوب، موضوع را توضیح داده. اجازه بدهید اول ترجمه توضیح تست را با هم مرور کنیم:

اگر در تیم شما افرادی که وقتشان اختصاصاً برای تست کردن باشد -حداقل یک نفر برای هر دو یا سه برنامه‌نویس- وجود نداشته باشد، شما یا محصولات باگ‌دار تحویل خواهید داد، و یا اینکه با پرداخت 100 دلار در ساعت به جای 30 دلار در ساعت، پولتان را هدر می‌دهید. خساست در زمینه افراد جهت بخش تست، آن‌قدر صرفه‌جویی احمقانه‌ای است که من تعجب می‌کنم که چرا اکثر مردم نمی‌فهمند

در ادامه هم لینکی به توضیح 5 دلیل اصلی اشتباه استخدام نکردن Tester ها داده شده است که در مطلب جداگانه‌ای آن را برای شما ترجمه خواهم کرد.

اما در ادامه ابتدا از اهمیت تست خواهم گفت و بعد به موضوع نیاز به بخش تست در یک تیم نرم‌افزاری صحبت خواهم کرد.

آیا نرم‌افزار من احتیاج به تست دارد؟

بعضی مواقع پاسخ دادن به یک سوال آسان نیست به این خاطر که سوال اشتباه است. این سوال که آیا نرم‌افزارها نیاز به تست دارند هم از آن سوال‌های اشتباه است. دلیل عمده مطرح شدن این سوال این است که تست نرم‌افزار، با عدم وجود خطا هنگام کامپایل اشتباه گرفته می‌شود.

اگر نرم‌افزاری که نوشتید، خطای زمان کامپایل نمی‌دهد لزوماً‌ به این معنی نیست که درست کار می‌کند. تست نرم‌افزار به شما کمک می‌کند که مطمئن شوید به همه جنبه‌های صورت‌ مساله، در راه‌حلی که کدنویسی کرده‌اید فکر شده است. اینکه لازم است به همه جنبه‌های صورت‌مساله در راه‌حل‌تان فکر کنید به این خاطر است که کامپیوتر‌ها هنوز آن‌قدر هوشمند نشدند که خودشان بتوانند مشکلاتشان را برطرف کنند و در یک نرم‌افزار، این وظیفه برنامه‌نویس است که بگوید که در هر حالتی و بر اساس هر ورودی، نرم‌افزار چه تصمیمی بگیرد و چه خروجی را به کاربر بدهد.

در مجموعه داستان‌های 007، تصور کنید اگر گجت‌هایی که Q درست می‌کرد تست نمی‌شدند، چه بلایی سر جیمز باند می‌آمد!

چطور نرم‌افزارم را تست کنم؟

قبل از اینکه درباره چگونگی تست نرم‌افزارها صحبت کنیم باید درباره انواع تست‌ها بگوییم. تست‌ نرم‌افزارها را بر اساس معیارهای مختلف می‌توان تقسیم‌بندی کرد. یکی از این معیارها، خود تست کننده نرم‌افزار است.

تست کننده نرم‌افزار می‌تواند خودش یک نرم‌افزار باشد، مثل زمانی که شما می‌خواهید تست load روی نرم‌افزار داشته باشید و ترافیک شبیه‌سازی شده نرم‌افزاری را روی برنامه‌تان هدایت می‌کنید. اما بعضی تست‌ها هستند که صرفاً باید توسط انسان انجام شوند، صحبت من و همین‌طور موضوع بحث تست جوئل بیشتر در این خصوص است. البته واحد تست نرم‌افزار وظایف دیگری هم دارد که در ادامه به آن‌ اشاره خواهم کرد.

تا اینجا می‌دانیم نرم‌افزار ما برای اطمینان از صحت عملکردش در شرایط مختلف نیازمند تست است و همین‌طور می‌دانیم که اگر تست‌هایی که توسط نرم‌افزارهای مخصوص انجام می‌شود را در نظر نگیریم، بقیه تست‌ها نیازمند شخص یا اشخاصی است که آن‌ها را تست کننده نرم‌افزار یا Tester می‌نامیم.

Tester کیست و چه وظایفی دارد؟

اگر یک تیم یا شرکت نرم‌افزاری را به یک کارخانه تشبیه کنیم، برنامه‌نویسان کارگران خط تولید آن کارخانه هستند. وظیفه واحد تست نرم‌افزار این است که به واحد تولید بگوید که چه کاری را درست انجام ندادند و علاوه بر آن کیفیت نرم‌افزار را بسنجند.

بنابراین شخص Tester یا اعضای تیم تست، دو مدل کار بر عهده دارند: یکی اینکه بر اساس Test Case‌های تهیه شده به صورت دستی اقدام به تست نرم‌افزار کنند. معمولاً در Test Case ها مراحل تست و نتایج مورد انتظار مشخص هستند و بنابراین این بخش کار چندان مشکل نیست.

اما جنبه دشوار تست نرم‌افزار، سنجش کیفیت آن است. برای این کار Tester باید از نیازمندی که منجر به تولید نرم‌افزار شده است اطلاع داشته باشد و در واقع بداند استفاده کننده نرم‌افزار منتظر چه چیزی است و نرم‌افزار قرار است چطور به وی کمک کند. وقتی Tester دیدی نسبت به اینکه نرم‌افزار چه کاری می‌خواهد بکند نداشته باشد نمی‌تواند فراتر از Test Case های تعریف شده نرم‌افزار را بسنجد.

دقت کنید که وظیفه Tester ارائه راه‌حل نیست، حتی قرار نیست که Tester یک برنامه‌نویس باشد. وظیفه Tester اندازه‌گیری معیارهای مشخص و گزارش نتیجه به تیم تولید نرم‌افزار است. نتیجه اندازه‌گیری این معیارها گاهی کاملاً شفاف و قابل ارائه در قالب اعداد مثلاً تعداد باگ‌های یک نرم‌افزار. گاهی هم کیفی هستند مثل میزان user friendly‌ بودن نرم‌افزار.