Now that we’ve covered techniques for reducing the number of unintentional errors in programs through Design by Contract and unit testing, it’s time to return to object-oriented design. Specifically, we’re going to look at object-oriented design flaws, and how to detect them with a process called quality assurance (QA). Quality assurance, as it applies to software development, simply means checking if programming code adheres to coding standards. Object-oriented design flaws don’t just happen to beginners. They happen even to the most expert programmers through the lifetime of a project. Some design flaws are more drastic, meaning that they could seriously affect the ease of modifying your program over time, while others are just mild flaws that just introduce inconsistencies or inefficiencies in code. The flaws may arise from your initial design as you start writing your program, or they may creep into your code as you rewrite it. We’ll examine the most common design flaws, including naming of classes, methods and data, improper class design or inheritance, improper interactions between classes, code duplication, and overly complex methods.