TEF/テスト技法/異常値・特異値分析

特異値 年

2038年
2038年問題 UNIX(Linux)系のOSで、時間を32ビットで格納する変数の桁あふれで発生
2025年
昭和100年問題
2088年
平成100年問題

特異値 月

4月
サマータイム
2月
うるう年
1. 4 で割り切れる年は閏年である。
2. ただし、100 で割り切れる年は平年である。
3. ただし、400 で割り切れる年は閏年である。

特異値 日

49.7日
49.7日問題 Windows 9x,.NET Framework 1.1 で発生。49.7日は時間をミリ秒単位で計ったときの32bitで表現できる最大の時間。おそらく最大値から0に戻る時にエラーになると思われる。連続で49.7日以上動作させた時に発生Windowsの「49.7日バグ」の真相
497日
Windows のいわゆる497日問題
祝祭日
国民の休日
国民の休日二つの「国民の祝日」(祝日Aと祝日C)によって前後を挟まれた日(休日B)に適用される。ただし、Bが「振替休日」になる(前日の祝日Aが日曜日になる)場合、B自体が祝日である場合、B自体が日曜日になる場合には適用されない規定となっている。このように、祝日Aと祝日Cに前後を挟まれた日Bが必ず「国民の休日」となる訳ではない。 このBが「振替休日」となるか「国民の休日」となるか、については呼称以外の差異はあまりないが、日曜日の場合は「祝日法に規定する休日」ではなく単なる日曜日となり、このBに休日出勤をしたときの割増賃金等に差が出る可能性がある。2009年9月の「国民の休日」
2009年要注意の休日
5月6日(改正後初の水曜日の振替休日)
9月22日(敬老の日と秋分の日に挟まれ、9月では初の国民の休日)
秋分・春分
秋分秋分の日は、国立天文台の算出する天文学的秋分日を元にして閣議決定され、前年2月に官報で告示される。天文学に基づいて年ごとに決定される国家の祝日は世界的にみても珍しい。

特異値 時間

うるう秒
UNIX時間と閏秒
OSレベルで閏秒をサポートしていても、アプリケーションがサポートしていない場合がある。
とくにデータベースにカレンダー計算をさせるような場合には注意が必要である。

2009年1月1日に「うるう秒」の調整、3年ぶりの実施

2009年は「2009年1月1日8時59分60秒」があるので注意

時報サービス「117」番の「うるう秒」調整の実施について

http://www.ntt-east.co.jp/release/0512/051216.html

 調整にあたっては、お客さまが時報サービス「117」番を
聞かれた時に自然な形となるように、平成18年1月1日(日)、
午前8時58分20秒から午前9時00分00秒までの100秒間に
時報サービス「117」番の秒音を100分の1秒ずつ長くして、
時刻を1秒遅らせ、午前9時ちょうどに日本標準時に合うようにします。
なお、過去の「うるう秒」の調整についても、今回と同様の方法で
調整してきました。

特異値 数字

127
8bit符号付き整数の最大値(16進数で0x7f)
255
8bit符号なし整数の最大値(16進数で0xff)
32767
16bit符号付き整数の最大値(16進数で0x7fff)
65535
16bit符号なし整数の最大値(16進数で0xffff)

(※16進数表示にすると0x・・00000とか0x・・・FFFFFみたいに最後がオール0やオールFになる数字)

負の16進数
例えば8ビットの-1は0xff,16ビットの-1は0xffffと同じ-1でも表示が異なる。
例 VBのhex関数
Private Sub Command1_Click()
    MsgBox (Hex(-1))      'FFFFと表示
    MsgBox (Hex(-32767))  '8001と表示
    MsgBox (Hex(-32768))  'FFFF8000と表示
End Sub
0除算
ゼロ除算についてあらためて考える  ニコニコ動画(RC2)‐なぜ0で割ってはいけないのか? リンゴの分配から体の公理まで
16進数表示
c言語系なら0xFFFF,Basic系なら&HFFFFなど。一度文字列で受けて、長さのチェックをして数字に直す場合に、範囲外の値を入力できたりする。

特異値 文字

