このブログについて

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

2016年5月11日水曜日

ソースコードに技術的負債を溜め込んでいませんか?


“とりあえず動く”コード

 納期間際になって不具合が見つかった状況を考えてみます。選択肢は2つあります。一つは設計から見直し、コードを変更してテストも行うことですが、納期に間に合わないかもしれません。

 もう一つはとりあえず不具合を解消するよう深く考えずにソースコードを変更することです。納期に間に合ってプログラムも正常に動いている模様ですが、その後の変更時に影響範囲が大きかったりソースコードの意味が分からなかったりして、不具合の修正や機能追加が大変になる、あるいはコードをいじれない、という事態が待ち受けています。

 あなたのプロジェクトは2つ目のような事態に陥ってはいませんか?

技術的負債とは?

 2つ目の選択肢のような「とりあえず動くが、後から変更が大変なコード」は「技術的負債」と呼ばれています。技術的負債は単にソースコードが汚くて読みにくいコードだけでなく、次のようなコードも当てはまります。
  • テストケースが作られていないコード
  • 設計を推敲せずに書かれたコード
  • 別のところからコード断片をコピー&ペーストしたコード
 これらが溜まってくると、コードを修正して良いのかどうか、何のためのコードなのかが分からなくなってきます。その結果、次のような問題に発展していきます。
  • 変更に時間がかかる
  • テスト工数が膨らむ
  • リリースが遅れる
  • リリース後も障害が起きる
 このような問題に発展する前に、リリースまでに技術的負債を極力減らしておく努力が必要です。作られてしまった技術的負債を減らす方法は唯一、リファクタリングを行い、地道にコードをきれいにすることです。しかしリファクタリングを行うにも工数が必要ですから、技術的負債の量や、技術的負債に対処しなかった場合のビジネス上の影響、プロジェクトの進捗などといったものとのバランスを見て行わなければなりません。

技術的負債の計測と可視化

 では技術的負債の量はどのように求めたら良いでしょうか? 技術的負債の構成要素としては、コーディング規約違反の件数、メトリクスの超過/過少の量、単体テストの失敗件数、テストで未到達なコードの量、等が考えられます。一例として、SQALEメソッドにおいて技術的負債の計算方法が例示されていますので、参考になると思います。

 技術的負債を定義したら、次は技術的負債の構成要素を計測します。計測方法は要素によって異なりますが、コードレビュー時に確認したり、単体テストを実行したり、静的解析や構造解析のツールを利用することが一般的です。弊社取扱製品であるParasoft JtestParasoft dotTEST, Parasoft C++testといったテストツールももちろん利用できます。

 最後に、各要素から技術的負債を計算してプロジェクトメンバーに提示します。先程例として挙げたSQALEメソッドに従うと、技術的負債は単純な四則演算で計算できますので、表計算ソフトでも計算できます。あるいは弊社取扱製品であるParasoft Development Testing Platform (Parasoft DTP) を使用すると、技術的負債を計算する手段が予め提供されている他、技術的負債がモジュールや品質特性ごとに計算され、かつWebブラウザで確認できます。WebブラウザでParasoft DTPにアクセスすれば、下図のようにどこにどれくらいの技術的負債が溜まっているかをいつでも誰でも確認できるため、技術的負債を減らすためにリファクタリングを開始する動機付けが可能になります。


 また、継続的インテグレーションの中に技術的負債の計測を組込むことで、現在のプロジェクトの技術的負債の状況をリアルタイムに近い形で確認することが可能になります。技術的負債が増加していることをリアルタイムに把握できれば、リーダーの方がリファクタリングを開始するよう指示して早期にプロジェクトを軌道修正することも容易に可能になります。

技術的負債を計測しませんか?

 いかがでしたでしょうか。技術的負債とは何か、技術的負債が溜まるとどうなるか、技術的負債を算出して可視化する方法をご説明いたしました。読者の方が技術的負債を返済し、将来の変更の労力を少しでも減らすことができればと思います。

 最後に、上記で紹介しました弊社取扱製品はすべて2週間無償でご評価いただけますので、購入を検討されたい方は下記からぜひお試しください。またParasoft DTPのユーザー様向けに、技術的負債を計算するためのプラグインも提供しておりますので、ぜひご利用ください。



