11

私は、リッチな UI を備えた複雑な医療機器を開発している小さな会社で働いています。現在、設計の初期段階にあります。アプリケーションは Windows (デスクトップのみ) を対象としており、できれば C++ のみで作成する必要があります。

いくつかの調査を行った後、Qt を使用して UI を開発する傾向があります。それは私たちのすべてのニーズに答えているようです。つまり、モダンで応答性の高い UI を開発できます。開発はかなり速く (慣れた後)、メモリ使用量はある程度妥当で、商用利用は無料です (私たちにとってはおまけです)。

私の質問は、医療機器として十分に信頼できるものですか? 試験中のクラッシュは絶対に認めません。まず第一に、もちろん私たちが書いたコードの品質に依存することは理解していますが、解決が特に困難な謎のクラッシュ関連の問題に遭遇した人がいるかどうかを知りたい. 特に、スクリプト言語である QML を使用すると、予測や説明が困難なエラーが自然に発生する可能性があります。

本番環境でこのような問題が発生した場合のコストは非常に高くなるため、特定のパッケージを使用する前に正しい決定を下す必要があります。私たちの特定のコンテキストで発生する可能性のある Qt 関連の問題を他にご存知でしたら (非常に広範なパッケージ テストを行うことが不可能であることは認めます)、それについても言及していただければ幸いです。

4

4 に答える 4

4

私の意見では、Qt のコーディング スタイルに従えば、Qt は十分に安定しています。また、Digia からサポートを購入し、安定したバージョンのライブラリを使用します。

物事は次のようになります。

  • Qt (またはその他の GUI ライブラリ) の使用によってもたらされるリスクの評価
  • これらのリスクに対して防御的に行動する (リスクをカバーする新しい要件とテストを導入する。たとえば、TCP などを介してコアと通信する別のプロセスとして GUI を実行する)
  • アプリケーションのクラッシュのリスクを評価し、そのシナリオが発生した場合に従う手順を文書化します。

医療機器の認証に関する私の経験では、デバイスの大きなクラッシュは、静かで誤った動作よりも好ましい. 疑問がある場合は、あなたのケースをフォローしている認証機関に尋ねてください。

また、標準を調べてください (例: 60601-1-4 または現在使用されているもの)。

医療アプリでの Qt の使用: http://qt.nokia.com/qt-in-use/qt-in-medical/

于 2012-07-31T11:50:10.220 に答える
3

高信頼性エンジニアリングの基本原則で十分だと思います。これで、Qt を使用できます。さて、Ambroz Bizjak はかなりの数の「厄介な」シナリオについて言及しています。基本的なルールに従えば、それらは無関係です。

それで、これらのルールは何ですか?彼らはそれほど難しくありません。失敗する可能性のあるビットを特定し、失敗が重大ではないときにそれらを実行します。たとえば、Ambroz はウィンドウの削除について良い点を述べています。試験の途中でやらないでください。オブジェクトを遅延削除キューにダンプし、それらが操作に干渉しないことを確認します (つまり、オブジェクトはパッシブな状態である必要があります。たとえば、ウィジェットの場合、不可視であることも含まれます)。同様に、検査を開始する前に、必要になる可能性のあるすべてのオブジェクト (考えられるすべてのダイアログ ウィンドウを含む) を作成します。

これを次のようにうまくまとめることができます

  1. 失敗しやすい準備
  2. 失敗しないかもしれないもの
  3. 失敗する可能性のあるクリーンアップ

すでに述べた理由から、私は QML を避けます。上記のスキームは、なぜそれほど問題があるのか​​ を強調しています。疑わしい QML ステップをすべて準備フェーズに移行することはできません。

于 2012-07-31T11:37:26.753 に答える
2

Windows を実行しており、Windows ライセンス契約にはそれについていくつかのことが記載されているため、セーフティ クリティカルなデバイスを開発しているわけではないと思います。つまり、あなたの質問は本当に、「私たちは可能な限り安定した消費者向け製品を作っています

個人的には、C# を使用することをお勧めします。これは、Windows の下に優れたツールがあり、開発がはるかに簡単で安全であり (ガベージ コレクターは、パフォーマンスではないにしても、安定性のための友人です)、単体テストがわずかに便利であるためです。パフォーマンスが重要なセクションには C++ または C++/CLR を使用しますが、GUI の構築にそのような複雑で潜在的に危険な言語を使用する理由はありません。

