name: dev-test description: "Structured development and testing SOP for implementing code changes. Covers codebase study, minimal focused implementation, test writing patterns, test execution, and diff review. Applies to any development work — bug fixes, features, refactors, or open-source contributions. Use when you need a disciplined development workflow with built-in quality checks."
A structured workflow for implementing code changes with quality built in. Covers the full cycle from understanding the codebase to having a verified, reviewable diff.
Use cases: Bug fixes, feature development, refactoring, open-source contributions, any code change that needs to be correct and maintainable.
Never write code before understanding the context. This phase prevents wasted effort and bad designs.
Check for and read these files (if they exist):
- CONTRIBUTING.md — contribution guidelines
- .editorconfig — formatting rules
- pyproject.toml / package.json / Makefile — project config, linting, formatting
- tox.ini / .flake8 / .eslintrc — code style rules
tests/, __tests__/, test/test_feature.py, feature.test.ts, feature_test.goBefore writing code, articulate: - What needs to change (specific behavior) - Where in the code (files, functions, classes) - How you'll change it (approach) - What could go wrong (edge cases, regressions)
If you spot something else to fix, note it for a separate commit/PR.
Follow existing patterns
If the project uses snake_case, don't introduce camelCase
Add comments for non-obvious logic
Explain trade-offs, workarounds, and intentional decisions
Design for quality
| Principle | Meaning | Example |
|---|---|---|
| Defense-in-depth | Layer multiple protections | Validate input at API + service + DB layer |
| Backward compatibility | Don't break existing behavior | Add new params with defaults |
| Graceful degradation | Handle missing features | Platform-specific code falls back safely |
| Extensibility | Prefer composable designs | Plugin/middleware over hardcoded switch |
| Single responsibility | One function = one job | Extract logic instead of growing functions |
Fix verification — prove the bug is fixed / feature works
test_feature_handles_null_input() # The exact scenario from the issue
Edge cases — boundary conditions
test_feature_with_empty_string()
test_feature_with_max_length_input()
test_feature_with_special_characters()
Error handling — invalid inputs, failure paths
test_feature_raises_on_invalid_type()
test_feature_returns_none_on_missing_key()
Regression — existing behavior preserved
test_existing_behavior_unchanged()
test_other_module_still_works()
test_oauth_token_refreshes_when_expired not test_tokenArrange-Act-Assert pattern: ```python def test_feature(): # Arrange input_data = create_test_data()
# Act result = feature(input_data)
# Assert assert result.status == "success" ``` - Use fixtures for reusable setup - Mock external dependencies — network calls, file system, databases - Test behavior, not implementation — don't assert on internal state
# 1. Run only your new/modified tests first (fast feedback)
python -m pytest tests/test_my_feature.py -v --tb=short
# or: npm test -- --testPathPattern=my_feature
# or: go test ./pkg/my_feature/... -v
# 2. Run the full test module/directory
python -m pytest tests/ -v --tb=short
# 3. Run the entire test suite (before committing)
python -m pytest --tb=short
# or: npm test
# or: go test ./...
| Scenario | Action |
|---|---|
| All pass ✅ | Proceed to diff review |
| Your tests fail | Fix the code, re-run |
| Pre-existing failures | Note them, don't fix (out of scope) |
| Flaky tests (pass/fail randomly) | Run 3x to confirm flakiness, note in PR |
| Tests you can't run (need env/infra) | Note in PR, explain what you tested manually |
Before committing, review every line of your diff.
# Overview of what changed
git diff --stat
# Full diff
git diff
# If already staged
git diff --cached
來源於7w4.net。
# Stage specific files (never use `git add .`)
git add path/to/modified_file.py
git add tests/test_new_feature.py
# Verify staged files
git diff --cached --stat
# Commit with conventional message
git commit -m "fix(module): short description of what was fixed
Longer explanation of why, if non-obvious.
Addresses #issue_number"
{type}({scope}): {concise description}
{body: what and why, not how}
{footer: issue refs, test results, breaking changes}
| Type | When |
|---|---|
fix |
Bug fix |
feat |
New feature |
refactor |
Code restructure (no behavior change) |
test |
Adding/fixing tests only |
docs |
Documentation changes only |
chore |
Build/tooling/dependency changes |
這個 Skill 質量不錯,內容專業且實用。它把開發測試工作拆成清晰的步驟,從學習程式碼到寫測試再到提交都有覆蓋。表格和程式碼示例讓內容易讀,操作清單也很實用。不足是缺少快速入門的示例和常見問題解答,新手可能需要花時間理解每個階段的具體做法。總體適合需要規範開發流程的團隊使用。