astah*に新しいプラグインが増えました。
UMLクラス図のモデルから、C言語のスケルトンコード、Google C++ Mocking Framework (Google Mock)を出力できるプラグインです。
UML2Cプラグン:http://astah.change-vision.com/ja/feature/uml2c-plugin.html
プラグイン作者の清水靖博さんに、プラグイン開発の経緯などをお聞きしました。
Q: まずは、簡単に自己紹介をお願いします。
永和システムマネジメント(チェンジビジョンの関連会社)で、組込みソフトウェア開発及び、その支援をするツールの開発を担当しています。得意分野は、カメラ、ディスプレイなどの画像処理を扱う機器の組込みソフトウェア開発です。
最近は、GPGPU+ディープラーニングに興味がありますが、あまり手をつけられていません。。趣味は、音楽鑑賞(主にジャズ)、ギター、ドラムです。
Q: 今回、このプラグインを作ろうと思ったきっかけを教えてください。
以前、組込みソフトウェア開発現場へのUML適用を検討していた際に、オライリーの「テスト駆動開発による組み込みプログラミング」に出会い、いつかこの本の手法を使ってみたいと思うようになりました。
なお、この本のまえがきはチェンジビジョン社長の平鍋さんが担当されていたので「平鍋さんの近くに行けばきっと思いが叶うはず!」と思い、その勢いで、永和システムマネジメントに転職してしまいました。
結果、ある案件でその機会を得て、設計にUMLを持ち込むことには成功したのですが、その後さらに「設計でしっかり書いたUMLを使って、実装やユニットテストを効率化したい」と思うようになり、このプラグインを作りました。
Q: 素晴らしい行動力!ところで、なぜ組込みソフトウェア開発にUMLを適用しようと思ったのですか?
私が経験してきた組み込みソフトウェア開発の現場では、次のような問題がありました。
- 断片的にしか設計書がない、かつその粒度もばらばら
- 設計書があっても独自記法で図が描かれているので、理解するのに時間がかかる
- 上記の理由により、人の入れ替えが発生すると開発が回らなくなる
これらの問題、特に2つ目を解決するために、まず規格化されている記法であるUMLを使おうとしました。
が、最初にトライした時は結局うまくいきませんでした。
Q: なぜうまくいかなかったのでしょうか?
まずは、UMLの知識不足がありました。
設計者が手探りでUML図を描いて、チームメンバを集めてレビュー会を実施しましたが、レビューする側もUMLの知識レベルが十分でなかったため、なかなか認識共有が進まず、レビューが長期化する問題が発生しました。
また、事前にUMLで描く設計モデルとC言語を紐付ける明確なルールを決めずに導入したことも原因でした。クラス、関連、依存、継承などのオブジェクト指向の概念をよく理解せずクラス図を描き進めてしまったため、いざ実装するとなったとき、C言語でどう書いていいかわからない、という状況に陥ってしまいました。
このため、実装以降の工程もうまく進まず、結果的にこの時のUML活用は失敗に終わりました。
そんな時に出会ったのが、オライリーの「テスト駆動開発による組み込みプログラミング」の本です。この本や他様々な文献を基に、設計モデルと実装(Cコード)を紐付けるルールを策定してドキュメント化しました。
組込みソフトウェア開発 : http://y-philly.bitbucket.io/embedded-know-how/index.html
Q: ルールを策定した事で、その後のUML導入の試みは成功しましたか?
はい。結果、ある案件で機会を得て、設計にUMLを持ち込むことに成功しました。
その後、しっかり描いた設計モデルを使って、実装やユニットテストを効率化したい」と思うようになり、このプラグインを作ったわけです。
Q: 素晴らしいですね。UMLの導入で、現場はどう変化しましたか?
お客様からは「機能追加等のエンハンスの際、必ず設計モデルを更新するようになり、設計書が陳腐化しなくなった」、「クラス図があるおかげで、エンハンスによる変更の影響範囲が容易に把握できるようになった」など、大変嬉しい評価をいただき、現在他部門への情報展開も行っていると伺っています。
現場は、C言語をメインで書かれている方ばかりでしたので、最初は何をどう書いていいのか分からないという状況でしたが、UMLとC言語のマッピングルールを丁寧に説明しながら、何とか現場に導入していった結果、最終的にはこのように良い評価をいただくことができました。
Q: 清水さんの根気と地道な努力が得た結果ですね。清水さんの「C言語でオブジェクト指向的な実装する狙い」は何ですか?
多くの組込みソフトウェアの開発現場では、ターゲットがマイコンなど、リソースがプアなプロセッサであるため今でもC言語がメインで使われています。私はこのような現場でもUMLを活用してもらうことを狙って、この活動を行っています。また、コンシューマー機器は、同じ期間内に微妙に仕様が異なる製品群の開発が行われることが一般的であり、ソフトウェアプロダクトラインの採用は避けて通れない状況にありますが、オブジェクト指向(特に継承、インターフェイス)の概念を持ち込むことで、C言語でもプロダクトラインの可変点にうまく対応できると考えています。
Q: こういった取り組みは、どれくらいされているんですか?
直近2年程、自分が担当する現場で取り組んでいます。ただ、組込みソフトウェアの規模が急速に拡大していることや、オージス総研さんなどが「UMLとC言語によるオブジェクト指向プログラミング」という研修コースを開催されていることを鑑みると、組込み現場からの需要はかなり高いと考えています。
ただ、需要はあるが、どこから手を付けたらいいかわからない、というのが実情だと思います。
Q: 清水さんの活動が今後更に広がり、このプラグインが役立つ場が増えるといいですね。ところで、プラグイン開発で苦労した点などありますか?
そうですね。コード出力は、テンプレートを編集することでプロジェクトで決められた関数ヘッダを付けるなどのカスタマイズができるようになっていますが、どこまで自由度をもたせるか、かなり悩みました。あまり自由度を高くすると、Javaやテンプレートエンジンの知識が必要になり、組込みソフトウェアの開発者が気軽に使えるものではなくなってしまいますので。
Q: では、こだわりポイントは?
Javaなど抽象度が高い言語に慣れていない組込みソフトウェアの開発者に使ってもらうため、astah*からの操作やテンプレートの変更ができるだけシンプルになるようにこだわりました。
Q: このプラグイン、どんな方に使ってもらいたいですか?
C言語を主に使用している組込みソフトウェアの開発者の方々に使ってもらいたいです。このプラグインを使うことで、設計モデルをしっかり描くメリットを実感していただけるとうれしいです。
清水さん、どうもありがとうございました!
みなさん、UML2Cプラグイン、ぜひお試しください
UML2Cプラグン:http://astah.change-vision.com/ja/feature/uml2c-plugin.html
おまけ
後日、「テスト駆動開発による組み込みプログラミング」の原作(Test Driven Development Embedded for C)著者であるJames W. Grenningさんから、平鍋経由でグラスをいただいたようです。#include !