Acceptance Testing for Continuous Delivery – Dave Farley

Learn how to build acceptance testing for continuous delivery, including the use of Domain Specific Languages, fake interfaces, and time control, to ensure efficient, repeatable, and isolated testing that balances isolation and efficiency.

Key takeaways
  • Acceptance testing is about evaluating software in controlled circumstances, specifying the work before starting, and ensuring tests are efficient, repeatable, and isolated.
  • Domain Specific Languages (DSLs) can be used to establish executable specifications for testing, but if not possible, poll and timeout mechanisms can be used.
  • It’s crucial to test the deployment of software and its configuration, as well as other aspects, to ensure functionality and efficiency.
  • Isolation is important for testing, and fake interfaces can be used to control interactions and identify issues.
  • Time can be a problematic aspect in testing complex systems, and using fake time or controlling time can help.
  • Cheating on time can be allowed in certain situations, but it’s essential to balance isolation and efficiency.
  • Contract-based testing can be used to establish clear boundaries and focus testing on specific interfaces.
  • Efficient startup and deployment can significantly impact the speed and efficiency of testing.
  • Determinism is crucial for testing, and using DSLs or faking external systems can help achieve this.
  • It’s essential to be able to test complex changes and interactions in a system, and considering the separation of concerns can help.
  • Functional isolation can be useful for testing complex systems, and capturing tests as mini specifications can help guide development.
  • Using shared resources can be problematic, and dynamic test allocation can help ensure efficient use of resources.
  • Automation can streamline the testing process, but it’s crucial to balance automation and manual testing.
  • Isolation can be achieved by using shared nothing architecture, and designing tests to be independent can help ensure efficient testing.
  • DSLs can be used to establish specifications for testing, and capturing tests can help ensure predictability and efficiency.
  • Balancing isolation and efficiency is crucial for effective testing, and using DSLs or faking external systems can help achieve this balance.