LoginSignup
5
1

More than 1 year has passed since last update.

非機能要件と、性能チェックポイント

Last updated at Posted at 2021-09-20

各資料を基にしたまとめ。

非機能要件とは

  • 「性能問題」と言われたりする。では「性能問題」とは何か。
  • 「性能問題」が発生する条件とは何か。
  • その中でのプログラムの位置付け
  • プログラムが備えるべき特性

基本

非機能要求グレードご紹介~システム基盤における非機能要求の見える化ツール~
システム構築の上流工程強化(非機能要求グレード):IPA 独立行政法人 情報処理推進機構
非機能要件 - Wikipedia
Non-functional requirement - Wikipedia

詳細

DBアクセスおよびDBサーバーの問題

SQL文の発行回数

  • 大原則:SQLを発行する回数は少ない方が良い。
  • 保留や例外:どれくらい減らすのは有効で、どれくらい減らすのは無駄か。
  • 実装レベルでSQL発行回数を減らす方法(結合、キャッシュ、etc.)を工夫する。

個々のSQL文の改善

  • 実行計画の検討
  • バインド変数の利用

データモデリングとDB表

  • 正規化の得失

DBリソースの取得と解放

  • 解放漏れがあった場合の影響
  • 解放漏れの探し方

APサーバーの問題

時間計算量と空間計算量のトレードオフに関わる問題

  • GC概要
  • 連続メモリ領域の要求
  • トレードオフを招くambivalentなキャッシュ

トレードオフになりづらい計算量の改善

  • ループ内処理の順序の最適化
  • 文字列加算の抑制
  • オブジェクト生成の抑制
  • 適切なキャッシュ

トレードオフになりづらいメモリ使用量の抑制

  • 適切なキャッシュ(immutableオブジェクト)
  • オブジェクト生成の抑制(遅延生成など)
  • ここでも正規化
  • クラスの属性を減らす
  • トレードオフになりづらいディスクI/Oの問題
    • 一時ファイル利用の得失
  • 同期処理(synchronization)に関わる問題
  • Tips
    • 文字列関連クラスの扱い(String、StringBuffer、equals()、hashCode()
      etc.)
    • 参照の繋ぎ方に気をつけよう
    • 配列に気をつけよう
    • n^2の計算量を避ける手法。
    • 何でもかんでも配列やリストを利用するのではなく、Map(連想配列)を積極的に利用しよう。
    • Map(連想配列)のキーにStringを使うのは避けよう。
      • etc.

プログラムのタイプごとに固有の問題

オンライン・リアルタイム処理(サーブレット等)

  • オブジェクトの寿命と可視範囲:
  • JVM(正確にはクラスローダー)に対応するオブジェクト
  • HttpSessionに対応に対応するオブジェクト
  • HttpRequestに対応に対応するオブジェクト
  • ユーザーの挙動(性能低下 -> ログオフしない -> メモリ逼迫 ->
    gc頻発、という悪循環)

いわゆるバッチ

  • 実行時間とキュー詰まりの問題
  • 通常のJavaバッチ
    • メモリリークの避け方

トラブルシューティングやテストに使えるツール

  • SQL監視ツール
  • JVMプロファイラ
  • OSリソース監視ツール
  • 負荷テストツール
  • heapdump、javacore、GCログ分析ツール

参考

オラクルコンサルが語る!性能問題を防ぐ適切な性能テスト手法とボトルネック解析手法
AWS システム構築 非機能要件ヒアリングシートを公開してみた | DevelopersIO

以上、参考になればさいわいです。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1