ソフトウェア開発自動化とは
古くからあり、今でも使われている自動化技術の例として、アセンブラ、コンパイラがあります注。これは、人間に分かりやすい抽象化されたプログラム言語から、コンピュータのCPUが直接理解し実行できるマシン語を自動生成(変換)するものです。今ではJavaやC#といった高級プログラム言語からの自動生成に発展しており、人間が扱えるソフトウェアの規模をより大きくすることに成功しています。
さらに近年は第四世代言語(4GL)参考1やモデル駆動アーキテクチャ(MDA)参考2と呼ばれる、自動化をより発展させる技術も登場してきました。しかし残念ながら、これらの技術は必ずしも広く普及しているわけではありません。その理由に過剰な汎用性があると考えられています。つまり、何にでも使えるようにしようとしすぎた、"One Size Does Not Fit All"ということが問題と考えられています。
ソフトウェア開発自動化の今後の動向
現在では、過度な汎用性を目指すことの問題点を改め、何かに「特化する」自動化技術が登場しています。特化する対象の違いにより大きく2つのタイプがあり(表)、今後この2つの方向で自動化技術は進化していくと考えています。
表:今後の自動化技術の進化の2つの方向性
フレームワーク特化型の自動化技術(水平特化)
特定の領域のアプリケーション種(Webアプリケーションなど)を開発することに特化した自動化です。例えば、現在Webアプリケーション開発のデファクト標準となっているStruts、Spring Frameworkなどのフレームワーク利用に特化した自動化技術があります。フレームワーク上で作成しなければならない設定ファイルやプログラムの雛形を自動生成します。Spring Roo参考3や弊社のTERASOLUNA IDE参考4といったツールがこれに当たります。
特定システム特化型の自動化技術(垂直特化)
特定のシステム開発に特化し、そのシステム専用の開発言語を定め、その言語からプログラムを自動生成する技術です。専用言語はドメイン特化言語(DSL)と呼ばれており、近年、普及の兆しをみせています。DSLはJavaやC♯などの汎用的なプログラム言語に比較して5~10倍の生産性があるとの報告もあります。一方でそのような特化言語や専用ツールを開発するために、ある程度の初期投資が必要となります。
NTTデータでは、このような自動化技術の動向を踏まえ、2つのタイプの自動化技術を開発し、お客さまシステムの開発短期化を実現していきます参考5。
- 注ソフトウェア開発自動化は、ソフトウェア生産にかかわるあらゆる作業のコンピュータによる機械化・自動化のことですが、ここでは主にプログラムの自動生成のことを指します。