機種依存文字
機種依存文字
Windowsでファイル名に使えない文字列
\ / : * ? " < > |の9文字。Windowsでファイル名に使えない文字列
¥を含む文字
シフトJISで2バイト目の文字が"¥"にあたる場合、¥□はC言語系ではエスケープコードとして動作するため誤動作することがある。(¥は実際は半角)詳しい説明

2バイト目に¥を含む文字一覧表(S-JIS)

― ソ Ы 宗 ̄宗ヽ宗ゝ宗〃宗々宗〇宗―宗/宗〜宗|宗‥宗’宗”宗)宗〕宗]
兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 宗○

"^"(0x5E)を含む文字一覧表(S-JIS)

/ タ Э 運 蛙 疑 型 洪 賛 戎 真 楚 耽 顛 膿 豹 某 与 録 竸 
喊 嫂 弯 擔 杰 歐 濘 畤 秧 綽 膺 蘓 訖 躾 鐃 饋 鷽 拭○

"|"(0x7C)を含む文字一覧表(S-JIS)

− ポ л 榎 掛 弓 芸 鋼 旨 楯 酢 掃 竹 倒 培 怖 翻 慾 處 嘶
斈 忿 掟 桍 毫 烟 痞 窩 縹 艚 蛞 諫 轎 閖 驂 黥 檗○檗☆繊○
シングルクォーテーション(')
SQLで使う文字列に特殊な文字(シングルクォーテーション等)を含むとエラーになる【SQL】特殊な文字(シングルクォーテーション等)を含む文字列を扱う

ほとんどのリレーショナル・データベースが準拠しているSQL-92で定義された特殊文字

空白 ()"',-.&+/|:;<=>%?^_
大文字小文字
ユーザー名に大文字(AとかBとか)と小文字(aとかb)などが混在している場合に、UserAとUseraを同義に扱うシステムがあった。
バイト区切り
ファイル名の偶数番目に2Byte文字が含まれると(a亜xxxの様な感じ) 、ファイル名を正しく判別出来ないシステムがあった
最後が半角スペース
ユーザー入力文字列の最後が半角スペースの場合、(例えば、20文字入力可能なフィールドの20文字目)にある条件で止まってしまうシステムがあった。
NULL文字(0x00)
NULL文字が含まれているとSQL*Loaderやファイル取り込み処理で項目の区切りを認識できずエラーが発生することがあります。C言語系のシステムでは度々目にします。NULL撲滅委員会
タブ
ファイルの区切り文字として採用することが多く項目中に含まれていると区切りを認識できないことがあります。
シフトJISに存在しないUnicode文字
例えば「利き酒師」という「利」の部分は、 「利」に口偏を足した漢字を使うことがありますがUnicode対応していない場合、「?」 や「唎」に変換されてしまいシステムに悪影響を与えることがあります。ちなみにメーラのThunderbirdでは、Unicode(UTF-8)で送信しないと化けると警告が出ます。⇒gmailから試しに記載してみます。「暑k」
シフトJISの2バイト目使用領域と重複している半角文字
例えば半角縦棒の|(7c)は、ポ(837c)の2バイト目と文字コードが重複しています。以前、|をファイル区切り文字として採用したことがあり「ポ」を区切りとして誤検知しエラーが発生したことがあります。
半角カナ
最近のメーラーは半角カナを書いても自動的に全角カナに変換してくれるようです。メールを扱うシステムで埋め込み文字を使う場合、半角カナが存在するなら注意が必要でしょう。
行末文字(改行文字)
オペレーションシステムで異なるため。 DOSで作成したスクリプト(シェル、Ruby等)がUnixで動かない、さんざん調べたあげく、行末にCR(0x0d)が入っていたせい、というのをけっこう限りなく経験しています(苦) # UnixはCRを認識してくれないです
DOS/Windows = CRLF(0x0d0a)
Macintosh = CR
Unix = LF
EOF
制御コードの^Z(0x1a)はテキストモードでファイルを開いた時の終端を意味するコードです。バイナリファイルを間違ってテキストモードで読んだ場合などに^Zがあると最後まで読めなくなります。

[Unicodeマッピングルールの不整合]

Windows
Windowsは、ODBCやアプリケーションの内部処理ではMicrosoft-Unicodeを、表示処理ではShift-JISを用いている。 Microsoft-Unicodeでの「全角チルダ(〜)」を、Oracle(データベースのキャラクタセットはShift-JIS)に格納し、Unicodeを扱うアプリケーションで参照すると「〜(全角チルダ)」が「〜(波ダッシュ)」に変換されてしまう。Windowsでは、以下のマッピングがUnicodeと異なる。
Shift_JIS    Unicode                       Microsoft-Unicode
0x5C(¥)   U+00A5(Yen Sign)              U+005C(Reverse Solidus)
0x7E( ̄)   U+203E(Overline)              U+007E(Tilde)
Ox815C(―) U+2014(Em Dash)               U+2015(Horizontal Bar)
0x815F(\) U+005C(Reverse Solidus)       U+FF3C(FullwidthReverse Solidus) 
0x8160(〜) U+301C(Wave Dash)             U+FF5E(Fullwidth Tilde)
0x8161(‖) U+2016(Double Vertical Line)  U+2225(Parallel To)
0x8161(−) U+2212(Minus Sign)            U+FF0D(Fullwidth Hyphenminus)
0x8191(¢) U+00A2(Cent Sign)             U+FFE0(Fullwidth Cent Sign)
0x8192(£) U+00A3(Pound Sign)            U+FFE1(Fullwidth Pound Sign)
0x81CA(¬) U+00AC(Not Sign)              U+FFE2(Fullwidth Not Sign)

異常値 

バッファーオーバーフロー
バッファオーバーフロー攻撃って?!c言語などでgets()やscanf()といった関数は、受信する文字列サイズを既定していないので、プログラマの想定外の大きさのデータを入力された場合にデータ破壊が起きたり、戻り先を書きかえることで任意のコードを実行できたりすることがある。
SQLインジェクション
インジェクション攻撃SQL文字列に影響がでる入力を行うことでデータベースに不正にアクセスを行う。
インジェクション攻撃の中で最も代表的なものには、データベースに干渉して情報漏えい・情報改ざんを引き起こすSQLインジェクション攻撃がある。
そのほかにも、シェルに干渉するOSコマンドインジェクション、XML検索条件をかく乱するXPathインジェクション、
ディレクトリ検索条件に干渉するLDAPインジェクションといった攻撃手口が知られている。
XSS脆弱性
実行できるスクリプトを入力するクロスサイトスクリプティング対策の基本(前編)

その他

仕様書などに見られる異常値

個人的には、誤字脱字、Excelのセルに文字が隠れているなど
体裁に気を配らない人はバグに気づかないケースが多いと思います。

佐々木さんより

  1. 開発者(コードを書いた人)が危険だと感じている箇所
  2. 最近(半月から1ヶ月)、コードが変わった箇所
  3. 最近(1,2週間)にバグが多く見つかっている箇所
  4. 以前からバグが多く見つかっている箇所(あまりに遠い昔の情報は意味を失っている可能性があるので、ここ半年ぐらい)
  5. 普段使われない機能
  6. テストが面倒な機能(テストのための準備が大変な機能)

ありえるえりあさんのサイトより

テスト仕様書ではなくて設計書の話ですが、
ファイル名が怪しい文書は中身も怪しいです。
(案)、(仮)、日付、担当者の名前、などなど。
どれが最新かわからず古い情報を元に書いてしまったり
するからかなと考えています。

森さんより

変更履歴の異常値
 ○変更履歴自体がない
 ○変更履歴に、項目だけが書いてあり、変更された箇所が明記されてない
       よって、項目の何が変わったのかよくわからない。
       → Diffを取らないとわからない。<"WinMerge"というツール、使えますよ>
要求仕様書、設計仕様書がバージョンアップしたとき、困ります。

永田さんより

その他、以下の場合も怪しい。
  ・日本語が読みにくい(箇条書きでない,冗長な表現が多い)
  ・「後報」が多い
  ・文章のと比較して、図の比率が多すぎる(図では詳細があいまい)

(Y.K)匿名希望より?

その他、以下が怪しい。
  ・「ただし」「または」「および」で始まる文節。(不良を作り込みやすい)
  ・「目的/背景」「境界値」「限界」「異常」「状態変化」「制約」の観点で不十分。
  ・時間が無いからと、似たようなものを流用して作成している。

total 61 today 2 yesterday 1

TEF/indexに戻る

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-05-22 (金) 12:30:55 (4061d)