イテレーション 8 ふりかえり
概要
| 項目 |
内容 |
| イテレーション |
8 |
| 期間 |
Week 15-16(2 週間) |
| ゴール |
C 版を Python 版から展開し、TDD で実装する |
| 実績 SP |
5 / 5 SP(達成率 100%) |
KPT
Keep(良かったこと・続けること)
- TDD サイクルの徹底: Red → Green → Refactor を全 9 章で実施し、204 テストが全パスした
- カスタムアサートマクロ(test_helper.h)の活用: 外部テストフレームワークなしでシンプルかつ統一的なテスト構造を実現した
- IT-7 の反省事項の活用: Go 版での教訓(初期実装の関数不足)を踏まえ、C 版では Python 版との差分チェックリストを事前整備し、実装漏れをゼロにした
- CI ワークフロー(ci-c.yml)の早期整備: Nix devShell 経由で
make test を実行する CI を開発開始時に整備し、品質担保体制を確立した
- メモリ安全性の確保:
AddressSanitizer(-fsanitize=address)を Makefile に組み込み、メモリリークをテスト段階で検出・解消した
- Python 版との比較表の標準化: Go 版で確立した「Python との比較表」の形式を C 版でも全章に適用し、記事品質を統一した
- Go 版記事の品質向上も並行実施: Python 版の構成・記述量に準拠した Go 版全 9 章の書き直しを完了(4,759 行追加)した
Problem(課題・改善すべきこと)
- ローカルプレビュー確認が未完了:
mkdocs serve によるローカルプレビュー確認が IT-8 の期間内に完了しなかった(成功基準の 1 項目が未達)
- C 言語特有のメモリ管理コスト: BST・連結リスト等のデータ構造で
free() の再帰呼び出し実装に想定以上の工数がかかった
- Go 版記事の書き直しが想定外の追加作業として発生: IT-8 の作業中に Go 版記事の記述量不足が発覚し、対応に時間を要した(IT-8 の計画外作業)
Try(次のイテレーションで試したいこと)
- Rust 版(IT-9)では、Cargo の所有権モデル(
Box<T>、Option<T>)に対応した設計方針を開発開始前に確定する
- ローカルプレビュー確認をイテレーション完了条件として明示的にチェックし、スキップしない
- 記事の記述量チェックを開発完了基準に加え、Python 版との差分が 30% 以内に収まることを確認する
ベロシティ
| イテレーション |
計画 SP |
実績 SP |
達成率 |
| 1(Python) |
5 |
5 |
100% |
| 2(TypeScript) |
3 |
3 |
100% |
| 3(Java) |
3 |
3 |
100% |
| 4(C#) |
3 |
3 |
100% |
| 5(Ruby) |
3 |
3 |
100% |
| 6(PHP) |
3 |
3 |
100% |
| 7(Go) |
3 |
3 |
100% |
| 8(C) |
5 |
5 |
100% |
| 合計 |
28 |
28 |
100% |
累積 SP: 28 / 66(Phase 1: 20/20 完了、Phase 2: 8/38 = 21.1%)
品質メトリクス
| メトリクス |
値 |
| テスト件数(C 版) |
204 |
| テスト通過率 |
100% |
| 作成ファイル数 |
実装 9 + ヘッダ 9 + テスト 9 + 記事 10 + CI 1 + Makefile 1 = 39 |
| テストフレームワーク |
カスタムアサートマクロ(test_helper.h) |
| C 規格 |
C99 |
| メモリ安全性 |
AddressSanitizer 確認済み |
| Go 版記事追加行数 |
4,759 行 |
次のイテレーションへの引き継ぎ
- IT-9(Rust 版):
apps/rust/ に Rust 実装を構築する(5 SP)
- 所有権モデルの設計:
Box<T> によるツリー・リスト実装、Option<T> によるエラー処理の方針を事前決定する
- 参照実装の活用: Python 版 + Go 版 + C 版の 3 言語が参照として利用可能
- CI テンプレート:
ci-c.yml を参考に ci-rust.yml(cargo test)を整備する
更新履歴
| 日付 |
更新内容 |
更新者 |
| 2026-04-12 |
初版作成 |
- |