(...from a question in ExtremeHumility.)
CleanroomSoftwareEngineering has a different kind of arrogance and humility than discussed in ExtremeHumility. In Clean Room...
- Programmers try to make programs work. Testers try to make programs fail. You can't do both and expect to be good at both. So, programmers should stop doing a bad job of testing, and focus on doing it right the first time.
- Subjective assessment of correctness (even "proof of correctness") is often inaccurate. So testers use statistical methods to objectively measure software reliability, giving developers feedback. Developers adjust methods to achieve the desired level of reliability. (Like 99.9%, for example.)
Arrogance:
- Clean Room assumes that the requirements are correct.
- Clean Room asserts that ItIsPossibleToWriteProgramsWithoutBugs?. (Actually: Programs can have an arbitrary desired level of reliability after peer review, without running the program to find and eliminate bugs.)
Humility:
- The programs will still have bugs. Feedback from independent statistical testing ensures that bug frequency will be at the desired (very low) level.
- If programmers aren't allowed to "test quality into their programs" (which can't be done anyway), then they'll have to write well-documented maintainable programs -- else they can't convince their peers that the programs are correct.
- Various studies have all shown that code reviews are more effective than testing for detecting bugs. Clean-room developers recognize and accept this fact, even though it means missing out on the warm-fuzzy (but deceptive) feeling a few tests would provide. --BillTrost (suggested addition, feel free to tweak or rip)
The statement "testers try to make programs fail" is somewhat suspect in the Cleanroom context. Cleanroom testing is an effort to determine the software's failure rate (mean time to failure) under representative use. They're not trying to make it fail -- they're just trying to use it in the lab as closely as possible as to how it will be used in the field. --BillTrost
XP addresses the programmer/testing issue by writing tests before writing the programs.
This is an oft-recommended practice that is rarely actually accomplished with most other methodologies.
XP's PairProgramming deals with the quality issue like this: Your partner has to understand it.
Both XP and Clean Room do CodeReviews.
But they do them very differently.