軽い読み物としておもしろおかしく読んでください。
はじめて社外の人の仕事を見た
今まで社内の成果物しか目にしてこなかったのですが、ふとしたきっかけで外部ベンダーが作ったシステムを移行することになりました。
会社名を見て、よく知った会社でちょっと安心しました。
「ここなら設計書とかもきちんとしてるだろう、多少古臭くても堅実にやってるんじゃないかな」って思ってました。ええ。
実態は全然違った
とんでもない量のExcelが設計書として渡されました。
さすがに設計が専門だけあって設計書の量はすごいなぁ。と思って読んでいるといろいろ察してきました。
正直、「オワコン大手SIer」と呼ぶしかありません。設計しかできないと思っていたのに、何もできないなんて・・・
実際に自分が見た「オワコン大手SIer」のアンチパターンをご紹介していきます。
自分が多く当てはまっている場合は今すぐ直してください。移行する人がストレスで死にます。
※念のためですが、この記事内で紹介しているのは実例ではありません。(転載はできないので・・・)
設計書編
とんでもない量のExcelファイル。しかも、ドキュメントを読めば読むほど分からなくなります。
- 同じ情報が複数の設計書に書かれてある
- しかも、ドキュメントがアップデートされていたり、されていなかったりする。
- 結果、どこを見れば正しい情報を知れるのかが分からない。
- なので、全部読むしかない。
- しかし全部読んでも、ドキュメントAとドキュメントBで矛盾している。
- 無駄なシートがたくさんある
- シートに大きなオブジェクトが貼られていて「●●参照」と書かれてある。
- 何も情報が無い図が書かれてある (バッチが時間になると実行されます)
- いらない情報を書くな!
- 説明されない社内用語が当然の如く使われる
-
○○コード
とかいきなり出てきて、何も説明が無い -
XXX
みたいな3文字の略称がいきなりでてくる(どこにも説明が無い)- ローマ字の当て字だったりする(
QiitaShitsumonKo-na-
の略称でQSK
とか)
- ローマ字の当て字だったりする(
- 用語集も無いので、理解しようがない。
-
設計編
私が新人のときに「こう設計する気持ちが分からない」という指摘(?)をもらったことがありますが、
その気持ちが分かりました。
- 超絶賢いUIになっている
- いろんなDBのいろんな値でコード値で変換をかけて画面表示をしている。
- コード値×3をPKとしてコードを取得してさらに変換しているというものも!
- ちなみに、DB登録時に変換しているものもあり、何の情報をもとに表示しているのかが分からない。
- 全部入りのエンティティが作られている
- ひとつのエンティティの要素が800超え
- 念のため追加した項目が多くみられる
hogehogeコード1
hogehogeコード2
- ・・・
hogehogeコード20
- 一時テーブルをやたらと作りたがる
-
テーブルA
からX
の条件でレコードを抽出して一時テーブルT1
に登録 -
テーブルB
からY
の条件でレコードを抽出して一時テーブルT2
に登録 -
T1
にあってT2
に無いものを一時テーブルT3
に登録 -
T3
にあるレコードをテーブルA
から削除- 本当に気持ちが分かりません。
-
DB編
DBの設計書も膨大で、シートの数がとんでもないことになっています。
- テーブル名/カラム名がローマ字
-
T_SHITUMON
- 質問テーブル
-
QIITA_TOUKOUSHA_CDE_KNJ
- Qiita投稿者コード(漢字)
-
-
DATE
型使えばいいのに、すべてCHAR
でDBに登録している- YEARカラム
- MONTHカラム
- DATEカラム
- 曜日カラム
- 休日フラグ
- 祝日フラグ
- 1テーブル100カラム超え
- 全部いれとけ精神
- 意味不明なカラム名
HOGE_FLAG_12
- カラムの真ん中あたりに突如でてくる論理削除フラグ
- メタデータは末尾にもっていってほしい。
コード編
javaで書かれていましたが、動いているのが本当にすごい。
- やっぱり変数はローマ字
- ハードコードの嵐
-
String
はほぼすべてハードコード- 1300行のクラスの"(ダブルクオーテーション)の数が1000個近くあった
- これでバグが出ずに動いているのが逆にすごいです。
-
- フォーマッターがあたっていない
- ほぼ全ファイルあたっていませんでした。
- 中カッコが縦に3つ並んでいた・・・
- インスタンスのフィールド変数へのstaticアクセス
- 自分が見ていたところは参照でしたが上書きとかしていたら・・・
- 変数名が分からない
- 引数
aParam
,bParam
- 変数名
a1
- 引数
-
if (boolean == false)
-
!
を知らないのだろうか
-
- メソッドが500行こえてる
- 1メソッドの中に
if
が50個以上ありました。こわい。
- 1メソッドの中に
- なぜか配列しか使っていない
-
List
/Set
/Map
を知らない・・・? - 珍しく
HashMap
が登場したと思ったらcontainsKey()
しか使っていないのでMap
である意味がない。
-
まとめ
実際に自分が見たアンチパターンを紹介しました。
最後の方は少し書く気力も失せてしまうほど色々と衝撃だったのですが、自分はクラフトマンシップをしっかり持って仕事しようと心に強く誓いました。
国のシステムの仕様がイケていないのも、妙に納得がいきました