見出し画像

コボラーが管理するJavaプロジェクト

コボラーが頭の中身までCOBOLになっているとかそういう話

設計・コーディング

当然だがクラスの概念がない。COBOLと同様に毎日同じコードを生産する。

ここでCOBOLのいう同じコードを生産するには注意が必要だろう。
例えば商品コードから商品名を取るSQLを呼び出したい場合、通常なら

Select syohin_mei
    From syohin_table
    where syohin_code = :code;

みたいなSQLを読んで値をBeanか何かに詰めるはずであり(この場合Beanは使わないかも)、通常その実装はDAOクラスあたりに入っている。

ではコボラーがSQLを呼ぶ場合どう書くであろうか。

Select syohin_id, syohin_mei
    From syohin_table

と書いた上で、もうCOBOLのコードなど記憶の彼方に追いやったので適当だが

SQL syohin_tbl
CURSOR cur
OPEN cur syohin_tbl
PERFORM(idx)
   FETCH cur
   IF(syohin_code = code)
     print_syohin_mei = syohin_mei

と書き、商品名をprint_syohin_meiに取得する。コボラーはSQLを書けないのでWhereで絞り込んだりはしない。要するにコボラーはテーブルを一括で読み込み、for文でぶん回して一致するレコードをアプリケーション側で抽出する。彼らにはSQLで目的のレコードを取り出すという概念は存在しない、マジでそういう考えは頭までCOBOLになっているコボラーには無い

また、このコードは画面ごとに毎回書くことになる。COBOLには部品化の概念が存在しないので、1画面に必要なコードは毎回その画面に全部書くことになる。商品名が欲しいなら1画面作るごとに毎回商品名を取得するコードを書く必要がある。

このようなCOBOLの書き方を実践してきたコボラーが管理職になった場合、必然的にCOBOLのやり方を踏襲するのでOOP言語としては破綻する。

クラスごとに同じ処理が大量に存在することになるし、それ以前に私の現場はクラス名が全部画面IDでなんかP100とかP101とかいう名前のクラスしかなくて意味不明だった

設計で言えばもう一つ。コボラーにはクラスの概念も部品化の概念もないので、とんでもない設計書を書く。クラス図なんてないし、何なら全てのフローの詳細が記述されている。

func foo:
1)変数xを定義する
2) 状態sが0ならa 1ならb
  a) xに1を足す
  b) xに2を足す

余談だが、見た感じコボラーはこのレベルの詳細設計書がないとまともにコーディングできない人が多いように見えた。というかCOBOLという言語の性質上それはある意味当たり前である、命令文が異常に少ないから誰が書いても同じになる言語がCOBOLなのだから…

テスト設計

コボラーの書いたJavaのテストは凄い。

1.氏名エディットボックスの位置が正しいこと
2.確定ボタンの位置が正しいこと

こんなテストを平気で書く。正しいことはともかく表示位置ってなんだよ。E2Eでも確認できんぞ。

これはCOBOLの画面定義のやり方を言えば理解される。

要はエクセル方眼紙である。
COBOLでは(多分32*32)の1マスに1文字表示するので

「ID:XXXX」

のように画面定義すると左端0pxから32pxまでがI、その隣64pxまでにD…と表示位置が確定してしまう。

だからこの「画面表示位置が正しいこと」というテストはCOBOLの世界観では間違いなく必要である。

私がコードを書いてテストして動くことを確認したらコボラーの上司からこう聞かれた。

「これどうやったの?」
「なんかメソッドあったから呼び出して実装しました」
「そのメソッドの中身はどういうコードになってるの?」
「知りません」
「は? お前は自分が書いたコードの中身も説明できないのか!?」

上で書いたとおり、コボラーは毎回自分でコードを書くので原理的に全てのコードを自分で説明できる。他の人の作ったコードを呼び出したから中身までは責任を持てないという私の発言はコボラーの脳みそでは理解できない。

例えばフレームワークが勝手に処理してくれる部分を説明しろと言いだして、出来ないと

「そういう風に動くってことはお前がそう書いたんだろ! なんで説明できないんだ!」

と言い出すようなことがあった。コボラーの世界観では、まさにそういう風に動くということは自分がそう書いているのでこれは当然の発言である。

テストの話を続けよう。

じゃあたまたま存在した部品を呼び出したとしよう。以下のようなコードだ。

func test(int i)
Foo foo
int x = foo.method(i)
print(x)

この場合、test(i)のテストではなくfoo.method(i)のテストをもう一度やるように指示される。極論foo.method(i)に異常値を渡したときに正常にエラーを吐くかを呼び出す箇所で全て毎回テストし直す。そこに呼び出し元が渡す引数の範囲という概念は存在しない。

これもコボラーの流儀では全く正しい。なぜなら彼らにとってコードとは自分が書いたものであり、そう動くということは自分がそう動くよう書いたということなのだから。

酷いのはDAOクラスのテストである。
IO例外のテストを全ての箇所で毎回やり直している。1度はやる必要があると言えばそうかも知れないが、毎回DBがクラッシュしてデータが吹っ飛んだ場合のテストとか、ネットワークが切断されてDBに接続できない場合のテストとかをやるものだろうか。

ちなみにこれらは単体テストである。

もちろん毎回やっている。

結論

毎日こうやって同じコードを生産して同じテストをしているコボラーの世界観では彼らが頭までCOBOLになるのは当然である。

この記事を書いたのはコボラーからパワハラを受けたからです。


この記事が気に入ったらサポートをしてみませんか?