今日は、数値フィールドのチェックリストを分析します。最初に一般的なチェックリストを作成し、次に各項目を調べてそれが必要な理由を理解し、最後にこのテンプレートを使用してチェックリストを作成します。
そのため、番号を入力する必要がある特定のフィールドがあります。たとえば、登録時の「年齢」フィールド:
同時に、18歳未満のサイトには登録できません。禁止されているコンテンツがあります。
ここで実行できるチェック:
- 有効な値
- 不正な値(有効な範囲外または非論理的:200年、88秒...)
- 境界値
- 境界値
- 分数-形式(コンマとピリオドで区切る)
- 分数-丸め(小数点以下の桁数を含む)
- ゼロ
- 1
- 空のフィールド
- 非常に多数(技術的フロンティアの検索)
- 負の数
- 非数値および非数値
すべてをまとめる-例:年齢チェックリスト。
さて、どこで練習するか-自分で試してみてください!
有効な値
機能をテストするのに文字通り5分あると想像してください。そして、あなたはチェックリストから最初のいくつかのテストを実行することしかできません。そして、あなたはチェックリストを持っています:
- 空のフィールド
- 0
- -1
その結果、これらのチェックが実行され、システムは正常に機能していると思います(まあ、それは誓います!)。そして、彼女は正しい値であっても、常に誓います!良くない...したがって、私たちはルールを覚えています:
常に最初にポジティブ、次にネガティブ!
参照:
ポジティブテストとネガティブテスト-どこから始めればよいか
年齢のあるフィールドの場合、正しい値は何ですか?18歳以上のもの:
- 18
- 25
- 38
- 45
- ..。
ここでは、1つの値を選択していることを理解する必要があります。農薬の影響を避けるために毎回違うだけです。
また、正しい値が複数ある可能性があることを理解することも重要です。これは、いくつかの範囲があり、それぞれに異なる条件がある場合です。
たとえば、同じ年齢:
- 18歳未満の場合-タバコとアルコールを除く、ストア内のすべての製品を表示します
- 18歳以上の場合-すべての製品を表示します
次に、すでに2つの「有効な」範囲があることがわかります。したがって、それぞれから値を取得する必要があります。たとえば、16と26です。
または、運転経験に応じて保険を計算する場合:
- 0-1年-1000ルーブル
- 1〜3年-800ルーブル
- 3-5年-600ルーブル
- 5-10年-500ルーブル
- 10年以上-US $ 3.00
それは5つの間隔になります。そして、それぞれから1つの値を取得する必要があります。例:0.5、2、4、6、15。
毎回異なる値を取得しますが、この段落では意味は同じです-TKから正しい値を取得します。
無効な値
ここにはさまざまなオプションがあります。間違った値はどういう意味ですか?
- 有効範囲外
- コンピュータの観点からは正しい(数)が、意味がない(200年)
年齢の例に戻りましょう。正しい値は18歳以上です。したがって、次の質問をする必要があります。-
「間違った」範囲から値を取得するとどうなりますか?18歳未満の場合はどうなりますか?さて、10としましょう。
次に、選択した間隔を注意深く調べます
。-うーん、ただし、年齢は0未満にすることはできません。つまり、2つの異なる等価クラスを分離する論理境界があります。
- 物理的には可能ですが、TK(0〜17歳)によると無効です
- 物理的に不可能(0以下)
したがって、各範囲から値を取得する必要があります。次に、10と「-5」になり
ます。さらに考えます。-
下から特定の論理境界がある場合、上にある必要があります。当サイトに登録できる最大年齢は何歳ですか?古い世代はコンピューターが好きではないので、おそらくそれは約55-65歳です。しかし、100〜110年の100年の条件付きを置くこともできます。
暗黙の境界線を持つ別の間隔を取得します。しかし、いずれにせよ、値25と145は異なります-1つは現実的で、もう1つはそうではありません。だからあなたもそれを試してみるべきです!
そして再び農薬の効果。 1回は145、もう1回は6666666を使用します。
ここでは、2〜3文字を超える文字をフィールドに入力できないという事実に直面する可能性があります。開発者は「ばかから」再保険をかけられました。これはあなたの小切手をあきらめてあきらめる理由ではありません。ほとんどの場合、開発者はフィールドにmaxlengthを設定するだけで、簡単に回避できます。
参照:
すべてのフォームフィールドからmaxlengthを削除する方法-ツに注意するいくつかの方法
境界値
境界値は、ある間隔を別の間隔から分離します。それらはテストする必要があります!!! バグが最も一般的なのは国境にあるからです。どうして?はい、両方の範囲に該当するか、どちらにも該当しないためです。
この例では、TKの条件は「18歳以上の人のみの登録」です。これは、開発者がプログラムコードで次のロジックを作成する必要があることを意味します。
- x> 18の場合、登録します
- x <= 18の場合、エラーが発生します
開発者が値18を範囲の1つに追加するのを忘れた場合、エラーが発生しない可能性があります。そのような場合、ifelse構文が通常使用されるためです。そして、開発者は念のために最後の「else」を置きます。つまり、突然入力された値が上記の条件のいずれにも該当しなかった場合です。
- x> 18の場合..。
- elseif x <18..。
- そうしないと ...
しかし、開発者が一度に複数の範囲に値18を追加した場合:
- x => 18の場合..。
- elseif x <= 18..。
それならプログラムは途方に暮れるでしょう、それは何を選ぶべきですか?そして、それは落ちるかもしれません!
一般に、バグは間隔内よりも境界でより一般的です。したがって、必ず調査してください。私たちのTKには、「18年以上」という明確な境界線があります。したがって、番号18をテストし
ます。TKに従って複数の間隔がある場合は、各境界を個別にチェックします。これらは任意の境界であり、TKが課します。
ただし、境界線にはさまざまな種類があります。
- 任意
- 脳ティーザー
- 技術的
任意にチェックしましたか?さらに進んでみましょう。論理とは、論理に従うことのすべてです(1分60秒で、人は「マイナス1歳」になることはできません)。私たちの例に適用してみましょう。
下からの境界:
-年齢をゼロ以上にすることは論理的です。したがって、0が境界です。テスト中!
上からの境界:
-Nuuuu ... 35歳以上になることはほとんどありません。祖母がサイトにアクセスするのを妨げるものは何ですか?多分65? 88?
ここで国境を見つけるのは難しいです。 「あまり信じない」の範囲から値をとるのは簡単ですが、特定の境界線はありません。したがって、テストするものはありません。上部に論理的な境界線はありません。
技術的フロンティアの探求を別の項目に入れましたので、少し後で戻ります。いずれにせよ、これはTKにある有効な境界を調整することほど重要ではありません。
参照:
例として洗浄機を使用した境界のタイプ
境界値をテスト する理由
クライアントおよびサーバーで境界を検索する方法 境界値を検索する
ためのBMWニーモニック
境界値
境界線がある場合は、境界線の値があります。そして、それらもチェックする必要があります!
年齢の例では、境界は18です。したがって、境界値は17と19です。
なぜ境界値を確認するのですか?はい、それでは、開発者がコードを間違えて、境界線が少しないことを示す可能性があります。
if x > 18 …
↓
if x > 17 …
境界線がシフトしていて、境界線の値をテストしない場合、このバグを簡単にスキップできます。結局のところ、私たちはチェックしました:
- ボーダー-18.18> 17なので、すべてが機能します
- 左側の範囲の無効な値は10.10 <17であるため、エラーがスローされました。
正しくはありませんが、すべてが正しく機能していると結論付けます。したがって、必ず境界値を確認してください。
しかし、両側で境界値をテストする必要がありますか?17を整理したら、必要です。そして19?開発者が反対方向に封印したとしましょう:
if x > 18 …
↓
if x > 19 …
このバグは、境界値18をチェックすることで見つかります。また、18で機能し、範囲内の数値(たとえば、26)で機能する場合、コードは正しく記述されています。つまり、コードにバグがあるように、それは変質する方法です。次のように記述します。
if (x == 18 or x > 21) …
これは意図的にのみ行うことができます))まあ、あなたがそのようなイースターエッグの形で邪悪なジョークを持つ愚かな開発者に頼っているなら、あなたは完全なバストをしなければなりません。それでは、同僚を適切な人と考えましょう。
だが!開発者がコードが複数の間隔でどのように機能するかを説明した場合はどうなりますか?次に、タイプミスが発生した場合、範囲は重複します。
if x <= 19 () …
if (x > 18 and x < 55) …
18 <= 19であるため、数値18はエラーをキャッチせず、2番目の範囲に分類されません。したがって、境界で機能し、範囲内で機能するが、境界値では機能しない状況が発生します。
したがって、コードにアクセスできない場合は、両側の境界線を確認する価値があります。そうでない場合は、タイプミスがどこに忍び込んだのかわかりませんか?
整数だけでなく小数も入力できると、さらに面白くなります。では、境界値はどうなるでしょうか?小数点以下1桁から始める価値があります。この例では、これらは17.9と18.1です。
わかりました。チェックしたとしましょう。
- 国境全体-17と19
- 部分的な境界-17.9および18.1
しかし、そのような値が正常に四捨五入されている場合、それは他の人もうまく四捨五入することを意味しますか?値17.99999999999を入力するとどうなりますか(小数点の後に11個のナインがあり、丸めの結果は境界に達します)?
丸められる分数について話している場合、これらは異なる等価クラスです。
- 小数点以下1桁
- 多くの兆候
そして、両方をチェックする価値があります!したがって、新しいテストを追加します:17.99999999999および18.00000000001
分数(フォーマット)
システムで分数値の入力が許可されている場合は、正しい値をテストするときに、手順1でそれらをチェックします。「正しい数」の概念を分解するだけです。
- 全体
- フラクショナル
そして、アイテム「フラクショナル」をさらに細かく分類します。結局のところ、小数は次のように書くことができます。
- ポイント-6.9
- コンマ-6.9
いずれかの方法が機能する場合、2番目の方法が機能することを意味するわけではありません。小数の数値を異なる方法で処理する2つの計算機の例もあります-http://bugred.ru/calc/。
参照:
バグに「Enter6.9」と書かないでください!-計算機のバグの分析
したがって、両方の方法が機能することを確認する必要があります。少なくとも彼らが働くことになっているなら。標準ではもう一方の使用が禁止されているため、一方だけが機能する必要がある場合は、もう一方がエラーを返すことを確認してください。
年齢の場合、正の分数値は何ですか?おそらく半分-たとえば、20.5歳:
チェックしましたか?ワーキング?次に、コンマを調べます-20.5:
原則として部分的な作業がチェックされるという事実。はい。
分数(四捨五入)
特に興味深いのは、分数の値ではなく、カットオフに近い値です。計算精度よりも短い距離で境界に近づくと、値の妥当性チェックは成功するが、計算は失敗する状況に陥ることがあります。
したがって、整数以外の数値を入力できる場合は、値の境界に近い、小数点以下の9を何度も試してください(上記のポイントですでにこれを行ってい
ます)。ピリオドまたはコンマによる丸めをチェックすることは意味がありません。これは、テストの不要な重複になります。個別に確認します。
- 形式-ピリオドまたはコンマで区切る
- 丸め-1桁または複数桁の場合
参照:
テストでは、常に単純なものから始めます。-チェックを混ぜてはいけない理由
ゼロ
私たちは常にゼロをテストします。そしてどこでも。これを公理として覚えておいてください。ゼロにバグがあることが多いからです。
これは通常国境だからです。明示的(TKで規定)または暗黙的(TKで記述されていませんが、年齢を負にすることはできないことは明らかです)にすることができます。
数値フィールドについて話している場合は、数値0を入力しようとします。もちろん、テストでの「ゼロ」は素数を超えています。
参照:
ゼロではない同等性クラス-数値フィールドだけでなく、ゼロのテストの詳細をご覧ください。
1
常にゼロをチェックするので、境界値である1を忘れないでください。
実際、分数の値について話していない場合、これは通常「可能な最小値」
です。-注文する場合、少なくとも1冊の本、1つのドレス、または1kgの小麦粉を購入するのは論理的です...-
最小年齢は1日/月です。 /年
-最小時間-1秒
-最小作業経験-1日/月/年
-...
つまり、1つはゼロ以上の魔法の数です。私たちもチェックします!
空のフィールド
実際、これもゼロテストです。「ゼロ」という数字だけでなく、入力文字列の長さもゼロです。
結局、「0」と入力すると1文字になります。
また、文字列の長さを調べる場合は、1つだけでなく0もチェックする価値があります。
ゼロは単なる数字ではないことを忘れないでください。数値フィールドでも、少なくとも2つのゼロ(空の文字列と数値「0」)があります。より多くのゼロがあるかもしれません-出力のゼロを忘れないでください。しかし、年齢のある例では、そうではありません。
非常に多数
技術的なフロンティアを見つけるには、非常に多くの数を入力する必要があります。たとえば、9999999999999999
です。可能な限り取得しようとしています。しかし、それほど難しくはありません。1つのテスト、2つのテストである必要があります。
まず、整数値から始めることができます。ほとんどの場合、このデータタイプは数値フィールドに選択されます。それを超えることができた場合は、フィールドで25または45のナインをチェックしてください。落ちませんでしたか?まあ、変だ。技術的な境界はありませんが、少なくとも私たちはそれを見つけようとしました。
参照:
大きな文字列、ツールを生成する方法-手作業で行う必要はありません))法的な
ヒントの技術的フロンティア-実際のバグの例
フィールドで負の値を入力できる場合は、プラス記号とマイナス記号の両方で「多くのナイン」をチェックし、2つのテストを実行します。
- 99999999999999999999999
- -99999999999999999999999
フィールドに多くの文字を入力できない場合、これはあきらめて「技術的な境界を確認できない!」と言う理由ではないことを思い出してください。あなたは多くの文字を入力することができない場合ので、フィールドでは、最も可能性がありMAXLENGTH簡単で、フィールドごとに、してもらうの周り。クライアントの制限を取り除き、サーバーにも絶対確実な保護があることを確認しました。
参照:
すべてのフォームフィールドからmaxlengthを削除する
方法クライアントとサーバーの境界線を見つける方法
負の数
番号がある場合、次のようになる可能性があることを常に覚えています。
- ポジティブ
- 負
同時に、私が行ったインタビューの経験から、「負の値を入力した場合」というチェックを考える人はほとんどいないと言えます。ただし、システムはさまざまな方法で機能します。
- 「そのような年齢/数量はありません。正の数値を入力してください」というエラーを表示します。
- マイナス記号を切り取り、負の数を正の数として扱います。
これは、負の数がフィールドにとって非常に正常である可能性があるという事実に追加されます(たとえば、収入/費用を節約する場合)。
このセクションでは何をテストしていますか?
- 負の数を入力するとどうなりますか。これはモジュラスで正しいでしょう:この例では-26
- テクノロジーの境界を見つけようとしています:-99999999999999999999999
非数値および非数値
数値以外の値をチェックするには、「hello」のような文字列を入力するだけで十分だと思う場合は、間違っています)))
行も異なる可能性があり、次のように分割できます。
- プログラムが数字として解釈する多くの文字列。
- プログラムが数字として解釈できない多くの文字列。
「数値ではない」値のテストについては、この記事で詳しく 説明しています:数値を表す文字列の等価クラス
。まだ見たことがないもの:
- 間違いなく数ではありません-「テスト」
- 先行ゼロ-「025」
- 番号の前のスペース-「25」
- 数字の中のスペース-「25」
- eを介して書き込む-「1.2e + 2」
- 16進値-「0xba」
- ブール値-TRUE / FALSE(0/1として解釈できます)
- インフィニティ(はい、テキストで書くだけです)
- NaN
私たちの場合、18歳からの年齢の正しい値で、項目「数の中のスペース」はより興味深いものになります。それはシステムのロジックに依存します。ここにはさまざまなオプションがあります。
- 複数の単語が入力されている場合は誓う
- 最初のスペースの後に続くものをすべて切り取ります-「25」→「2」
- スペースを削除し、そこになかったふりをします(数字のタイプミスとして認識されます)-「25」→「25」
同様に手紙で。システムはそれらを見ると誓うことも、単に捨てることもできます。それでは、新しいテストオプションを見てみましょう。
- 18歳未満のスペースまで-25
- 18年以上のスペースまで-256
- テキストのスペースの後-25テスト
- スペーステキストの前-テスト25
インターフェイスでは、データタイプを指定せずに値を入力するだけであることに注意してください。ただし、REST APIとその中のjsonメッセージをテストしている場合は、必ず文字列で番号を渡そうとする必要があります。
- 番号:3
- 番号:「3」
これらは異なる意味です。引用符で囲まれていない値が数値の場合。引用符が文字列の場合、たとえ数字のように見えても。たぶん、開発者はコードでタイプをキャストし、2番目のオプションを「受け入れる」か、そうでないかもしれません。とにかくチェックする価値があります!
すべてをまとめる:年齢チェックリスト
テストのアイデアが書き留められ、それぞれが議論されました。それでは、すべてのポイントをまとめて、例のチェックリストを作成しましょう。
条件をお知らせします。登録時に「年齢」フィールドがあります。同時に、18歳までサイトに登録することはできません。禁止されているコンテンツがあります。
チェックリストを作成するときは、上記で説明したすべてのポイントを考慮に入れます。しかし、優先順位を忘れないでください。私たちは常に基本的なチェックから始めます。「ゼロで槌で打たれた負の数であり、一般的にあらゆる方法でそれを破ろうとした」のではありません。
小切手 | 例 | 結果 |
---|---|---|
18 | 25 | |
18 | 18 | |
18 | 16 | : « 18 » |
21.5 | ||
21,5 | ||
18 | 17 | : « 18 » |
, | 17.999999999999999999 | : « 18 » |
18* | 18.00000000000000001 | |
/ | ||
0 | : « 18 » | |
( , , ) | ||
1 | : « 18 » | |
999999999999999999999 | : « » | |
. | -999999999999999999999 | : « » |
: « » | ||
025 | , 25 | |
25 | , 25 | |
2 5 | : « 18 » ( ) | |
18 | 25 6 | , 25 |
25 | , 25 | |
25 | , 25 | |
1.2e+2 | : « » | |
0xba | : « » | |
Boolean | TRUE | : « » |
Infinity | Infinity | : « » |
NaN | NaN | : « » |
* 18.000000000001が機能する場合、整数19をチェックしても意味がありません。フラクションがシステムで受け入れられない場合は、はい、19をチェックし
ます。もちろん、ブロック「非整数」からのチェックはそれほど重要ではありません。時々あなたはそれらにスコアを付けることができ、そしてそうすべきです。特に、システムが何も分析したり、スペースを削除したり、テキストを破棄したりするべきではないことがわかっている場合は、このリストから1つの値を取得するだけで十分です。そして、残りは農薬の効果のために使用します。つまり、毎回「数ではない」の新しいバージョンです。
しかし、余分なものをカットするためには、最初にたくさんのアイデアを生み出す方法を学ぶ必要があります!これが今日あなたと一緒に練習したことです=)
参照:
Strainerの数値フィールドのチートリスト(ログインする必要があります)
テストのアイデアを入手する場所(役立つリンクの選択)
自分で試してみてください
「運転体験」フィールドのチェックリストを作成します。保険は勤続期間に応じて計算されます。左側のすべての間隔には「包括的」という番号が付いていますが、右側にはありません。
- 0〜3年-1000ルーブル
- 3〜6歳-700ルーブル
- 6-10歳-500ルーブル
- 10年以上-US $ 3.00
フォームでは、数字以外は入力できません(この制限はクライアントにあります)。部分的な値は受け入れられません、私たちが何年の経験を持っているか、それで私たちは書きます。
PS-私のブログで「役に立つ」というタグの下でもっと役立つ記事を探してください。そして、便利なビデオは私のyoutubeチャンネルにあります