Parasoft DTPプラグイン提供ページ

2016年3月29日火曜日

4/18開催!医療機器ソフトウェアセミナー



国内では、IEC60601-1第3版が2017年6月から適用され、医療機器基本要件基準第12条第2項のライフサイクルプロセス規定は2017年11月以降適用されることになっています。
さらにIEC 62304、IEC 62366、ISO 13485などの主要規格の改訂・追補作業が進み、ソフトウェア単体の製品規格として、IEC 82304が準備されています。

本セミナーでは、昨年に引き続き ISO/TC215 JWG7国内主査 平井正明 様 をお招きし、こうした動きの先駆けであるFDAの動向と、医療機器ソフトウェアの規制と現状についてご講演いただきます。
テクマトリックスからは米国FDAのソフトウェア開発のガイダンスGPSV(※)で言及しているディフェクトマネジメントを効率的におこなう方法についてご紹介します。

※GPSV:General Principles of Software Validation;Final Guidance for Industry and FDA Staff

医療機器メーカー様、医療機器ソフトウェア開発に携わっている方、医療産業への参入を計画している方には、非常に有益、かつ実務的な情報が満載のセミナーです。
ぜひご参加ください。




━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆セミナー概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【開催日程】2016年4月18日(月)13:30~17:30 (開場:13:10)

【会場】 テクマトリックス(株) セミナールーム
    東京都港区三田3-11-24 国際興業三田第2ビル(受付9階)


【参加費用】無料

【定員】40名(定員になり次第締め切らせていただきます。)
    ※同一部署からのご参加は、2名様までとさせていただきます。
    ※ご同業の方、医療機器製造に携わっていない方の参加は、ご遠慮いただいて
     おりますので あらかじめご了承ください。


【講演内容】
■医療機器ソフトウェアの規制と現状:2016年

【講師】
ISO/TC215 JWG7国内主査
平井 正明様

【概要】
国内では、IEC60601-1第3版が2017年6月から適用され、医療機器基本要件基準第12条第2項のライフサイクルプロセス規定は2017年11月以降適用されることになっています。
一方、その医薬品医療機器等法に関係の深い国際規格IEC 62304についてはEd1.1:2015が、IEC 62366についてはIEC62366-1:2015が、ISO 13485についてはISO13485:2016が改訂されています。さらにソフトウェア単体の製品規格として、IEC 82304の準備が進められています。
またこうした動向の先駆けとしてFDAの動きも含めた医療機器ソフトウェアの規制と現状について紹介します。


■医療機器ソフトウェアに関するディフェクトマネジメント

【講師】
テクマトリックス株式会社
システムエンジニアリング事業部
取締役 上席執行役員 事業部長
中島 裕生

【概要】
米国FDAのソフトウェア開発のガイダンスGPSVで言及しているディフェクトマネジメントでは、コーディングルールによる修正個所の発見と修正というリスク低減策実施、さらに単体テスト、結合テスト、システムテストによる実装上の不具合発見と修正・検証といった一連の作業の記録と進捗管理が必要になります。
こうした煩雑で工数のかかる管理作業を強力に自動化してくれるParasoft社のDevelopment Testing Platform(DTP)をご紹介します。


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


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ 無料相談会 実施中!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
テクマトリックスでは、医療機器ソフトウェアのIEC 62304(JIS T 2304)およびFDAガイドラインへの適合に向けた様々な課題について、プライベート無料相談会を開催しております。
本プライベート無料相談会では、ソフトウェアを使った医療機器の欧州、米国、中国薬事や、今後より一層求められるCSV、医薬品医療機器等法(薬機法)についても、ご相談をお受けします。

IEC 62304、FDA、薬事についてお悩みをお持ちのお客様は、ぜひご検討ください。


2016年2月23日火曜日

C++testで、実行されたコードが見える!!


今回のテーマ:アプリケーションモニタリング

ソフトウェアの開発をしていて、コードの内容が分からない、ドキュメントが無いといった「レガシーコード」を読みたいと思ったことはないでしょうか。

