LoginSignup
4
6

More than 5 years have passed since last update.

オブジェクト指向エクササイズの遵守度を確認する

Last updated at Posted at 2018-05-26

概要

Thought Worksアンソロジー という本でオブジェクト指向エクササイズが紹介されている.
ソフトウェアの設計を改善できる9つのルールが紹介されている.
このルールの良し悪しについては,様々なところで紹介されているので,そちらを参照されたい.

これらを踏まえて,実際にオブジェクト指向エクササイズを実践するためには,1つ大きな問題がある.
どれくらい遵守できているかを確認する術がないのである.
もちろん,目視で確認はできるが,全てのプログラムを確認することは非常に困難であるし,メソッドの数や行数など,数えてられない.
逆に,ルール自体はしっかりと決まっていることから,プログラムで確認することは可能であるはずである.
探してみたところ,そのような確認ツールを見つけられなかった.
ということで,確認ツールを作ってみた,という宣伝である.
なお,その作成に当たり,オブジェクト指向エクササイズを実践してみた.

9rules

https://github.com/tamada/9rules にて公開しているツールである.
Java のソースコードを対象にし,オブジェクト指向エクササイズの9つのルールに違反している箇所を指摘するツールである.

インストール & 使い方

$ git clone https://github.com/tamada/9rules.git
$ cd 9rules
$ mvn package
$ java -jar target/9rules-1.0-SNAPSHOT.jar -h
java -jar 9rules.jar [OPTIONS] <ARGUMENTS...>

OPTIONS:
    --strict:  Strictly level check (Default).
    --general: General level check.
    --rough:   Rough level check.
    --help:    Print this message and exit.

ARGUMENTS:
    Directories include Java source files, and Java source files.
$ java -jar target/9rules-1.0-SNAPSHOT.jar src/main/java

依存ライブラリ

特徴

できること

  • 9つのルールを満たしていない箇所(ファイル名,行数,違反しているルール)を出力する.
  • ルールを緩和して確認できる(Strict, General, Roughの3パターン.デフォルトは Strict)

できないこと

  • ルール5 名前を省略しないこと は未実装.
    • WordNetを使えばできるとは思うが未対応.
  • ルール6 全てのエンティティを小さくすることの1パッケージ10クラスまでも未実装.
    • 他のルールと調査方法が違うため.調査自体はそれほど難しくはないものの,他のルールとの調査方法とどうやって合わせようかなと考え中.

オブジェクト指向エクササイズをやってみて

遵守のために必要なこと.

  • Java 8 以降.
    • Stream API必須.
      • for文使うだけで遵守が非常に難しくなる.
  • デザインパターン.
    • Strategy など必須.
    • 中でもVisitorパターンは必須.
      • 典型的には,toString などで,フィールドにあるオブジェクトの中身を取り出したいときに必須.

遵守が非常に難しいもの.

  • 例外のキャッチが難しい.
    • ルール6 全てのエンティティを小さくすること のメソッドは3行以内を遵守することが非常に難しい.
      • try-catch はブレース({})を省略できない. そのために,try, catch, 閉じ括弧で3行を消費してしまい,try-catch間,catch節の中身を別の行で書けない.
  • SonarやSpotBugsの警告も解決しようと思うと,コンフリクトが起こる場合がある.
    • 1行に1つの内容のみにするよう警告が出されるため,try-catch でコンフリクトが起こる.
    • これはどうやって解決するか,今でもわからない.
4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6