修正コスト最小化するためにどうすればいいかの答えを出す前に、何が負債になっているのかを明らかにする必要がある。
何が負債になっているのか
今の私にとっての技術的負債とは何か。
単体テストをサボったことによる負債
単体テストを先送りしたときに生じる修正コストとは何か。「呼出側の修正に要した作業時間」だろうか。最初にテストしておけば呼出側の実装は1回で済んだはずだ。
行為 | すぐテストする場合 | 先送りする場合 |
---|---|---|
単体テスト | 要 | 要 |
結合後の呼出側修正 | 不 | 要 |
負債 | 負債と思う根拠 |
---|---|
呼出側の修正に要した作業時間 | 最初にテストしておけば呼出側の実装は1回で済んだはず |
Pythonの言語仕様について未学習による負債
Pythonの言語仕様をせずにやってきたことで生じた修正コストとは何か。「どうすればいいか」を調べる時間と労力がコストである。
- 行きあたりばったりでググっている
- 自分で資料を作成し、情報源の場所を確定させれば素早く検索できるはず
- 何度も同じことをググっている
- 学習し身に付けば検索する時間をゼロにするか頻度を減らせるはず
負債 | 負債と思う根拠 |
---|---|
行きあたりばったりで調べる時間と労力 | 自分で資料を作成し、情報源の場所を確定させれば素早く検索できるはず |
何度も同じことを調べている時間と労力 | 学習し身に付けば検索する時間をゼロにするか頻度を減らせるはず |
Pythonのライブラリについて未学習による負債
Pythonのライブラリについて学習せずに実装を進めてしまうことによる修正コストは何か?リファレンス調査とライブラリの動作確認する時間と労力である。しかも忘れるたびに毎回生じる。
- アレをするにはどのライブラリを使えばいい?
- アレをする関数はあるか?どれか?
- 引数には何がある?名前は?順序は?型は?
- 戻り値は何?型は?メンバ変数は?
- アレをする関数はあるか?どれか?
一度まとめてどこかに記録しておけば以下のように解決できる。
- すぐに探せる。調査時間の短縮。
- ドキュメントは関数や引数などが網羅的に書いてある
- その中から、よく使うもの、特定の用途に使うもの、を抽出せねばならない
- 用途ごとの引数組合せなどをコードの形で記録しておけば、網羅的なドキュメントから探す時間を減らせる
- その中から、よく使うもの、特定の用途に使うもの、を抽出せねばならない
- ドキュメントは関数や引数などが網羅的に書いてある
- すぐに書ける。コーディング時間の短縮。
- 一度どこかにまとめてコードを記録すればコピペで大枠を書ける
- たとえばunittestコードとして書いておけばコードのコピペと動作確認までがコーディング時間ゼロでできる。
- 一度どこかにまとめてコードを記録すればコピペで大枠を書ける
負債 | 負債と思う根拠 |
---|---|
調べる時間と労力 | 細かすぎる引数なども含む中から、よく使う記述を抽出せねばならない。一度書けば網羅的なドキュメントから探す時間を減らせる。 |
書く時間と労力 | 一度どこかにまとめて記録すればコピペで大枠を書ける。unittestにすれば動作確認もできる。 |
引数の組合せなどは利用時に応じて考え、書き換えねばならないため、未学習による修正コストとは言えない。
オブジェクト指向やデザインパターンなどのコード設計に必要な方法論について未学習なことによる負債
コード設計の方法論が未学習のまま実装を進めてしまうことで生じる修正コストは何か?
- コードの総書き直し
- 呼出元の修正
- 再テスト
- 動作実績
動作実績の修正コストとは何か。すでに運用されていたコードの構造を変更した場合、これまでの動作実績(信頼性)もクリアされてしまう。動作内容はおなじでもコード実装内容がまったく別物になるから。テストの確認が必要なのはもちろんだが、運用時にはほかのシステムと複雑に関わるなどの状況も考えられる。そのすべてをテストするのは難しい。これまでの動作実績で稼働できたという事実が信頼の根拠になっていたが、それがすべてクリアされてしまう。稼働実績をイチから積み直すことになる。膨大な利用パターン、回数、時間を要する。
負債 | 負債と思う根拠 |
---|---|
コードの総書き直し | これまでコードを書き、テストまでしてきたものが水泡に帰す。また、既存のコードとの兼ね合いも考慮せねばならないため新規作成するより難しい。新たな不具合を作りこむ可能性がある。 |
呼出元の修正 | 規模が大きい場合、呼出元も非常に多い。新たな不具合が生じる可能性がある。 |
再テスト | 単体だけでなく結合テストなど以降の全テストをやり直すことになる。これまでのテストコードは100%無価値である。 |
動作実績 | 稼働実績をイチから積み直すことになる。これまでの実績(信頼)はパァ。サービス価値が低下する可能性あり。 |
最初に学習しておけば無用なコストのはずである。一体どれだけ膨大なのか。上流工程であるほど、それ以降の下流工程すべてに影響がある。負債の利息が増大してゆく。