レガシーコードの内容を把握するために、動作確認を繰り返すのは、とても大変な作業です。

今回は、レガシーコードの内容を把握する際に心強い味方になる、C++testの機能の1つ
「アプリケーションモニタリング」について、ご紹介させていただきたいと思います。

アプリケーションモニタリングとは?

実行時に様々なカバレッジを計測し、ソースコードを色分けして、実行・未実行を表示する機能に
なります。

特徴として、実機でもシミュレーターでも、ソフトウェアのカバレッジを取得することが可能です。

つまり、実機で動作させた後に、自分の目でカバレッジを確認することができます。

実行されたコードは緑、実行されなかったコードはピンクで表示されるため、一目で実行・未実行を
判別でき、デバッグ作業の大きな助けになります。

例えば、レガシーコードの中身を把握する必要がある場合に、レガシーコードを実行しながらカバレッジを取得することで、実際の動きとコードの流れを確認するというような使い方も可能です。


ロボットのカバレッジを取得してみました

アプリケーションモニタリングの例として、ETロボコンで使用したEV3のカバレッジを取得した例を
ご紹介いたします。

ETロボコンについては、こちらをご覧ください。

今回は、EV3とPCをBluetooth接続し、カバレッジをEV3からPCへ送信する方法でカバレッジの
取得を行いました。

EV3を実行すると、カバレッジの情報がPCに送信され、受け取ったカバレッジ情報をC++testで
確認することができます。EV3が自由に動き回っている状態のまま!!

以下は、左がEV3の写真、右がEclipse版C++testのスクリーンショットになります。
この例では、EV3の行カバレッジを取得しています。



取得可能なカバレッジの種類

C++testでは、C0、C1、C2、MC/DCを含む以下の8種類のカバレッジを計測することが可能です。

・行カバレッジ
・ブロックカバレッジ
・ステートメントカバレッジ(C0)
・パスカバレッジ
・判断文カバレッジ(C1)
・単純条件カバレッジ(C2)
・MC/DC
・関数カバレッジ

ぜひご活用ください!

C++testは、C/C++プログラムの単体テスト、カバレッジ計測、静的解析、フロー解析、実行時メモリエラー検出を行う総合的なツールです。

今回は、その機能の1つとしてアプリケーションモニタリングを紹介させていただきました。

C++testをご利用になっている方は、ぜひこの機能も利用してみてはいかがでしょうか。

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

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

 技術資料請求

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

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








2016年2月19日金曜日

【3/4開催セミナー】終らない結合テストにならないために注意する3つの事



近年の複雑化したシステム開発では、品質確保のためのテストの工程において様々な問題を抱えています。


  • 結合テスト段階になって多くの不具合が見つかり、大きな手戻りが起こる
  • 結合テスト時の不具合で、どの機能のコーディングに原因があるのかその特定に時間がかかっている
  • 不具合を修正するたびに繰り返される膨大なテストが開発現場の負担になっている

これらの問題は、最終的に追加コストの発生やシステムの大規模な改修につながります。
では、このような問題を解決するためにはどのような対処法が有効なのでしょうか?


例えば、昨今のシステムはWebアプリケーションやスマートフォンなどのUI部分とビジネスロジックを切り分けて、REST、SOAP、JMS、MQなどのAPIで繋いでいます。
このようなシステムのテストでは、事前にビジネスロジックの単機能に対して充分なテストを実施することで、結合テスト時に見つかる不具合の原因特定を容易にできます。


今回のセミナーでは、このほかにも結合テスト時に検出される不具合を未然に防ぐ方法のほか、複雑化するシステムの品質確保について近年の開発トレンドを含め詳しくご紹介します。



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆セミナー概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【開催日程】2016年 3月 4日(金)15:00~17:00 (開場:14:45)

【会場】テクマトリックス株式会社 セミナールーム
    東京都港区三田3-11-24 国際興業三田第2ビル 9F

【参加費用】無料

【定員】30名
  ※同業の方の参加はご遠慮いただいております。

