アジャイル開発技術者に必要なスキルと育成【前編】:技術スキルについて

アジャイル導入の普及を実現するため、優秀なアジャイル人材育成は必要不可欠となります。アジャイルプロジェクトでは、一人のエンジニアが要求の分析、設計、開発、テストなど様々なスキルが求められます。また、アジャイル開発はチームで取り組むため、コミュニケーション能力など技術以外のスキルも必要となります。このように、アジャイル開発の場合は、ウォーターフォール開発に比べより幅広いスキルが求められるため、適切な育成施策を通じて、アジャイル人材を育てることが重要となります。

本連載では、「アジャイル開発技術者にどのようなスキルが必要か」、「人材育成はどの部分にフォーカスしたらいいか」について、前編・後編に分けてご紹介していきます。
前編は、アジャイル開発に必要な技術スキルについて解説します。

【後編】: 技術とその他スキル

特約執筆者:長瀬 嘉秀

はじめに

アジャイル開発を行うときには、チームを作ることが必要です。その中で、開発を担当するエンジニアとして、必要なスキルについて説明していきます。スキルの分類は、3つにわかれます。それは、技術スキル、チームワーク、ファシリテーションです。それでは、こられを掘り下げて、見ていきましょう。

技術スキルには、開発対象システム固有の技術も必要ですが、それ以外のアジャイル開発で必要になるものは、以下になります。
・アジャイルの仕組み
・オブジェクト指向
・設計(UMLなど)
・デザインパターン
・テスト駆動開発(TDD)
・リファクタリング
もちろん、これ以外にも、DevOpsなど多くの技術要素があります。ここでは、ここに上げたものを中心に見ていきます。

1.アジャイルの仕組み

アジャイル開発をするときに、アジャイルの仕組みを理解している必要があります。チームのメンバーは、誰かの指示で動くのではなく、個人が考えて仕事をしていきます。よって、アジャイル開発のすべてについての知識が要求されます。それは、要件分析、プロジェクト管理、ソフトウェアの設計開発、DevOpsなどです。ユーザーであるプロダクトオーナーからストーリーが出されて、それを見積もるのは、チーム全員です。要件から見積もりを出せるスキルが必要になります。従来型の様に、役割別に分かれていて、要求分析をする人がブレークダウンして、さらに、システムアナリストが分析して、設計が行われて、その後でようやくソフトウェアエンジニアがプログラム開発だけをするということではありません。アジャイル開発のエンジニアは、要求分析からDevOpsへのビルド配置までをこなす必要があります。

ソフトウェアエンジニアも、アジャイル開発の仕組みとその中で行うことをすべて理解する必要があるのです。アジャイルチームでは、アジャイルの用語が飛び交います。イテレーション、ストーリー、ベロシティなど、用語がわからなければ、コミュニケーションが円滑に進みません。ただし、知識については、学習することで身につきます。アジャイルの入門や概要などのトレーニングコースに参加したり、アジャイルの検定試験に合格したりすることによって、理解することは可能です。より実践的なことは、実際のプロジェクトを通してしか身につきませんが、まず、チームメンバーとして参加する最低限の知識は付きます。

どのような知識が必要かを書籍の中から紹介します。アジャイル検定対策用の書籍の目次を次にあげます。(リックテレコム社書籍のページより抜粋)
————————————————-
第1章 アジャイル開発の概要
1.1 アジャイル開発の特徴
1.2 アジャイル開発に必要なスキル
第2章 アジャイル開発に対する基礎知識
2.1 アジャイルソフトウェア開発宣言
2.2 アジャイルソフトウェア開発の原則
理解度確認! 演習問題
第3章 アジャイル開発におけるプロジェクト管理
3.1 アジャイル開発のメンバーの役割
3.2 アジャイル開発プロジェクトのチーム編成
3.3 プロジェクトのビジョン共有
3.4 イテレーションによる開発
3.5 会議体
3.6 計画作り
3.7 見積り
3.8 品質
3.9 ドキュメント
理解度確認! 演習問題
第4章 開発チームの運営
4.1 自律したアジャイルチーム
4.2 アジャイルチームの責任
4.3 良いアジャイルチームを目指して
4.4 アジャイルチームの運営実務の知恵袋
理解度確認! 演習問題
第5章 アジャイル開発の各種手法
5.1 ペアプログラミング
5.2 リファクタリング
5.3 常時結合(継続的インテグレーション)
5.4 テスト駆動開発
理解度確認! 演習問題
————————————————-
アジャイル開発のプロジェクト管理、チーム運営、技術手法の概要は、この内容で理解できます。基本知識としては十分になります。

2.オブジェクト指向と設計技術

アジャイル開発の仕組みの次に、ソフトウェア開発の基礎であるオブジェクト指向を見ていきます。オブジェクト指向は、現在使われいているほとんどのプログラミング言語に対応しています。当たり前といえば、当たり前の技術です。ところが、この当たり前の技術をソフトウェア開発の現場では、ないがしろにされていることが多いのです。

オブジェクト指向の最大のメリットは、抽象化して、機能の再利用性を高めて、生産性を上げることです。この人は、普通の人の3倍プログラミングが速い、ということを聞きますが、それは、3倍のスピードで入力できるということではありません。3分の1のコード量で機能を実装できるのです。それはなぜかと言うと、オブジェクト指向の再利用を使っているからです。実際、10年前ぐらいに開発されたJava言語のコードを見てみると、見事にオブジェクト指向とは程遠い、COBOL言語で書かれたシーケンシャルな処理をダラダラと書いたような状況になっています。これでは、生産性は上がらず、コードの保守コストも高くなります。その方が、開発会社としては、過去は儲かったかもしれません。現在は、オブジェクト指向で素晴らしいコードを書ける人も増えてきて、このようなレガシーなコードは許されなくなってきました。

それでは、どのようにオブジェクト指向技術を学習するのでしょうか。例えば、プログラミング言語の書籍で、GUIなどの画面周りの説明ではなく、クラスやメソッドというオブジェクト指向の要素を説明している書籍を学習することや、UMLなどの設計の書籍を読むことが良いでしょう。
 例えば、UMLの書籍としては、このようなものがあります。

3.デザインパターン

アジャイル開発で重要なのが、ソフトウェアの設計技術であるデザインパターンです。デザインパターン自身は、アジャイルだけに有効な技術ではなく、ウォーターフォールでも使われます。それは、デザインパターンはオブジェクト指向の設計技術で、ウォーターフォールでもオブジェクト指向技術は使うからです。

アジャイル開発で、デザインパターンは、テスト駆動開発やリファクタリングの基礎知識として必要です。デザインパターンを理解していないと、これらの技術は使えません。例えば、リファクタリングによって、現状のコードの共通部分を抽出して、スーパークラスを作成して、処理の差分だけサブクラスに記述する、ということを行うときに、デザインパターンの知識があると、即座にテンプレートパターンを使おう、と考えることができます。

このように、デザインパターンは、アジャイル開発のエンジニアにとっては、必須の知識です。デザインパターンの参考書は、こちらが良いでしょう。
 ・「独習デザインパターン
 ・「Java言語で学ぶデザインパターン入門」 

次回へ

次回は、技術スキルの残りと、チームワーク、ファシリテーションを見ていきます。

おすすめ記事