1. ユーザーの認識
私が最初に行うことは、単純にユーザーを調査することです。私たちがこれを行っているのは彼らであることを忘れないでください。アプリケーションの内部がどれほどひどいものであっても、ユーザーがそれを気に入っている (または少なくとも積極的に嫌いではない) 場合は、すぐに引き裂き始めたくありません。
次のような質問をしたいと思います。
- それはスムーズに実行されますか?
- 使いやすいですか?
- それを使用するとき、期待どおりに機能していると確信できますか?
- それは BMW ですか、シビックですか、それともピントですか?
答えは主観的なものになります。大丈夫。現時点では、幅広いトレンドを探しているだけです。圧倒的な数のユーザーが、常にクラッシュする、または基本的なタスクを実行するのが怖いと言っている場合、問題が発生しています。
アプリが迷信を助長し、「木曜日の朝になると消えてしまうようだ」「このボタンが何をするかわからないが、最初にクリックしないと機能しない」などの言葉が聞こえたら、丘に向かって走ってください.
2. ドキュメンテーション
ドキュメントが不足していたり、ドキュメントがひどく古くなっている場合は、アプリケーションが適切でないことを示しています。ドキュメントがないということは、開発スタッフが手抜きをしたり、絶え間ない死の行進で働きすぎて、この種の「不必要な」作業の時間を見つけることができないことを意味します.
私はユーザー マニュアルについて話しているのではありません - 適切に設計されたアプリには必要ありません - 技術文書、アーキテクチャの外観、コンポーネントの機能、環境の依存関係、構成設定、要件/ユーザー ストーリー、テスト ケース/テスト計画を意味します、ファイル形式、あなたはアイデアを得る. 欠陥追跡システムも文書化の重要な部分です。
開発者は、適切なドキュメントがない場合、(誤った) 仮定を行うことになります。これはオプションだと考えている業界の何人かの人々と話をしましたが、私がこれまでに見たり作業したりしたすべてのシステムは、ドキュメントがほとんどまたはまったくなく、バグや設計上の欠陥でいっぱいになりました.
3. テスト
アプリケーションの正常性を判断するには、独自のテストが利用できる場合に勝るものはありません。単体テスト、コード カバレッジ、統合テスト、さらには手動テストなど、ここでは何でも機能します。一連のテストが完成すればするほど、システムが正常である可能性が高くなります。
テストが成功しても、テスト対象の特定の機能が、テストを書いた人々が期待するように動作することを除いて、多くの保証はありません。しかし、多くの失敗したテスト、または何年も更新されていないテスト、またはテストがまったくない場合、これらは危険信号です。
すべてのチームがテストに異なるツールを使用しているため、ここで特定のツールを示すことはできません。すでに生産されているものは何でも使用できます。
4. 静的解析
すぐに「FxCop」と思った人もいるでしょう。まだ。私が最初にすることは、NDependを分解することです。
アプリケーションの依存関係ツリーをざっと見るだけで、アプリケーションの設計がいかに優れているかに関する膨大な量の情報が得られます。Big Ball of Mud、Circular Dependencies、Spaghetti Code、God Objectsなどの最悪の設計アンチパターンのほとんどは、依存関係を俯瞰するだけですぐにわかります。
次に、「警告をエラーとして扱う」設定をオンにして、フル ビルドを実行します。ほとんどの場合、コンパイラ ディレクティブまたはフラグを介して特定の警告を無視しても問題ありませんが、文字通り警告を無視すると問題が発生します。繰り返しますが、これはすべてが正常であること、または何かが壊れていることを保証するものではありませんが、実際のコーディングフェーズに入った注意のレベルを決定する上で非常に役立つヒューリスティックです。
全体的な設計/アーキテクチャが完全なゴミではないことに満足したら、 FxCopを調べます。私はその出力を福音とは見なしませんが、特に設計警告と使用警告に関心があります (セキュリティ警告も危険信号ですが、非常にまれです)。
5. ランタイム分析
この時点で、私は、このアプリケーションが大まかに言うと、大したことではないことにすでに満足しています。このフェーズは、顕微鏡下での特定のアプリケーションに関してかなり異なりますが、行うべきいくつかの良いことは次のとおりです。
通常の実行で最初の例外をすべてログに記録します。これは、アプリケーションの堅牢性を評価し、飲み込まれている例外が多すぎるかどうか、または例外がフロー制御として使用されているかどうかを確認するのに役立ちます。トップレベルのException
インスタンスまたはSystemException
派生物が多数表示されている場合は、恐れてください。
EQATECなどのプロファイラーで実行します。これにより、重大なパフォーマンスの問題を簡単に特定できます。アプリケーションが SQL バックエンドを使用している場合は、SQL プロファイリング ツールを使用してクエリを監視します。(実際には、データベースの健全性をテストするための個別の手順があります。これは、データベースに基づくアプリケーションをテストする際の重要な部分ですが、トピックから外れすぎたくありません)。
何人かのユーザーに注目してください - 特に「儀式」、つまり明らかに理由もなく彼らが行っていることを探してください。これらは通常、長引くバグや時限爆弾の兆候です。また、大量のエラー メッセージが生成されるかどうか、「考えている」間 UI が長時間ロックされるかどうかなども確認してください。基本的に、ユーザーとして個人的に見たくないものは何でも。
ストレステスト。繰り返しになりますが、特定のツールはアプリケーションによって異なりますが、これは特にサーバー ベースのアプリに当てはまります。アプリケーションが高負荷下でも機能するかどうかを確認します。ブレークポイント近くでタイムアウトし始めても問題ありません。奇妙なエラー メッセージが表示されたり、データや状態が破損しているように見える場合は、非常に悪い兆候です。
そして、それは今のところ私が考えることができるすべてです。また思いついたら更新します。