【講演内容】
Webシステムのソフトウェアテストはこのままでいいのか!?
ソフトウェア開発手法のトレンドとテスト効率化・品質向上方法のご紹介
【講師】
テクマトリックス株式会社 ソフトウェアエンジニアリング技術部
酒井 利治

【概要】
複雑化する昨今のシステム開発では、多くの不具合が結合テストフェーズに持ち込まれ、対応に苦慮しているケースが少なくありません。
終らない結合テストにならないためにはどのような方法があるのか、近年のソフトウェア開発手法のトレンドの概説とともに、品質向上を達成する方法についてご紹介します。




━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ お知らせ Jtest DTP 無料ハンズオンセミナー
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
本セミナーは、新しくなったJtest DTPとParasoft DTPを使用して、効率的なテストと品質向上に向けた運用法について、短時間でご理解いただける内容となっております。
奮ってご参加ください。




━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ 関連製品
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
○開発テスト管理プラットフォーム「Parasoft DTP」
ソフトウェア開発現場における様々な情報を収集し、一元管理を実現する新しい概念のプラットフォームです。 Parasoft DTP に集約された情報からリスクをいち早く分析し、迅速な意思決定と開発現場へのフィードバックを実現します。



○アーキテクチャを刷新した最新のJavaテストツール「Jtest DTP」
従来のJtestをベースにCI(継続的インテグレーション)との親和性を高め、モバイル開発やセキュリティ対策に対応した解析エンジンの強化、解析パフォーマンスの大幅な向上、Java 8への対応など様々な機能を拡張した最新のJavaテストツールです。




○APIテスト自動化ツール「SOAtest」
Parasoftの「SOAtest」は、API(主にWebAPIやSOAP、MQ、JMS等のWebサービス)を提供する側の開発において、機能テスト、回帰テスト、パフォーマンステストおよび負荷テストを自動化し、重要性が高まるAPIの品質確保と開発の効率化を両立させる「APIテスト自動化ツール」です。

「SOAtest」には、RESTやJSON、SOAPをはじめとしたテクノロジーやプロトコルに幅広く対応したテストドライバーが搭載されており、APIの品質確保におけるテスト自動化を強力にサポートします。


2016年2月17日水曜日

早めのセキュリティ対策


そのアプリケーション安全ですか?

どんなに優れたアプリケーションでも、知らず知らずのうちにセキュリティ問題を作りこんでしまうことがあります。自信をもって「大丈夫!」と言えますか?

データベースを使用したアプリケーションの場合、ユーザーが入力した値をSQL文に使用します。悪意のあるユーザーが入力データを細工した場合、意図しないSQL文が実行される可能性があります。ユーザーが入力した値を何もチェックせずそのまま使っていると
  • 個人情報の漏えい
  • 情報の改ざん
  • データベースの破壊
などの問題を許してしまうかもしれません。

セキュリティテストのタイミング

完成したアプリケーションを使用してセキュリティテストを実施することが多いのですが、このタイミングだと。。。
  • 原因がどこにあるのかを特定するのに時間がかかる
  • 時間がなくて、リリース前にすべて問題を解決できない
というようなことがあります。
それなら、不具合対策のためのコーディングチェックと同じように、セキュリティの問題も早めに対策をとったほうが、よりセキュリティを高めることができると思いませんか?

効果的なセキュリティ対策

日経SYSTEMS2016年1月号Jtest を利用したお客様のセキュリティ対策が紹介されています。この記事で紹介された 『脆弱性を作りこまない』 ための Jtestのコーディングルールについてご紹介します。
例えば、SQL文に入力データを埋め込んで文字列を組み立てるの対策には、「プリペアドステートメント」の利用が効果的です。次のイメージは、prepareStatement()を使用せず、createStatement()を使用しているコードに対して違反をレポートしています。


Jtest には、コーディングチェックやバグの可能性をチェックするルール以外にも、 SQLインジェクションコマンドインジェクションクロスサイトスクリプティング(XSS) などの脆弱性につながるコードがないかを発見したり、パスワードの取り扱いに問題がないか、例外メッセージのコンソール出力など機密データの取り扱いに問題がないをチェックすることができます。また、 OWASP(Open Web Application Security Project)や PCIデータセキュリティスタンダード(PCI DSS)に準拠したルールセットも搭載されています。
参考: Jtestのセキュリティ脆弱性検出の特長

