"ソフトウェアコード分析の方法であって、共通パターンにより特徴付けられる命令シークエンスのグループを識別するために、ソフトウェアソースコードの本体をコンピュータにより自動的に処理するステップと;前記共通パターンの基準からの偏移を含む前記グループ内のシークエンスを発見するステップと;そして前記偏移を前記ソフトウェアソースコード内の潜在的脆弱性として報告するステップと;を有することを特徴とするソフトウェアコード分析の方法。前記ソフトウェアソースコードの本体を処理するステップは、前記コードのドキュメントオブジェクトモデルDOMを生成するステップと、そして前記DOMを前記シークエンスの識別に適用するステップを有する、ことを特徴とする請求項1に記載の方法。前記ソフトウェアソースコードの本体を処理するステップは、前記コードを基準化するステップと、そして前記基準化されたコード内で前記シークエンスを識別するステップを有する、ことを特徴とする請求項1に記載の方法。前記コードを基準化するステップは、前記コード内に所定のタイプのエンティティの名前を発見するステップと、そして前記コードに出現する前記名前を前記タイプのインジケータと置き換えるステップを有する、ことを特徴とする請求項3に記載の方法。名前が前記タイプのインジケータと置き換えられた前記エンティティは、変数及び定数からなるエンティティのグループから選択される、ことを特徴とする請求項4に記載の方法。前記コードはオブジェクト指向言語で書かれ、そして名前が前記タイプのインジケータと置き換えられた前記エンティティは、クラスとメンバーからなるエンティティのグループから選択される、ことを特徴とする請求項4に記載の方法。前記コードを基準化するステップは、前記コード内に所定のタイプの制御ブロックを発見するステップと、ここにそれぞれの前記制御ブロックは前記コードのラインを有し、そして、前記コードのラインを、前記制御ブロックのタイプに対し事前定義されたフォーマットの、前記コードのラインに対応する一連のタグと置き換えるステップを有する、ことを特徴とする請求項3に記載の方法。前記ソフトウェアコードの本体を処理するステップは、前記コードを一連のタグに変換するステップと、そしてシークエンスマイニングアルゴリズムを適用して前記一連のタグ内に出現する前記グループ内の前記シークエンスを識別するステップを有する、ことを特徴とする請求項1-7のいずれかに記載の方法。前記シークエンスのグループは、前記基準と、前記基準からの前記シークエンスのそれぞれの距離の分布により特徴付けられる推計学的なグループであり、ここにおいて前記偏移を含むシークエンスを発見するステップは、前記基準からのそれぞれの距離が事前定義された閾値を超える1つ以上の前記シークエンスを発見するステップを有する、ことを特徴とする請求項1-7のいずれかに記載の方法。前記シークエンスにおける偏移は前記ソフトウェアコード内の欠落したオペレーションを含む、ことを特徴とする請求項1-7のいずれかに記載の方法。前記シークエンスにおける偏移は、要注意オペレーションを実行する許可のチェック漏れを含む、ことを特徴とする請求項1-7のいずれかに記載の方法。前記シークエンスにおける偏移は、規定の呼び出しシークエンスの順守違反を含む、ことを特徴とする請求項1-7のいずれかに記載の方法。前記シークエンスにおける偏移は、前記コード内に残されたバックドアに関連する、ことを特徴とする請求項1-7のいずれかに記載の方法。前記シークエンスにおける偏移は、前記コード内で実行されるビジネスロジックの誤りを含む、ことを特徴とする請求項1-7のいずれかに記載の方法。ソフトウェアソースコードの本体を記憶するように構成されたメモリと、そして共通パターンにより特徴付けられる命令シークエンスのグループを識別するために、前記ソフトウェアソースコードを自動的に処理し、前記共通パターンの基準からの偏移を含む前記グループ内のシークエンスを発見し、そして前記偏移を前記ソフトウェアソースコード内の潜在的脆弱性として報告するように構成されるプロセッサと、を有することを特徴とするソフトウェアコード分析用の機器。前記プロセッサは、前記コードのドキュメントオブジェクトモデルDOMを生成し、そして前記DOMを前記シークエンスの識別に適用するように構成される、ことを特徴とする請求項15に記載の機器。前記プロセッサは、前記コードを基準化し、そして前記基準化されたコード内で前記シークエンスを識別するように構成される、ことを特徴とする請求項15に記載の機器。前記プロセッサは、前記コード内に所定のタイプのエンティティの名前を発見し、そして前記コードに出現する前記名前を前記タイプのインジケータと置き換えるように構成される、ことを特徴とする請求項17に記載の機器。名前が前記タイプのインジケータと置き換えられた前記エンティティは、変数及び定数からなるエンティティのグループから選択される、ことを特徴とする請求項18に記載の機器。前記コードはオブジェクト指向言語で書かれ、そして名前が前記タイプのインジケータと置き換えられた前記エンティティは、クラスとメンバーからなるエンティティのグループから選択される、ことを特徴とする請求項18に記載の機器。前記コードを基準化するステップは、前記コード内に所定のタイプの制御ブロックを発見するステップと、ここにそれぞれの前記制御ブロックは前記コードのラインを有し、そして、前記コードのラインを、前記制御ブロックのタイプに対し事前定義されたフォーマットの、前記コードのラインに対応する一連のタグと置き換えるステップを有する、ことを特徴とする請求項17に記載の機器。前記プロセッサは、前記コードを一連のタグに変換し、そしてシークエンスマイニングアルゴリズムを適用して前記一連のタグ内に出現する前記グループ内の前記シークエンスを識別するように構成される、ことを特徴とする請求項15-21のいずれかに記載の機器。前記シークエンスのグループは、前記基準と、前記基準からの前記シークエンスのそれぞれの距離の分布により特徴付けられる推計学的なグループであり、ここにおいて前記偏移を含む前記シークエンスを発見するステップは、前記基準からのそれぞれの距離が事前定義された閾値を超える1つ以上の前記シークエンスを発見するステップを有する、ことを特徴とする請求項15-21のいずれかに記載の機器。前記シークエンスにおける偏移は前記ソフトウェアコード内の欠落オペレーションを含む、ことを特徴とする請求項15-21のいずれかに記載の機器。前記シークエンスにおける偏移は、要注意オペレーションを実行する許可のチェック漏れを含む、ことを特徴とする請求項15-21のいずれかに記載の機器。前記シークエンスにおける偏移は、規定の呼び出しシークエンスの順守の失敗を含む、ことを特徴とする請求項15-21のいずれかに記載の機器。前記シークエンスにおける偏移は、前記コード内に残されたバックドアに関連する、ことを特徴とする請求項15-21のいずれかに記載の機器。前記シークエンスにおける偏移は、前記コード内で実行されるビジネスロジックの誤りを含む、ことを特徴とする請求項15-21のいずれかに記載の機器。コンピュータソフトウェア製品であって、プログラム命令が記憶されるコンピュータ読み取り可能媒体を有し、前記命令はコンピュータに読み取られた時に、コンピュータに対し、共通パターンにより特徴付けられる命令シークエンスのグループを識別するために、ソフトウェアソースコードの本体を処理し、前記共通パターンの基準からの偏移を含む前記グループ内のシークエンスを発見し、そして前記偏移を前記ソフトウェアソースコード内の潜在的脆弱性として報告するようにさせる、ことを特徴とするコンピュータソフトウェア製品。前記命令は前記コンピュータに対し、前記コードのドキュメントオブジェクトモデルDOMを生成し、そして前記DOMを前記シークエンスの識別に適用するようにさせる、ことを特徴とする請求項29に記載の製品。前記命令は前記コンピュータに対し、前記コードを基準化し、そして前記基準化されたコード内で前記シークエンスを識別するようにさせる、ことを特徴とする請求項29に記載の製品。前記コードを基準化するステップは、前記コード内に所定のタイプのエンティティの名前を発見するステップと、そして前記コードに出現する前記名前を前記タイプのインジケータと置き換えるステップを有する、ことを特徴とする請求項31に記載の製品。名前が前記タイプのインジケータと置き換えられた前記エンティティは、変数及び定数からなるエンティティのグループから選択される、ことを特徴とする請求項32に記載の製品。前記コードはオブジェクト指向言語で書かれ、そして名前が前記タイプのインジケータと置き換えられた前記エンティティは、クラスとメンバーからなるエンティティのグループから選択される、ことを特徴とする請求項32に記載の製品。前記コードを基準化するステップは、前記コード内に所定のタイプの制御ブロックを発見するステップと、ここにそれぞれの前記制御ブロックは前記コードのラインを有し、そして、前記コードのラインを、前記制御ブロックのタイプに対し事前定義されたフォーマットの、前記コードのラインに対応する一連のタグと置き換えるステップを有する、ことを特徴とする請求項31に記載の製品。前記命令は前記コンピュータに対し、前記コードを一連のタグに変換し、そしてシークエンスマイニングアルゴリズムを適用して前記一連のタグ内に出現する前記グループ内の前記シークエンスを識別するようにさせる、ことを特徴とする請求項29-35のいずれかに記載の製品。前記シークエンスのグループは、前記基準と、前記基準からの前記シークエンスのそれぞれの距離の分布により特徴付けられる推計学的なグループであり、ここにおいて前記偏移を含む前記シークエンスを発見するステップは、前記基準からのそれぞれの距離が事前定義された閾値を超える1つ以上の前記シークエンスを発見するステップを有する、ことを特徴とする請求項29-35のいずれかに記載の製品。前記シークエンスにおける偏移は前記ソフトウェアコード内の欠落オペレーションを含む、ことを特徴とする請求項29-35のいずれかに記載の製品。前記シークエンスにおける偏移は、要注意オペレーションを実行する許可のチェック漏れを含む、ことを特徴とする請求項29-35のいずれかに記載の製品。前記シークエンスにおける偏移は、規定の呼び出しシークエンスの順守の失敗を含む、ことを特徴とする請求項29-35のいずれかに記載の製品。前記シークエンスにおける偏移は、前記コード内に残されたバックドアに関連する、ことを特徴とする請求項29-35のいずれかに記載の製品。前記シークエンスにおける偏移は、前記コード内で実行されるビジネスロジックの誤りを含む、ことを特徴とする請求項29-35のいずれかに記載の製品。上記の特許文献1で記載されるような従来技術で公知のソフトウェア分析ツールでは、ユーザがセキュリティ侵害を便利に探索し識別できるような方法でソフトウェアコードの構造と流れを抽出し、分析する。しかしこれらのツールはユーザが何を探すか知っている、即ち、構造と流れの問題のあるパターンが事前に定義され、そしてその後に問題のあるパターンがコード構造内で探索される。以下で記述される本発明の実施形態は、コード内の潜在的に問題のあるパターンを経験的定義を必要とせず、さらにそのパターンに関する知識すらなくても、自動的に発見することによりこの限界を克服する。開示される方法は、既存技術で公知のシークエンスマイニングツールを使用するが、しかしそれはコンピュータソフトウェアの分析にはいまだかつて使用されたことが無い。一般的には、シークエンスマイニングは、限定されたアルファベット又はコンステレーションから取り出され、そして一定のフォーマットに編成されたシンボル又はタグのシークエンスに対し最も効果を発揮する。従って以下に開示される実施形態では、シークエンスマイニングが適用される以前にソフトウェアコードは基準化されている-事前設定された形式の対応するタグのシークエンスに変換されている。本特許出願及び請求項においては、タグとはテキスト形式のラベルを意味する。以下に記載される実施形態では、コンピュータはシークエンスマイニングを使用して自動的にソフトウェアソースコードの本体を処理し、それぞれの共通パターンにより特徴付けられる1つ以上の命令シークエンスのグループを識別する。パターンは事前に定義される必要はないが、しかしむしろコード又は具体的には、対応するタグシークエンスの統計的特性に基づいて識別される。このシークエンスマイニングにより識別されたシークエンスグループは一般的に推計学的グループであり、それはそのグループ内のシークエンスは統計的に類似しているが同一ではないことを意味する。このようなグループは、通常グループ内の平均的パターンに相当する1つの基準、及びそれぞれのシークエンスの基準からの距離の分布により特徴付けられる。ここで距離とは一般的にレーベンシュタイン距離のような編集距離を意味し、それは所定のシークエンス内のタグと基準の間の挿入、削除及び置き換えのような相違の数を示す。可能性のある脆弱性を識別するため、コンピュータは基準から有意に偏移したグループ内のシークエンス、即ち基準からの距離が一定の閾値ユーザにより設定されてもよいを超えるシークエンスを発見する。これらの偏移は場合によっては、要注意オペレーションの前の適切な許可チェックの実行漏れ;規定された呼び出しシークエンスの順守違反;プログラマーがコード内に留置したバックドア;又はコード内で実行されるビジネスロジックの誤り;などの脆弱性を示す。コンピュータはグループの基準からの偏移をソフトウェアソースコード内の潜在的脆弱性として報告する。本発明のある実施形態では、基準化プロセスは、コード内のシークエンス間のあるタイプの相違を滑らかにするステップ、即ちコード内に存在する同じタイプの用語又は構造の多くの変化形を1つの共通の用語又は構造に置き換えるステップを含む。このプロセスはコードを一般化し、それにより類似のシークエンスがさらにほぼ同一となり、シークエンスマイニングにより識別可能になる。一般化のレベルは、脆弱性を示唆する可能性のある相違を隠すことなく、意味のあるシークエンスグループの発見を促進するように選択される。本願の発明者は、例えば、変数、定数、クラス及び/又はメンバーなどの所定のタイプのエンティティの名前を発見し、そしてコード内に現れているその名前をそのタイプの1つのインジケータと置き換えることにより、効果的な基準化が実行可能であることを発見した。さらにあるいは、制御ブロック内のコードのラインが、その制御ブロックのタイプに対し事前定義された1つのフォーマットの一連のタグに置き換えられてもよい。ここに記載される実施形態は、説明のため、ある特定の基準化技術を参照しているが、他の適用可能な基準化技術も本特許出願を読んだ当業者には自明であり、本発明の範囲内であると見做されるべきである。基準化技術およびシークエンスマッピングアルゴリズムの適切な選択は分析対象のコードの性質及び対象の脆弱性に依存し、その選択は本発明の開示に基づいてそれぞれのケースの当業者が決定可能である。システムと方法の記述本発明の1実施形態による、ソースコード分析のシステム20及び方法を概略示す図1及び図2を参照する。図1はシステムのブロック図であり、一方図2は方法の主要ステップを示す流れ図である。システム20の構成要素は上記の特許文献2で記載されるソースコード分析システムのそれと類似しており、それに本特許出願で記載されるシークエンスマイニング関連の能力が追加されている。簡略化のため、ここではこれらの追加された能力についてのみ記載する。システム20はプロセッサ22を有し、それは一般的に汎用または特殊用途のコンピュータ内に配置され、以下に記載される機能を実行するためソフトウェアでプログラムされる。ソフトウェアはプロセッサ22に電子形態で、例えばネットワーク経由でダウンロードされてもよい。さらにあるいは、磁気、光学又は電子メモリのような接触可能な非一過性コンピュータ読み取り可能媒体の上に提供され及び/又は記憶されてもよい。またさらにあるいは、プロセッサ22の機能の少なくとも幾つかは適切なプログラム可能ロジック回路により実行されてもよい。プロセッサ22はソースコード23の本体を分析のために受け取る。プロセッサはコード分析及び基準化モジュール24通常ソフトウェアモジュールとして実現されるを起動し、シークエンスマイニングの準備としてコードを事前処理する。モジュール24はコード分析ステップ40において、ドキュメントオブジェクトモデルDOM及びコードの流れ図を獲得する。流れ図はデータ流れ図DFG、制御流れ図CFG及び制御依存図CDGを含んでもよい。DOMおよびこれらの図の派生物は、例えば特許文献2に記載されている。プロセッサ22は以降のデータへのアクセスを容易にするため、通常データベースの形態でメモリ26内に分析結果を記憶する。下記の付属AのリストIは、単一機能のソースコードリストを示し、それは本発明の1実施形態によるDOM構築とその後の基準化を示すのに使用される。結果として得られるDOMが付属AのリストIIに示される。残りのリストは以下に記述するようにDOMの基準化における後続の段階を示す。モジュール24は基準化ステップ42でソースコードを基準化する。基準化はコード自体又はDOM又は両方に適用されてよい。そして単純化と完全性のためこれら全ての基準化の形式はここではコードの基準化と呼ばれる。基準化されたコードとはソースコード自体又はDOMを含むソースコード派生物の基準化された形式を言う。あるいは、流れ図の要素もシークエンスマイニング用に基準化されてもよい。シークエンスマイニングモジュール28は、シークエンスマイニングステップ44において、基準化されたコードをスキャンし推計学的シークエンスパターンを発見する。モジュール28は従来技術で公知のいかなる適合するシークエンスマイニングアルゴリズム又はアルゴリズムの組合せを使用してもよい。このようなアルゴリズムの例には、SPAM,LAPIN,CloSpanおよびBIDEのほか、上記背景技術の項で述べたGSP,SPADE及びPrefixSpanを含む。これらアルゴリズムの多くを実行するJava登録商標コードがSPMFウェブサイトwww.philippe-fournier-viger.com/spmf.からダウンロード可能である。一般的にステップ44においてモジュール28はステップ40とステップ42で生成された基準化されたDOMを処理する。さらにあるいは、モジュール28はソースコード及び/又は1つ以上の流れ図を処理してもよい。シークエンスマイニングモジュール28は共通のパターンで特徴付けられる命令シークエンスグループを識別する。システム20のユーザは一般的にモジュールが発見すべきグループの半径、即ち1つの所与のグループ内のメンバー間の最大距離適切な距離尺度を使用してを設定する。このようなそれぞれのグループの中で、モジュール28は、グループの共通パターンの基準から所定の閾値、これも同様にユーザにより設定されてもよいが、を超えて偏移している1つ以上のシークエンスを発見してもよい。下記の付属Bはここで使用可能なシークエンスマイニング技術のさらなる詳細と事例を示す。モジュール28は、報告ステップ46において、これらの偏移をデータディスプレイなどの出力デバイス30経由で報告する。レポートは、脆弱性を理解し補修するというシステム20のユーザに対する仕事を放棄して、単にソースコード内で潜在的脆弱性が疑われるコードセグメントの識別を含んでもよい。さらにあるいは、モジュール28は、偏移シークエンス内の特定の瑕疵を指摘するため、偏移パターンをさらに分析してもよい。実施の詳細と事例基準化ステップ42はコードに対する多くの異なるオペレーションを通常含む。例えば、コードの名前、値、割り当て及び条件は以下のように基準化できる:ローカル変数名はそれらのタイプに置き換えられる。定数は一般的にタイプ情報付きのCONSTとラベル付けされる。割り当ては関数呼び出しから除外される。メソッド呼び出しは、割り当て、条件、及び他の制御コマンドから除外される。例えば、図5のシークエンス72のRect=Item.GetBounds:Rect参照関係演算子は基準化される。例えば:付属AのリストIIIは上記の最初の2つの基準化オペレーション適用後のリストIIのDOMを示す。基準化処理の他の部分として、コード内の制御ステートメントが1つのフォーマットに作り直され、それにより各制御ブロックが一貫したフォーマットのタグシークエンスとして表現される。例えばつぎの形のifステートメント:は次のフォーマットのタグシークエンスとして作り直される:図5のシークエンス72のタグシークエンスIF..ELSE..END-IFで示されるように。もう1つの事例として、図3は本発明の1実施形態による、for制御ステートメント48をタグ52のシークエンス50に変換する方法を概略示すブロック図である。図の例においてステートメント48:は対応するタグシークエンス50として作り直される:図4は本発明の1実施形態による、コードセグメント60をタグシークエンス62に変換する方法を概略示すデーブルである。図の矢印は、コードのラインと基準化後にそれらを置き換えるタグとの間の対応関係を示す。詳細には、コードセグメント60はwhile<cond><body>という一般形のwhileループ64を有する。ループ64は以下のフォームのタグのサブシークエンス66に作り直される:シークエンス62はまたifステートメントの基準化及び前述の名前と定数のタイプへの変換を示している。例えば、セグメント60の変数表現intd=0はシークエンス62のタグint=ZEROに変換される。図に示される事例は実際のソースコードの基準化を示すが、実務的にはこれらの基準化技術は通常ソースコードから生成されるDOMに適用される。制御ブロックをタグシークエンスに変換することは、当初のDOMの階層構造を平坦にする効果が有る。リストIVはリストII,IIIのDOMの制御ステートメントにこの種の平坦化を適用する効果を示す。図5は本発明の1実施形態による、コードセグメント70を基準化されたクラスとメンバー名を有するタグシークエンス72に変換する方法を概略示すデーブルである。この種の基準化は特にオブジェクト指向プログラミング言語で書かれたコードの基準化に適用可能である。このリストはたまたまifステートメントの平坦化を示している。クラス名に対する基準化ルールは以下を含むこの内幾つかは図5に示される:グローバルに定義されたパブリッククラスは名前で使用される。例えば、シークエンス72のItem.Getbound...パブリック及び保護内部クラスは名前で使用される。プライベート内部クラスの名前は通常タグCLASSとMEMBERにより置換される。メソッド-ローカルクラスの名前はタグCLASSとMEMBERにより置換される。プライベート内部クラスのメンバーはそれらの可視性に関わらず対応する外部クラスのメンバーとして取り扱われる。メンバー名に対する基準化ルールは以下を含むこの内幾つかは図5に示される:パブリックメンバー名はそれぞれのタイプ情報に付随する名前に置換される。例えば、示されるようにタグRect=Item.GetBounds:Rectにより保護メンバー名はそれぞれのタイプ情報に付随する名前に置換されてもよい。プライベートメンバーの名前はそれぞれのタイプ情報が付随したタグCLASSとMEMBERにより置換される。所与の名前が多相性の場合は、全ての後継に亘って一般化するため基本タイプが使用されてもよい。一度上記の基準化ステップがソフトウェアソースコード由来のDOMに実行されると、DOMは当初の階層的機能的構造に替わってタグシークエンスに実質的に平坦化される。付属AのリストVはこの種の完全に平坦化されたDOMを示す。本願の発明者は基準化されたDOMに対するシークエンスマイニングが以下の事例を含むしかしそれに限定されないが種々のコード脆弱性を検知するのに有効であることを発見した:オペレーションの喪失例えばキャッチブロックのロギングキャッチブロック通常Java登録商標における例外処理に使用されるは通常一定のロギングオペレーションを含む。開発者は時々ロギングオペレーションの使用を忘れる。シークエンスマイニングはタグの正常なシークエンスTry->SensitiveOperation->Catch->Logを識別し、従ってこのルールを破るコード内のシークエンスを発見する。条件テストを必要とする関数例えば、ユーザ認証多くの場合、要注意オペレーションはユーザが認証された又は特定の許可を与えられた後にのみ呼び出される。シークエンスマイニングは正常なシークエンスIfUsersAuthenticated->DoSensitiveOperationを識別し、そしてそれによってユーザ許可の事前チェック無く要注意オペレーションが呼び出されたシークエンスを発見する。共通呼び出しシークエンス時々破られるウェブサイトのクロスサイトスクリプティング脆弱性は、悪意のクライアント側スクリプトを他のユーザが閲覧するウェブページに注入することを許す。この問題を軽減するためヘルパー関数.NET環境におけるHTMLEncodeのようなを呼び出し、1人のユーザにより入力されたストリングをそのユーザに応答する前に修正することが一般的である。シークエンスマイニングはヘルパー関数を正しい順番で呼び出す正確なパターンを学習し、そしてこの順番からの偏移を識別する。バックドアプログラマーは多くの場合ユーザ許可がチェックされる場所にコード内バックドアを設置する。例えばステートメント:IfUsersAdministratororUsername=‘MatySIMAN’はプログラマーMatySiman用のバックドアを作るのに使用可能である。シークエンスマイニングは、正確な許可シークエンスを学習し、そしてコード内にバックドアが残された場合に発生する偏移を識別するために使用可能である。ビジネスロジックの喪失ビジネスプロセスは多くの場合、パラメータに対しアクションを起こす前に、そのパラメータが適切な領域にあるかの認証を必要とする。例えば、顧客にある商品をある価格で購入したことに対し請求を起こす前に、商品の価格と数量が正の値であることが認証されなくてはならないそうでなければ顧客は請求されるのではなくクレジットを与えられてしまうからである。シークエンスマイニングは、パラメータ認証関数を含む正常な販売オペレーションのパターンを学習し、そしてその後適切な認証が呼び出されなかったケースを識別する。上記の実施形態は事例として引用され、そして本発明は上記で特に図示され記載されたものに限定されない。むしろ本発明の範囲は、上記の記載を読んだ当業者が想起するであろう、既存技術に開示されない、ここに記載された種々の特徴の組合せ及びサブ組合せの両方及び変化形や変更を含む。付属A-サンプルコードリストリストI-生のソースコードリストII-DOMに変換されたコードリストIII-変数名がタイプに変換されるリストIV-制御ステートメントの平坦化リストV-DOMツリーが配列に平坦化される付属B-シークエンスマイニングの詳細と実施例ソフトウェアコードから得られたタグシークエンスのシークエンスマイニングの準備として、システム20のオペレータは3つの定数パラメータ値を定義する:A.サポート値-共通シークエンスとして見做されるための最小出現回数。B.最小長さ―受容可能な最短シークエンスこれがないと、多くの単一アイテムのシークエンスが共通と見做される。C.コンフィデンス-X->Yのコンフィデンスとは:我々がサブシークエンスXに出会う場合に、Yに出会う確立である。例えば、我々がストリングabcdefgに出会うと、それにhijが続く可能性が高い-従ってコンフィデンスが高い事例に対し50。以下の事例では我々はサポートレベル60、最小長さ3そしてコンフィデンス50と設定する。コードの本体が以下のテーブルに示されるシークエンスを含むとする:コードシークエンスf1;f2;f3;はコード内に80回現れ;シークエンスf1;f4;f2;f3;は20回現れ;以下同様:これらのシークエンスを処理するため、シークエンスマイニングモジュール28は最初にそれぞれのサブシークエンスが出現する回数を発見する。モジュールは単一アイテムシークエンスから始める:アプリオリ法則によれば、ある1つのシークエンスはそのサブシークエンスより多い回数出現することはできない。例えば、F5を含むあるシークエンスは、F5自体より多い回数出現できない。従って、モジュール28は我々の定義したサポートレベル60を満たない全てのサブシークエンスを除外することができ、以下が残る:ここでモジュール28は、上記のアイテムに基づいて可能な全ての2アイテムシークエンスを組み立てる。ここでは:A.順番は重要である。B.2つのアイテムは隣接する必要はない。回数ゼロを除外すると以下が得られる:我々は最小長さを3と定義したが上記の表はまだ長さ2なので、モジュール28はシークエンス構築ステップを再び繰り返して以下の表を得る:従って、サポートレベルと最小長さの基準を満たす唯一の共通シークエンスはf1,f2,f3である。最初の表に戻って、モジュール28は事前設定のコンフィデンスより低い共通シークエンスf1,f2,f3のインスタンスを取り除く:シークエンスf1-f2-f3の100回の出現の内、20が最初の2つのアイテムの間にf4を含み、一方80は含まない。従ってシークエンスf1-f4-f2-f3は共通シークエンスを含むが、我々が設定したコンフィデンスレベルを満たさない。結果としてモジュール28は、この後者のシークエンスをソフトウェアコード内の脆弱性を示唆する可能性がある偏移として識別する。"