← 返回
未分类 中文

dev-test

Structured development and testing SOP for implementing code changes. Covers codebase study, minimal focused implementation, test writing patterns, test exec...
结构化开发与测试标准操作流程,涵盖代码库学习、最小化聚焦实现、测试编写模式及测试执行等环节。
sliverp sliverp 来源
未分类 clawhub v1.0.0 1 版本 100000 Key: 无需
★ 0
Stars
📥 393
下载
💾 0
安装
1
版本
#latest

概述

Dev Test — Development & Testing SOP

Overview

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.

Workflow

Phase 1: Study Before Coding

Never write code before understanding the context. This phase prevents wasted effort and bad designs.

1a. Understand the project conventions

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

1b. Study the area of change

  • Read the module(s) you'll be modifying
  • Trace the execution path around the bug/feature
  • Understand data flow: what goes in, what comes out
  • Note dependencies: what other modules interact with this code

1c. Study existing tests

  • Find the test directory structure: tests/, __tests__/, test/
  • Note the test framework: pytest, jest, go test, JUnit, etc.
  • Study naming conventions: test_feature.py, feature.test.ts, feature_test.go
  • Note fixture/setup patterns used
  • Check for test utilities, factories, or mocks

1d. Draft a mental model

Before 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)

Phase 2: Implement

Core principles

  1. Minimal, focused changes
    • Fix the bug / add the feature. Nothing else.
    • Avoid unrelated formatting changes, import reordering, or drive-by refactors.
    • If you spot something else to fix, note it for a separate commit/PR.
  1. Follow existing patterns
    • Match the codebase's style, not your preferred style
    • Use the same naming conventions, indentation, comment style
    • If the project uses snake_case, don't introduce camelCase
  1. Add comments for non-obvious logic
    • "Why" comments, not "what" comments
    • Explain trade-offs, workarounds, and intentional decisions
  1. 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 |

Phase 3: Write Tests

Test categories (implement in order)

  1. Fix verification — prove the bug is fixed / feature works

```

test_feature_handles_null_input() # The exact scenario from the issue

```

  1. Edge cases — boundary conditions

```

test_feature_with_empty_string()

test_feature_with_max_length_input()

test_feature_with_special_characters()

```

  1. Error handling — invalid inputs, failure paths

```

test_feature_raises_on_invalid_type()

test_feature_returns_none_on_missing_key()

```

  1. Regression — existing behavior preserved

```

test_existing_behavior_unchanged()

test_other_module_still_works()

```

Test writing guidelines

  • One assertion per test (ideally) — makes failures easy to diagnose
  • Descriptive namestest_oauth_token_refreshes_when_expired not test_token
  • Arrange-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

Phase 4: Run Tests

Progressive testing strategy

# 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 ./...

Handling test results

ScenarioAction
------------------
All pass ✅Proceed to diff review
Your tests failFix the code, re-run
Pre-existing failuresNote 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

Phase 5: Review the Diff

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

Diff review checklist

  • [ ] Every change is intentional (no accidental edits)
  • [ ] No debug prints, TODO comments, or temporary code left in
  • [ ] No secrets, tokens, or personal paths hardcoded
  • [ ] No unrelated formatting changes
  • [ ] All new functions/classes have appropriate docstrings/comments
  • [ ] Test coverage looks adequate for the changes
  • [ ] File additions are in the right directories

Phase 6: Commit

# 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"

Commit message format

{type}({scope}): {concise description}

{body: what and why, not how}

{footer: issue refs, test results, breaking changes}
TypeWhen
------------
fixBug fix
featNew feature
refactorCode restructure (no behavior change)
testAdding/fixing tests only
docsDocumentation changes only
choreBuild/tooling/dependency changes

Output

  • Committed code changes + tests on feature branch
  • All tests passing
  • Clean, reviewable diff

Tips

  • This skill works standalone for any development task.
  • In a contribution pipeline, it follows repo-setup and feeds into pr-pilot.
  • For large features, repeat Phase 2-5 in small increments rather than one big change.
  • When pair-programming with AI: have the AI study the codebase (Phase 1) before asking it to implement anything.

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-03-31 10:02 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

dev-programming

Github

steipete
使用 `gh` CLI 与 GitHub 交互,通过 `gh issue`、`gh pr`、`gh run` 和 `gh api` 管理议题、PR、CI 运行及高级查询。
★ 677 📥 325,737

repo-setup

sliverp
叉取、克隆并设置 GitHub 仓库用于开发或贡献。处理叉取创建、带认证的克隆、上游远程配置等。
★ 0 📥 396
dev-programming

Mcporter

steipete
使用 mcporter CLI 直接列出、配置、认证及调用 MCP 服务器/工具(支持 HTTP 或 stdio),涵盖临时服务器、配置编辑及 CLI/类型生成功能。
★ 194 📥 67,409