このブログについて

ソフトウェア開発におけるエラーの予防やプロジェクト管理、品質管理を支援するParasoft製品のTIPSなどを、国内総販売代理店テクマトリックスのサポートスタッフが紹介しています。

2014年11月17日月曜日

2014年12月5日開催 お客様が語る実践セミナー 高信頼性システムソフトウェア開発への取り組み方




医療機器・車載機器・産業機械・航空宇宙機器などに使用されるシステムには高い信頼性と安全性が求められます。
そして、このようなクリティカルシステム(高信頼性システム)の開発従事者には国際規格に準拠するレベルのソフトウェア品質および安全性を達成するためのスキルが求められています。


一方で開発現場からは、

「規格対応セミナーに参加して規格の要求事項はどうにか理解できたものの、実際の現場で何からどう手をつけたらよいのかが分からない。」
 
「高信頼性システムへの取り組み方として、より実践的な内容が知りたい。」

という声も聞かれます。


そこで、今回はソニー株式会社メディカル事業ユニットの前田 宗泰様をお招きし、「開発者個々のスキルアップ」と「ソフトウェアエンジニアリング」の観点から現実的で効果的なクリティカルシステム(高信頼性システム)開発への取り組み方についてご講演いただきます。

また、テクマトリックスからはソフトウェアエンジニアリングの中でもソフトウェア品質確保における効果的なテスト方法にフォーカスし、その実施における課題と対応策について実例を交えながらご紹介いたします。


○医療機器・車載機器・産業機械・航空宇宙機器をはじめとしたクリティカルシステム (高信頼性システム)のソフトウェア開発に携われている方

○表面的な規格対応にとどまらず、高品質・高信頼性システムの開発のために、実務レベルでのプロセスの整備・改善、スキル向上を目指したい方

特にこれらに当てはまる方には、実践的な情報が得られる内容となっておりますので、是非参加をご検討ください。





━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆セミナー概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【開催日程】2014年12月5日(金)13:30~17:00 (開場:13:10)

【会場】東京コンファレンスセンター品川東京都港区港南 1-9-36 アレア品川 4F 406

【参費用】無料

【定員】80名(定員になり次第締め切らせていただきます。)
    ※ご同業の方の参加はご遠慮いただいております。


【講演①】
クリティカルシステム開発は
ソフトウェアエンジニアリングの個人メドレー!?
~結果を左右する基礎固めとは?~

【講師】
ソニー株式会社 メディカル事業ユニット 信頼性保証部門プロセスマネジメント部
前田 宗泰 様


【概要】
クリティカルシステムソフトウェア開発における規制や規格は、分野が異なってもソフトウェアエンジニアリングをベースにしている点は共通です。また安全性実現のために実質的に開発者には個人メドレーの如く、多くのスキルを要求するものとなっています。
一方で開発現場では具体的にどのように取り組めばよいのか答えを見いだせていないことが多くあります。
そこで今回は、開発者のスキルとソフトウェアエンジニアリングにフォーカスし、好ましい習慣としての“お作法”をキーワードに現実的で効果的な取り組み方をご紹介いたします。

--------------------------------------


【講演②】
ソフトウェアエンジニアリングの基礎への取り組み
~成果を出す静的解析・単体テストの実施法~

【講師】
テクマトリックス株式会社 ソフトウェアエンジニアリング技術部
渡辺 征一

【概要】
ソフトウェアエンジニアリングの基礎の中でも重要になるのが静的解析と単体テストです。
これを効率的に実現するために様々なツールが存在しますが、開発現場で運用に乗らないということをよくお聞きします。運用に乗らない主な原因は、各開発者の必要なスキルが不足していることや各開発者が好ましい習慣を身につけるためのプロセスの見直しができていないことにあります。
そこで、スキルやプロセスの見直し方法をはじめ、そこで洗い出される課題への対応策について具体的な事例を交えご紹介します。



 ※内容は、変更する場合がございます。あらかじめご了承ください。


【申込方法】お申し込み受付ページからお申し込みください。

2014年11月7日金曜日

C++testの便利な使い方


今回のテーマ:無限ループの単体テスト

