In his rant at QCon London 2012 on developers having mental disorders Greg Young made also a great point about design patterns. He has said that the main (only) value of design patterns is that they enable developers speak the same language. For example, if you mention that a piece of code implements singleton or factory design pattern, your fellow programmer should grasp the purpose the code immediately without the need for detailed explanation. Unfortunately, the book by Gang of four intertwined the concept of design patterns with object oriented programming and maybe that is the reason why design patterns have never gained wide adoption outside of Java world and, even more unfortunate, never become domain specific language of programmers. Most (all) conflicts arise because people don't understand each other. I've participated in too many heated discussions, that at the end turned out to be heated just because people used same words for different concepts. Therefore, I think that it would really be beneficial to our field to develop a more comprehensive set of terminology that would enable programmers talk about their code on a higher level of abstraction, thus improving efficiency of our communication.
I want to spend some time documenting the different types of automated tests I encounter most often, detailing each type’s distinct characteristics, advantages, and challenges.