class TestDrivenDevelopment(object): is_workflow = True def __init__(self, centralised_vcs_server, target_test_coverage_per_feature=1.0, tests_per_chunk_ratio=1, target_dependencies_per_feature=0 ): change_management = ChangeManagement(centralised_vcs_server) self.specification = Specification(change_management) self.testing = Testing(change_management, target_test_coverage_per_feature, tests_per_chunk_ratio) self.implementation = Implementation(change_management) self.debugging = Debugging(change_management) self.refactoring = Refactoring(change_management, target_dependencies_per_feature) @default_cost() def implement_feature_tdd(self, user_story, random): """ Implements the sequence of activities in a tests driven development workflow. """ self.specification.add_feature(user_story.logical_name, user_story.size, random) self.testing.test_per_chunk_ratio(user_story.logical_name, random) self.implementation.implement_feature(user_story.logical_name, random) self.debugging.debug_feature(user_story.logical_name, random) self.refactoring.refactor_feature(user_story.logical_name, random) @default_cost() def work_from_backlog(self, product_backlog, random): while True: try: user_story = product_backlog.get(block=False) self.implement_feature_tdd(user_story, random) except Empty: break