#31397
yasuji
参加者

返信先: 新規の正規表現の不具合2件(22.9.910においても発生)#31392に返信

迅速なご対応ありがとうございます。
yasujiです。

確認の回答が遅くなり申し訳ありません。不具合を確実に解消していく姿勢と誠意を感じましたため、私のほうもいろいろと言った手前、誠意でお返しするために昨日の夜から私の使える時間でテスト確認をしておりましたが、一旦切り上げて、本日使える時間で残りをテストしました。
一点お願いなのですが、スピードを最優先されたためと十分理解をしておりますが、この記事の中のユニークな「正規表現不具合1」「正規表現不具合2」と簡易IDのような名称を付けておりますので、その名称を明示いただいて、修正完了、未着手、一部修正完了(残りはこれとこれ)などステータスを記載いただけるとどの不具合を確認したらよいかわかりやすく助かります。

釈迦に説法とは思いますが、私の説明ではうまくできていないと思いますので、下記のようなものがご参考にいただければ幸いです。
完璧に理解できないバグ票について
テスト計画・不具合やバグの管理には不具合やバグの状態の定義が重要
バグはここに潜んでいる! 効率よくテストを行うためには?

何かお役に立つかもしれないと思い、私の過去の些細な経験からですが、重要と思われるポイントを書かせていただきます。
不具合(バグ)を作りこまない、またテストで発見するためにも設計時の仕様書に、一例として入力値の取りうる範囲(文字列、整数値、小数(小数部の桁数、桁数を超えた場合は切り上げか切り捨てか、四捨五入か、丸め誤差、情報落ち、桁落ち)、bool値)や、関数引数の正常値定義、それ以外の値の場合の関数内エラー処理(エラー値の返却か、例外発生か)を決めてあるかが重要です。
ご参考まで:
テストの抜け漏れが原因で炎上してしまったプロジェクト 手戻りリスクで現場が疲弊しないための3つのポイント

スレッドを使用している場合は、スレッド内でのスレッドセーフな関数使用の確認と対策、例外発生のリスク確認と対策(あれば例外キャッチを組み込む、不明な場合もすべての例外を受け取れる例外キャッチを組み込む)で、スレッドが100%安全終了するようにする。さらに、メインスレッドと並行処理用スレッド、並行処理用スレッド同士で変数の共用の場合は、変数アクセスロック機構が組み込まれているか、スレッドセーフなキュー、スタックを使用しているかもかなり重要です(実装者が、取り合えずスレッドアンセーフの安直な方法で実装して後で修正するつもりが、そのままでバグになるパターンがあります、条件よって確率的にクラッシュすることがある)。

通常のデバッグでは、ブレークポイントで2つ以上のスレッドを同時に止められないので、すべてのスレッド内の挙動の要所の関数呼び出しと、呼び出されたスレッド関数自体の引数パラメータ、戻り値をログ出力して、プログラム終了後に動作検証をしておくことが問題の早期発見に肝要です。
また、ログ出力のフォーマットは、出力日時(ただし、C/C++は処理速度が高速のため、ミリ秒ではなく、マイクロ秒までの記録が必要。できるだけ正確に動作タイミング知るため)、スレッド名称やID(メインスレッド、並行処理用スレッドなどを確実に識別するため)が少なくとも必要です。並行処理用スレッドについては、いつ・どういうパラメータで起動させたか、いつ・どういう戻り値で終了したかのログ記録も必要になります。ログ出力のファイル名には、8桁年月日と6桁時分秒を含めて、プログラム実行時に毎回新規で作成すると実行履歴の保管に役立ちます。スレッド内で何が起きているか、想定通り動作しているかを検証する方法はこれ以外にないと思います。注意点として、あれこれログ出力してデバック実行繰り返していると、不可解なエラーや例外発生が起き始めて、原因探しをしてもよくわからず、ログを見ようとしたらログ出力先のディスクの空き容量がいつの間にか0バイトでログ書き込みエラーが原因だったという笑えない話もあります。

迅速な不具合修正対応ができているので、出過ぎたことをしたかもしれませんが、過去のバグの内容や今回のテストでの動作から想起した内容で気になりましたので書かせていただいた次第です。当たり前だと思われたらお読み捨ていただいて構いません。

前話が長くなり申し訳ありません。

