■ Java 開発方式

  □ ウォーターフォール型

     ・要件定義 ⇒ 概要設計 ⇒ 詳細設計 ⇒ 実装・単体テスト ⇒ 結合テスト ⇒ 統合テスト
     ・前工程を確実に終了させて、次に進むやり方
     ・「後戻りができない・後戻りをしない」手法と言う意味でウォーターフォールとつけられた
     ・暗に「よくないやり方」という意味が込められている

    ・ウォーターフォール型開発の欠点
      ・設計(考えたこと)の検証が、後になってしまうこと
      ・プロジェクトの進行において柔軟性に欠けること
    ・上記の欠点を埋めるべき各種の開発手法が提唱された
      ・それらは、それなりの価値を持っているが、いろいろ問題点も存在する
      ・特に適用範囲が限られること
    ・したがって現在でもウォーターフォール型開発が主流である

  □ プロトタイピング

       最初の段階で画面などを作成して、顧客の合意を貰う
       顧客は画面が分かるので最終的なシステムのイメージが掴める
       画面自体は本物ではないのが普通、画面イメージの確認
       顧客の了解を貰った後は、ウォーターフォール型と同じように進める

  □ スパイラル型-1

     一次開発⇒二次開発⇒...と分割して開発する。分割する理由は、教科書的には、分割して見通しをよくする、規模に依存する諸問題を避けるなどである。こちらが普通に教科書に述べられているスパイラル型開発。

    実施例は多い。特に規模が大きく一気に開発できない場合に適用する。多くの場合、意図的に選択するというよりも、開発人員が確保できない、予算が確保できない、期間が足りないなど、強制された理由によるものである。

    一次、二次の規模を適切な規模に分割できれば効果的だが、システムの意味がなくなるような分割は不可能である。現実には、ウォーターフォール型の欠点をカバーするような規模に分割するようなことは難しい。

    また当然ながら、二次開発に進んだ時に、一次開発の問題点が顕在化することがある。一次開発後、実運用に入りデータを蓄積している。一方で二次開発を行っており、その過程で一次開発時のテーブル定義に必要な項目がなかったことが判明などは悲惨な例である。

  □ スパイラル型-2

    一度開発したものを、機能を追加しないで、さらにバージョンアップするタイプ。

    開発は終了し、実際に動くシステムではあるが、いろいろと問題があることがある。システムの構成やプログラム構造・ロジック・データ構造があまりよくない。いわばリファクタリングした方がよい場合。あるいは利用者が使ってみて操作がしづらい。このような問題がありうる。

    これらを改善するために、基本的には機能を追加せずにバージョンアップする。スパイラル型-0との折衷は当然ありうる。

    このタイプのプロジェクトが、どの程度あるかははっきりしないが、たぶん少ないだろう。小さなプロジェクトではあったが、個人的には数プロジェクトで体験した。

    これは考えてみれば、非常によい考えである。開発者は満足な仕事ができる。開発業者は二度料金が貰える。しかし問題点は発注者に費用負担がかかることである。ただ長期に渉りバージョンアップ・運用するシステムでは、よいと考える。


  □ アジャイル型 - XP(Extreme Programming),スクラム(Scrum)など

    ・ 文書より実物重視、コミュニケーション重視、顧客と密接にする、変化に対応する
       少人数の優秀なメンバーから構成されるプロジェクト
       大規模プロジェクトは難しい

    ・イテレーション(反復)
      開発対象を細かく分割し、短期間(数週間程度)で、仕様決定、設計、実装、テストを繰り返す
      実稼働までイテレーションできればベストだが、難しい
      現実にはあまり細かくイテレーションできない(スパイラル型と同じ)

    ・ペアプログラミング
      ペアプログラミングとは、1つのプログラムを2名で開発する手法
      1つのモニタの前に2名が並んで座り、1名がキーボードとマウスを使い、もう1名がアドバイスを与える
      メリット
        常にレビューされた状態となる
        サボらない(笑)
        知恵を出し合える
      デメリット
        生産性が落ちる

  □ 参考-V字モデル
    ・前作業がどの段階で検証されるか?
      ・要件定義 ⇒ 受入テスト
      ・基本設計 ⇒ システムテスト
      ・詳細設計 ⇒ 統合テスト
      ・実装     ⇒ コンポーネントテスト

    ・前作業が検証されるまでにタイムラグがある
    ・その間、前作業の結果にもとづいて各種の作業を行う
    ・前作業に間違いがあれば、各種の作業に間違いが入り込む
    ・前作業を確実に遂行し、またその検証をできるだけ早期に行う必要がある
    ・以下のような対策がある
      ・レビューを実施する
      ・次工程(要件定義であれば基本設計)で、前工程の資料を鵜呑みにすることなく批判的な視点で作業をする
      ・検証作業までのタイムラグができるだけ短くなるような開発プロセスを選択する
        ・ウォーターフォール型 ⇒ 他の開発プロセス(反復型、アジャイル型)
        ・反復型、アジャイル型などは、適用できればよいが、適用不可能なプロジェクトも多数存在する


-----------------------------------------------------
・目次 Java システム開発
  http://blogs.yahoo.co.jp/artery2020/40586660.html
・目次 - Java入門
  http://blogs.yahoo.co.jp/artery2020/39975776.html
・目次 - ビジネスパーソンの常識と非常識
  http://blogs.yahoo.co.jp/artery2020/39728331.html
・目次 - 論理・発想・思考についての考察と鍛え方
  http://blogs.yahoo.co.jp/artery2020/39657784.html
-----------------------------------------------------