Spaces:
Sleeping
Sleeping
| """ | |
| Task 9: Collaborative Architecture Refactoring Seed Data | |
| Complex collaborative scenario: Multiple developers refactor architecture | |
| in parallel while maintaining integration and consistency. | |
| """ | |
| from typing import Any, Dict | |
| def get_task9_seed_data() -> Dict[str, Any]: | |
| """ | |
| Generate seed data for task9 (Collaborative Architecture Refactoring). | |
| Scenario: | |
| Large refactoring to break circular dependencies and improve testability. | |
| Multiple developers work on different modules in parallel. | |
| Alice (Senior) designs architecture, reviews all changes | |
| Bob (Junior) refactors data processing layer | |
| Carol (QA) refactors business logic, ensures test compatibility | |
| Dave (Lead) coordinates integration, resolves conflicts | |
| Current problems: | |
| - Circular imports: module_a imports module_b, module_b imports module_a | |
| - Tight coupling: Direct instantiation instead of dependency injection | |
| - Missing abstractions: No interfaces/base classes | |
| - Scattered validation: Same logic duplicated across modules | |
| - Difficult to test: Can't instantiate modules independently | |
| Refactoring goals: | |
| 1. Extract common Processor abstract base class | |
| 2. Use dependency injection instead of direct instantiation | |
| 3. Create Validator class to consolidate validation | |
| 4. Remove circular dependencies via interface abstraction | |
| 5. Make each module independently testable | |
| 6. Improve error handling with custom exceptions | |
| """ | |
| return { | |
| "files": { | |
| "data_processor.py": get_data_processor_content(), | |
| "business_logic.py": get_business_logic_content(), | |
| "api_interface.py": get_api_interface_content(), | |
| "integration.py": get_integration_content(), | |
| }, | |
| "test_file": "test_refactoring.py", | |
| "participants": [ | |
| { | |
| "user_id": "alice_senior", | |
| "role": "architect", | |
| "responsibility": "Design refactoring, review changes, ensure consistency", | |
| "status": "in_progress", | |
| }, | |
| { | |
| "user_id": "bob_junior", | |
| "role": "contributor", | |
| "responsibility": "Refactor data_processor.py following architecture", | |
| "status": "in_progress", | |
| }, | |
| { | |
| "user_id": "carol_qa", | |
| "role": "contributor", | |
| "responsibility": "Refactor business_logic.py, ensure test compatibility", | |
| "status": "pending", | |
| }, | |
| { | |
| "user_id": "dave_lead", | |
| "role": "integration_lead", | |
| "responsibility": "Coordinate integration, resolve conflicts, final merge", | |
| "status": "pending", | |
| }, | |
| ], | |
| "current_issues": [ | |
| "Circular import: data_processor ↔ business_logic ↔ api_interface", | |
| "Tight coupling: Direct instantiation of dependencies", | |
| "Broken abstraction: Direct access to private attributes", | |
| "Duplicated validation logic across modules", | |
| "Tests require full integration (can't unit test modules)", | |
| "Error handling inconsistent across modules", | |
| ], | |
| "refactoring_steps": [ | |
| "Step 1: Design shared Processor interface (Alice)", | |
| "Step 2: Create Validator class (Alice)", | |
| "Step 3: Create custom exceptions (Alice)", | |
| "Step 4: Refactor data_processor.py (Bob)", | |
| "Step 5: Refactor business_logic.py (Carol)", | |
| "Step 6: Update api_interface.py (Carol or Bob)", | |
| "Step 7: Update integration.py for dependency injection (Alice)", | |
| "Step 8: Verify all modules integrate correctly (Dave)", | |
| "Step 9: Run full test suite (All)", | |
| ], | |
| "shared_artifacts_to_create": [ | |
| "base_processor.py (abstract Processor class)", | |
| "validators.py (consolidated Validator class)", | |
| "exceptions.py (custom exception classes)", | |
| ], | |
| "expected_challenges": [ | |
| "Parallel changes to shared interfaces cause conflicts", | |
| "Some code still depends on old circular import structure", | |
| "Test suite needs updating for new module structure", | |
| "Circular import detection not obvious at first", | |
| ], | |
| "tools_to_use": [ | |
| "list_directory", | |
| "get_file_structure", | |
| "get_dependencies", | |
| "search_code", | |
| "read_file", | |
| "edit_file", | |
| "run_tests", | |
| "run_type_check", | |
| "get_test_coverage", | |
| ], | |
| "difficulty": "hard", | |
| } | |
| def get_data_processor_content() -> str: | |
| """Get data_processor.py with circular dependency and tight coupling.""" | |
| return '''""" | |
| Data Processing Module | |
| BUG: Has circular import with business_logic.py | |
| BUG: Directly instantiates BusinessLogic (tight coupling) | |
| BUG: Validation logic duplicated elsewhere | |
| """ | |
| # BUG: Circular import (business_logic imports this too) | |
| from business_logic import BusinessLogic | |
| class DataProcessor: | |
| """Process data - currently tightly coupled and hard to test.""" | |
| def __init__(self): | |
| """Initialize processor.""" | |
| self._data = [] | |
| # BUG: Direct instantiation creates circular dependency | |
| self._logic = BusinessLogic() | |
| def load(self, data): | |
| """Load data.""" | |
| # BUG: Validation logic - also exists in BusinessLogic | |
| if not data or not isinstance(data, list): | |
| raise ValueError("Data must be non-empty list") | |
| self._data = data | |
| def process(self): | |
| """Process data through business logic.""" | |
| # BUG: Direct access to private attribute | |
| self._logic._validate() | |
| return self._logic._execute(self._data) | |
| def validate(self): | |
| """Validate data - DUPLICATED from BusinessLogic.""" | |
| if not self._data: | |
| return False | |
| return all(isinstance(x, (int, str)) for x in self._data) | |
| ''' | |
| def get_business_logic_content() -> str: | |
| """Get business_logic.py with circular dependency.""" | |
| return '''""" | |
| Business Logic Module | |
| BUG: Has circular import with data_processor.py | |
| BUG: Directly instantiates DataProcessor (tight coupling) | |
| BUG: Validation duplicated | |
| """ | |
| # BUG: Circular import (data_processor imports this too) | |
| from data_processor import DataProcessor | |
| class BusinessLogic: | |
| """Business logic - currently has circular dependency.""" | |
| def __init__(self): | |
| """Initialize.""" | |
| self._cache = {} | |
| # BUG: Direct instantiation | |
| self._processor = DataProcessor() | |
| def _validate(self): | |
| """Validate - DUPLICATED validation logic.""" | |
| if not hasattr(self._processor, "_data"): | |
| return False | |
| return len(self._processor._data) > 0 | |
| def _execute(self, data): | |
| """Execute business logic.""" | |
| # BUG: Inconsistent error handling | |
| try: | |
| result = [f"processed_{item}" for item in data] | |
| return result | |
| except Exception as e: | |
| # BUG: Generic error handling | |
| return [] | |
| def run(self, data): | |
| """Run with data.""" | |
| self._processor.load(data) | |
| if not self._processor.validate(): | |
| # BUG: Inconsistent error handling | |
| raise RuntimeError("Invalid data") | |
| return self._execute(data) | |
| ''' | |
| def get_api_interface_content() -> str: | |
| """Get api_interface.py.""" | |
| return '''""" | |
| API Interface Module | |
| BUG: Direct instantiation of BusinessLogic | |
| """ | |
| from business_logic import BusinessLogic | |
| class APIInterface: | |
| """API interface - tight coupling to BusinessLogic.""" | |
| def __init__(self): | |
| """Initialize.""" | |
| # BUG: Direct instantiation | |
| self._logic = BusinessLogic() | |
| def process_request(self, data): | |
| """Process request.""" | |
| # BUG: No input validation at API boundary | |
| result = self._logic.run(data) | |
| return {"status": "success", "data": result} | |
| def validate_request(self, data): | |
| """Validate request - should be here, not scattered.""" | |
| # BUG: Validation scattered across modules | |
| if not data: | |
| return False | |
| return isinstance(data, list) | |
| ''' | |
| def get_integration_content() -> str: | |
| """Get integration.py.""" | |
| return '''""" | |
| Integration Module | |
| Currently mixes orchestration with business logic. | |
| After refactoring, should use dependency injection. | |
| """ | |
| from api_interface import APIInterface | |
| def main(): | |
| """Main integration - currently creates tight coupling.""" | |
| # BUG: Integration logic mixes with instantiation | |
| api = APIInterface() | |
| # BUG: No way to swap implementations for testing | |
| data = ["apple", "banana", "cherry"] | |
| try: | |
| response = api.process_request(data) | |
| print("Success:", response) | |
| except Exception as e: | |
| print("Error:", e) | |
| return response | |
| if __name__ == "__main__": | |
| main() | |
| ''' | |
| def get_test_file_content() -> str: | |
| """Get test_refactoring.py.""" | |
| return '''""" | |
| Integration tests for refactoring validation. | |
| Current structure makes unit testing difficult. | |
| After refactoring, should be easier to test modules independently. | |
| """ | |
| import pytest | |
| # NOTE: Current tests are difficult because modules are tightly coupled | |
| # After refactoring with dependency injection, tests should be cleaner | |
| def test_data_processor_load(): | |
| """Test DataProcessor load - currently requires full setup.""" | |
| # BUG: Can't test DataProcessor alone due to circular import | |
| # After refactoring: Should work independently | |
| pass | |
| def test_business_logic_execute(): | |
| """Test BusinessLogic execute - currently requires DataProcessor.""" | |
| # BUG: Can't test BusinessLogic independently | |
| # After refactoring: Should inject mocked DataProcessor | |
| pass | |
| def test_api_interface_request(): | |
| """Test APIInterface request - currently full stack.""" | |
| # BUG: Tests full stack, not individual components | |
| # After refactoring: Should test API layer independently | |
| pass | |
| def test_validation_consistency(): | |
| """Test that validation logic is consistent across modules.""" | |
| # BUG: Validation is duplicated - hard to test consistently | |
| # After refactoring: Should have single Validator | |
| pass | |
| if __name__ == "__main__": | |
| pytest.main([__file__, "-v"]) | |
| ''' |