v23.0.910の不具合修正確認をいたしました。いくつか試したところ不具合がまだ完全に修正されていないようでしたので、少し正確にテスト結果が分かるようにまとて、テストシナリオにも不具合が定量的にわかるように手を加えました。江村様の迅速な対応と誠意にお応えするためと、どうしても修正してスマートに操作できるテキストエディターに仕上げていただきたく、こちらも誠意としてできる限りのことをさせていただきました。この不具合について、メールトラブルがあったとはいえ、怒りで一方的に攻め立ててしまいましたので、その代償として詳細なテスト結果報告を記載しました。
申し訳ないのですが、このような詳細な報告は、今回限りとさせてください。次回以降は、あまり手間をかけずに済む簡便な文章での報告とさせてください。

以下は、詳細なテスト結果報告になります。最終結果は最後に記載しました。
全般的に、正規表現検索をせずにファイルを開いただけの操作性や応答状態を基準にすると、正規表現検索を一度でも実行するとメインウィンドウの動作が、一時的に短時間応答しなくなる、操作がカタつく現象が発生します。
==============================
テスト対象:
v23.0.910

修正確認対象不具合:
正規表現不具合1

改修前の発生不具合現象:
(a1)メインウィンドウがほとんど操作不能になる
(a2)メインウィンドウが応答が著しく遅い
(a3)メインウィンドウが応答なしになる

テストの実施手順概要:
テスト実施は、テストシナリオと検索文字列の組み合わせごとに、対象プログラムを起動させて、「テスト前事前準備」を実行した後に、テストシナリオを実施して、その完了後に対象プログラムを終了させる。

検索文字列:
(F1)
&&(?=.*function).+?&&
(F2)
&&(?!.*function).+?&&
(F3)
&(?!.*function).+?&
(F4)
&&(?=.*return ).+?&&
(F5)
&(?=.*return ).+?&
(F6)
&&(?!.*return ).+?&&
(F7)
&(?!.*return ).+?&
(F8)
&&.+?&&

テスト前事前準備:
1.下記のファイルを開く
下記のファイルをそれぞれ開く。
この手順において、問題が発生するのは、(File.A)のファイル。
ファイルは、添付しましたが念のため入手元URLを記載します。
==> 再現手順のJSファイル1114.zip

(File.A) 00a21fae68cedf13a0c6.5898.js
DL元:https://abema.tv/assets/modern-desktop/00a21fae68cedf13a0c6.5898.js
DL元(再現確認済み2024/01/16):https://web.archive.org/web/20240115174131/https://abema.tv/assets/modern-desktop/00a21fae68cedf13a0c6.5898.js

2.表示の設定を変更
下記のいずれかで、表示方法をウィンドウの右端で折り返しに設定する
「表示->ウィンドウの右端で折り返し」をクリック
または、
「Ctrl+3」を押下

3.検索を開いて、下記の通り設定する
「検索」の設定:
〔チェックボックス〕設定
大文字と小文字を区別する(C):チェックあり
上記以外のチェックボックスすべて:チェックなし
〔ラジオボタン〕選択
正規表現(X):チェックあり

〔検索->高度〕設定
〔チェックボックス〕設定
チェックボックスすべて:チェックなし
正規表現エンジン(G):既定(Boost.Regex)
正規表現で検索する追加行数(L):0

テストシナリオと検索文字列ごとの結果:
(T-1.1)「次を検索(N)」を数回続けてクリックする。
マウスホイールカーソルで、半分以上(10回転を1セット)のスクロールを行う。
(F1)マウスホイールカーソルで下へスクロール操作後、1秒から2秒程度の遅延してスクロールするが、数行程度スクロールすのみで回転数に対して圧倒的に少ない。マウス操作直後からUI全体が0.5秒から2秒程度応答しなくなって回復する。
(F2)マウスホイールカーソルで下へスクロール操作後、1秒から3秒程度の遅延してスクロールするが、数行程度スクロールすのみで回転数に対して圧倒的に少ない。マウス操作直後からUI全体が0.5秒から2秒程度応答しなくなって回復する。
(F3)(F2)に同じ。
(F4)マウスホイールカーソルで下へスクロール操作後、1秒から2秒程度の遅延してスクロールするが、数行程度スクロールすのみで回転数に対して圧倒的に少ない。
(F5)(F4)に同じ。
(F6)(F2)に同じ。ただし、UI全体でなく検索ウィンドウ。
(F7)(F2)に同じ。
(F8)一度も遅延せずスムーズにスクロール操作できる。

