親です。

読んだ本とかについて書いてます

仕様書のないプログラミングをした

先日、仕様書なし(設計書なし)でのプログラミングを初めてやった。こういうふわっとしたボールの受け取り方は今後必要なスキルだと思うので、反省しとく。

【状況】
●当初
・当初はメモ書き。3日で作って欲しいと言われる。
・IN01のIDを元にDB2つ3つ呼び分けてOUTを吐くプログラム。DB呼ぶサブプログラムのパラメータは不明。DB読めなかったらエラーを吐かせる。DB読む順番、回数は聞いて分かった。
●3日目
・サブ呼ぶパラメータは不明のままなので、とりあえず大枠だけ作ることに。
・ざっくり作ったのち、結合テストにて検証すると言われるも、結合テストの実施は初めて。
・言われた通りテストパック作成するも、サブプログラムを呼んだ後リターンステータスのエラーで流れない。サブプログラムのパラメータが間違っているっぽい。どのパラメータ起因なのか特定するために2日程度デバッグ
・「複数回呼ばれる/違う場面でも呼ばれるサブプログラムのコールセクションを共通化するか否か」がパラメータの内容に依存するため、ここら辺でセクション分割したり統合したりワークエリア新設したりとコードが荒れ始める。
・編集セクションとコントロールセクションを分けよとの指令。
●6日目
・使用するサブプログラムの変更。
・OUT2,3が追加。
結合テストに使えるデータが無くて困るなど。
・DBの説明を聞く。
●8日目
・方針転換で半分くらいの機能が消える。
・確認した当日が納期と判明する。


【思ったこと】
1.技術的な部分
1-1.コーディングに関するもの
・仕様書がなくメモ書きのみ ⇒ 行間から機能が増える ⇒ ソースがこんがらがってやる気なくす。最初に全体の仕様が分かってればセクションの分け方も綺麗になるはず。
・そういう意味では、仕様変更に耐えられるようなコーディングはしてなかったということ。保守性が低いというか、メンテナンスビリティについて考えてコーディングしていなかった???
1-2.仕様的な面に関するもの
・DBの構造について色々聞けたのは良かった。わかってなかった。
1-3.結合テストに関するもの
結合テストは何をもって終わりなのか
・TSOの使い方がマジ分かんなくて話にならねえなとなってた

2.マインドセット? 的な部分

2-1.「問題⇒解決」のサイクルが遅い

・「わかんないところをあげる⇒答え聞く」のサイクルが遅くなってる。
・「問題⇒解決」のサイクルは将来についても言えること。あらかじめ問題になりそうなところは想定して答えを貰っておく。
・具体的には、結合テストは必要なデータを先に洗って、貰っておけばよかった。
・また、何度も問題になる(ボトルネックになる)問題については、もっと高次のアプローチを。やり方・考え方教えてもらうとか。
・今回の例だと、将来の問題を見越すために仕様書を自分で書いてしまうとか。
  ⇒とっ散らかってきたのでまとめると

問題解決のサイクルを早めろ。

問題解決サイクルにはふたつの観点。問題の立てるってことと解決するってこと。問題の立て方として、問題点をざっと書きだしてしまうこと(今回なら仕様書を書くこと)。解決の方法には低次な方法として答えを聞く、高次な方法としてやり方考え方を聞くなどがある。

2-2.作業に区切りを持たせる

・やり方を最初に考えろ
(どう進めるのか、つまりだらだらとやってしまったのがよくなかった。なんつーか、終わりの見えないコーディング作業だった。何が必要なのかわかってなかった。全体のコーディングをざっくりやって、それからサブプログラムのパラメータ調査をして、、、、とかって考えてない。何のためにそのやり方を整理するのかというと、あれもこれもとなってしまってどこまで終わったのか分かんないし、調査するときも対象範囲が狭まらない。おかしいところがどこなのか、わからない。進んでいる感じもしない)
・マジ面倒クセェ…と思わない
・ダラダラコーディングしない。
・「とりあえず枠だけ」これはいい。が、それをチェックしてもらわないと意味がない。仕様の確認になってない。
・仕事の進め方を相手と握る、相手の責任にする
・次に進んで良いかのジャッジを下してもらう
こういうの、アジャイル開発?てきになる。下記の記事など参照。あと『アジャイルサムライ』とか読む。

フロー効率性とリソース効率性について #xpjug

2-3.おメンタルの弱さ
・期限は延びたら延びたなりに再度引き直す
・コミュニケーション密に。相手が忙しかろうと聞く。
結合テストとなった時点で、無限にかかるのでは? ということは指摘しておけば良かった。スケジュール的なところで未来のタラレバ考えとけば良かった。
・あと、コーディングについての細かな指摘(ここはフラグ使わなくてよくない?)とかに対してうまく反応できてない。意図を読み取れなかったり。

 

 こんな感じ。もちっとしたらもっとわけわかんない開発しそうなので、単独で動けるようになっときたい。あとおメンタル。以上!!