Visual Studio を使用して、C#や VB.net でアプリケーションを開発している場合は、dotTEST をご利用ください。Jtestと同じようにコードに潜んだセキュリティ問題を見つけることができます。

セキュアコーディング

脆弱性を含んだ危険なコーディングをしないためには、セキュアコーディングを意識することが必要です。Jtestにも搭載されている CERT/CCが提供している『Java セキュアコーディングスタンダード』のルールセットを活用し、言語仕様や実行環境に潜む落とし穴を理解し、攻撃に強く、安全で信頼性の高いアプリケーションの開発に役立ててください。
Jtest および dotTEST をお試しいただける体験版をご用意しています。


セキュリティ対策の一環として Jtest / dotTEST をご活用ください!

2016年2月3日水曜日

【セミナーレポート】 2016年1月19日開催!IoTセミナー

1/19に開催されました高信頼性IoTシステム開発の実現に向けたモデルベース システムズエンジニアリングの活用とシステム間の連携検証」セミナーは多くの方にご参加頂き、ご好評のうちに無事開催終了いたしました。

遠方からもご足労いただき、誠にありがとうございました。


今回のセミナーでは、慶應義塾大学大学院システムデザイン・マネジメント研究科の西村教授をお招きし、高信頼性IoTシステムの事例として、同氏が取り組む自動運転システムを搭載する自動車を取り巻くSoS(System of Systems)アーキテクチャに関して、MBSE(モデルベース システムズエンジニアリング)の有効性とシステム間連携における検証の重要性について解説いただきました。

今回は特に自動車関連のソフトウェア開発に携われている方から多くのご参加いただき、白熱した質疑応答がおこなわれました。


質疑応答の様子

一方、テクマトリックスからは「高信頼性IoTシステム開発においてデファクトスタンダードとなるテスト戦略」と題し、セッションをおこないました。

今後、益々広がりをみせるIoT時代においては、各サブシステムをつなぐAPIが重要な要素となることが予想されます。

テクマトリックスのセッションでは、IIRA(インダストリ インターネット リファレンス アーキテクチャ)がリストとして挙げている10の関心事から、安全性、セキュリティ、レジリエンス、相互運用性、接続性の5つの関心事にフォーカスし、それぞれの項目におけるAPI連携の課題とその解決の糸口について、ご紹介させていただきました




本セミナーの内容にご興味のある方は、お気軽にお問い合わせください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ 関連製品情報
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
○APIテスト自動化ツール「SOAtest」
Parasoftの「SOAtest」は、API(主にWebAPIやSOAP、MQ、JMS等のWebサービス)を提供する側の開発において、機能テスト、回帰テスト、パフォーマンステストおよび負荷テストを自動化し、重要性が高まるAPIの品質確保と開発の効率化を両立させる「APIテスト自動化ツール」です。

「SOAtest」には、RESTやJSON、SOAPをはじめとしたテクノロジーやプロトコルに幅広く対応したテストドライバーが搭載されており、APIの品質確保におけるテスト自動化を強力にサポートします。




○API仮想化プラットフォーム「Virtualize」
Parasoftの「Virtualize」は、APIを使用する側のモノやアプリケーションの開発で必要となる結合テストにおいて、APIの挙動を模倣する仮想化ツール(テストスタブ)を提供し、実際のAPIを必要とすることなく早い段階からのテストを実現します。

機能間の連携を伴うテストは、REST、SOAP、MQ 、JMSなどで公開する個々のAPIの開発が完成していることが前提となり、並行開発時においてはAPI開発の進捗が結合テストを要する他チームのテスト進捗のボトルネックになります。
また、複数チームや企業を跨る開発では、1つしかないテスト環境の利用待ちが発生したり、自由に他社システムと接続したテストができないなど、テストの実施には様々な制限がつきものですが、「Virtualize」は、結合テスト以降で必要となるこれらのAPIやデータベースを仮想化し、必要な時にいつでもテストを実施可能にするため、品質確保と開発の効率化を両立させ、ビジネスの早期展開に寄与します。