(T-1.2)「次を検索(N)」を数回続けてクリックする。
メインウィンドウのスクロースバーで、半分以上のスクロールを行う。
(F1)スクロールは、マウスカーソル移動後に0.5秒から2秒程度の遅延してスクロールが追いつく。時間が経過すると、スムーズにスクロール操作できるようになる。
(F2)スクロールは、マウスカーソル移動後に2秒から3秒程度の遅延してスクロールが追いつく。時間が経過すると、スムーズにスクロール操作できるようになる。
(F3)(F2)に同じ。
(F4)(F1)に同じ。
(F5)(F2)に同じ。
(F6)(F2)に同じ。
(F7)(F2)に同じ。
(F8)一度も遅延せずスムーズにスクロール操作できる。

(T-1.3)「次を検索(N)」を数回続けてクリックする。
メインウィンドウのテキストについて、マウスで20文字以上を文字列選択を異なるで箇所で連続的に10回行う。
(F1)マウス選択操作をした後、背景色青色選択表示になるまで0.5秒から3秒程度の遅延が生じる。生じる遅延時間に規則性はなし。
(F2)「次を検索(N)」を押下後の「見つかりませんでした」のメッセージ表示まで、2秒から3秒ほど(F8)より遅い。(F1)に同じ。
(F3)「次を検索(N)」を押下後の「見つかりませんでした」のメッセージ表示まで、2秒から3秒ほど(F8)より遅い。(F1)に同じ。
(F4)(F1)に同じ。
(F5)(F1)に同じ。
(F6)「次を検索(N)」を押下後の「見つかりませんでした」のメッセージ表示まで、2秒から3秒ほど(F8)より遅い。(F1)に同じ。
(F7)「次を検索(N)」を押下後の「見つかりませんでした」のメッセージ表示まで、2秒から3秒ほど(F8)より遅い。(F1)に同じ。
(F8)マウス選択操作をした後、マウスカーソルに追従して背景色青色選択表示になる。一度も遅延せずスムーズ。

(T-2.1)「前を検索(P)」を数回続けてクリックする。
マウスホイールカーソルで、半分以上(10回転を1セット)のスクロールを行う。
(F1)マウスホイールカーソルで下へスクロール操作後、1秒から2秒程度の遅延してスクロールするが、数行程度スクロールすのみで回転数に対して圧倒的に少ない。マウス操作直後からUI全体が0.5秒から2秒程度応答しなくなって回復する。
(F2)(F1)に同じ。
(F3)(F1)に同じ。
(F4)(F1)に同じ。ただし、UI全体の応答しないは、マウス操作の3セットに一度程度で、0.5秒から1秒程度。
(F5)(F1)に同じ。
(F6)(F1)に同じ。
(F7)(F1)に同じ。
(F8)一度も遅延せずスムーズにスクロール操作できる。

(T-2.2)「前を検索(P)」を数回続けてクリックする。
メインウィンドウのスクロースバーで、半分以上のスクロールを行う。
(F1)スクロールは、マウスカーソル移動後に0.5秒から2秒程度の遅延してスクロールが追いつく。時間が経過すると、スムーズにスクロール操作できるようになる。
(F2)スクロールは、マウスカーソル移動後に2秒から3秒程度の遅延してスクロールが追いつく。時間が経過すると、スムーズにスクロール操作できるようになる。
(F3)(F2)に同じ。
(F4)(F1)に同じ。
(F5)(F1)に同じ。
(F6)(F2)に同じ。
(F7)(F2)に同じ。
(F8)一度も遅延せずスムーズにスクロール操作できる。

(T-2.3)「前を検索(P)」を数回続けてクリックする。
メインウィンドウのテキストについて、マウスで20文字以上を文字列選択を異なるで箇所で連続的に10回行う。
(F1)マウス選択操作をした後、背景色青色選択表示になるまで0.5秒から3秒程度の遅延が生じる。生じる遅延時間に規則性はなし。
(F2)(F1)に同じ。
(F3)(F1)に同じ。
(F4)マウス選択操作をした後、背景色青色選択表示になるまで0.0秒から1秒程度の遅延が生じる。生じる遅延時間に規則性はなし。
(F5)(F1)に同じ。
(F6)(F1)に同じ。
(F7)(F1)に同じ。
(F8)マウス選択操作をした後、マウスカーソルに追従して背景色青色選択表示になる。一度も遅延せずスムーズ。

最終結果:
確認した結果、下記の通りの不具合の発生と解消を確認しました。
発生不具合:
(a1)メインウィンドウがほとんど操作不能になる(短時間で一時的)、(a2)メインウィンドウが応答が著しく遅い
解消不具合:
(a3)メインウィンドウが応答なしになる
==============================