皆さん、単体テストしてますか?

今回は、すこし稀な話題かもしれませんが、無限ループの単体テストについて取り上げてみたいと思います。

皆様のご存じのとおり、無限ループのある関数に対して単体テストをうまく実施することはできません。 テスト対象の関数が終了し、実行後の状態を確認しないと単体テストは完了とならないからです。

今回の記事では、C++testを使って無限ループの単体テストを行う方法をご紹介します。


どうして無限ループの単体テストができないのか?

関数単位で実行される単体テストは、

  1. 事前状態の設定
  2. 関数の実行
  3. 事後状態を確認

というような構成をとります(このような構成は、ホーアトリプルと呼ばれます)。

関数の実行による状態の変化、つまり事後状態を確認することで単体テストは完了します。

そのため、関数内の処理が無限ループに入ってしまうと、事後状態を確認することができず、単体テストは成立しないのです。

そのまま実行してもタイムアウトしてしまう・・・



C++testでは無限ループなどでテスト対象の処理が終わらない場合、タイムアウトでテスト失敗とみなします。(そのほかのツールではテストの実行がハングアップしてしまうかもしれません。)

そのため、無限ループするソースコードについては、レビューをしっかり行い単体テストは省略するという選択肢をとる場合もあります。

しかし、実際の開発現場では、ループ内の処理を確認したい、コードカバレッジを計測したい というケースがあるでしょう。

そうなると、どうにかして無限ループの単体テストを実施しなければなりません。

無限ループへの対策

では、無限ループのある関数をテストするにはどうしたらよいのでしょう?

よく見かけるのは、
  1. #ifdefで一時的にループを排除する
  2. ループを抜けるための変数を用意する(デバッガで変数を書き換える)
というような方法です。

すでに皆様の中にもこのような方法をとっている方がいるかもしれません。もちろん、それでテストが実施できていれば問題はありません。

ただ、1番目はソースコードが煩雑になりますし、2番目については、テストを自動化することができません。

そこで、登場するのが、

3. 「無限ループ用のC++test マクロを使う」


です。


無限ループの単体テストに対応するためのマクロ - C++test ユーザーズガイドより
名前
説明
CPPTEST_REGISTER_JMP(expression)
setjmp または sigsetjmp を使って内部的なジャンプ バッファーを設定し、渡される式を評価します。 CPPTEST_JMP API の呼び出しを使ってバッファーにジャンプすることができます。通常このマクロはテスト ケースの内部で使用され、テスト対象関数への呼び出しをラップします
CPPTEST_JMP (value)
longjmp の呼び出しを実行します (longjmp または siglongjmp 使用されます)。実行ステータスを最新の CPPTEST_REGISTER_JMP の呼び出しに戻します。通常このマクロはスタブの中で使用され、整数の引数を受け取ります。この引数は cpptestGetJmpReturn 関数によってテスト ケース内で返却されます。引数を使って、実行されるジャンプの正しさを検証できます 。
int CDECL_CALL cpptestGetJmpReturn();
最新の CPPTEST_JMP の呼び出しの戻り値、つまり longjmp/siglongjmp の引数を返します。これは setmp/sigsetjmp からの戻り値です。

これらのマクロを使うと、テスト対象のソースコードに手を加えることなく、無限ループの単体テストを実施することができます。

無限ループ用のC++testのマクロの利用イメージ


テストケースの実装例

ぜひご活用ください!

今回は、無限ループに関する、C++testの便利な使用方法をご紹介しました。

ご紹介したマクロについては、サンプルコードがC++testのマニュアルに記載されておりますので、あわせてご活用ください。

また、ユーザ様向けに、FAQサイトの公開もおこなっております。そちらもぜひご利用ください。


C++testをご利用いただいていない方は、この機会にぜひお試しください。

無償体験版ダウンロードは↓こちら↓です。



 技術資料請求


テクマトリックスではツールのご提供のみにとどまらず、導入前の支援から、導入開始時における開発者向けのトレーニング、CI(継続的インテグレーション)環境構築など、運用に乗せるための様々なサービスも実施しています。

ご興味のある方は、お気軽にお問い合わせください。