ページの本文へ

Hitachi

企業情報研究開発

大規模で複雑なソフトウェアの構造をVR空間で可視化する技術を開発

ソースコードの直感的な理解を促進し、ソフトウェアの問題個所の発見を支援

2019年10月15日
株式会社日立製作所

  日立は、ソフトウェア開発を効率化する技術として、大規模で複雑なソフトウェアの構造をバーチャルリアリティ(以下VR)空間で可視化する技術を開発しました。VR空間内にソフトウェア構造を建築物にたとえて表現することで、ソースコードの直感的な理解を助けるとともに、ソフトウェアの問題個所の発見を容易にしました(図1)。今後、日立は本技術を活用して効率的にソフトウェアを開発する環境を提供していきます。


図1 ソフトウェア構造の表現


図1 ソフトウェア構造の表現

背景および取り組んだ課題

  • 近年のコンピュータの進化や普及に伴いソフトウェアで機能を実現する製品が増えており、開発するソフトウェアが大規模・複雑化
  • 大規模開発をゼロから行うケースは少なく、既存ソフトウェアを改造する派生開発が増加
  • 巨大なソフトウェアを改造する場合、ディスプレイなどの2次元平面では表示できる情報量に限界があり、ソフトウェアの構造理解が困難

開発した技術

以下の理解を支援する技術を開発:

  • マクロなソフトウェア構造
  • 不具合につながりやすいソフトウェア特性
  • ソフトウェアの動的な振る舞い

確認した効果

  • 規模の大きなソフトウェア(42万行)の構造を滑らかに表示し、大規模なソフトウェアが一望可能なことを確認

発表する論文、学会、イベントなど

  • 本成果の一部を2019年9月30日から10月1日に米国クリーブランドで開催されたThe 7th IEEE Working Conference on Software Visualization(VISSOFT2019)*1で発表済
  • また、2019年10月17日から18日にHitachi Social Innovation Forum 2019 TOKYO*2で発表予定

開発した技術の詳細

1. 建築物にたとえて表現した、マクロなソフトウェア構造の理解支援技術

  ソフトウェアは関数(処理)の呼び出しの連鎖で作られており、これを2次元平面に表示すると複雑な図形となり、人間には理解できない情報になってしまいます。VR空間には縦・横・奥行があり、自分が頭を動かしたり、歩いたりすることで情報をさまざまな角度から見ることができます。本技術では関数を物体(オブジェクト)、関数のまとまりを部屋に対応付け、円筒および階層化した建築物として表現するアルゴリズムを開発しました。開発者は円筒状に並べられた建築物の中庭から全体の構造を一望することができます。さらに詳細を見たい部屋があれば部屋の内部に移動して、関数同士の関係やソフトウェアの特性を把握することができます。

2. 不具合につながりやすいソフトウェア特性の理解支援技術

  ソフトウェアの構造が複雑すぎると、そのソフトウェアを母体とした改造は不具合が発生しやすくなります。不具合が発生しやすい構造には、依存関係が複雑すぎたり、関数の大きさが巨大すぎたり、よく変更されているなどの特性があります。これらの特性は、個別にソースコードを読んでいるときに気づくことは困難です。本技術では依存関係を線として、関数の大きさをオブジェクト形状として、変更履歴をオブジェクトの色として表示することで、直感的にソフトウェアの問題に気づくことが可能になります。

3. ソフトウェアの動的な振る舞いの理解支援技術

  ソフトウェアの動作を理解するときに、ソフトウェアを実行して順番に見ていく作業を行います。従来はデバッガを使って行ごとにソースコードを実行して読んでいましたが、本技術では周辺のソフトウェア構造を見ながらVR空間内の関数を順に実行していくことができます。デバッグ中にエラーが発生した場合には、そのエラーが発生した個所を強調表示し、VR空間内に配置された関数のどこで問題があったのかを開発者は確認することができます。また、VR空間に複数の開発者が同時に参加し、共同でデバッグ作業を行うことができます。


図2 ソースコードの共同デバッグ

解説動画

*1
VISSOFT2019 http://vissoft19.dcc.uchile.cl/
*2
Hitachi Social Innovation Forum 2019 TOKYO https://hsiftokyo.hitachi/

照会先

株式会社日立製作所 研究開発グループ

掲載先

このトピックスは、以下の新聞、Webサイトに掲載されました。

2019年10月17日
2019年10月18日
2019年10月30日