はじめに
プログラム開発は個人の技量により開発時間が大きく左右します。
昨今の働き方改革などて効率的な働き方が求められているというのもあり、効率的なプログラム開発の手法(コーディング手法)について提案してみます。
目的は、複雑なものをシンプルにしてプログラム開発の効率化を図る事です。
実践編はこちら。
「効率的な開発手法の実践」
非効率な要因
プログラム開発において非効率となる要因として以下があります。
- 手戻り
- デバッグ
複数人である程度の規模を開発する場合は、結合時に認識齟齬があったりすると大きな手戻りになります。(そもそもI/F仕様を明確にしておくことで防げますが)
デバッグでは複雑なバグがあると原因を調査するのに時間がかかります。
これらによって見積もり時間より大幅に遅れてしまうことがプログラム開発では多々あります。
効率的な開発手法
そこでより効率的に開発が可能となる開発手法を提案します。
本開発手法では、「プログラムを1行書く度に動かす」 というのを繰り返します。
例えば10行以上プログラムを一気に書くと、動かない時には複合的なバグが潜んでいる可能性が高くなります。
そうすると一つを修正しても正しく動かなくて修正が正しかったのかさえわからなくなってしまい調査に時間がかかります。
プログラムを1行書いて動かすと複雑なバグが潜み難くなり、よりシンプルな問題解決ができます。
特に以下のような状況で有効と考えています。
- 単納期
- 初めて触る言語やフレームワーク
いわゆる「急がば回れ」です。
単納期だからと一気にプログラムを書くと複雑なバグによって大きな遅延になってしまいます。
とはいっても1行単位というのは極端で、実際には2〜3行程度書いて動かす事が多いです。
例えば書いた1行を確認するデバッグ処理を追加するなどです。
最低限のワンパスを通す
本開発手法で一番最初にやることは動くようにする事です。
最低限の機能をざっくり作ってワンパスを通します。
例えばWebシステムであればリクエストを受けて適当な文字を返すだけで最低限のワンパスとなります。
最低限のワンパスを確認することで、動かない時に環境起因の問題か、作ったプログラムのバグかの切り分けがやりやすくなります。
あとは最低限のワンパスに肉付けをするのですが、その時に常に動かす事を心がけます。
ワンパスにより全体的な流れができると、認識齟齬による手戻りが減ります。
しかし、CやJavaではビルドに時間がかかるため、動かしながらが逆に非効率になってしまう危険があります。
ビルドやデプロイなどに工夫の余地が無い場合は次項で紹介するUnitテストの有効活用などが考えられます。
Unitテストで動かす
システムに組み込んで動かしながら開発するのが非効率な場合はUnitテストのツールを有効活用します。
(JavaならJUnit、Pythonならunittestなど)
新しくクラスを作る場合はまずクラスの枠だけ作り空のメソッドを書きます。
次に、そのメソッドを呼ぶだけのテストケースを書きます。(ここまでで最低限のワンパス)
あとはプログラムを1行書く度にテストケースも追加して常に正しく動いているのを確認します。
まとめ
本開発手法では以下の2要素が重要となります。
- 最低限のワンパスを通す
- プログラムを1行書く度に動かす
チーム開発においては技術的なキーマンがまずは最低限のワンパスを通して、後は全員で1行書く度にシステムが正しく動く事を確認しながら作ります。
キーマン以外は勉強しながら開発しても既に動くものがあるため、ある程度の生産性が見込めます。
個人開発においても最初にワンパスを通す事でゴールが明確になり、1行書く度に動かす事でデバッグの手間が減るため計画的にプログラム開発ができます。