HOME > ソフテックだより > 第257号(2016年5月4日発行) 技術レポート「OSバージョンアップの動作検証」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第257号(2016年5月4日発行)
技術レポート

「OSバージョンアップの動作検証」

1. はじめに

私は、入社9年目で主に組み込みソフト開発に携わっております。
組み込みソフトとWindowsアプリケーションソフトを組み合わせたシステムの場合は、両方を担当することもあります。私が担当しているシステムは、私が入社する前から開発が行われており、古いものでは15年以上前にリリースしたシステムがあります。そのため、Visual C++で開発したWindowsアプリケーションソフトは、OSをバージョンアップしながら使い続けています。OSバージョンアップにより、ソフトを大幅に作り直すということはありませんが、経験的に必ずと言っていいほど何らかの対応が必要になります。OSバージョンアップにより変更が必要な箇所を事前にピックアップすることは難しいため、依頼を受けた場合は検証フェーズと修正フェーズの2段階にわけて作業を行っています。本ソフテックだよりでは、OSバージョンアップによる検証内容や実際に対応を行った問題を紹介したいと思います。

2. 検証作業

Windowsアプリケーションソフト開発での検証作業は、主に機能テスト、性能テスト、負荷テスト、ユーザビリティテスト、セキュリティテストに分けることができますが、OSバージョンアップの検証の場合、機能テストを中心に行っています。
具体的には、『対象OS上での基本動作確認』『画面の表示確認』『アプリケーション機能確認』に分けて検証を行います。
それぞれの検証作業の内容について、以下に記載します。

2.1 対象OS上での基本動作確認

Windowsアプリケーションソフトの一般的な機能が本項目に含まれます。
例えば、インストール、起動、終了、ウィンドウの移動・サイズ調整などです。その他、UAC(User Account Control*1)などのOS機能による影響を調査します。OS機能は、事前に確認することができますので、ソフトに対する影響を予測することができます。

2.2 画面の表示確認

OSごとにウインドウテーマやフォントが異なるため、表示が正しく行われているか、旧OSの表示内容と比較調査します。本項目は、基本的に全画面をチェックしていくようになりますので、手間のかかる作業の一つと言えます。

2.3 アプリケーション機能確認

ソフトによって表示、操作の他にファイル操作や通信処理などを行うものがあります。その他、市販のドライバを使って機能を実現している機能がありますが、新OSで動作するのかを検証しています。ドライバ関連は、事前に新しいOSに対応しているものがないか確認して、対応を進めることができます。その他の機能に関しては、どのような問題が内在しているか事前に調べることが難しいため、新OS上で動作確認をする必要があります。

3. 検証後の修正

以下に検証後のソフト変更を行った例を記載します。

3.1 表示文字の問題

以下の図では、フォントが変わったことが原因でボタンとリストの表示文字が途中から切れています。
この場合は、操作性が変わらないようにボタンとリストの幅を広げます。スペースが足りず、配置を変えなければならないようなときは、お客様に相談して配置を見直します。

表示文字切れ
図1. 表示文字切れ

3.2 基本機能の修正

旧OSでは問題がなかったのに、新OSではソフト終了時にアクセスバイオレーション(Access Violation、アクセス違反)によるアプリケーションエラーが発生するソフトがありました。原因は、OSのバージョンアップの影響でMFC(Microsoft Foundation Class)の終了手順が変わったためでした。デバッグ実行したところ、問題が発生するときはソフト終了時にモードレスのプロパティシートのDestroy Windowが呼び出されていないことがわかりました。調べたところ、MFCのドキュメントに「Destroy Windowは必ず呼ばれるわけではないので、明示的に呼び出してください」という記載がありましたが、ソースコードを確認してみると推奨された処理になっていませんでした。推奨される通り、プロパティシートの終了処理でDestroy Windowを明示的に呼び出すようにしたところ問題が解消しました。ただ、本問題はどのPCでも発生する問題でなく、特定のPCのみで発生する問題でした。(同じOSのバージョンでも問題が出ないPCがありました。)そのため、問題を再現するまでの調査が大変でした。また、どのクラスも基本的に同じ手順で終了していたのですが、特定のクラスだけで問題が発生していました。

その他、Windowsのイベントの使い方に問題があり、異常終了するという問題もありました。
この問題は、新OSであればどのような環境でも再現する問題でした。

このように、旧OSで正常に動作していた機能が新OSで動作手順や条件が変わったことにより、問題を引き起こす場合があります。このような部分は、事前に見つけることが難しいため、しっかり検証行い、問題を見つけていく必要があります。再現が難しい問題の場合、32bitOS/64bitOSの違い、CPU(コア数)の違い、OSサービスパックの違い、インストールされているランタイムライブラリの違いなどに着目して、調査を行います。

3.3 ドライバの更新

基本的に新OSに対応したドライバにアップデートするだけで対応可能です。しかし、ある案件では、メーカーから互換性があるドライバを入手して更新したところ、ソフトの挙動が変わる(今まで出ていなかった異常を検出するようになった)という問題があり、ソフト修正が必要になりました。このケースでは、ドライバの対策版の再リリースを待っている時間がなかったため、アプリケーションで異常を回避する対策をとりました。
互換性がある場合でも異常検出やタイミングなど全く同じ動きにはならない可能性があるため、しっかり検証を行い、問題がないことを確認する必要があります。

3.4 アプリケーションの実行権限による問題

Windows Vista以降のOSではソフトをユーザー権限で実行した場合、Program Filesフォルダ以下にあるファイルの書き込みができなくなりました。この場合、リダイレクトが発生して以下の図の通り、ユーザーフォルダ以下の特定の場所に保存されます。これは管理者権限で実行していない場合に、特定の領域への書き込みを禁止するセキュリティ機能です。
ある案件では、もともとProgram Filesフォルダ以下にファイルを保存するようにしているため、新OSでファイルを保存した場合、Explorerで保存したファイルが表示されない問題がありました。実行権限を変更することで対策が可能であるため、ソフトを管理者権限で実行するように修正を行いました。本来データは、アプリケーション領域に保存するようにしたほうが良いですが、既存の動作を変えないように上記の修正を行いました。

ファイルリダイレクト
図2. ファイルリダイレクト

4. 最後に

OSバージョンアップによる影響の一部を本ソフテックだよりで紹介しました。市販のパッケージソフトなどでも”新OS対応”と書かれたソフトを見たことはあると思いますが、「具体的に何が変わったの?」と疑問をもたれている方も多いのではないかと思います。機能的には何も変わっていない場合でも、OSバージョンアップによる正常動作を保証するだけで、意外とソフト修正が必要になることをご理解いただけたのではないでしょうか。
OSバージョンアップによるソフト修正を行う場合、まずはしっかりと動作検証をすることをお勧めします。これは、理論的には新OSで全く問題なく動くと考えられる場合でも、今回取り上げた例のように、思わぬところで不具合が発生する場合があるためです。
本 ソフテックだよりで挙げたような検証内容以外でも、特定の条件や環境の組み合わせなどによって、後から問題が見つかるケースもあるため、ソフテックではそのようなノウハウを蓄積して様々な案件に役立てています。
今後、OSバージョンアップによるソフトの動作検証をお考えの方に少しでもお役に立てていただければ幸いです。

(T.M.)

[注釈]
※1
Windowsのセキュリティ機能の一つです。ソフトウェア起動時に警告ダイアログを表示して、ユーザーに確認する機能です。

関連ページへのリンク

関連するソフテックだより

ページTOPへ