于 2012-07-31T09:31:43.200 に答える
1

私の Qt の経験から、信頼性が重要な場合、Qt は悪い選択です。たとえば、多くのクラッシュは、一見有効に見えるコードによって引き起こされますが、Qt の一部が予期していなかった特定のコンテキストで何かを実行しました。ここでは、正しいコードの記述に関して Qt で遭遇したいくつかの問題をリストします。

  • QObjects (読み: なんでも) の削除は、非常に骨の折れる手順です。このオブジェクトによって発行されているシグナルからそれを削除すると (読み取り: 半分の時間)、プログラムがクラッシュする可能性があります。これは、シグナルを発行するコードが、シグナル ハンドラーが戻った後にオブジェクトがまだ存在するかどうかを確認しないためです。使い続けます。

  • もっと詳しく見ると、推奨される回避策は QObject::deleteLater() を使用することです。これにより、安全なときにイベントループがオブジェクトを削除します。これは容認できるように思えるかもしれませんが、その間、オブジェクトはまだ存在し、信号を発信できることを考慮してください。これにより、処理しなければならない不要な中間状態が発生し、バグが発生します。まれに、非常に特殊な状況で発生する可能性が高いものです (テスト中ではありません)。とにかく、このページでは QObject の削除に関するいくつかの問題について説明します。

  • Qt の他のクラスにも同様の削除関連の問題があります。たとえば、QGraphicsScene::removeItem() は、mousePressEvent ハンドラー内でアイテムをシーンから (削除ではなく) 削除すると、クラッシュを引き起こす可能性があります。そして、これはどこにも文書化されていないようです。

  • Qt のクラスは、コア セットの機能に加えて便利な機能が満載で、クラスが実際にどのように機能し、どのように適切に使用するかを理解するのが難しくなっています。たとえば、QProcess には、必要な唯一の stateChanged() シグナルの他に、error()、finished()、started() などのシグナルがありますが、これらのセマンティクスと適切な処理は完全には明確ではありません。

  • 多くの抽象インターフェイスは、設計が適切でなく、定義も不十分です。たとえば、クラス QIODevice は、読み取りと書き込み両方、およびブロッキングと非同期 I/Oの両方に使用されます。クラスは、これのどのサブセットを実装するかを自由に選択できます。これは、インターフェイスを実装するものはすべて、定義された一貫した方法で動作するという抽象インターフェイスの考え方全体に違反しています。

  • イベントを処理するための本当に優れた均一な方法はありません。Qtには 2 種類のイベントがあります。仮想関数を再実装することによってコールバックがインストールされるQEventsと、シグナルです。なんで?とにかく、どちらの種類のイベントも最終的には関数を呼び出すだけです (直接、ここでキューに入れられたシグナルは忘れてください)。これは、さまざまなモジュールが、互いの関数を呼び出すことによってのみ通信できることを意味します。これまで見てきたように、モジュールが別のモジュールを呼び出すとき、その別のモジュールは実際に何かを行っている可能性があり、すべてのコールバック サイトで考えられるすべてのシナリオを検討するのは難しいため、これには問題があります (これまで見てきたように、Qt はそうではありません)。 、代わりにクラッシュします)。

    この問題は、イベント ループに機能を追加することで完全に解決できます。これにより、モジュール間の通信と同期がはるかに簡単になります。この設計については、この質問で説明します。

要約すると、最大の信頼性を目指す場合、プログラムのベースとなるフレームワークでこのような設計上の問題が発生することは望ましくなく、ほぼすべてのステップで問題を回避することも望ましくありません。考えられるすべての問題を適切に回避したとしても、他に問題がないことをどのように知ることができますか? Qtで完全に正しいコードを書いてみるべきだと思います(つまり、すべてのドキュメントを読み、すべてのステップで何をしているのか、フレームワークがどのように反応するかを考えてください)。しばらくしてから、自問してみてください。フレームワークを信頼していますか、それともだまそうとしているように感じますか?

于 2012-07-31T09:50:01.947 に答える