目次
■なぜこの問いなのか?
今回は、「システムやプログラム製作の各プロセスによってどのような能力や要素が求められるのか?」について言及していきたいと思います。
理由としては、前回の考察を通して、「どうやらプログラミングは学んだ方が良さそうではあるけど、どのくらいのレベルのプログラミングをかける必要があるのか?」という問いにたどり着いたからです。
narumi-yamauchi.hatenablog.com
narumi-yamauchi.hatenablog.com
そして、この問いに答えて、次の問いや行動に移せるようにするために、「システムやプログラム製作の各プロセスによってどのような能力や要素が求められるのか?」という問いにしてみました。
おそらく、システム開発やプログラム製作(以下、システム開発で統一)の各プロセスによって、必要な能力や要素は異なってくるでしょう。また、自分の現在の立場や今後の立場によっても異なってくるはずなので、その点も加味しながら考察をしていこうと思います。
■システム開発には過程があるのか?
さて、システム開発にはどのようなプロセスがあるのでしょうか?システム開発には幾つかの手法があり、それぞれに必要な要素や必要な度合いは異なるのですが、大まかに共通している要素は以下のものがあります。
- 企画
- 要件定義
- システム設計
- プログラミング
- テスト
- 運用、保守
では、これらの要素をもとにさらに考察を深めていきたいと思います。これらの各要素にはさらにどんな要素があるのか?についても考えていきたいですが、先に上記の要素をどのような順番で進めていくか、どのような体制で進めていくか?という意味でどのような手法があるのかについて考えていきたいと思います。
参考:開発プロセスの基本を学ぶ | 日経 xTECH(クロステック)
■システム開発にはどのようなモデルがあるのか?
おそらく、システム開発には重要な部分だけを抜き出して、ある程度、開発がしやすいように設計されたモデルがあるはずです。そこで、実際に調べたところ、モデルが確認できたので、それぞれのモデルの細かい説明は他の人に譲るとして、、、、(下部に参照リンクを載せてます。)自分にはどのような開発手法が適切か?について考えていきたいと思います。
まず、システム開発のモデルは以下ものがあるようです。
- ウォーターフォールモデル(V字型モデル) *(引用元:http://sysdev.sakura.ne.jp/development/169)
- プロトタイプモデル
- スパイラルモデル
(引用元:http://webpg014.hotcom-web.com/page6.html) - インクリメンタルモデル
(引用元:http://www.itmedia.co.jp/im/articles/0310/08/news001.html) - アジャイルモデル
(引用元:https://ec-orange.jp/ec-media/?p=18702)
参照:ソフトウェア開発プロセスを学んで健康的なエンジニアライフを送ろう
以上の1〜4に関してはソフトウェア工学という学問からでてきた考え方であって、ソフトウェアのプロセスをモデル化・評価して、どう効率的な開発やメンテナンスを行っていくかという目的で作られています。しかし、5のアジャイルモデルだけは、上記の考え方も認めつつ、実践的で、環境等に早く適応するという目的の下でできたものです。
今回、各種モデルを調べた結果、仕様等に変更が少ないプログラムは政府や大手を相手にしたビジネスとなりますが、中堅やエンドユーザーを相手にする場合、または、多数のステークホルダーを擁する場合は1〜4は適切ではないでしょう。
大手を対象とするシステムではなく、基本的に中小企業やエンドユーザーを対象とするサービスの場合は、5のアジャイルモデルが適切なのかなと感じます。
そこで以下ではアジャイルモデルについて述べていこうと思います。
■アジャイルモデルにはどのような手法があるのか?
代表的ものは7つあるようですので、以下にリストアップします。
- スクラム
- エクストリーム・プログラミング(XP)
- ユーザー機能駆動開発(FDD)
- リーンソフトウェア開発
- アジャイルユニファイドプロセス
- クリスタル
- 動的システム開発手法
*参考:
7つのアジャイル開発手法の実践ガイド(第1回) (1/3):CodeZine(コードジン)
7つのアジャイル開発手法の実践ガイド(第2回) (1/4):CodeZine(コードジン)
アジャイル開発とは?今さら聞けない開発手法のメリット・デメリット|発注成功のための知識が身に付く【発注ラウンジ】
シンプルさで選ぶなら、XPやリーンソフトウェア開発がいいのかなと思います。そして、慣れてきたり、経験者がいる場合はスクラムやその他の開発手法を試すのがいいかもしれません。要素が比較的シンプルでわかりやすいものはXP・リーンソフトウェア開発・スクラムかなと思います。
ただし、リーンソフトウェア開発に関しては、開発の考え方を中心にしたものなので、具体的にどういう組織で、技術でやるかということは話していません。また、スクラムはコミュニケーションを重視したものなのでモデルとしても解釈の幅が大きいように思います。
そのため、今回は、XPを中心に以下では述べていきたいと思います。もし、他のものも参考にしたければ上記のリンクに載せているので、確認してみてください。
■XPはどのようなプロセスで進めていくのか?
XPは以下の図に従ってプロセスをすすめます。
(参考:アジャイルモデリングへの道 第4回:アジャイル開発におけるモデリング | オブジェクトの広場)
各プロセスについては、以下のように考えられている。
- 要求:開発依頼者の要求をその優先度とともにストーリーカードというインデックスカードに順次記し, カード毎に見積もりを行い, 今回の反復の開発範囲を決める
- タスク分割:開発者が集まって各ストーリーカードを実現するために必要な開発作業をタスクカードというインデックスカードに書き出し, 各開発者ペアが担当する作業範囲を決める
- プログラミングと単体テスト:各開発者ペアがタスクカードに対応するプログラミングを行い, 作業範囲が完了したことを単体テストで確認する
- 受け入れテスト:作成されたプログラムにおいてストーリーカードで合意した開発範囲が実現しているか確認する
(参考:アジャイルモデリングへの道 第4回:アジャイル開発におけるモデリング | オブジェクトの広場)
■それぞれのプロセスでどのような能力が必要か?
以下が「システムやプログラム製作の各プロセスによってどのような能力や要素が求められるのか?」の問いのアンサーになります。
まず、要求の時点で自分たちがなにを欲しているのか?ということをはっきりとさせる必要がある。このような意味で、要求の時点ではある一定のビジョンを持つという能力が必要だと考えられる。
次に、タスク分割について考えていくと、要求や要件などの抽象的な内容をさらに具体的な要求や要件に落とし込んでいくことが必要になる。また、どのように開発者に割り振るかということも考えなければいけないので、コミュニケーション能力も必要とされる。
プログラミングと単体テストに関しては、要件を満たすためにはどのようなプログラミング言語とどのような組み合わせをする必要があるのかということを調べることができる、または、知っているということが必要。
最後には、できたものと理想なもの比較するという能力が必要。
■まとめ
以上のことを考えてきた結果、システムやプログラム制作における最も根本的な能力は欲しいものはなにかという問いに答える能力だと考えられます。
つまり、自分自身の要求・要件定義の能力が最も重要な能力ではないかと考えられます。当然ですが、要求や要件定義ができなければ、どのようなプログラミング言語が必要でどのような組み合わせをすればいいのかも分かりません。
また、すべてのプロセスに共通して考えられる要素はコミュニケーション能力だと考えられます。その理由としては、チームで作業する場合、必ず他人とコミュニケーションをする場が発生するからです。
では「自分が欲しいものは何か?」という問いにはどのように答えればいいのでしょうか?
また、人とコミュニケーションする際にどのようなポイントに気をつければいいのでしょうか?この問いにはそのままでは答えようがないので、問いの形を変えなければいけません。コミュニケーションには目的があると思います。ですので、「コミュニケーションにはどのような目的があるのか?」「その目的によってどのようなコミュニケーションが適切だと考えられるのか」このように考えたほうが答えやすいかもしれませんね。
今回はここまでとさせていたできます。