基本的に、最悪のケースまたはベストケースである可能性のあるケース、およびそれらを使用する前に持つ可能性のあるその他の「エッジ」ケースをどのようにして見つけるのですか。それらのコードをどのように準備しますか?
アルゴリズムの内容に基づいて、どのデータ構造/タイプ/構成が使用されているかを識別できます。次に、それらの(可能性のある)弱点を理解し、それらのケースで実行できるようにする実行計画を考え出そうとします。
たとえば、アルゴリズムは文字列と整数を入力として受け取り、文字列の文字を並べ替えます。
ここにあります:
String既知の特殊なケースがいくつかあります:
整数既知の特殊なケース:
ソートアルゴリズム以下の境界の場合に失敗する可能性があります。
次に、これらすべてのケースを取り上げ、それらがどのように重複するかを理解しようとする長いリストを作成します。例:
次に、それらのテストケースを作成します。
短い要約:境界ケースがわかっている基本ブロックでアルゴリズムを分割し、それらを再構成して、グローバル境界ケースを作成します
「エッジ」には2つの意味があり、エッジケースに関しては両方とも関連があります。エッジは、入力の小さな変化が出力の大きな変化につながる領域、または範囲の終わりです。
そこで、アルゴリズムのEdgeケースを特定するために、まず入力ドメインを調べます。そのEdge値は、アルゴリズムのEdgeケースにつながる可能性があります。
次に、出力ドメインを確認し、それらを作成する可能性のある入力値を確認します。これは一般的にはアルゴリズムの問題ではありませんが、特定の出力ドメインにまたがる出力を生成するように設計されているアルゴリズムの問題を見つけるのに役立ちます。例えば。乱数ジェネレータは、意図したすべての出力値を生成できる必要があります。
最後に、アルゴリズムをチェックして、類似しているが異なる出力につながる入力ケースがあるかどうかを確認します。これらのEdgeケースを見つけることは、ドメインと入力のペアの両方を含むため、最も困難です。
Edgeの条件を決定するアルゴリズムはないと思います。
例:バイトパラメータの場合、0、127、128、255、256、-1などの数値をテストして、問題を引き起こす可能性があるものをテストします。
これは非常に一般的な質問なので、私ができることはいくつかの一般的で曖昧なアイデアを捨てることだけです:)
-境界ケースを調べます。例文字列を解析している場合、文字列が空またはnullの場合はどうなりますか? xからyまで数えている場合、xとyで何が起こりますか?
-簡略化またはD.R.Y.で出力できるコード。不必要な複雑さにより、問題が発生する可能性があります。