Help us understand the problem. What is going on with this article?

オワコン大手SIerに学ぶアンチパターン

軽い読み物としておもしろおかしく読んでください。

はじめて社外の人の仕事を見た

今まで社内の成果物しか目にしてこなかったのですが、ふとしたきっかけで外部ベンダーが作ったシステムを移行することになりました。

会社名を見て、よく知った会社でちょっと安心しました。
「ここなら設計書とかもきちんとしてるだろう、多少古臭くても堅実にやってるんじゃないかな」って思ってました。ええ。

実態は全然違った

とんでもない量の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個以上ありました。こわい。
  • なぜか配列しか使っていない
    • List/Set/Mapを知らない・・・?
    • 珍しくHashMapが登場したと思ったらcontainsKey()しか使っていないのでMapである意味がない。

まとめ

実際に自分が見たアンチパターンを紹介しました。
最後の方は少し書く気力も失せてしまうほど色々と衝撃だったのですが、自分はクラフトマンシップをしっかり持って仕事しようと心に強く誓いました。

国のシステムの仕様がイケていないのも、妙に納得がいきました

ko-flavor
twitter @koko72_flavor フォロー待ってます!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした