Although TDD/BDD is ideal and as time is limited, you cannot always have 100% test coverage and always write test before implementing features, so, what is your approach to have a well tested project under a tight schedule?
My initial thinking is:
- Acceptance tests using RSpec
- Development
- Back to 1
After several iterations of Acceptance tests / development cycles then I will add
- Integration tests
Finally ship to QA for manual testing, if a bug was found, then add
- Unit tests
Do you think the above work flow reasonable?
Disclaimer: i’m test-infected
It’s a sliding scale between confidence on one end and short term delivery speed on the other. You can’t have both. You can ship faster by sliding to the right. The optimal position depends on your context (team skill, project uncertainity/risks, org culture, schedule, etc.)
As for the process outline above, I might be reading it wrong. It seems you’re slicing out unit testing for speed. i.e. Do ATDD without TDD.
If that’s where you are heading, I see the following risks
Finally IMHO acceptance / system tests should be the last level of defense ; not the first. I’ve seen teams struggling with code quality issues where the team isn’t sincere about code quality and relies on the system tests to catch everything; as said above, this is fooling yourself. TDD has a more direct impact on code quality.. ATDD would just tell you that something is broken/it is ‘not acceptable’ to the customer. That said, Depending on the right mix of discipline+experience in your team, it might work in the short term.. just that I wouldn’t bet on it.
If you want to slim down the time taken for unit-testing, sit down with the team and define critical/focus areas/modules. Get those done with TDD.