開発方法に関して

1. 短期開発における開発方法


 オブジェクト指向言語で短期間の開発をする場合、ベストな方法はアジャイルソフトウェア開発(以下アジャイル開発)であるとN君は考えた。アジャイルソフトウェア開発宣言の宣言文章のリンクを以下に示す。

 アジャイル開発では手早く品質の高いソフトウェアを開発するための方法である。しかしこれは前提として開発者がある程度の開発能力を持っているという前提があるはずだとN君は感じていた。

2.開発方法の検討


 本件では開発者が初心者であるN君だけである。そのため人数的な問題および能力的な問題からアジャイル開発のような高速な開発を行うことは困難である。しかし、多少時間がかかることを許容すれば有効にアジャイル開発のプラクティスを利用することができるとN君は考えた。

 そこでN君はアジャイル開発から以下のプラクティスの考え方を重視して効果的に開発を行うことを考えた。

  1. イテレーション
  2. リファクタリング
  3. テスト駆動開発(※)

 また、N君は経験不足故に自分が作りたいと思ったことが本当に実現可能か判断することが難しい。そのため上記の内容を少し崩して利用することにした。

 すなわち、本来のテスト駆動開発はテストを先に書いて実装を行っていく。しかし実現不可能なもののテストは意味をなさないため、まずは本当に実現可能かを簡単に検証する。その手段としてプロトタイプを作成する。プロトタイプを作成し、実現方法やその問題点、設計の内容などについて検討し大枠で解決する。その後にその実装を実現するための最小かつ最適な設計について検討し、設計と同時にテストも作成する。テストを通ったコードを更にリファクタリングし保守性・可読性を改善し品質を向上させる。
 そして、イテレーションによって目標とするシステムを小さく分けて反復し、開発を行うことでイテレーションごとに改善と反省を加えていき品質を向上させることができると考えた。

 上記の手段を取ることで初心者であってもアジャイル開発のメリットを十分に得られると考えた。しかし、本来の方法ではないことを十分理解し、そのことを念頭に置いておく必要がある。

※追記:
テスト駆動開発については、導入しないことにした。実際に試してみてテスト駆動は少しハードルが高い。後戻りの少ない設計をはじめからできるのであれば有効だと感じたが、初心者には非常に難しいため今回は導入しないことにした。ただ適宜テストは実行し挙動の妥当性については検証する。

3.本件の開発方法


 以上のことから本件の開発はおおよそ以下の流れで行う。

  1. 要求を小さく分割しイテレーションとして分配する
  2. 個々のイテレーションについて要求を整理し実現方法を検討する
  3. 検討した実現方法が、現実的かどうかコードを作成して検討する
  4. 実現可能であると判断した場合はテストを作成する、不可能な場合は再検討する
  5. テストを通過するコードが完成したあとはリファクタリングをする
  6. 自己評価を行い次のイテレーションへ、すべて完了するまで続ける