Presenting the state-of-the-art in component-based software testing, this new, cutting-edge resource offers you an in-depth understanding of the current issues, challenges, needs, and solutions in this critical component-based testing and quality assurance in an accessible tutorial format, making the material easy to comprehend and benefit from no matter what your professional level.
Review By: Jon D. Hagar 07/08/2010“Testing and Quality Assurance for Component-Based Software” is a comprehensive overview of a subject that many pure “test books” neglect. The book begins with a basic background on the development lifecycle of components. Early chapters address software engineering, testing, features of components, and the important issue of testability. These chapters serve as an introduction to later sections, which deal with validation methods for components and validation methods for component-based systems of software.
While focusing specifically on components, much of each chapter deals with the generic aspects of software testing, and thus covers test topics, which are applicable to more than just component-based systems. Issues addressed include white box (structural) and black box (functional) testing as well as how to automate testing in these areas. The sections of the book that deal with testing components within a completed system address issues of integration testing, regression testing, performance assessment, metrics, as well as the need for larger scale frameworks to support testing of the components and the integrated system.
“Testing and Quality Assurance for Component-Based Software” largely conforms to classical models of software development, though OO and agile ideas also are presented. While the authors base their integration process largely on the classical model of the waterfall, they do include information on how agile concepts enter the component world. It would be nice to see more on Agile, but there have been only a few experience reports in industry talking to component-based agile projects, and probably not enough for compilation into a book.
The book’s focus on the classical black box and white box testing, in part, ignores more recent thinking where testers exercise behavioral testing using both black and white approaches/measures at the same time. This is not an issue of completeness in testing, because the techniques and methods outlined are sufficient and most organizations use only a few of each. In any case, this does reflect the basic use of the waterfall concept. Also, while the book presents a good survey of test techniques, there are more published techniques than what the book contains, probably due to space/size limitations.
The book is a mixture of writing based on the authors’ experiences and the published research. Each chapter comes with a reference section of articles, and the authors include both a practical (how-to) bend for the practicing professional, with some theory for the student/researcher thrown in. Several sections of the book, particular Section 2.3, have good experience-based lessons learned and details on common “myths” concerning components and component-based testing.
The glossary, index, and definition section is less than what one might want for a tabletop reference book, which is how I would use this book. However, by using the table of contents, one can navigate fairly quickly to topics and useful information. I do feel that there are sections that contain too much theory and academia. While this may put off some readers, those people using the book for teaching or research will find this beneficial. Topics that are a little too “academic”, include reliability/probability concepts, mutation analysis, and component interaction graphics.
Occasionally, some details on specific techniques were left for readers to find in the supporting material. This was likely done to keep the book’s size to a manageable level. Finally, there is not much on how to do component configuration management, which for me is important topic, if one is dealing with many “pieces” of components.
The book has some typo and printing problems, but they are minor compared with the technical overviews and details, that are presented. There is a nice explanation of the difference between a software component and traditional module development/characteristic. This is extended in later sections to lifecycle and programmatic (management) issues.
The book is applicable to testers regardless of whether the component software they test is reused or created from scratch, as well as to in-or out-of-house developers. Others that can benefit from this book include companies looking to outsource, groups doing component development or developing systems with components, and teachers who are looking for a general textbook on testing. Personally, I will keep this book on my shelf, and use it for my outsourcing problems and component development.