本书探讨了50个至关重要的最佳实践、缺陷及解法。这些具体项目是从作者丰富的实践经验中收集而来,能够使质量保证专业人员和测试管理人员即刻提高其理解能力和技巧,避免重大错误,并实现当前水准的测试程序.
本书以介绍如何将测试运用到软件开发生命周期的所有阶段中为重点——从需求定义到设计直至最终代码;书中的50课主要集中于讲述软件测试的关键方面:测试计划、设计、文档、执行、管理测试小组、单元测试、自动化测试、非功能测试等
读者将从书中学到:
在具有优先级的特征时间表上进行的基本测试
评估测试准备和执行 定义测试小组的角色和职责
需求一旦可以满足即设计测试程序
从需求中得出有效测试用例
避开测试程序中的约束条件和具体的数据元素
生成构建程序中的单元测试执行部分
使用日志增强系统可测试性
在应用程序原型上对自动化测试工具进行测试
在一切可能的时间自动进行回归测试
整本书中,通过大量真实和具体的实例描述了这些重要原理和技术的成功应用,读者通过本书可快速查阅当今一流的软件质量和测试权威奉献的专家级技术和建议。
Elfriede Dustin是《Automated Software Testing》(Addison-Wesley,1999)和《Quality Web Systems》(Addison-Wesley,2002)的主要作者她是软件工程和测试实践领域公认的专家,在QA的定义和实现以及测试过程方面帮助过很多公司。详情可访问网站:http://www.effectivesoftwaretesting.com
Preface
Acknowledgments
1. Requirements Phase
Item 1: Involve Testers from the Beginning
Item 2: Verify the Requirements
Item 3: Design Test Procedures As Soon As Requirements Are Available
Item 4: Ensure That Requirement Changes Are Communicated
Item 5: Beware of Developing and Testing Based on an Existing System
2. Test Planning
Item 6: Understand the Task At Hand and the Related Testing Goal
Item 7: Consider the Risks
Item 8: Base Testing Efforts on a Prioritized Feature Schedule
Item 9: Keep Software Issues in Mind
Item 10: Acquire Effective Test Data
Item 11: Plan the Test Environment
Item 12: Estimate Test Preparation and Execution Time
3. The Testing Team
Item 13: Define Roles and Responsibilities
Item 14: Require a Mixture of Testing Skills, Subject-Matter Expertise, and Experience
Item 15: Evaluate the Tester's Effectiveness
4. The System Architecture
Item 16: Understand the Architecture and Underlying Components
Item 17: Verify That the System Supports Testability
Item 18: Use Logging to Increase System Testability
Item 19: Verify That the System Supports Debug and Release Execution Modes
5. Test Design and Documentation
Item 20: Divide and Conquer
Item 21: Mandate the Use ora Test-Procedure Template and Other Test-Design Standards
Item 22: Derive Effective Test Cases from Requirements
Item 23: Treat Test Procedures As "Living" Documents
Item 24: Utilize System Design and Prototypes
Item 25: Use Proven Testing Techniques when Designing Test-Case Scenarios
Item 26: Avoid Including Constraints and Detailed Data Elements within Test Procedures
Item 27: Apply Exploratory Testing
6. Unit Testing
Item 28: Structure the Development Approach to Support Effective Unit Testing
Item 29: Develop Unit Tests in Parallel or Before the Implementation
Item 30: Make Unit-Test Execution Part of the Build Process
7. Automated Testing Tools
Item 31: Know the Different Types of Testing-Support Tools
Item 32: Consider Building a Tool Instead of Buying One
Item 33: Know the Impact of Automated Tools on the Testing Effort
Item 34: Focus on the Needs of Your Organization
Item 35: Test the Tools on an Application Prototype
8. Automated Testing:
Selected Best Practices
Item 36: Do Not Rely Solely on Capture/Playback
Item 37: Develop a Test Harness When Necessary
Item 38: Use Proven Test-Script Development Techniques
Item 39: Automate Regression Tests When Feasible
Item 40: Implement Automated Builds and Smoke Tests
9. Nonfunctional Testing
Item 41: Do Not Make Nonfunctional Testing an Afterthought
Item 42: Conduct Performance Testing with Production-Sized Databases
Item 43: Tailor Usability Tests to the Intended Audience
Item 44: Consider All Aspects of Security, for Specific Requirements and System-Wide
Item 45: Investigate the System's Implementation To Plan for Concurrency Tests
Item 46: Set Up an Efficient Environment for Compatibility Testing
10. Managing Test Execution
Item 47: Clearly Define the Beginning and End of the Test-Execution Cycle
Item 48: Isolate the Test Environment from the Development Environment
Item 49: Implement a Defect-Tracking Life Cycle
Item 50: Track the Execution of the Testing Program
In most software-development organizations, the testing program functions as the final "quality gate" for an application, allowing or preventing the move bom the comfort of the software-engineering environment into the real world. With this role comes a large responsibility: The success of an application, and possibly of the organization, can rest on the quality of the software product.
A multitude of small tasks must be performed and managed by the testing team--so many, in fact, that it is tempting to focus purely on the mechanics of testing a software application and pay little attention to the surrounding tasks required of a testing program. Issues such as the acquisition of proper test data, testability of the application's requirements and architecture, appropriate test-procedure standards and documentation, and hardware and facilities are often addressed very late, if at all, in a project's life cycle. For projects of any significant size, test scripts and tools alone will not suffice——a fact to which most experienced software testers will attest.
Knowledge of what constitutes a successful end-to-end testing effort is typically gained through experience. The realization that a testing program could have been much more effective had certain tasks been performed earlier in the project life cycle is a valuable lesson. Of course, at that point, it's usually too late for the current project to benefit from the experience.
Effective Software Testing provides experience-based practices and key concepts that can be used by an organization to implement a successful and efficient testing program. The goal is to provide a distilled collection of techniques and discussions that can be directly applied by software personnel to improve their products and avoid costly mistakes and oversights. This book details 50 specific software testing best practices, contained in ten parts that roughly follow the software life cycle. This structure itself illustrates a key concept in software testing: To be most effective, the testing effort must be integrated into the software-development process as a whole. Isolating the testing effort into one box in the"work flow" (at the end of the software life cycle) is a common mistake that must be avoided.
The material in the book ranges from process- and management-related topics,such as managing changing requirements and the makeup of the testing team, to technical aspects such as ways to improve the testability of the system and the integration of unit testing into the development process. Although some pseudocode is given where necessary, the content is not tied to any particular technology or application platform.
It is important to note that there are factors outside the scope of the testing program that bear heavily on the success or failure of a project. Although a complete software-development process with its attendant testing program will ensure a successful engineering effort, any project must also deal with issues relating to the business case, budgets, schedules, and the culture of the organization. In some cases, these issues will be at odds with the needs of an effective engineering environment. The recommendations in this book assume that the organization is capable of adapting, and providing the support to the testing program necessary for its success.
ORGANIZATION
This book is organized into 50 separate items covering ten important areas. The selected best practices are organized in a sequence that parallels the phases of the system development life cycle.
The reader can approach the material sequentially, item-by-item and part-by-part, or simply refer to specific items when necessary to gain information about and understanding of a particular problem. For the most part, each chapter stands on its own, although there are references to other chapters, and other books, where helpful to provide the reader with additional information.
Chapter 1 describes requirements-phase considerations for the testing effort. It is important in the requirements phase for all stakeholders, including a represen-tative of the testing team, to be involved in and informed of all requirements and changes. In addition, basing test cases on requirements is an essential concept for any large project. The importance of having the testing team represented during this phase cannot be overstated; it is in this phase that a thorough understanding of the system and its requirements can be obtained.
Chapter 2 covers test-planning activities, including ways to gain understanding of the goals of the testing effort, approaches to determining the test strategy, and considerations related to data, environments, and the software itself. Planning must take place as early as possible in the software life cycle, as lead times must be considered for implementing the test program successfully. Early planning allows for testing schedules and budgets to be estimated, approved, and incorporated into the overall software development plan. Estimates must be continually monitored and compared to actuals, so they can be revised and expectations can be managed as required.
Chapter 3 focuses on the makeup of the testing team. At the core of any successful testing program are its people. A successful testing team has a mixture of technical and domain knowledge, as well as a structured and concise division of roles and responsibilities. Continually evaluating the effectiveness of each test-team member throughout the testing process is important to ensuring success.
Chapter 4 discusses architectural considerations for the system under test. Often overlooked, these factors must be taken into account to ensure that the system itself is testable, and to enable gray-box testing and effective defect diagnosis.
Chapter 5 details the effective design and development of test procedures, including considerations for the creation and documentation of tests, and discusses the most effective testing techniques. As requirements and system design are refined over time and through system-development iterations, so must the test procedures be refined to incorporate the new or modified requirements and system functions.
Chapter 6 examines the role of developer unit testing in the overall testing strategy. Unit testing in the implementation phase can result in significant gains in software quality. If unit testing is done properly, later testing phases will be more successful. There is a difference, however, between casual, ad-hoc unit testing based on knowledge of the problem, and structured, repeatable unit testing based on the requirements of the system.
Chapter 7 explains automated testing tool issues, including the proper types of tools to use on a project, the build-versus-buy decision, and factors to consider in selecting the right tool for the organization. The numerous types of testing tools available for use throughout the phases in the development life cycle are described here. In addition, custom tool development is also covered.
Chapter 8 discusses selected best practices for automated testing. The proper use of capture/playback tools, test harnesses, and regression testing are described.
Chapter 9 provides information on testing nonfunctional aspects of a software application. Ensuring that nonfunctional requirements are met, including performance, security, usability, compatibility, and concurrency testing, adds to the overall quality of the application.
Chapter 10 provides a strategy for managing the execution of tests, including appropriate methods of tracking test-procedure execution and the defect life cycle, and gathering metrics to assess the testing process.
AUDIENCE
The target audience of this book includes Quality Assurance professionals, software testers, and test leads and managers. Much of the information presented can also be of value to project managers and software developers looking to improve the quality of a software project.