یکی دو سال پیش چند فصل از کتاب مهندسی نرم افزار در گوگل که درباره ی تست بود را مطالعه و به دلیل باارزش بودن محتوا برای خودم ترجمه کردم که هر موقع خواستم راحتتر مرور کنم و الان تصمیم گرفتم که منتشر کنم تا بقیه هم استفاده کنند. برای شروع با مقدمه فصل یازدهم Testing Overview شروع می کنم:
تست کردن همیشه بخشی از برنامه نویسی بوده است. در واقع، اولین باری که یک برنامه کامپیوتری نوشتید، مطمئناً یک سری داده ی نمونه را روی آن اجرا کردید تا ببینید آیا آنطور که انتظار داشتید عمل میکند یا خیر. برای مدت طولانی، وضعیت رایج تست نرم افزار شبیه همین روند بود که عمدتاً دستی و پر خطا بود.
اما از اوایل دهه 2000، رویکرد تست در صنعت نرم افزار به طور چشمگیری برای مقابله با اندازه و پیچیدگی سیستمهای نرمافزاری مدرن تکامل یافته است.
مرکز این تحول تست خودکار developer-driven بوده است. تست خودکار میتواند از وجود باگها جلوگیری کند. تست خودکار میتواند جلوی انتشار باگها به محیط واقعی و آسیب رساندن به کاربران را بگیرد.
هر چقدر یک باگ دیرتر شناسایی شود هزینه سنگین تری خواهد داشت که در برخی از موارد این هزینه به صورت نمایی افزایش پیدا می کند. با این حال رفع اشکالات و باگها فقط یکی از انگیزه های تست نویسی است. یک دلیل با اهمیت برای تست نرم افزار پشتیبانی از قابلیت تغییر است. چه در حال افزودن فیچرهای جدید باشید، چه ریفکتور کنید یا یک redesign بزرگتر انجام دهید، تست خودکار باعث می شود به سرعت اشتباهات را تشخیص داده و این باعث می شود تغییر نرمافزار با اطمینان انجام شود.
شرکتهایی که بتوانند سریعتر تکرار (iteration) کنند، قادرند با سرعت بیشتری خود را با تغییرات فناوری، شرایط بازار و سلیقهٔ مشتریان وفق دهند. اگر یک رویهٔ تست قوی داشته باشید، دیگر نیازی نیست از تغییر بترسید—میتوانید آن را بهعنوان بخشی ضروری از توسعهٔ نرمافزار بپذیرید.
هر چه بیشتر و سریعتر بخواهید سیستمهای خود را تغییر دهید، بیشتر به یک راه سریع برای تست کردن آنها نیاز دارید. خود عمل نوشتن تست طراحی سیستم های شما را بهبود می بخشد. تست ها به عنوان اولین کلاینت کد شما، می توانند چیزهای زیادی در مورد طراحی شما به شما بگویند. مثلا:
آیا سیستم شما خیلی زیاد با پایگاه داده درگیر است یا خیر؟ آیا API سناریوهای مورد نیاز را پشتیبانی می کند؟ آیا سیستم شما تمام edge case ها را کنترل می کند؟
نوشتن تست های خودکار شما را وادار می کند که در اوایل توسعه با این مسائل روبرو شوید. انجام این کار منجر به تولید نرم افزار ماژولار تر می شود که بعداً انعطاف پذیری بیشتری را فراهم می کند.
تا به حال در مورد موضوع تست نرم افزار بسیار نوشته شده است، و دلیل خوبی هم دارد: چون با وجود اهمیت بالا این کار ، اجرای درست آن هنوز برای بسیاری از افراد کاری مرموز به نظر می رسد.
در گوگل، با اینکه راه زیادی آمدهایم، همچنان با چالشهای سختی روبهرو هستیم تا فرآیندهای تستمان را در مقیاس کل شرکت قابل اعتماد نگه داریم.
در بخش بعدی بیشتر در مورد اهمیت تست و چرایی آن صحبت می کنیم.