Extensively class tested, this text takes an innovative approach to explaining the process of software it defines testing as the process of applying a few well-defined, general-purpose test criteria to a structure or model of the software. The structure of the text directly reflects the pedagogical approach and incorporates the latest innovations in testing, including techniques to test modern types of software such as OO, web applications, and embedded software.
کتاب مقدمهای بر آزمون نرمافزار یکی از مراجع اصلی درس آزمون نرمافزار در مقطع ارشد است. کتاب به مباحث نظری آزمون نرمافزار میپردازد و نگاهی ریاضی به کیفیت نرمافزار دارد.
محتوا بیشتر بخش کتاب مباحث نظری است و حدود ۲۰ درصد به مباحث عملی میپردازد. در بخش مباحث نظری چهار نوع نگاه برای طراحی آزمون را بیان میکند:
۱. معیارهای مبتنی بر واسط ۲. معیارهای مبتنی بر منطق ۳. معیارهای مبتنی بر گراف ۴. معیارهای مبتنی بر گرامر
یکی از موضوعات جذاب کتاب در بخش معیارهای مبتنی بر گرامر و مبحث آزمون موتاسیون (جهش) میبینید. آزمون موتاسیون با این هدف اجرا میشود تا اثربخشی موارد آزمون نوشته شده را بسنجد.
فرض کنید در بخشی از کد بررسی شود که آیا متغیر x کوچکتر از ۱۰ است یا نه. در آزمون موتاسیون یک موتانت تعریف میکنیم که به جای کوچکتر از ۱۰ کد را به کوچکتر مساوی ۱۰ تغییر دهد. حال موارد آزمون را اجرا میکنیم. اگر موارد آزمون نوشته واقعا خوب باشند انتظار داریم که یکی از آزمونها با شکست مواجه شود. در این صورت میگوییم موتانت کشته شده است. اگر همه موارد آزمون برای این موتانت خاص پاس شوند میگوییم موتانت زنده مانده است. اگر فرض کنیم که ۵۰۰ موتانت در جاهای مختلف برنامه ایجاد شده است، نسبت تعداد موتانتهای کشته شده به عدد ۵۰۰ میزان اثربخشی و خوب بودن موارد آزمون را نشان میدهد.
جمعبندی کتاب دید شما را نسبت به کیفیت نرمافزار و آزمون آن تغییر میدهد. بخشی که به نظرم نقطه ضعف کتاب محسوب میشود، ۲۰ درصد مباحث عملی است. از آن جایی که کتاب روی مباحث نظری تمرکز دارد به نظرم ضرورتی به بیان بخشهای عملی آن هم به صورت سطحی اصلا وجود نداشت. برای مباحث عملی میتوان به کتابهای دیگر مراجعه کرد.
Software testing is a complex subject yet it is of major importance in a software's life cycle. This book tries to address why testing is important, what should be done for it to be properly adapted and implemented in a software, and how it can be practiced. The focus of this book is how to apply different testing techniques in a software application in order to reduce risks. In the first chapter an introduction of testing terms and definitions are provided to lay the grounds for upcoming chapters. chapters 2 through 5 graph, logic, input domain models, and syntax testing is covered in detail in terms of coverage criteria (A threshold that must be achieved to accept that testing is complete) and how to achieve them. It also explains the relations between different criteria and provide examples of how different software artifacts (code, UML diagrams...etc) can be covered. The books weakness is it sometimes gets too complicated when trying to explain a concept that I was often grateful that I had attended the class so that I would be able to connect the dots, as I do not think it is possible to understand them via the book alone.
I thought the graph coverage chapter was very well done and the coverage criteria and regression testing chapters were good. I didn't find much of the rest of the book useful. Mostly too abstract, despite having examples, didn't really explain adequately what was going on with those topics.
As a testing neophyte, I found this book to be very helpful in learning the principals behind software testing, as well as their practical appications.