A few ambiguities and inaccuracies in what you wrote:
sagabiz solutions wrote:TDD is the technical team that all cases of unit tests will be written
TDD often involves the users as well since users are often the only ones who can answer questions that can come up during a TDD session.
TDD is installed for testing
Not sure what you mean by "installed" for testing. TDD is practiced, it is not "installed". Also, TDD is focused on
design as much as, if not more than, it is on testing. Tests in TDD are used to drive your design thinking but the main activity when you do TDD is usually design.
TDD encourages technicians to design as little as necessary
This statement is ambiguous. TDD encourages simple designs. Constant refactoring and the TDD cycle encourage developers to write small increments in cycles that last maybe 2 minutes. Cycles that last more than 10 minutes are discouraged. TDD is guided by
YAGNI and
Do the Simplest Thing That Could Possibly Work. You can't do that if you're writing code for hours between running your tests. You are, however, doing a LOT more design and refactoring of the design as you go along.
TDD help the programmer clearly see what to build and when to stop stop built. TDD focuses aspect of the implementation of the system
This could be worded better. TDD helps the developer stay focused on building only the functionality that is currently needed. It still requires a lot of discipline to be able to adhere to YAGNI and DTSTTCPW. I am not clear on what you mean by "focuses aspect of the implementation of the system"
TDD methodology is Inside-Out, TDD is more like a development tool for building testable, modular architecture.
I'm not sure what you mean by "methodology is Inside-Out". TDD is not a methodology. It's just a practice or a technique, if you will. You might say it's a "tool" in the same sense as "knowledge and skills" are tools. You need some knowledge and skills to do TDD effectively. Doing TDD does not guarantee that you'll end up with a testable, modular architecture. Prudent and consistent application of
good design choices and practices is what leads to testable, modular architectures. TDD provides the framework for thinking and developing in a way that facilitates and encourages making good design choices but success in doing so still hinges on the developer and his/her skills and discipline. The tools don't make beautiful work products; the skilled artists and craftsmen using the right tools do. A donkey with a Stradivarius cannot play beautiful music in an orchestra.
Tdd = Refactoring + TFD Behavior Driven Development
I really don't know about this one. BDD is often seen as a higher-level form of TDD. Some would argue that BDD is TDD "done right". I would say that BDD can help focus TDD on the more important aspects of the design. Sometimes TDDers can get too caught up in the low-level implementation details and lose sight of the forest for the trees. BDD can help refocus your attention on the big picture. That's not to say that you can't find yourself in a rathole if you do BDD. It all depends on how much discipline and focus the developers have.
then BDD is to take care of the functional aspects thereof. average can be understood by non-developers too
Tools like Cucumber are associated with BDD and help developers produce very human-readable executable tests and documentation. However, good naming and coding conventions can give JUnit tests developed during TDD a very similar level of expressiveness and readability. The key is to choose good names and follow certain coding conventions.
The act of writing examples BDD style gives everyone on the project a clear understanding of what it means to a function and when to stop its construction.
Rather than "function", I would say "feature" - BDD helps you clearly define the different aspects of a feature that you want to develop and test. This is accomplished by having a number of scenarios to illustrate what to expect from a given feature. The scenarios are often a form of "Specification by Example". Edit: I would add that it is not so much the "act of writing examples BDD style" that gives everyone a clear understanding of the feature. Rather, it is the discussions that occur and the collaboration that takes place during the development of the tests that helps the team members involved form a common understanding of what exactly it is they are attempting to build. If one single person does all the writing in BDD style and does not involve other members of the team, that common understanding will likely still not be there.