エンジニアリング
DX時代に求められるソフトウエアエンジニアリング
デジタルテクノロジーのイノベーションが、ビジネスのDX(デジタルトランスフォーメーション)を促進しています。
では、どのような技術が、DXの土台となっているのでしょうか。
DXの実現に活躍する現代的なシステム開発と運用の技術は、どのようなものでしょうか。
ここでは、デジタルテクノロジーの進化を支えているソフトウェアエンジニアリングについて解説します。
デジタルテクノロジーを支えるソフトウェアエンジニアリング
現在、日常生活やビジネス活動において多くのソフトウェアが動いています。人間の知的活動を再現するかのようなモバイルアプリケーションから極めて膨大で高速な金融機関のデータ交換まで、その恩恵を受けない時はほとんどありません。
こうしたソフトウェアの実現に力を発揮するのがソフトウェアエンジニアリングです。
ソフトウェアエンジニアリング(Software Engineering:ソフトウェア工学)とは、優れた性能と品質を備えたソフトウェアを的確な期間とコストで開発するための応用技術です。そこには要求分析・ソフトウェア設計・プログラミング・ソフトウェアテスト・ソフトウェア保守といった作業に関する知識・ツール・手法が含まれています。
巨大で堅牢なビルディングは、過去の経験から身に着けた属人的な職人技だけではの建設できません。構造力学・材料工学などの理解とそれを建築物として構想する設計技術、実際に組み立てる建設技術・プロセスが必要になります。
同様に、性能と品質に優れたソフトウェアを開発するには、コンピュータサイエンスの知見とともにソフトウェアエンジニアリングの活用が不可欠です。
ソフトウェアエンジニアリングが、安定した性能と品質を生み出す
デジタルテクノロジーが効果を発揮するには、大量のソフトウェアが必要になっています。その開発にも、組織だった活動が不可欠です。
例として、2つのソフトウェアを取り上げます。
まずは、スマートフォンやデジタル家電からスーパーコンピュータまで、多くのコンピュータでOSとして利用できるLinuxです。1991年に開発がはじまり、すでに30年以上にわたってメンテナンスされています。11億5,000万行のソースコードを持ち、23万5,000人以上の開発者と1万9,000社以上の企業が開発に参加してきました。
クラウド上で複数のコンピュータ資源を自動的に協調動作させるKubernetesというオーケストレーションツールの開発には、Googleを初めとする企業のエンジニアが3,000人以上かかわり15年以上に渡りメンテナンスされています。これだけの規模になると、組織だった活動に関するナレッジとツール・手法が不可欠なことは、想像に難しくないでしょう。
そこで重要なのが、性能と品質を確保するためのソフトウェアエンジニアリングなのです。
モダンなソフトウェア開発の様相
ソフトウェアエンジニアリング自体も、デジタルテクノロジーの進化や時代の潮流に合わせて変化を続けています。
ここでは、現代のデジタルテクノロジーの活用に不可欠なソフトウェアエンジニアリングのいくつかのトピックスを
紹介します。
ウォーターフォールからアジャイルへ
現在、ソフトウェアの開発プロセスとして主流になっているのが、ウォーターフォールとアジャイルです。
ウォーターフォールは、最初に作るべきシステムの要件を明確に定義して開発の各ステップを進めていく開発プロセスです。要件定義・基本設計・詳細設計・実装・テスト・統合テストといったステップを進めていき、前のステップが完了したらその成果物をもとにして次のステップを開始します。水が流れるように後戻りが大変なことから、ウォーターフォールという名前が付いています。主に、記録する情報を事前に決めることができるシステム(SoR:System of Record)の開発で採用されます。
アジャイルは、ごく短期間の開発作業をすばやく繰り返す開発プロセスです。短い開発サイクルごとにその成果を顧客や利用者に提供してフィードバックを得ることで、次に開発する内容をその都度決めていきます。
フィードバックをもとにして、柔軟にシステムを変更しやすくなるため、最初から答えが分かっていない課題を解決するシステムの開発を中心に採用されることが増えてきました。
とくにDX(デジタルトランスフォーメーション)においては、どのようなビジネスを新しく構築するのか最初から明確になっていない場合がほとんどです。そのため、アジャイル型の開発プロセスを利用する場合が増えています。
継続してサービスを提供しながら機能や品質を改善していくWebサービスなどでも、アジャイル型の開発プロセスが当たり前になっています。
ソフトウェアテストの自動化
開発したソフトウェアが、仕様通りに正しく動作するかどうか動作を確認する作業をソフトウェアテストと呼びます。テストは、入力データや操作に応じて、どのような出力が得られるか定義しておこないます。
これを、テストパターンと呼びます。
ウォーターフォール型の開発プロセスでは、テストを工程の最後でおこないます。数回しかテストしない場合は、手動で片づけてしまうことも少なくありません。しかし、テストで問題が見つかると大きな手戻りが発生します。ソフトウェアを修正するたびに、再度手動でテストして大きな工数を費やすことになります。
アジャイル型の開発プロセスの場合は、テストはさらに重要です。もともと開発サイクルを繰り返す前提なため、そのたびにテストに時間を取られてしまうのです。
そこで最近ではテストの自動化が普及してきています。テストを自動実行するツールも充実してきました。自動実行するテストのパターンデータを自動生成も可能になってきています。
テストを自動化すると、もしも問題があっても早い段階で検出できます。アジャイル開発とテストの自動化を組み合わせれば、短期的な開発を繰り返しても一定の品質を保っていくことができるのです。
開発と運用の一体化するDevOps
ウォーターフォール型開発プロセスでは、各ステップを順番に実行していましたが、開発と運用も明確に分離して
いました。システム開発が完了したときに、顧客に引き渡されて運用が始まるのです。そのため開発を担当する
エンジニアと運用を担当するエンジニアも分かれていました。
これに対してアジャイル型の開発プロセスでは、サービスを継続的に提供しながら開発を繰り返していくため、
開発と運用が一体になっています。これを、“Development”(開発)と“Operations”(運用)を組み合わせてDevOpsと呼びます。
DevOpsでは、テストの自動化に加えてソースコード管理のシステム化やソフトウェアを利用可能にするデプロイ作業の自動化などを組み合わせることで、ソフトウェアを開発・提供するステップをすばやくできます。
ウォーターフォール型の開発では、開発したシステムを納入まで数か月かかることもめずらしくありません。
アジャイル型の開発を採用したWebサービスでは、1日に数回にわたってシステムを更新するのもよくあります。
DXを支えるオープンソースソフトウェア
こうしたシステムの高速な進化を支えているのが、オープンソースソフトウェア(OSS : Open Source Software)です。
OSSは、そのソースコードを誰でも自由に使用・改良・配布できるソフトウェアの総称です。現在デジタルシステム
の土台となる多くのソフトウェアがOSSになっています。先ほど開発規模で取り上げたLinuxやKubernetesもOSS
です。
主要なOSSの多くが、バザールモデルと呼ばれる分散型開発モデルを採用しています。世界中の多くの企業とエンジニアがボランティアで開発に参加して品質と機能の向上をサポートしています。
このようなOSSを的確に活用することが、すばやくDXを進める基礎となるでしょう。