TDD
Firstly, Test Driven Development (TDD) which is a process of writing tests before writing code and make the test fail. Now write enough code so that test can pass and then at last refactor the code as per you requirement and make sure the test is passing again after the change. Now, the main focus of TDD will be on testing the low-level functionality and units (for single classes and methods) that can lead to more flexible code and easier refactoring. In a simple language we can say, we write these tests to check if the code we wrote works fine.- Write just enough code so it runs
- Create interfaces for arithmetic operations
İlk adım olarak, test etmek isteyeceğimiz metotları içeren arayüz tiplerini oluşturuyoruz. Bu sayede kodumuz esnetilebilir bir yapıyla doğacak ve ileride concrete sınıflara değil bu arayüzlere bağımlı olacağı için işleyişi sağlayan kodumuzu dilediğimizde değiştirebileceğiz. Bu sayede sadece gerekli metotları içeren ve arayüze bağlı sınıfları kullanabileceğiz. - Create a class to implement those interfaces İkinci adımda concrete class yaratarak bu arayüzü miras alacak ve esas işi yapacak kodumuzu bu sınıfın metotlarına giydireceğiz.
- Create interfaces for arithmetic operations
- Think through how to test the code
- Write test cases
Artık sınıflarınızın metotlarını(en küçük birimlerini -birim test-) test edebilecek metotları yazıyor ve testi başarıncaya kadar yani beklediğiniz sonucu alıncaya kadar sınıflarınızın metotlarını tekrar tekrar yazıyorsunuz.
ref: https://youtu.be/2Ekty7t621k?t=4m48s
- Write code until test cases pass
- ref:https://www.youtube.com/watch?v=2Ekty7t621k
ATDD
ATDD is a collaborative exercise that involves product owners, business analysts, testers, and developers. ATDD helps to ensure that all project members understand precisely what needs to be done and implemented.Buna en güzel örnek selenium ile yazdığınız ya da firefox eklentisi üstünden tasarlayıp azıcık kodla süslediğiniz testi örnek verebilirim.
BDD
BDD focuses on the behaviors of your system exhibits than the implementation details of it.The focus of BDD is the language and interactions used in the process of software development. Behavior-driven developers use their native language in combination with the language of Domain Driven Design to describe the purpose and benefit of their code. This allows the developers to focus on “Does my code do what it’s supposed to do?” in addition to “Does my code work?”
Mocha ile yazdığımız testleri BDD örneği olarak bulabilirsiniz. Daha konuşma diline uygun biraz daha birim testlerin kümesi olan test türüdür.
Ref: https://www.linkedin.com/pulse/agile-development-difference-between-tddatddbdd-komal-sureka
DDD
DDD stands for Domain Driven Design. Is a way to design complex system by creating models and sub models of the domain that the system tries to implement. In the though process it means to understand the big picture, decompose it, and understand the relationships between the parts. The benefit is that it facilitates the creation of well cohesive systems.Alan güdümlü tasarım olarak çevirebiliriz. Buradaki alan müşterinin ihtiyaçlarını ve çalışma ortamını kapsayan daire olsun. Yazılacak programın çözmesi gereken soruna problem alanı denir. Yazılımcı müşteriyle konuşurken onun ihtiyaç ve isteklerine uygun(problem domainine uygun) bir Domain Model çıkarır. Bu domain model gerçek senaryolarla denenir ve tüm sürece uygun hale getirilinceye kadar tekrar oluştururlur. Bu özyinelemeli süreç DDD'nin yazılım geliştirme yaklaşımıdır.
Ref: linkedin-Jorge Varas
youtube.com
flowframework.readthedocs.io
FDD
FEATURE DRIVEN DEVELOPMENT METHODOLOGYRef: http://thedynamicdomain.com/feature-driven-development.aspx
LEAN
In a nutshell, Lean says to relentlessly eliminate anything that isn’t adding value and only work on what we absolutely need to be doing at this moment in time. Eliminating waste means eliminating useless meetings, tasks and documentation. But it also means eliminating time spent building what “we know” we’ll need in the future (things are constantly changing so we often end up not needing them – or if we do, we have to rework them because conditions and our understanding has changed by then). It also means eliminating inefficient ways of working – like multitasking (!) – so we can deliver fast.- Eliminate Waste
- Build Quality In
- Create Knowledge
- Defer Commitment
- Deliver Fast
- Respect People
- Optimize the Whole
AGILE
- Highest priority is customer satisfaction
- Welcome changing requirements
- Frequent delivery of software
- Business people & developers cooperating daily
- Build projects around motivated people
- Face-to-face conversation is best
- Progress measured by working software
- Sustainable development pace
- Continuous attention to technical excellence
- Simplicity
- Self-organizing teams
- Regular reflection & adaptation
Ref: https://hackerchick.com/agile-vs-lean-yeah-yeah-whats-the-difference/