(57)【要約】  本明細書に開示される実施形態は、コンピュータプログラムに組み込まれたデータが現在のものであることを検証するための方法、システム、及びコンピュータプログラムに関する。方法、システム、及びコンピュータプログラムは、データに関連付けられた識別子ステータスコードと、データが取得された位置にある現在のソース識別子ステータスコードとを比較する。方法、システム、及びコンピュータプログラムは、選択されたパラメータに従ってデータの有効性を判定する少なくとも１つの検証関数を含む。ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると判定した場合、データ及び１つ以上の関数を組み込む実行可能コンピュータプログラムが出力として生成される。
2022501735.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムに組み込まれたデータを検証する方法であって、
少なくとも１つの遠隔位置から取得されたデータを前記コンピュータプログラムのソースコードに組み込む１つ以上の関数を構築するステップと、
前記少なくとも１つの遠隔位置からのソース識別子ステータスコードを前記１つ以上の関数に組み込むステップであって、前記ソース識別子ステータスコードが、前記少なくとも１つの遠隔位置から前記データが取得された日付及び位置に対応する、ステップと、
前記ソース識別子ステータスコードが前記少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために前記少なくとも１つの遠隔位置に問い合わせるチェックサムクエリを前記ソースコードに記述するステップと、
前記ソースコードに少なくとも１つの検証関数を提供するステップであって、前記少なくとも１つの検証関数が、前記データが有効であることを保証するために前記データに対して１つ以上のテストを実行するように構成される、ステップと、
前記ソースコードにビルドブレーク関数を追加するステップであって、前記ビルドブレーク関数が、前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードが一致し、前記少なくとも１つの検証関数が前記データは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ステップと、
ビルドツールを実行して、前記ソースコードを前記少なくとも１つの遠隔位置から取得された前記データを使用して前記１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップと、
を含むことを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、
少なくとも１つの遠隔位置から取得されたデータを前記コンピュータプログラムの前記ソースコードに組み込む１つ以上の関数を構築するステップが、前記データを前記コンピュータプログラム内にアーカイブすることを含む、
ことを特徴とする方法。
【請求項３】
請求項１に記載の方法であって、
前記ソースコードが電子データ用のオープン標準フォーマットである、
ことを特徴とする方法。
【請求項４】
請求項３に記載の方法であって、
オープン標準フォーマットがｘｍｌフォーマットを含む、
ことを特徴とする方法。
【請求項５】
請求項１に記載の方法であって、
前記実行可能コンピュータプログラムが、前記データが１つ以上の検証済みライブラリとして組み込まれた検証済みのアーカイブフォーマットで出力される、
ことを特徴とする方法。
【請求項６】
請求項５に記載の方法であって、
前記検証済みのアーカイブフォーマットが署名付きＪＡＲファイルを含む、
ことを特徴とする方法。
【請求項７】
請求項１に記載の方法であって、
前記チェックサムクエリが、ソース識別子ステータスコードと、前記ソース識別子ステータスコードに対応する前記少なくとも１つの遠隔位置のユニフォームリソースロケータにおける前記現在のソース識別子ステータスコードとの間の対応関係を検査する、
ことを特徴とする方法。
【請求項８】
請求項７に記載の方法であって、
前記ソース識別子ステータスコードがチェックサム又はハッシュを含み、
前記現在のソース識別子ステータスコードが現在のチェックサム又は現在のハッシュを含む、
ことを特徴とする方法。
【請求項９】
請求項８に記載の方法であって、
前記１つ以上の関数が、前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードとの間の不一致に関するレポートを提供するとともにそれに関連するデータを識別するレポート関数を含む、
ことを特徴とする方法。
【請求項１０】
請求項１に記載の方法であって、
前記ソースコードに少なくとも１つの検証関数を提供するステップであって、前記少なくとも１つの検証関数が、前記データが有効であることを保証するために前記データに対して１つ以上のテストを実行するように構成される、ステップが、前記データが前記ソースコードによって指定されたフォーマットであることを確認するために前記データをテストする関数を提供することを含む、
ことを特徴とする方法。
【請求項１１】
請求項１に記載の方法であって、
前記ソースコードに少なくとも１つの検証関数を提供するステップであって、前記少なくとも１つの検証関数が、前記データが有効であることを保証するために前記データに対して１つ以上のテストを実行するように構成される、ステップが、前記データに前記少なくとも１つの検証テストの１つ以上の基準を満たす値が含まれていることを確認するために前記データをテストする関数を提供することを含む、
ことを特徴とする方法。
【請求項１２】
請求項１に記載の方法であって、
前記少なくとも１つの遠隔位置からのソース識別子ステータスコードを前記１つ以上の関数に組み込むステップが、前記少なくとも１つの遠隔位置に対応するユニフォームリソース識別子からのチェックサム又はハッシュを前記１つ以上の関数に組み込むことを含む、
ことを特徴とする方法。
【請求項１３】
請求項１に記載の方法であって、
前記実行可能コンピュータプログラム上で変換関数を実行して、前記実行可能コンピュータプログラムを第１のフォーマットから第２のフォーマットに変換するステップをさらに含む、
ことを特徴とする方法。
【請求項１４】
請求項１３に記載の方法であって、
前記第１のフォーマットがカンマ区切り値フォーマットであり、
前記第２のフォーマットがＡｐａｃｈｅ  Ａｖｒｏフォーマットである、
ことを特徴とする方法。
【請求項１５】
請求項１３に記載の方法であって、
前記第１のフォーマットがカンマ区切り値フォーマットであり、
前記第２のフォーマットがＪａｖａＳｃｒｉｐｔオブジェクト表記法フォーマットである、
ことを特徴とする方法。
【請求項１６】
請求項１３に記載の方法であって、
前記第１のフォーマットが拡張マークアップ言語フォーマットであり、
前記第２のフォーマットがハイパーテキストマークアップ言語フォーマットである、
ことを特徴とする方法。
【請求項１７】
請求項１に記載の方法であって、
ビルドツールを実行して前記ソースコードを実行可能コンピュータプログラムにコンパイルするステップが、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、又はＷａｆを実行することを含む、
ことを特徴とする方法。
【請求項１８】
コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法であって、
少なくとも１つの遠隔位置からのデータをソースコードに直接インポートするステップと、
前記少なくとも１つの遠隔位置からのソース識別子ステータスコードを前記ソースコードに組み込むステップであって、前記ソース識別子ステータスコードが、前記少なくとも１つの遠隔位置から前記データが取得された日付及び位置に対応する、ステップと、
前記ソース識別子ステータスコードが前記少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために前記少なくとも１つの遠隔位置に問い合わせるチェックサムクエリを前記ソースコードに記述するステップと、
前記ソースコードに少なくとも１つの検証関数を提供するステップであって、前記少なくとも１つの検証関数が、前記データが有効であることを保証するために前記データに対して１つ以上のテストを実行するように構成される、ステップと、
前記ソースコードにビルドブレーク関数を追加するステップであって、前記ビルドブレーク関数が、前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードが一致し、前記少なくとも１つの検証関数が前記データは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ステップと、
ビルドツールを実行して、前記ソースコードを前記少なくとも１つの遠隔位置から取得された前記データを使用する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップと、
第２のビルドツールにおいて前記実行可能コンピュータプログラムに対して変換関数を実行して、前記実行可能コンピュータプログラムを第１のフォーマットから第２のフォーマットに変換するステップであって、前記第２のビルドツールが、変換された前記データが有効であることを保証するために、変換された前記データに対して前記少なくとも１つの検証関数及びビルドブレーク関数を実行する、ステップと、
を含むことを特徴とする方法。
【請求項１９】
請求項１８に記載の方法であって、
少なくとも１つの遠隔位置からのデータをソースコードに直接インポートするステップが、前記ソースコードに前記データのアーカイブ又はライブラリを手動で構築する、
ことを含むことを特徴とする方法。
【請求項２０】
請求項１８に記載の方法であって、
少なくとも１つの遠隔位置からのデータをソースコードに直接インポートするステップが、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、又はＷａｆを含む依存関係チェックを強制するビルドツールの標準的な依存関係インポートメカニズムを使用することを含む、
ことを特徴とする方法。
【請求項２１】
請求項１８に記載の方法であって、
前記少なくとも１つの遠隔位置からのソース識別子ステータスコードを前記ソースコードに組み込むステップが、前記ソース識別子ステータスコードを前記ソースコード内の前記データに関連付けることを含む、
ことを特徴とする方法。
【請求項２２】
請求項２１に記載の方法であって、
前記少なくとも１つの遠隔位置からのソース識別子ステータスコードを前記ソースコードに組み込むステップが、チェックサム又はハッシュを前記ソースコードに追加する、
ことを特徴とする方法。
【請求項２３】
請求項１８に記載の方法であって、
前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードとの間の不一致に関するレポートを提供するとともにそれに関連するデータを識別するレポート関数を、前記ソースコードに追加するステップをさらに含む、
ことを特徴とする方法。
【請求項２４】
請求項１８に記載の方法であって、
ビルドツールを実行して、前記ソースコードを実行可能コンピュータプログラムにコンパイルするためのコンピュータプログラムビルドを実行するステップが、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、又はＷａｆを実行することを含む、
ことを特徴とする方法。
【請求項２５】
請求項１８に記載の方法であって、
前記ソースコードが電子データ転送用のオープン標準フォーマットである、
ことを特徴とする方法。
【請求項２６】
請求項２５に記載の方法であって、
前記オープン標準フォーマットがｘｍｌフォーマットを含む、
ことを特徴とする方法。
【請求項２７】
請求項１８に記載の方法であって、
前記実行可能コンピュータプログラムが、前記データが１つ以上の検証済みライブラリとして組み込まれたＪＡＲファイルで出力される、
ことを特徴とする方法。
【請求項２８】
少なくとも１つの遠隔位置から取得されたデータを組み込む１つ以上の関数と、
前記１つ以上の関数内の前記少なくとも１つの遠隔位置からのソース識別子ステータスコードであって、前記少なくとも１つの遠隔位置から前記データが取得された日付及び位置に対応するソース識別子ステータスコードと、
前記ソース識別子ステータスコードが前記少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために前記少なくとも１つの遠隔位置に問い合わせる、ソースコード内のチェックサムクエリと、
前記データが有効であることを保証するために前記データに対して１つ以上のテストを実行するように構成された少なくとも１つの検証関数と、
前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードが一致し、前記少なくとも１つの検証関数が前記データは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定めるビルドブレーク関数と、
を含むソースコードを有する、
ことを特徴とするコンピュータプログラム製品。
【請求項２９】
請求項２８に記載のコンピュータプログラム製品であって、
前記ソースコードが電子データ用のオープン標準フォーマットである、
ことを特徴とするコンピュータプログラム製品。
【請求項３０】
請求項２９に記載のコンピュータプログラム製品であって、
前記オープン標準フォーマットがｘｍｌフォーマットを含む、
ことを特徴とするコンピュータプログラム製品。
【請求項３１】
請求項２８に記載のコンピュータプログラム製品であって、
前記チェックサムクエリが、前記ソース識別子ステータスコードと、前記ソース識別子ステータスコードに対応する前記少なくとも１つの遠隔位置のユニフォームリソースロケータにおける前記現在のソース識別子ステータスコードとの間の対応関係を検査する、
ことを特徴とするコンピュータプログラム製品。
【請求項３２】
請求項２８に記載のコンピュータプログラム製品であって、
前記ソース識別子ステータスコードがチェックサム又はハッシュを含み、
前記現在のソース識別子ステータスコードが現在のチェックサム又は現在のハッシュを含む、
ことを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１８年９月２８日に出願された米国特許出願第１６／１４５，４６８号に対する優先権を主張するものであり、上記特許出願の開示全体を本願に引用して援用する。
【背景技術】
【０００２】
データはコンピュータプログラムによって参照されることがある。データは、任意の数のフォーマットで使用されるか、又は組み込まれることがある。データは、典型的には、ファイル拡張子の参照又はプログラムへのデータライブラリの組み込みによって実行可能プログラムに組み込まれる。データは、典型的には、データが最新かつ有効であることを視覚的又はアルゴリズム的に検証できる人間によってデータが現在のものであり有効であるかどうかがチェックされる。
【０００３】
回答又は判定を得るために、１つ以上の関数によってデータに問い合わせることができる。データが有効である場合、回答又は判定を信頼することができる。実行可能プログラムで使用されるデータが有効であるかどうかを判定することは、時間及び費用の負担が大きくなる可能性がある。
【０００４】
サードパーティのウェブサイトから取得したデータは、予告なしに変更される可能性がある。データが変更されると、それに依存するコンピュータプログラムが無効になる可能性がある。実行可能プログラムで使用されるデータが現在のものであるかどうかを判定することは、時間及び費用の負担が大きくなる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００５】
本明細書に開示される実施形態は、コンピュータコードに組み込まれたデータが現在のものであり有効であることを自動的に保証するための方法、システム、及びコンピュータプログラム製品に関する。一実施形態では、コンピュータプログラムに組み込まれたデータを検証する方法を開示する。方法は、少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築するステップを含む。方法は、少なくとも１つの遠隔位置からのソース識別子ステータスコードを１つ以上の関数に組み込むステップを含み、ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。方法は、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述するステップを含む。方法は、ソースコードに少なくとも１つの検証関数を提供するステップを含み、少なくとも１つの検証関数は、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される。方法は、ソースコードにビルドブレーク関数を追加するステップを含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法は、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップを含む。
【０００６】
一実施形態では、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法を開示する。方法は、少なくとも１つの遠隔位置からのデータをソースコードに直接インポートするステップを含む。方法は、少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップを含み、ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。方法は、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述するステップを含む。方法は、ソースコードに少なくとも１つの検証関数を提供するステップを含み、少なくとも１つの検証関数は、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される。方法は、ソースコードにビルドブレーク関数を追加するステップを含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法は、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップを含む。方法は、第２のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行して、実行可能コンピュータプログラムを第１のフォーマットから第２のフォーマットに変換するステップを含み、第２のビルドツールは、変換されたデータが有効であることを保証するために、変換されたデータに対して少なくとも１つの検証関数及びビルドブレーク関数を実行する。
【０００７】
一実施形態では、コンピュータプログラム製品を開示する。コンピュータプログラム製品は、ソースコードを含む。ソースコードは、少なくとも１つの遠隔位置から取得されたデータを組み込む１つ以上の関数を含む。ソースコードは、１つ以上の関数内に少なくとも１つの遠隔位置からのソース識別子ステータスコードを含み、ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。ソースコードは、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコード内に含む。ソースコードは、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成された少なくとも１つの検証関数を含む。ソースコードは、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ビルドブレーク関数を含む。
【０００８】
本開示の実施形態のいずれかによる特徴は、限定されることなく互いに組み合わせて使用されてもよい。また、以下の詳細な説明及び添付図面を参照することにより、本開示の他の特徴及び利点が当業者には明らかになろう。
【０００９】
図面は、本発明のいくつかの実施形態を図示しており、図面中の異なる図又は実施形態において、同一の参照番号は同一又は類似の要素又は特徴を指す。
【図面の簡単な説明】
【００１０】
【図１Ａ】一実施形態による、コンピュータプログラムに組み込まれたデータを検証する方法の流れ図である。
【図１Ｂ】図１Ａの方法の概略図である。
【図２】一実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法の流れ図である。
【図３】一実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法の流れ図である。
【図４】一実施形態による、ソースコード上でビルドツールを実行するプロセスのブロック図である。
【図５】一実施形態による、検証済みのデータが含まれた実行可能コンピュータプログラムを作成及び実行するためのコンピュータシステムの概略図である。
【図６】一実施形態による、本明細書に開示される方法のいずれかを実行するためのシステムの概略図である。
【図７】一実施形態による、例示的なコンピュータプログラム製品のブロック図である。
【発明を実施するための形態】
【００１１】
本明細書に開示される実施形態は、コンピュータプログラムの関数に組み込まれたデータの最新性及び有効性を自動的に検証するための方法、コンピュータプログラム製品、及びシステムに関する。コンピュータプログラムは、ソースコード上でビルドツールを実行する際に、実行可能コンピュータプログラム又はその一部を提供するように構成されたソースコードを含む。
【００１２】
コンピュータプログラムの関数を実行するために使用されるデータは、アーカイブ又はライブラリとしてコンピュータプログラムのソースコードに含まれてもよい。データは、データを使用して関数を実行することが可能な個別のアーティファクトとして関数と共に記憶されてもよい。データは、インターネット上で利用可能なデータベースなどの遠隔位置から取得されてもよい。したがって、データは、データが取得された日付、位置、コンテンツ、又は遠隔位置のバージョン（例えば、ウェブページのバージョン）のうちの１つ以上から算出されたハッシュなどのソース識別子ステータスコードに関連付けられてもよい。ソース識別子ステータスコードは、対応するデータが配置されている関数、又はプログラム内のデータのアーカイブなどにおいてコンピュータプログラムに組み込まれる。
【００１３】
コンピュータプログラムは、コンピュータプログラムが構築されてからソース識別子ステータスコード（例えば、ハッシュ）が変更されていないことを検証するためのチェックサムクエリを含む。チェックサムクエリは、ソース識別子ステータスコード（例えば、チェックサム又はハッシュなど）を、データが取得された位置にある現在のソース識別子ステータスコードと比較する。チェックサムクエリは、ビルドツールによって実施されるビルドプロセスにおいて実行される。
【００１４】
コンピュータプログラムは、データが、選択されたフォーマットであること、及び／又は１つ以上のテスト関数を満たしている（例えば、選択された範囲内の結果をもたらす）値を有することを検証するための少なくとも１つの検証関数を含む。少なくとも１つの検証関数は、データの１つ以上の値又はフォーマットを、１つ以上の選択された値若しくは期待される値の範囲又はフォーマットと比較する。データが、選択されたフォーマット及び値範囲である場合、データは有効であると確認される。少なくとも１つの検証関数は、ビルドツールによって実施されるビルドプロセスにおいて実行される。
【００１５】
ソースは、少なくとも１つのビルドブレーク関数を含み、少なくとも１つのビルドブレーク関数は、チェックサムクエリが、ソース識別子ステータスコードが現在のソース識別子ステータスコードと異なることを示す場合、及び／又は、少なくとも１つの検証関数がデータは無効であると確認した場合、ビルドを中断させる。したがって、プログラム内のソース識別子ステータスコードがデータのソースにおける現在のソース識別子ステータスコードと一致し、少なくとも１つの検証関数に従ってデータが有効である場合にのみ、コンピュータプログラムを使用して実行可能コンピュータプログラム（例えば、アプリケーション）が構築される。ソース識別子ステータスコード、チェックサムクエリ、及び少なくとも１つの検証関数を含めることによって、実行可能コンピュータプログラムに組み込まれたデータは、ビルド時に最新かつ有効であることが自動的に検証される。次いで、ビルドは、実行可能コンピュータプログラム又はその一部として、ＪＡＲファイルなどの検証済みのアーカイブフォーマットでファイルリポジトリに公開される。実行可能コンピュータプログラムは、データに対して１つ以上の関数を実行するための実行可能コード（例えば、ソフトウェア命令）を含む。したがって、実行可能コンピュータプログラム又はアーカイブは、１つ以上の関数及びデータを含む実行可能コード、ソース識別子ステータスコード、チェックサムクエリ、少なくとも１つの検証関数、少なくとも１つの検証関数をチェックする基準、及びソースコードに関連する任意の他の情報を、それぞれアーカイブ内の個別のアーティファクトとして含んでもよい。したがって、各実行可能コンピュータプログラムは、それぞれの実行可能コンピュータプログラム内のデータに対して１つ以上の関数を実行するより大きい実行可能コンピュータプログラムを構築するための、検証済みのアーカイブ（検証済みのアーカイブファイル）と考えることができる。
【００１６】
リポジトリは、複数の実行可能コンピュータプログラムをそれぞれの検証済みのアーカイブファイルに記憶してもよく、各アーカイブファイルは、それぞれのデータ、並びにデータ、ソース識別子ステータスコード、チェックサムクエリ、少なくとも１つの検証関数、及びビルドブレーク関数を使用する関連する１つ以上の関数を含む。また、検証済みのアーカイブファイルは、上記の関数及びデータのメタデータ、並びに任意の以前のバージョンの関数及びデータを記憶してもよい。
【００１７】
検証済みのアーカイブファイル又はアーカイブファイル全体からの１つ以上のアーティファクト（例えば、データ、実行可能コンピュータプログラム、又はそれらの個々の部分）は、変換関数を使用して異なるフォーマットに変換されてもよい。変換関数は、データ、ソース識別子ステータスコード、データのソース位置情報、１つ以上の関数、チェックサムクエリ、又は少なくとも１つの検証関数のうちの１つ以上を変換して変換後の変換されたフォーマットに保持するための命令を含む。変換関数は、アーカイブ又はアーティファクトで以前に実行された変換関数を含む、元の実行可能コンピュータプログラム（例えば、アーカイブ）全体又はその中のアーティファクトの以前の変換されていないバージョン又は以前に変換されたバージョンのコピー又はメタデータを保持するための命令を含む。このようにして、ユーザは、元の基礎となる実行可能コンピュータプログラム（例えば、アーカイブ／アーティファクト）に対して実行された正確な変換を追跡することができ、それによって、変換後の実行可能コンピュータプログラムを、変更不能なものにし、その元のフォーマット及びコンテンツまで追跡可能にする。
【００１８】
特定の実行可能コンピュータプログラム又はそのセットでの変換の後、又はそれらの変換と同時に、別のビルドを実行して、変換後のフォーマットで別の変換後の実行可能コンピュータプログラムを形成してもよい。この第２のビルド中、データの最新性及び有効性を保証するために、変換後の実行可能コンピュータプログラム内の変換後のチェックサムクエリ及び／又は変換後の検証関数を使用して、チェックサムクエリ、検証関数、及びビルドブレーク関数が実行されてもよい。変換後のデータ、ソース識別子ステータスコード、データのソース位置情報、少なくとも１つの関数、チェックサムクエリ、及び少なくとも１つの検証関数は、変換後のアーティファクト（例えば、変換後のフォーマットの変換後の実行可能コンピュータプログラム）として、検証済みのアーカイブファイル内に公開される。いくつかの例では、変換後のデータ又は変換後の１つ以上の関数の出力の有効性をテストするために、実行可能コンピュータプログラムに新しい検証関数を追加して第２のビルドで実行してもよい。追加の変換を実行してもよく、すべての変換を通じて、ビルド時にデータの有効性及び／又は最新性を確認することができる。
【００１９】
変換の数がいくつであっても、アーカイブ内に変換関数情報（例えば、変換関数又は変換関数の位置）、及び変換後の実行可能コンピュータプログラムの以前のバージョンに対応するメタデータ（例えば、データ、ソース識別子ステータスコード、データのソース位置情報、１つ以上の関数、チェックサムクエリ、及び少なくとも１つの検証関数を含む、アーティファクト）が含まれていることによって、データの収集からデータの使用まで、データの一連の整合性を維持することができる。これらのアーカイブ及び／又はアーティファクトを様々な組合せでモジュール式に交換可能に使用して、データに対して１つ以上の関数を実行して出力を提供するより大きい実行可能コンピュータプログラムを形成することができる。このような出力は、実行可能コンピュータプログラムに組み込まれているテストに基づいて、最新かつ有効であると信頼することができる。
【００２０】
本明細書に開示される実行可能コンピュータプログラム及び技法を使用することによって、実行可能コンピュータプログラムの実行可能コード（例えば、ビルドコード）における関数のデータ及び出力は、関数を含む実行可能コンピュータプログラムの存在によって、使用の前に「最新」かつ有効であることが自動的に確認される。このような確認は、実行可能コンピュータプログラム又はその一部に対して１つ以上の変換が実行されたときなど、実行可能コンピュータプログラムの元の形式に関係なく提供される。本明細書の実行可能コンピュータプログラム及び技法によって、ユーザは、データをソフトウェアの依存関係であるかのように扱うことができる。他のソフトウェアの依存関係と同様に、プログラムがコンパイルされると、すべての依存関係が解決され、実行可能プログラムに含まれる。検証可能なアーカイブを依存関係として含めることによって、依存関係のチェックを備えたビルドシステムは、データを、他のすべてのソフトウェアの依存関係と共に、検証可能なアーカイブにパッケージ化し、それらのデータを、外部データベースを必要とすることなく実行時に直接アクセス可能なものにする。本明細書に開示される実行可能コンピュータプログラム、方法、及びシステムによって、データを別個のデータベースに記憶し、別個のデータベースに問い合わせるようプログラミングする必要がなくなる。したがって、本明細書に開示される実行可能コンピュータプログラム、方法、及びシステムは、データをコードに直接組み込むことによって、（別個のデータベースを必要とする従来の形のプログラムと比較して）計算速度を向上させる。さらに、本明細書に開示される実行可能コンピュータプログラム、方法、及びシステムは、コンピュータプログラムの関数を実行するために使用されるデータの即時の検証を自動的に提供する。
【００２１】
図１Ａは、一実施形態による、コンピュータプログラムに組み込まれたデータを検証する方法１００の流れ図である。方法１００は、少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築する動作１１０を含む。方法１００は、少なくとも１つの遠隔位置からのソース識別子ステータスコードを１つ以上の関数に組み込む動作１２０を含み、ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。方法１００は、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作１３０を含む。方法１００は、ソースコードに少なくとも１つの検証関数を提供する動作１４０を含み、少なくとも１つの検証関数は、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される。方法１００は、ソースコードにビルドブレーク関数を追加する動作１５０を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法１００は、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作１６０を含む。
【００２２】
方法１００は、動作１１０〜１６０よりも多くの又は少ない動作を含んでもよい。例えば、いくつかの実施形態では、方法１００から、動作１２０及び動作１３０、又は動作１４０が省略され、それに応じて後続の動作が調整されてもよい。さらに、方法１００の動作は、提示された順序とは異なる順序で実施されてもよい。動作１１０〜１６０の少なくともいくつかは、１つ以上のデスクトップコンピュータ、１つ以上のラップトップコンピュータ、１つ以上のサーバ、１つ以上のタブレットなどの、コンピュータ又はコンピューティングデバイスと共に実行されても、それらに対して実行されてもよい。
【００２３】
方法１００は、少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築する動作１１０を含む。１つ以上の関数は、回答（例えば、出力）を求めてデータに問い合わせるように定式化された関数を含んでもよい。１つ以上の関数は、値ベースのクエリ（例えば、量を決定するためのクエリ）、識別ベースのクエリ（例えば、特定のデータ、入力、又は出力を識別するためのクエリ）、論理ベースのクエリ（例えば、ｉｆ−ｔｈｅｎ関数、合計、又はデータに対して実行されて出力を提供する他の演算）、バイナリクエリ（例えば、ｙｅｓ−ｎｏ関数）、又はデータを使用して回答される任意の他のクエリを含んでもよい。したがって、クエリ及びデータは、単一の関数に含まれることが可能であり、単一の関数は、より大きいコンピュータプログラム又はアプリケーションのモジュール式構築ブロックとして使用されてもよい。
【００２４】
いくつかの例では、１つ以上の関数を構築するステップは、ソースコードなどのコンピュータコードで１つ以上の関数を作成することを含む。ソースコードは、電子データ用のオープン標準フォーマットであってもよい。オープン標準フォーマットは、データ交換フォーマットとすることができる。好適なオープン標準フォーマットの例には、カンマ区切り値（「ＣＳＶ：Ｃｏｍｍａ−Ｓｅｐａｒａｔｅｄ  Ｖａｌｕｅｓ」）、拡張マークアップ言語（「ＸＭＬ：Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ」）、ハイパーテキストマークアップ言語（「ＨＴＭＬ：Ｈｙｐｅｒｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ」）、ＪａｖａＳｃｒｉｐｔ（登録商標）オブジェクト表記法（「ＪＳＯＮ：ＪａｖａＳｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ」）、コンピュータ・グラフィックス・メタファイル（「ＣＧＭ：Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ  Ｍｅｔａｆｉｌｅ」）、ＯｐｅｎＤｏｃｕｍｅｎｔ、ポータブルドキュメントフォーマット（「ＰＤＦ：Ｐｏｒｔａｂｌｅ  Ｄｏｃｕｍｅｎｔ  Ｆｏｒｍａｔ」）、カスケーディングスタイルシート（「ＣＳＳ：Ｃａｓｃａｄｉｎｇ  Ｓｔｙｌｅ  Ｓｈｅｅｔｓ」）、ポータブルネットワークグラフィックス（「ＰＮＧ：Ｐｏｒｔａｂｌｅ  Ｎｅｔｗｏｒｋ  Ｇｒａｐｈｉｃｓ」）、スケーラブルベクトルグラフィックス（「ＳＶＧ：Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ」）、又は任意の他のオープン標準フォーマットが含まれる。
【００２５】
いくつかの例では、１つ以上の関数を構築するステップは、コンピュータにおいて１つ以上の関数を作成することを含む。いくつかの例では、コンピュータコードにおいて１つ以上の関数を作成することは、ソースコード内の関数の命令を記述すること、プログラミングすること、インポートすること、又はコーディングすることを含む。いくつかの例では、少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築するステップは、データをソースコード内にアーカイブすることを含む。データは、アーカイブ、ライブラリ、テーブルなどとしてソースコードに記述されるか、又はインポートされてもよい。したがって、１つ以上の関数を実行するために使用されるデータは、ソースコードに直接含まれる。
【００２６】
いくつかの例では、少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築するステップは、データをソースコードに構築することのみを含んでもよい。例えば、データは、後で使用するために、アーカイブ、ライブラリ、テーブルなどとして、オブジェクトモデル（例えば、ＰＯＭ）などのソースコードに直接含まれてもよい（例えば、ビルド、コーディング、インポート、変換されてもよい）。
【００２７】
いくつかの例では、データには、標準（例えば、医療標準、法律など）、定量的な量（例えば、体重、口座残高、年齢など）、代表コード（例えば、品目コード、（ナショナルコレクトコーディングイニシアティブ「ＮＣＣＩ：Ｎａｔｉｏｎａｌ  Ｃｏｒｒｅｃｔ  Ｃｏｄｉｎｇ  Ｉｎｉｔｉａｔｉｖｅ」）コードなどの保険コードなど）、実験データ、テストデータなどの電子データが含まれ得る。データは、遠隔位置でアクセスされ、遠隔位置から取得されてもよい。
【００２８】
いくつかの例では、少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築する動作１１０は、少なくとも１つの遠隔位置のデータにアクセスすること、又はそのデータを取得することを含む。少なくとも１つの遠隔位置は、コンピュータプログラム（例えば、ソースコード）が作成されるコンピュータの電子アドレスとは異なる電子アドレスを含んでもよい。例えば、データは、ウェブサイトを含む遠隔位置から取得されてもよい。ウェブサイトは、法律、ＮＣＣＩコード、口座残高、環境規格、安全規格、費用／価格、個人情報、消費者データ、教育データ、実験データ、テストデータなどのデータの公式ソースとしてデータを提示することができる。したがって、ウェブサイトは、ｃｍｓ．ｇｏｖのナショナルコレクトコーディングイニシアティブポリシーマニュアルアーカイブ、銀行のウェブサイト、ｄａｔａ．ｇｏｖなどの統計データのソース、研究のウェブサイト（例えば、教育又は調査のウェブサイト）などの、公式ソースのウェブサイトであってもよい。ウェブサイトは、ＣＳＶ、ＸＭＬ、ＨＴＭＬ、ＰＤＦなどのオープン標準フォーマットでデータを提示することができる。以下でより詳細に説明するように、ウェブサイト、より具体的には、データを含むウェブページは、それに対応するソース識別子ステータスコード（例えば、チェックサム又はハッシュ）を有することができる。
【００２９】
いくつかの例では、コンピュータプログラムは、コンピュータプログラムに組み込まれた少なくとも１つのデータセットにそれぞれ問い合わせ又は参照する１つ以上の関数を含んでもよい。例えば、複数の関数のそれぞれは、ソースコードに組み込まれた同じ又は異なるデータセット（例えば、アーカイブ又はライブラリ）を参照してもよい。少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築する動作１１０は、リモートウェブサイトから取得したデータに問い合わせる１つ以上の関数をソースコードに記述することを含んでもよい。このような例では、データは、ソースコードで再現されている場合があり、ソースコードは、ＸＭＬフォーマットである場合がある。
【００３０】
方法１００は、少なくとも１つの遠隔位置からのソース識別子ステータスコードを１つ以上の関数に組み込む動作１２０を含み、ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。いくつかの例では、少なくとも１つの遠隔位置からのソース識別子ステータスコードを１つ以上の関数に組み込むステップは、少なくとも１つの遠隔位置からのソース識別子ステータスコードを、ソース識別子ステータスコードに対応するデータに問い合わせる関数のソースコードに挿入することを含む。このような例では、関数は、遠隔位置にあるデータ、及び遠隔位置にあるデータが得られた位置、時間、及びバージョンの対応するソース識別子ステータスコードのクエリを含んでもよい。例えば、ソース識別子ステータスコードは、データアーカイブ又はデータライブラリの付随するデータの一部としてプログラムに記述されてもよい。ソース識別子ステータスコードは、データアーカイブ又はデータライブラリに関連付けられた別のコード行としてプログラムに記述されてもよい。ソース識別子ステータスコードは、ソースコードフォーマットでコードに組み込まれてもよい。
【００３１】
ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。例えば、ソース識別子ステータスコードは、データが取得されるウェブページ又は他のドキュメント（ドキュメント上のすべてのデータを含む）の時間、日付、位置、バージョンの検証済み署名を含む。いくつかの例では、ソース識別子ステータスコードは、遠隔位置のチェックサム又はハッシュを含む。例えば、ソース識別子ステータスコードは、データが取得されるウェブページ又は他のドキュメントのチェックサム又はハッシュを含む。いくつかの例では、少なくとも１つの遠隔位置からのソース識別子ステータスコードを１つ以上の関数に組み込むステップは、データが収集された時間から、（例えば、ハッシュ関数を用いて）遠隔位置にあるデータのハッシュを取得又は生成することを含む。チェックサム又はハッシュは、遠隔位置にあるデータに対応する関数（例えば、ＳＨＡ−５１２、ＳＨＡ−２５６などの、チェックサム関数／アルゴリズム又はハッシュ関数／アルゴリズムなど）によって、データ、データがアクセス又は取得される時間及びバージョンとして作成される複数の文字を含む。したがって、データは、データが収集された時点でのソース識別子ステータスコードに関連付けられる。ソースにおいてデータがわずかに変化した場合、そこから算出された対応するチェックサム又はハッシュは、データが最初に取得されたときに生成された元のチェックサム又はハッシュと比較して、２つ以上の文字だけ変化する。したがって、チェックサム又はハッシュにおける変化は、データが変化したことを示すものとして使用することができる。
【００３２】
いくつかの例では、少なくとも１つの遠隔位置からのソース識別子ステータスコードを１つ以上の関数のそれぞれに組み込むステップは、少なくとも１つの遠隔位置に対応するユニフォームリソース識別子からのチェックサム又はハッシュを１つ以上の関数に組み込むことを含んでもよい。ソース識別子ステータスコードは、ソース識別子ステータスコード（及び、関連データ）が取得される少なくとも１つの遠隔位置のアドレスと共に記憶されてもよい。例えば、ソース識別子ステータスコードは、データが取得されたウェブページのユニフォームリソースロケータ（「ＵＲＬ：Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ」）、データが取得されたデータベースの位置、又はデータが取得されたファイルディレクトリアドレスと共に関数に（ソースコードフォーマットで）記憶されてもよい。したがって、ソースコードは、コンピュータプログラムが遠隔位置にアクセスすることを可能にするコード（例えば、情報）を含む。実施形態では、ソースコードは、少なくとも１つの遠隔位置のウェブサイト又はウェブページのアドレスを含む。いくつかの例では、ソース識別子ステータスコードは、データ、ソース識別子ステータスコード、及び遠隔位置に対応するチェックサムクエリに直接配置されてもよい。
【００３３】
方法１００は、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作１３０を含む。いくつかの例では、チェックサムクエリをソースコードに記述するステップは、チェックサムクエリをオープン標準フォーマットでソースコードに組み込むことを含む。チェックサムクエリは、ソースコードに組み込まれたソース識別子ステータスコード、及びデータに対応する少なくとも１つの遠隔位置の現在のソースコードステータス識別子を検査する。チェックサムクエリは、データに対応する（また、ソース識別子ステータスコードに対応する）少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードを取り出すための命令を含む。
【００３４】
現在のソース識別子ステータスコードは、チェックサムクエリが実行された日付における遠隔位置のソース識別子ステータスコードである。現在のソース識別子ステータスコードは、現在のチェックサム又は現在のハッシュを含んでもよい。チェックサムクエリが実行されたときの現在のチェックサム又は現在のハッシュは、データが取得されたときのチェックサム又はハッシュと同じであることもあれば、異なることもある。チェックサム及びハッシュは、それらが作成されるデータに依存する。例えば、チェックサムが作成されるデータがわずかな程度でも変更されると、チェックサムは（例えば、１文字以上）変化することがある。さらに、チェックサム及びハッシュを、異なるデータを用いて複製したり、現在の技法及び計算能力を使用して逆算したりすることは不可能である。したがって、チェックサムとハッシュを比較することで、遠隔位置でデータが変化したかどうかを確実に示すことができる。
【００３５】
ソース識別子ステータスコード及び現在のソース識別子ステータスコードはそれぞれチェックサム又はハッシュ（例えば、現在のチェックサム又は現在のハッシュ）を含むので、ソース識別子ステータスコードは、遠隔位置にあるデータが変化していない場合にのみ現在のソース識別子ステータスコードと一致する。チェックサムクエリは、ソース識別子ステータスコードと現在のソース識別子ステータスコードを文字ごとに比較して、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致することを保証することができる。一致は、ソース識別子ステータスコードに関連付けられているデータが最新であることを示す。一致は、１つ以上の関数の出力が現在のデータに基づいており現在の出力又は結果を提供するものであるとユーザが信頼できることを示す。
【００３６】
チェックサムクエリをソースコードに記述する動作１３０は、データが最初に取り出されたときの遠隔位置のチェックサム又はハッシュの文字と、データが取り出された遠隔位置にある現在のチェックサム又はハッシュの文字とを比較するための命令を含むクエリを、ソースコードにプログラミング（例えば、コーディング）することを含む。少なくとも１つの遠隔位置には、ウェブページ、データベース、コンピュータファイル、ソフトウェアファイルなどが含まれ得る。したがって、チェックサムクエリは、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定し、それによって、ソース識別子ステータスコードに関連付けられたデータを検証する。例えば、チェックサムクエリは、ソースコードに記憶されたソース識別子ステータスコードと、ソース識別子ステータスコードに対応する少なくとも１つの遠隔位置のユニフォームリソースロケータにおける現在のソース識別子ステータスコードとの間の対応関係を検査してもよい。
【００３７】
方法１００は、ソースコードに少なくとも１つの検証関数を提供する動作１４０を含み、少なくとも１つの検証関数は、データ（及びそれに基づく関数）が有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される。ソースコードに少なくとも１つの検証関数を提供するステップは、ソースコードに少なくとも１つの検証関数をオープン標準フォーマットで提供することを含んでもよい。少なくとも１つの検証関数は、データ及び／又はデータを使用する関数の、標準に対する有効性を確認するために使用されてもよい。例えば、少なくとも１つの検証関数は、少なくとも１つの検証関数に従った、データの比較対象となるテスト及び／又は標準を含んでもよい。例では、ソースコードに少なくとも１つの検証関数を提供するステップは、データがソースコードによって指定されたフォーマットであることを確認するためにデータをテストする関数を提供することを含む。
【００３８】
実施形態では、少なくとも１つの検証関数は、少なくとも１つの関数及びデータが選択されたフォーマット（例えば、ＸＭＬ、ＨＴＭＬ、ＣＳＶ、Ａｖｒｏ、ＸＬ、ＸＬＳ、ＪＳＯＮなど）であるかどうか、又は選択された出力を提供するかどうかを判定するために、データ、データを組み込む少なくとも１つの関数、又はデータに基づいた出力のうちの１つ以上をテストする関数を含んでもよい。例えば、検証関数は、データ文字列（例えば、データ）を読み取り、データ文字列内のデータのフォーマットが選択されたフォーマットと一致するかどうかを判定するようにビルドツールに指示するコード（コンピュータ可読かつ実行可能な命令）を含んでもよい。選択されるフォーマットは、関連するビルドツール又は変換関数によって使用されるフォーマットとすることができる。例えば、フォーマットは、少なくとも１つの関数及びデータを第２の言語（例えば、コンピュータコード又はファイルフォーマット）に変換するために変換関数によって使用されるプログラミング言語とすることができる。例では、検証関数は、ソースコード内の少なくとも１つの関数及びデータが指定されたフォーマットであることを保証するために、ソースコードのフォーマットをテンプレート又はルールのセットによって定義された指定された（例えば、所望の又は選択された）フォーマットと比較するためのテンプレート又はルールのセットを含んでもよい。
【００３９】
例では、ソースコードに少なくとも１つの検証関数を提供するステップであって、少なくとも１つの検証関数が、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される、ステップは、データに少なくとも１つの検証テストの１つ以上の基準を満たす値が含まれていることを確認するためにデータをテストする少なくとも１つの検証関数を提供することを含む。例えば、少なくとも１つの検証関数は、指定された場所に日付列があるなどの特定のデータ値、又は少なくとも１つの列におけるデータの特定の範囲内の値がソースコード内のデータに含まれていることを保証するためのコード（例えば、ソースコード内の機械可読かつ実行可能な命令のセット）を含んでもよい。
【００４０】
例では、少なくとも１つの検証関数は、データの特定の数の列及び／又は行がデータに含まれているかどうかを判定するなどのために、ソースコード内のデータと、選択されたデータフォーマット又は表現基準とを比較するためのコードを含んでもよい。例えば、少なくとも１つの検証関数は、ソースコード内のデータが指定された数の列及び行に一致する列及び行に配置されているかどうかを判定するようにビルドツールに指示するコードを含んでもよい。
【００４１】
例では、少なくとも１つの検証関数は、データ（例えば、データを含む行及び列）が値の指定された範囲内の値を有することを確認するようにビルドツールに指示するコードを含んでもよい。例えば、４つのデータ列を期待する少なくとも１つの検証関数が記述されてもよく、第１の列は日付列であり、第２の列は浮動小数点数列、第３の列は「Ａ」、「Ｂ」又は「Ｃ」で始まる文字列であり、第４の列はファイル内のデータの行ごとに１ずつ増加する数値である。検証関数は、データを検索してデータが期待どおりの位置（例えば、列及び行）にあることを確認することによって、データが有効であることをチェックしてもよい。例では、少なくとも１つの検証関数は、ランダムサンプル又はすべてのデータを指定された範囲の期待値と比較する関数を実行するようにビルドツールに指示してもよい。このような例では、指定された範囲の期待値には、日付、識別番号（例えば、社会保障番号、運転免許証番号、顧客番号、請求番号など）、金額（例えば、口座残高、在庫品目、消費されたリソースなど）、コード値（例えば、ＮＣＣＩコード、罰則又は地方自治体コード番号など）が含まれ得る。したがって、少なくとも１つの検証関数は、データが有効であると判定され得る値の許容範囲（又は測定単位）を示す命令を含んでもよい。少なくとも１つの検証関数は、データの値をそれに関連する許容範囲と直接比較してもよい。データの値が許容範囲内にある場合、データは有効であると見なされる。
【００４２】
例では、少なくとも１つの検証関数は、ソースコード内の１つ以上のデータに基づいて１つ以上の出力を提供する１つ以上のサブ関数を含むコードを含んでもよい。１つ以上のサブ関数は、（例えば、データ内のランダムサンプルを利用して）データに対して少なくとも１つの関数を実行し、それに基づいた１つ以上の出力を提供するようにビルドツールに指示してもよい。例えば、サブ関数は、データに対して又はデータを用いて１つ以上の演算を実行して出力を提供してもよく、少なくとも１つの検証関数は、許容可能な出力（又は、さらには出力のフォーマット）の範囲を含んでもよい。少なくとも１つの検証関数は、１つ以上の出力を許容範囲と比較してもよい。サブ関数の出力が許容可能な出力（又はフォーマット）の範囲内にある場合、データは有効であると見なされる。一例では、少なくとも１つのサブ関数は、データに対して数学演算を実行し、出力を提供してもよい。
【００４３】
例では、少なくとも１つのサブ関数は、（例えば、サブ関数によって指示されるように）１つ以上の関数と同じデータに対して同じ演算を実行して独立した結果を提供する、独立関数を含んでもよい。独立した結果を１つ以上の関数の期待される出力と比較して、１つ以上の関数及び／又はデータの有効性を判定することができる。例えば、独立関数は、その中で１つ以上の演算を実行すると有効な出力を生成することが知られている場合があり、１つ以上の関数の出力を独立関数の出力と比較して、１つ以上の関数が有効な出力を提供するかどうかを判定することができる。このような方法で、少なくとも１つのサブ関数を含む検証関数を使用して、ビルド時に１つ以上の関数、データ、又はその両方が有効であるかどうかを判定することができる。
【００４４】
同様に、独立関数は、有効であると判定されたデータ値範囲内のデータ値に対してのみ有効な出力を生成することが知られている場合がある。独立関数又は少なくとも１つの関数の一方又は両方の出力を有効な出力の値範囲と比較することによって、少なくとも１つの関数及び／又はデータの有効性を、出力を介して判定することができる。
【００４５】
方法１００は、ソースコードにビルドブレーク関数を追加する動作１５０を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。いくつかの例では、ソースコードにビルドブレーク関数を追加するステップは、ビルドブレーク関数をオープン標準フォーマットでソースコードに組み込むこと（例えば、コーディング、タイピング、インポート、プログラミングすること）を含む。ビルドブレーク関数は、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致しない場合及び／又は少なくとも１つの検証関数がデータのフォーマット又は値が無効であることを確認した場合にビルドを終了するための命令を含む。したがって、ビルドブレーク関数は、（ソース識別子ステータスコードと現在のソース識別子ステータスコードとの不一致によって示されるように）データが最新ではない場合、又は（少なくとも１つの検証関数によって判定されるように）データが有効ではない場合、プログラムビルドが完了しないようにする。例えば、ビルドブレーク関数は、ソフトウェアライブラリの依存関係をチェックするための依存関係チェックと同様又は同一であってもよい。依存関係に到達できないか、そのテストが失敗するかのいずれかの理由で依存関係を満たすことができない場合、ビルドは中断する。従来、ソフトウェアライブラリとは異なる方法で扱われていたが、本明細書に開示されるコンピュータプログラム及び技法は、データセットを全く別のソフトウェアライブラリであるかのように扱う。
【００４６】
ビルドプログラムが実行可能コンピュータプログラムを出力する場合、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致すること、さらにはデータがソース（遠隔位置）において変化していないことを示すビルドブレークの欠如によって実証されるように、ユーザはデータが現在のものである（例えば、データの最新バージョンとして検証済みである）と確認することができる。ユーザは、実行可能コンピュータプログラム（例えば、アプリケーション）の存在のみによって、１つ以上の関数におけるデータが現在のものであり有効であると確信することができる。したがって、ビルドブレーク関数は、１つ以上の関数を含む実行可能コンピュータプログラムが最新の（例えば、現在の）データを使用しているかどうかを判定する容易に認識可能な手段を提供する。データの出所のチェックは、ソースコード内のデータ及び関連する関数の各セットのビルド中に１回実行されるだけでもよい。その後、ビルドツール又は後続のビルドツールは、後の関数又は依存関係においてデータが再度参照される場合にデータが最新であると見なすことができる。
【００４７】
ビルドブレーク関数は、少なくとも１つの検証関数がデータは無効であると判定した場合にビルドを終了するための命令を含む。したがって、少なくとも１つの検証関数がデータは有効であると判定した場合にのみ、ビルドは継続する。例えば、ビルドブレーク関数は、少なくとも１つの関数及びデータが正しいフォーマットである（例えば、ソースコードが、選択されたフォーマットである）、かつ／又はデータが少なくとも１つの検証関数を満たす値を有する場合にのみビルドを継続するように、ビルドツールに指示する。ビルドブレーク関数は、少なくとも１つの関数の出力と独立関数の出力（両方とも少なくとも１つの検証関数によって指示される）が一致するか、有効であることが知られている範囲内にある値を有する場合にのみビルドを継続するように、ビルドツールに指示してもよい。ビルドツールが実行可能コンピュータプログラムを出力する場合、ユーザは、少なくとも１つの検証関数によって検証されたようにその中のデータが有効であることを確認することができる。このような検証は、ビルド時に、データが、遠隔位置から取得されたときと同じ検証関数又は他のテストを満たしていることを実証する。
【００４８】
方法１００は、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作１６０を含む。例では、ビルドツールは、一連の依存関係全体を通してデータが有効であることを保証するために依存関係チェックを強制するコーディングを含む。ビルドツールには、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、Ｓｉｍｐｌｅ  Ｂｕｉｌｄ  Ｔｏｏｌ（ｓｂｔ）、Ｗａｆなどが含まれ得る。例えば、ビルドツールを実行してソースコードを実行可能コンピュータプログラムにコンパイルすることは、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、又はＷａｆのビルドツールを実行することを含んでもよい。
【００４９】
実行可能コンピュータプログラムは、ＪＡＲファイルフォーマットなどの検証済みのアーカイブフォーマットで出力されてもよい。実行可能コンピュータプログラムは、本明細書に開示されるこれらの構成要素のいずれかを、データに対して１つ以上の関数を実行するための実行可能コード、データ、チェックサムクエリ、ソース識別子ステータスコード、少なくとも１つの検証関数などのアーティファクトとして含んでもよい。実行可能コンピュータプログラムは、有効かつ現在のものであることが保証されているデータを含むアーティファクト又はアーカイブを含んでもよい。例えば、実行可能コンピュータプログラム（例えば、その中のアーカイブ又はアーティファクト）は、データを含む実行可能コードの一部又は全体を含んでもよい。例えば、実行可能コンピュータプログラムは、データを利用して出力を提供する１つ以上の関数のための実行可能コードを含む。実行可能コンピュータプログラムは、１つ以上の関数をコードの一部として利用して最新かつ有効性が確認されたデータを用いて１つ以上の関数を実行することができるモジュールフォーマットなどの、離散数の１つ以上の関数の実行可能コードを含んでもよい。実行可能コンピュータプログラム（例えば、アプリケーション）は、より大きいコンピュータ可読かつ実行可能なプログラムにそのモジュール構成要素として組み込まれてもよい。いくつかの例では、複数の実行可能コンピュータプログラムが、より大きいコンピュータ可読かつ実行可能なプログラムの一部をそのモジュール構成要素として構成してもよい。例えば、より大きい実行可能プログラムはその中に、それぞれデータ及び１つ以上の関数を含む複数の実行可能コンピュータプログラムを含んでもよい。
【００５０】
いくつかの例では、実行可能コンピュータプログラム（例えば、アーカイブ又は他の展開可能なアーティファクト）は、データが依存関係で利用され得るモジュールフォーマットなどで、データのみを含んでもよい。データは、それ自体では実行可能ではないが、全く別のソフトウェアライブラリであるかのように、より大きい実行可能プログラムに依存関係として組み込まれてもよい。例えば、実行可能コンピュータプログラムのデータ（例えば、有効性が確認された現在のデータアーカイブ）は、より大きい実行可能コンピュータプログラムの関数に組み込まれてもよく、関数は、データに対して１つ以上の演算を実行して、それに基づく出力を提供する。
【００５１】
いくつかの例では、ソースコード又は実行可能コンピュータプログラム（例えば、アーティファクト又はアプリケーション）のうちの１つ以上が、１つ以上の変換関数によってさらに処理されてもよく、ソースコード内の関数、検証関数、チェックサムクエリ、データ文字列、ソース識別子ステータスコードなどはすべて、新しいフォーマットへの変換中に保存及び翻訳される。例えば、変換関数は、プログラム、ビルドツールの一部、又はソースコード（その中の関数及びデータを含む）を第１のフォーマット（例えば、ＣＳＶ）から第２のフォーマット（例えば、ＸＭＬ）に変換する他のツールとすることができる。さらに、変換後のソースコードが、（現在の）変換後の実行可能コンピュータコードを作成するために使用されるすべての情報を伴うことを保証するために、変換関数又はその参照位置が、ソースコードに組み込まれてもよい。したがって、以下でより詳細に説明するように、結果として得られる変換後の実行可能コンピュータコードは、変換関数に関する情報を加えた、元のソースコード及び以前のバージョンの実行可能コンピュータコードのすべての情報を伴う。このような例では、実行可能コンピュータプログラム又はソースコードをあるフォーマットから別のフォーマットに変換するとともに、データの原点及びビルド中又は実行中にデータを用いて何が行われたか（例えば、データを出力に提供するためにどの関数が使用されたか）をユーザが追跡できるようにすることに加えて、データの出所及びデータの有効性の両方を維持することができる。
【００５２】
いくつかの例では、変換関数は、１つ以上の実行可能コンピュータプログラム（例えば、アーティファクト又はアプリケーション）若しくはデータを１つ以上の依存関係として利用する関数又はより大きい実行可能コンピュータプログラムとすることができる。より大きい実行可能コンピュータプログラムビルド及び変換又はビルドを実行すると、依存関係の関連する検証関数に従って、依存関係がチェックされる（例えば、それぞれ依存関係にある実行可能コンピュータプログラム又はデータに対して検証関数が実行される）。このように、出力される実行可能コンピュータプログラム内のデータは、データが（例えば、実行可能コンピュータプログラム又はその依存関係の中の）どこに位置しているか、又はデータがどのようなフォーマットであるかに関係なく、実行可能コンピュータプログラムの存在のみによって有効であることが保証される。したがって、実行可能コンピュータプログラム内のデータ及び／又はそのデータを含む関数は、データの検証及び出所を維持しながら、より大きい実行可能コンピュータプログラムのモジュール構成要素（例えば、検証済みのアーカイブファイル構築ブロック）として使用することができる。
【００５３】
ビルドツールは、ソースコードを、（例えば、ソースコード管理（「ＳＣＭ：Ｓｏｕｒｃｅ  Ｃｏｄｅ  Ｍａｎａｇｅｍｅｎｔ」）コマンドに従ったＡｐａｃｈｅ  Ｍａｖｅｎのプロジェクトオブジェクトモデル（「ＰＯＭ：Ｐｒｏｊｅｃｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ」）ファイル内の）ソースコードフォーマットから、使用可能又は実行可能なフォーマットにコンパイル、リンク、及びパッケージ化する。例えば、ビルドツールは、ソースコードを、実行可能なコンピュータプログラム、さらにコンパイル可能なフォーマット、又はさらに変換可能なフォーマットにコンパイルしてもよい。ビルドツールは、ビルド中に依存関係チェック（チェックサムクエリの実行など）によってソースコード内のデータの現在のステータスをチェックする。ビルドツールは、ビルド中に検証関数によってソースコード内のデータの有効性も強制的にチェックする。実行可能コンピュータプログラムは、データが１つ以上の検証済みライブラリとして組み込まれた検証済みのアーカイブフォーマットで出力されてもよい。検証済みのアーカイブフォーマットは、署名付きＪａｖａ（登録商標）アーカイブ（「ＪＡＲ：Ｊａｖａ  Ａｒｃｈｉｖｅ」）ファイルなどであってもよい。データは、ｚｉｐフォーマット、ｔａｒフォーマット、又はＪＡＲファイルと互換性のある任意の他の好適なフォーマットでＪＡＲファイルに記憶されてもよい。ＪＡＲファイルはアプリケーションのクラスパスに含まれ得るので、ＪＡＲファイルによって、アプリケーションはその中のデータをコードとして扱うことができる。例えば、Ｊａｖａ仮想マシンは、ＪＡＲファイルを含むクラスパスから指示されたクラス及びパッケージを指定して、その中のデータをコードとして利用してもよい。したがって、ＪＡＲファイル内のデータ及び関数は、それが現在のもの及び／又は有効であることを検証するために（例えば、チェックサムクエリ又は検証関数によって）チェックされた後、プログラムのコードとして利用可能になる。いくつかの例では、（対応するソース識別子ステータスコード、関連するチェックサムクエリ、及び検証関数と共に）遠隔位置から取得されたデータを含む１つ以上のＪＡＲファイルが、より大きい実行可能コンピュータプログラムの１つ以上のクラスパスに含まれてもよい。したがって、Ｊａｖａ仮想マシンは、ビルド時、変換時、又はプログラムを実行するためのコマンド時に、データ（例えば、ライブラリ）並びにチェックサムクエリ及び検証関数を含むそれに関連する関数に対応するプログラム内のコードの位置を指定することができる。例では、Ｊａｖａコンパイラは、コードをコンパイルし、後で実行するために、有効性が確認された現在のデータ（例えば、ライブラリ）のみの位置、及び／又は、データを使用するか若しくはデータに対して演算する関数を指定してもよい。したがって、方法１００は、より大きい実行可能コンピュータプログラムに組み込むためのアーカイブ（例えば、データを含む展開可能なアーティファクト）を生成してもよく、アーカイブは、アーカイブ内のデータの現在性及び有効性をチェックするために必要なすべての情報及び関数を保持するとともに、データに対して１つ以上の関数を実行する。
【００５４】
チェックサムクエリ、検証関数、及びビルドブレーク関数は、１つ以上の関数におけるデータの依存関係をチェックし、データの現在のステータス及び検証に基づいてビルドを継続又は停止するための命令を提供する。このチェックは、ソースコードから構築されたものであれ、実行可能コンピュータプログラムのフォーマットから別のフォーマットに変換されたものであれ、実行可能コンピュータプログラム内の複数の依存関係の各依存関係に対して実行することができる。したがって、チェックサムクエリがソース識別子ステータスコードが遠隔位置の現在のソース識別子ステータスコードと一致すると判定し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、ビルドツールは、１つ以上の関数を含む実行可能コンピュータプログラムビルドを完了する。ビルドツールは、１つ以上の関数及びデータを、ＪＡＲファイルなどの実行可能コンピュータプログラムの実行可能フォーマットにコンパイルする。ビルドツールはまた、チェックサムクエリ、検証関数、及びビルドブレーク関数うちの１つ以上を、実行可能コンピュータプログラムの実行可能フォーマットにコンパイルしてもよい。ビルドツールは、チェックサムクエリ、検証関数、及びビルドブレーク関数を実行する。ビルド後に実行可能コンピュータプログラムが存在していることは、実行可能コンピュータプログラムの１つ以上の関数内のデータが現在のものであり（例えば、遠隔位置において最新であり）有効であることを示す。
【００５５】
いくつかの例では、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致しない場合、又は少なくとも１つの検証関数に従ってデータが有効ではない場合、ビルドを中断すること（例えば、実行可能コンピュータプログラムを出力しないこと）を含む。ビルドブレークは、ソースコードの１つ以上の関数内のデータが最新ではないこと、又は有効ではないことを示す。いくつかの例では、ソースコードは、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の不一致に関するレポート、データ及び／又は少なくとも１つの関数の無効性に関するレポート、それらの出力、独立関数の出力、並びに（例えば、検証関数によって求められる）それらに関連する値を提供するとともにそれらに関連するデータを識別する、レポート関数を含んでもよい。レポート関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の不一致、ソースコードと選択されたコードとの間の不一致、少なくとも１つの関数の出力と独立関数の出力との間の不一致（両方とも少なくとも１つの検証関数によって指示される）、又は少なくとも１つの検証関数によって求められた値と許容可能な範囲の値との間の値の不一致に対応する特定のデータ及び遠隔位置をユーザに通知するための出力を（ビルドのサイドプロセスを介して）提供することができる。出力は、ＵＲＬ及びＵＲＬにおけるデータの説明など、遠隔位置及びデータライブラリを示す人間可読又は機械可読のテキストとすることができる。出力は、（例えば、ビルドツールを含む）ビルドを実行するために使用されるコンピュータのコンピュータ画面などのユーザインターフェースに送られ得る。したがって、ユーザ又はコーダは、データ及びそれに関連する遠隔位置を識別して、ソースコードの１つ以上の関数内のデータ及び関連するソース識別子ステータスコードを置き換えることが可能であり得る。ソースコードが更新された後（例えば、修正又は変換された後）、ビルドツールを再実行して、データを再テストし、本明細書に開示されるように実行可能コンピュータプログラムを出力してもよい。
【００５６】
実行可能コンピュータプログラム（例えば、アーカイブ）は、リポジトリに記憶されてもよい。１つ以上の関数及びデータを含む実行可能コンピュータプログラム又はリポジトリ全体は、複数の実行可能コンピュータプログラム（例えば、データに対して１つ以上の関数を実行するための実行可能コード）を含むより大きい実行可能プログラムを形成するために、アクセス及び使用されてもよく、かつ／又は、以下でより詳細に説明するように、別のフォーマットに変換されてもよい。
【００５７】
方法１００は、実行可能コンピュータプログラム（又はソースコード）上で１つ以上の変換を実行又は構築するステップをさらに含んでもよい。例えば、変換関数は、実行可能コンピュータプログラム及びそれに関連するすべて又は一部の情報（例えば、アーティファクトファイル内のデータ、１つ以上の関数、ソース識別子ステータスコード、遠隔位置情報、チェックサムクエリ、検証関数、及びビルドブレーク関数）を第１のフォーマットから第２のフォーマットに変換するビルドにおいて構築及び実行されてもよい。実行可能コンピュータプログラムに関連する情報はすべて、変換中に、変換及びビルドの検証済みのアーカイブフォーマット（ＪＡＲファイル）出力などで、変換及び保持されてもよい。したがって、ソースコードは、ビルドから（実行可能コンピュータコードとして）第１のフォーマットで公開され、後続の変換及びビルドによって１つ以上の追加のフォーマットに変換されることが可能であると同時に、関連付けられた元の情報（例えば、データ、１つ以上の関数、ソース識別子ステータスコード、遠隔位置情報、チェックサムクエリ、検証関数、及びビルドブレーク関数）を保持する。したがって、実行可能コンピュータプログラムのアーティファクトの形式を変更する（例えば、実行可能コード及びそれに関連する情報を新しいフォーマット又は言語に変更する）にもかかわらず、アーティファクトは元のソースコードの出所及び有効性の確認を保持する。
【００５８】
いくつかの例では、実行可能コンピュータプログラム又はソースコード上で１つ以上の変換を実行又は構築するステップは、ビルド中に実行可能コンピュータプログラム上で変換関数を実行して実行可能コンピュータプログラムを第１のフォーマットから第２のフォーマットに変換することを含んでもよい。いくつかの例では、第１のフォーマットはＣＳＶフォーマットとすることができ、第２のフォーマットはＡｐａｃｈｅ  Ａｖｒｏフォーマットとすることができる。いくつかの例では、第１のフォーマットはＣＳＶフォーマットとすることができ、第２のフォーマットはＪＳＯＮフォーマットとすることができる。いくつかの例では、第１のフォーマットはＸＭＬフォーマットとすることができ、第２のフォーマットはＨＴＭＬフォーマットとすることができる。
【００５９】
変換関数は、データを変換して（例えば、データに対して演算を実行して）、データのサブセット又は変更されたバージョンを形成する関数を含んでもよい。例えば、変換は、一定の値を有するデータ又はテーブル内の一定の場所からのデータのみを取り出して、元のデータのサブセットを新しいデータセットとして形成してもよい。例では、変換関数は、データの値を第２の値で加算、乗算、除算するなど、データに対して１つ以上の数学演算を実行して、選択された新しいデータセットを出力してもよい。新しいデータセットは、元のデータのサブセットに対する新しいクエリへの出力を提供するために、新しいビルドツール又は実行可能コンピュータプログラムに記述された新しい関数によって演算されてもよい。新しいデータセットの有効性を保証するために、（変換前に）新しいビルドツール又は実行可能コンピュータプログラムに、対応する新しい検証関数が記述されてもよい。
【００６０】
変換を構築及び実行することによって、データ及び関数のすべて又はいくつかを含む変換後の実行可能コンピュータプログラム又はその一部は、ソフトウェアの依存関係のように扱われる。したがって、ビルドシステムは、実行時に、他のインポートされたアーカイブ又はアーティファクト（例えば、関数、データセットなどを含む実行可能コンピュータプログラム）に対する依存関係を解決しなければならない。このプロセスを通じて、ビルドは、検証関数、チェックサムクエリ、又はビルドブレーク関数など、依存関係において指定された任意のテストを実行することになる。これらの依存関係のテストのいずれかが失敗する場合、ビルドは中断する。
【００６１】
したがって、本明細書に開示される方法は、別個のリポジトリ又は同じリポジトリ内のアーカイブ（例えば、異なる関数又はデータを有する実行可能コードを記憶する検証済みのアーカイブフォーマットファイル）からのデータの変換を可能にし、次いで、これらのデータは、依存関係として扱われ、ビルド中にチェック／テストされる。ビルドシステムは、ソースアーカイブの位置に関係なく、依存するすべてのアーティファクト（例えば、データのみ、又はデータ及び関数）に対してテストを実行する。これらの依存アーティファクトのテストのいずれかが失敗する場合、ビルドは中断する。したがって、変換後の実行可能コンピュータプログラムは、すべての依存関係が有効かつ最新であることが確認された場合にのみ、出力として公開される。
【００６２】
例えば、ユーザが元のデータセットの３番目の列から「Ｂ」でも「Ｃ」でもなく「Ａ」で始まるデータをすべて引き出したい場合、新しいデータセットは、元のデータに基づいた新しいアーティファクトとなる。このような選択的な抽出は、元のデータを新しいデータ又はデータセットに変換する。新しいデータセットのパラメータ、又は新しいデータセットに対して演算する１つ以上の関数の選択された出力に従って、新しいデータセット内のデータが有効であることを確認するために、新しい検証関数が記述及び使用されてもよい。例えば、新しいデータセットが、３番目の列にあるデータ（例えば、文字列）に「Ａ」を有する行のみを含むことを検証するための、１つ以上のテストである。いくつかの例では、ビルドシステムが新しいデータセットを含む変換後の実行可能コンピュータプログラムに対してテストを実行するとき、ビルドシステムは、新しいデータセットを形成するために使用された元のデータが有効であると見なしてもよい。いくつかの例では、ビルドシステムが新しいデータセットを含む変換後の実行可能コンピュータプログラムに対してテストを実行するとき、ビルドシステムは、元のデータセットに対する依存関係を検出し、元のデータセットに対して元の検証テストを実行してもよい。したがって、すべての依存関係及びデータが、ビルド時に有効性及び／又は最新性についてチェックされてもよい。
【００６３】
別の変換は、手動でキュレートされたデータを含んでもよい。例えば、いくつかの実施形態では、データは、ＰＤＦ文書などのデータが散在している文書又は他のソースから手動で取得されてもよい。データを自動的に引き出すことは、現代のソフトウェアの能力を超えている可能性があるため、手動でキュレートされなければならない。このような手動キュレーションは、手動でキュレートされたデータと元のＰＤＦ文書との間の違いに基づく変換である。ビルドシステムは、元のテスト及び手動でキュレートされたデータ用に記述されたテスト（例えば、検証関数）上で、出所のチェック（例えば、チェックサムクエリなど）を実行してもよい。したがって、ビルドプロセスは、手動でキュレートされたデータを、インポートされたデータと同様の方法で扱い、少なくともチェックサムクエリ及び検証関数を使用してその依存関係をチェックしてもよい。
【００６４】
方法１００は、１つ以上の実行可能コンピュータプログラムをより大きい実行可能コンピュータプログラムに組み込むステップをさらに含んでもよい。例えば、複数の実行可能コンピュータプログラム（例えば、アーティファクト又はアーカイブ）を組み立てて、各実行可能コンピュータプログラムに関連するそれぞれのデータに対して１つ以上の関数を実行するより大きい実行可能プログラムを形成してもよい。したがって、複数のデータセットに対して複数の関数を実行するより大きい実行可能コンピュータプログラムを、モジュール式に構成及び実行することができる。
【００６５】
方法１００によれば、データをソフトウェアと同じ方法で扱うことができ、それによってデータの「アウトオブバンド」プロセスを削除し、それに関連する不確実性又はエラーを排除する。データ並びに出所及び有効性のテストをソースコードに直接組み込むことによって、実行可能コンピュータプログラムと実行可能コンピュータプログラムが使用するデータとの間に明確な不変の関係が形成される。
【００６６】
方法１００は、データ自体を手動でチェック又は更新する必要なしに、実行可能プログラムの関数において有効性が確認されたデータを自動的に提供する。さらに、方法１００により、データをコードと別にデータベースに記憶する必要がなくなり、遠隔のデータベースにアクセスしてデータを取り出す待ち時間がなくなる。したがって、方法１００では、コンピュータプログラムでデータを使用するための従来の技法よりも、計算時間が早くなり、コード外のデータ記憶が少なくなり、検証済みの正確性が高まる。
【００６７】
図１Ｂは、図１Ａの方法１００の概略図である。方法１００は、少なくとも１つの遠隔位置１０１から取得されたデータをコンピュータプログラムのソースコード１０２に組み込む１つ以上の関数を構築する動作１１０を含む。方法１００は、少なくとも１つの遠隔位置１０１からのソース識別子ステータスコードを１つ以上の関数に組み込む動作１２０を含み、ソース識別子ステータスコードは、少なくとも１つの遠隔位置１０１からデータが取得された日付及び位置に対応する。方法１００は、ソース識別子ステータスコードが少なくとも１つの遠隔位置１０１にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置１０１に問い合わせるチェックサムクエリをソースコード１０２に記述する動作１３０を含む。方法１００は、ソースコード１０２に少なくとも１つの検証関数を提供する動作１４０を含み、少なくとも１つの検証関数は、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される。方法１００は、ソースコード１０２にビルドブレーク関数を追加する動作１５０を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法１００は、ビルドツール１０４を実行して、ソースコード１０２を少なくとも１つの遠隔位置１０１から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作１６０を含む。
【００６８】
データは、手動入力又はダウンロードによって遠隔位置１０１から取得されてもよい。ソース識別子ステータスコードは、データ収集と同時に取得されてもよい。データは、遠隔位置１０１で見出されるフォーマットなどで生の形式で組み込まれてもよく、又はソースコード１０２のフォーマットなどの選択されたフォーマットに変換されてもよい。ソース識別子ステータスコードは、遠隔位置で実行されるハッシュ関数から取得されたハッシュ、又はそこから取得されたデータとすることができる。ソースコード１０２は、データを使用して演算を実行するための１つ以上の関数を含んでもよい。図示のように、動作１３０〜１５０は、ソースコード１０２に対して実行されて、ソースコード１０３を形成してもよい。ソースコード１０３は、データ、ソース識別子ステータスコード、チェックサムクエリ、少なくとも１つの検証関数、１つ以上の関数、及びビルドブレーク関数を含んでもよい。
【００６９】
動作１６０において、ソースコード１０３上でビルドツール１０４が実行されてもよい。例えば、ビルドツール１０４は、ソースコードを実行可能コンピュータプログラム又はその中間バージョン（実行可能コンピュータプログラムに変換可能なプログラミングフォーマット）に変換するための実行可能命令を含んでもよい。ビルドツール１０４は、コンピューティングシステムに、チェックサムクエリと、データが現在のものであり有効であること、又はデータが現在のものでも有効でもないこと確認するための１つ以上の検証関数とを実行させるプログラミング（例えば、コーディング）を含む。データが現在のものであり有効であることが確認された場合にのみ、ビルドツールは、データ、１つ以上の関数、チェックサムクエリ、少なくとも１つの検証関数、ソース識別子ステータスコード、遠隔位置情報などを含む実行可能コンピュータプログラム１０８（例えば、アーカイブファイル）を、ＪＡＲファイルフォーマットなどで出力１０７する。実行可能なコンピュータプログラム１０８は、ファイルリポジトリ１０６に出力される。
【００７０】
データが現在のものではない、又は有効ではないと判定された場合、ビルドツール１０４は、テストの失敗に関するレポート１０５を出力してもよい。ビルドツール１０４は、レポート１０５を生成するための実行可能命令を含んでもよい。レポート１０５は、チェックサムクエリに失敗するハッシュ若しくはハッシュに関連するデータ、又は検証関数に失敗するデータなど、テストの失敗に関する原因の特定を含んでもよい。レポート１０５は、データの遠隔位置を含んでもよい。したがって、ソフトウェアプログラマは、ビルドを進行させるために、ソースコード１０２内又はソースコード１０３内のデータ若しくは関数を検査、更新、又は修正してもよい。ビルドブレーク関数は、ビルドを停止することによって、有効かつ現在のデータを有する実行可能コンピュータプログラムのみが出力されることを保証する。
【００７１】
上記のように、実行可能コンピュータプログラム１０８（例えば、アーカイブファイル）は、ファイルリポジトリ１０６に出力１０７される。実行可能コンピュータプログラム１０８は、リポジトリ１０６内でアクセスされてもよい。例えば、実行可能コンピュータプログラム１０８は、より大きい実行可能コンピュータプログラムを形成するために使用されてもよく、又は変換関数を使用して新しいフォーマットに変換されてもよい。
【００７２】
図示のように、実行可能コンピュータプログラム１０８又はその一部を第１のフォーマットから第２のフォーマットに変換するための実行可能命令を含む、変換関数１１２が構築されてもよい。上記のように、変換は、実行可能コンピュータプログラム内のデータ及び関数（例えば、チェックサムクエリ、１つ以上の関数、少なくとも１つの検証関数、ビルドブレーク関数など）など、実行可能コンピュータプログラム１０８の一部又はすべてに対して実行されてもよい。例えば、変換は、アーカイブファイル内のアーティファクトの一部又はすべてに対して実行されてもよい。データ及び関数の元の形式及び変換後の形式は、メタデータフォーマット又はＪＡＲファイルのバージョン固有のファイルなどで、変換後の実行可能コンピュータプログラム１１８に記憶されてもよい。同様に、実行可能コンピュータプログラムを変換するために使用される変換関数１１２が、変換後の実行可能コンピュータプログラム１１８に記憶されてもよい。したがって、現在の実行可能コンピュータプログラムを作成する手段に関する完全な責任追跡性を提供するために、バージョン固有の情報及び前記バージョンがどのように作成されたかが記憶される。
【００７３】
変換関数１１２は、変換を実行する後続のビルドツール１１４に含まれる。次いで、ビルドツール１１４は、変換後の検証関数及び変換後のチェックサムクエリに従って、データに対してチェックサムクエリ又は少なくとも１つの検証関数のうちの１つ以上を実行する。変換後の実行可能コンピュータプログラム（例えば、アーティファクト）が変換後のテストに成功した場合、変換後の実行可能コンピュータプログラム１１８は、変換後のファイルリポジトリ１１６に出力１１７される。変換後の実行可能コンピュータプログラム１１８は、元の又は以前の実行可能コンピュータプログラム１０８などの、変換後の実行可能コンピュータプログラム１１８の以前のバージョンのすべての情報を含む。したがって、データ、変換関数、ソース識別子ステータスコード、チェックサムクエリ、検証関数などを含む、実行可能コンピュータプログラム又はその中のアーティファクトに関する情報はすべて、ＪＡＲファイルフォーマットなどで実行可能コンピュータプログラムに含まれる。したがって、元のデータに対して依存関係を有するデータ又はそのサブセットに対して、テストが実行される。さらに、変換後の検証関数及びチェックサムクエリに成功することによって、変換後のデータが最新かつ有効であることが実証される。
【００７４】
変換後の実行可能コンピュータプログラム又はその中のアーティファクトが変換後のテストに成功しない場合、失敗したテストに関するレポート１１５が出力されてもよい。次いで、ソフトウェアプログラマは、変換関数をチェック又は修正し、遠隔位置１０１でデータを検査し、遠隔位置１０１からデータを再取得するか、あるいは別の方法で方法１００への入力のいずれかを調査及び訂正してもよい。
【００７５】
上記のように、変換後の実行可能コンピュータプログラム１１８は、複数の関数に従って複数のデータを分析して１つ以上の出力を提供するプログラムのモジュール式構築ブロックなどのより大きい実行可能コンピュータプログラムにおいて使用することができる。さらに、変換後の実行可能コンピュータプログラム１１８に対してさらなる変換が実行されてもよく、これらはすべて、実行可能コンピュータプログラム内のメタデータ又はファイルディレクトリ（例えば、検証済みのアーカイブフォーマットファイル）などにおいて、以前の情報（例えば、データ、１つ以上の関数、ソース識別子ステータスコード、少なくとも１つの検証関数など）、及び変換後の実行可能コンピュータプログラム１１８の以前のバージョンを保持する。
【００７６】
図２は、少なくとも一実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法２００の流れ図である。方法２００は、少なくとも１つの遠隔位置からのデータをソースコードに直接インポートする動作２１０を含む。方法２００は、少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込む動作２２０を含み、ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。方法２００は、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作２３０を含む。方法２００は、ソースコードに少なくとも１つの検証関数を提供する動作２４０を含み、少なくとも１つの検証関数は、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される。方法２００は、ソースコードにビルドブレーク関数を追加する動作２５０を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法２００は、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作２６０を含む。方法２００は、第２のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行して、実行可能コンピュータプログラムを第１のフォーマットから第２のフォーマットに変換する動作２７０を含み、第２のビルドツールは、変換されたデータが有効であることを保証するために、変換されたデータに対して少なくとも１つの検証関数及びビルドブレーク関数を実行する。
【００７７】
方法２００は、動作２１０〜２７０よりも多くの又は少ない動作を含んでもよい。例えば、動作２７０は、いくつかの例において省略されてもよい。さらに、方法２００の動作は、提示された順序とは異なる順序で実施されてもよい。動作２１０〜２７０の少なくともいくつかは、１つ以上のデスクトップコンピュータ、１つ以上のラップトップコンピュータ、１つ以上のサーバ、１つ以上のタブレットなどの、コンピュータ又はコンピューティングデバイスによって実行されても、それらと共に実行されても、それらに対して実行されてもよい。
【００７８】
少なくとも１つの遠隔位置からのデータをソースコードに直接インポートする動作２１０は、ＰＯＭ内のライブラリにデータを配置することなど、少なくとも１つの遠隔位置からのデータをソースコードにダウンロードすることを含んでもよい。少なくとも１つの遠隔位置からのデータをソースコードにインポートするステップは、ウェブページ、データベース、アーカイブ、ライブラリ、又は任意の他の電子ソースからデータをダウンロードすることを含んでもよい。いくつかの例では、少なくとも１つの遠隔位置からのデータをソースコードにインポートするステップは、少なくとも１つの遠隔位置で提供されるフォーマット（例えば、ＨＴＭＬ）でデータをダウンロードし、データをソースコードフォーマット（例えば、ＸＭＬ）に変換することを含んでもよい。いくつかの例では、少なくとも１つの遠隔位置からのデータをソースコードにインポートするステップは、コンピュータプログラム（例えば、ソースコードの全体によって指定されるプログラム）の１つ以上の関数にデータを直接ダウンロードすること、又は別の方法で取り込むことを含んでもよい。例えば、データは、コンピュータプログラム内の１つ以上の関数において、コンピュータプログラムのソースコードにライブラリとしてインポートされてもよい。ソースコードで記述され、データ（並びに関連するソース識別子ステータスコード及び遠隔位置アドレス）を含む１つ以上の関数は、コンピュータプログラム及び結果として得られる実行可能コンピュータプログラムを構築するためのブロックとして使用されてもよい。データは、ソースコード内又はソースコードに関連付けられたライブラリに置かれて、１つ以上の関数によって参照されてもよい。したがって、データは、ソースコード内の１つ以上の関数に含まれる。
【００７９】
いくつかの例では、少なくとも１つの遠隔位置からのデータをソースコードに直接インポートするステップは、ＰＯＭなどのソースコードにデータのライブラリを手動で構築することを含む。いくつかの例では、少なくとも１つの遠隔位置からのデータをソースコードに直接インポートステップは、依存関係チェックを強制するビルドツールの標準的な依存関係インポートメカニズムを使用することを含む。このような例では、ソースコードは、データが存在するＰＯＭ内の遠隔位置のアドレス（例えば、データベース、ウェブページなどのアドレス）又は場所（例えば、ディレクトリ若しくはリポジトリ）を含んでもよい。いくつかの例では、ビルドツールは、インポートコマンド及びソースコード内の遠隔位置のアドレスに対応して、ビルド中にデータをインポートしてもよい。このような例では、少なくとも１つの遠隔位置からのデータをソースコードに直接インポートするステップは、ビルド中に遠隔位置から１つ以上の関数にデータをインポートし、実行可能コンピュータコード又はコンパイル可能コンピュータコードとしてデータを出力することを含んでもよい。ビルドツールには、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、又はＷａｆなど、本書に開示されるビルドツールのいずれかが含まれ得る。
【００８０】
コンピュータプログラムのソースコード（例えば、ビルドツールを実行する前のコード）は、データを利用する１つ以上の関数を含んでもよい。例えば、１つ以上の関数は、質問への回答を求めてデータに問い合わせてもよい。関数及びクエリのタイプの例は、本明細書に開示されている。ソースコードは、ＸＭＬなどの電子データ転送用のオープン標準フォーマットであってもよい。
【００８１】
少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込む動作２２０であって、ソース識別子ステータスコードが、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する、動作２２０は、１つ以上の態様において、上記で開示された動作１２０と同様又は同一であってもよい。例えば、少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、遠隔位置からのチェックサム又はハッシュをデータに関連するソースコードに提供することを含んでもよい。いくつかの例では、少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、ソースコードの１つ以上の関数において遠隔位置のチェックサム又はハッシュを提供することを含んでもよい。少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、チェックサム又はハッシュをソースコードに追加することを含む。いくつかの例では、少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、ソース識別子ステータスコードをソースコードにダウンロードすることを含む。
【００８２】
いくつかの例では、少なくとも１つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、ソース識別子ステータスコードをソースコード内のデータに関連付けることを含む。例えば、ソース識別子ステータスコードをソースコード内のデータに関連付けることは、ソース識別子ステータスコード及びデータを単一の関数に組み込むことを含んでもよい。
【００８３】
１つ以上の態様において、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作２３０は、上記で開示された動作１３０と同様又は同一であってもよい。例えば、チェックサムクエリをソースコードに記述するステップは、チェックサムクエリをオープン標準フォーマットでソースコードに組み込むことを含んでもよい。チェックサムクエリは、ソースコードに組み込まれたソース識別子ステータスコード、及びデータに対応する少なくとも１つの遠隔位置の現在のソースコードステータス識別子を検査する。チェックサムクエリは、データに対応する（また、ソース識別子ステータスコードに対応する）少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードを取り出すための命令を含む。例えば、チェックサムクエリは、ソース識別子ステータスコードと、ソース識別子ステータスコードに対応する遠隔位置（例えば、ＵＲＬなど）にある現在のソース識別子ステータスコードとの間の対応関係を検査する。
【００８４】
１つ以上の態様において、ソースコードに少なくとも１つの検証関数を提供する動作２４０であって、少なくとも１つの検証関数が、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される、動作２４０は、上記で開示された動作１４０と同様又は同一であってもよい。例えば、少なくとも１つの検証関数は、データの比較対象となるテスト及び／又は標準を含む。少なくとも１つの検証関数は、オープン標準フォーマットなどでソースコードに記述されてもよい。例では、ソースコードに少なくとも１つの検証関数を提供するステップであって、少なくとも１つの検証関数が、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される、ステップは、データがソースコードによって指定されたフォーマットであることを確認するためにデータをテストする関数、又は期待される目標値若しくは目標範囲を満たす値を提供するか、若しくはそれらを含む関数を提供することを含んでもよい。
【００８５】
１つ以上の態様において、ソースコードにビルドブレーク関数を追加する動作２５０であって、ビルドブレーク関数が、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、動作２５０は、上記で開示された動作１５０と同様又は同一であってもよい。例えば、ソースコードにビルドブレーク関数を追加するステップは、ビルドブレーク関数をオープン標準フォーマットでソースコードに組み込むこと（例えば、コーディング、タイピング、プログラミングすること）を含んでもよい。ビルドブレーク関数は、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致せず、少なくとも１つの検証関数がデータは有効であると確認した場合にビルドを終了するための命令を含む。したがって、ソースコード内のビルドブレーク関数は、データ、データに基づく任意の関数、及び関数の任意の結果又は生成物の有効性を保証するために、出所のチェック及び有効性のチェックを提供する。
【００８６】
１つ以上の態様において、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作２６０は、上記で開示された動作１６０と同様又は同一であってもよい。例えば、ビルドツールを実行して、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、依存関係チェックを強制するビルドツールを実行することを含んでもよい。ビルドツールには、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、Ｗａｆなどが含まれ得る。
【００８７】
ビルドツールは、ソースコードを実行可能コンピュータプログラム、又はさらにコンパイル可能又は変換可能なフォーマットにコンパイルしてもよい。ビルドツールは、ビルド中に依存関係チェック（例えば、チェックサムクエリを実行すること）によってコード内のデータの有効性をチェックする。実行可能コンピュータプログラムは、データが１つ以上の検証済みライブラリとして組み込まれた検証済みのアーカイブフォーマットで出力されてもよい。検証済みのアーカイブフォーマットは、ｚｉｐフォーマット、ｔａｒフォーマットなどの署名付きＪａｖａアーカイブ（「ＪＡＲ」）ファイルであってもよい。例えば、実行可能コンピュータプログラムは、データが１つ以上のアーカイブとして組み込まれたＪＡＲファイルに出力されてもよい。
【００８８】
チェックサムクエリ、少なくとも１つの検証関数、及びビルドブレーク関数は、１つ以上の関数におけるデータの依存関係をチェックし、データの最新性及び検証に基づいてビルドを継続又は停止するための命令を提供する。チェックサムクエリがソース識別子ステータスコードが遠隔位置の現在のソース識別子ステータスコードと一致すると判定し、少なくとも１つの検証関数に従ってデータが有効である場合にのみ、ビルドツールは、１つ以上の関数を含む実行可能コンピュータプログラムビルドを完了する。
【００８９】
第２のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行して、実行可能コンピュータプログラムを第１のフォーマットから第２のフォーマットに変換する動作２７０であって、第２のビルドツールが、変換されたデータが有効であることを保証するために、変換されたデータに対して少なくとも１つの検証関数及びビルドブレーク関数を実行する、動作２７０は、実行可能コンピュータプログラム又はその中のアーティファクトに対して第２のビルドツールを実行することを含んでもよい。１つ以上の態様において、第２のビルドツールは、第１のビルドツールと同様又は同一であってもよい。１つ以上の態様において、第２のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行する動作２７０は、方法１００に関して上記で開示された変換関数を用いて変換を実行する動作と同様又は同一であってもよい。例では、第２のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行するステップは、第２の（後続の）ビルドツールに関連付けられたＳＣＭにおいて変換プロジェクトを作成することなど、変換関数を記述することを含む。
【００９０】
第２のビルドツールは、変換関数を実行し、変換後のデータ、１つ以上の関数、検証関数、チェックサムクエリなどを用いて新しい（例えば、変換後の）実行可能コンピュータプログラムを構築するための実行可能命令を含んでもよい。例えば、第２のビルドツールは、実行可能コンピュータプログラム（例えば、ＪＡＲファイル全体又はその一部）を第１のフォーマットから第２のフォーマットに変換するのに効果的な変換関数を実行してもよい。第２のビルドツールは、データを第１のフォーマット（例えば、プログラミング言語、測定単位、又は提示構成）から第２のフォーマットに変換するのに効果的な変換関数を実行してもよい。第２のビルドツールは、１つ以上の関数、チェックサムクエリ、少なくとも１つの検証関数、メタデータ、又は実行可能コンピュータプログラムの任意の他の部分を第１のフォーマットから第２のフォーマットに変換するのに効果的な変換関数を実行してもよい。
【００９１】
第２のビルドツールは、第２のビルドプロセスの一部として、少なくとも１つの検証関数、変換後のデータ、変換後の関数などの有効性をテストするように適合された新しい検証関数、チェックサムクエリ、又は変換関数のうちの１つ以上を実行する。したがって、変換後のデータの有効性は、第２のビルドプロセスの実行時にも確認される。第２のビルドツールは、変換関数の目標であるデータなどに対して、実行可能コンピュータプログラムの任意の依存関係に関連付けられた少なくとも１つの検証関数を実行する。したがって、データ及び変換後のデータは、各ビルド中に有効性がチェックされる。変換後のビルドブレーク関数は、ビルドツールが、有効な（変換後の）データを有する変換後の実行可能コンピュータプログラムのみを出力することを保証するために実行される。
【００９２】
変換後の実行可能コンピュータプログラムに対してさらなる変換が実施されてもよい。変換後の実行可能コンピュータプログラムは、変換後の実行可能コンピュータプログラム内の変換後のデータを使用して１つ以上の関数を実行する、より大きい実行可能コンピュータプログラムのモジュール式構築要素として使用されてもよい。
【００９３】
方法２００は、方法１００に関して上記で開示されたように、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の不一致に関するレポート又はデータが無効であることが判明したというレポートを提供するとともにそれに関連するデータを識別するレポート関数を、ソースコードに追加するステップを含んでもよい。
【００９４】
図３は、少なくとも１つの実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法３００の流れ図である。方法３００は、少なくとも１つの遠隔位置からのデータを組み込む１つ以上の関数を含むソースコードを提供する動作３１０を含む。方法３００は、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作３２０を含む。方法３００は、実行可能コンピュータプログラムが存在するかどうかを判定する動作３３０を含む。
【００９５】
方法３００は、動作３１０〜３３０よりも多くの又は少ない動作を含んでもよい。例えば、動作３３０は、方法３００から省略されてもよい。さらに、方法３００の動作は、提示された順序とは異なる順序で実施されてもよい。動作３１０〜３３０の少なくともいくつかは、１つ以上のデスクトップコンピュータ、１つ以上のラップトップコンピュータ、１つ以上のサーバ、１つ以上のタブレットなどの、コンピュータ又はコンピューティングデバイスと共に実行されても、それらに対して実行されてもよい。
【００９６】
方法３００は、少なくとも１つの遠隔位置からのデータを組み込む１つ以上の関数を含むソースコードを提供する動作３１０を含む。いくつかの例では、少なくとも１つの遠隔位置からのデータを組み込む１つ以上の関数を含むソースコードを提供するステップは、非一過性のコンピュータ可読メモリ記憶媒体に記憶されるような電子フォーマットでソースコードを提供することを含む。非一過性のメモリ記憶媒体には、ハードドライブ、メモリスティック、ディスク、又は中に１つ以上の関数が含まれたソースコードを含む任意の他の媒体が含まれ得る。ソースコードは、ＸＭＬ又は本明細書に開示される他のオープン標準フォーマットのいずれかなどの電子データ用のオープン標準フォーマットで提供されてもよい。
【００９７】
１つ以上の態様において、中のソースコード及び関数は、本明細書に開示されるソースコード及び１つ以上の関数のいずれかと同様又は同一であってもよい。例えば、ソースコードは、ＸＭＬを含んでもよく、１つ以上の関数は、データの１つ以上のクエリを含んでもよい。ソースコードは、ＰＯＭに含まれてもよい。ソースコード内のデータは、データを含む、データベース、ウェブページ、アーカイブなどの遠隔位置からアクセス及び取得されてよい。
【００９８】
いくつかの例では、少なくとも１つの遠隔位置からのデータを組み込む１つ以上の関数を含むソースコードを提供するステップは、本明細書に開示される関数のいずれかを含むソースコードを提供することを含む。例えば、ソースコードは、少なくとも１つの遠隔位置から取得されたデータを組み込む１つ以上の関数、１つ以上の関数内の少なくとも１つの遠隔位置からの１つ以上のソース識別子ステータスコード、１つ以上のチェックサムクエリ、少なくとも１つの検証関数、１つ以上のビルドブレーク関数、又は１つ以上のレポート関数を含んでもよい。１つ以上の態様において、１つ以上の関数、データ、少なくとも１つの遠隔位置、１つ以上のソース識別子ステータスコード、１つ以上のチェックサムクエリ、少なくとも１つの検証関数、１つ以上のビルドブレーク関数、又は１つ以上のレポート関数は、本明細書に開示されているものであってもよい。例えば、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致しない場合にビルドを停止するようにビルドツールに命令する。したがって、ソース識別子ステータスコードと現在のソース識別子ステータスコードが１つ以上の関数の特定の関数で一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドを継続する。
【００９９】
少なくとも１つの遠隔位置からのデータを組み込む１つ以上の関数を含むソースコードを提供する動作３１０は、１つ以上の関数、データ、ソース識別子ステータスコード、チェックサムクエリ、ビルドブレーク関数、少なくとも１つの検証関数、レポート関数、又はソースコードの任意の他の部分を含むようにソースコードを記述することを含んでもよい。例えば、上記のオブジェクトはそれぞれ、ＰＯＭに記述されてもよい。少なくとも１つの遠隔位置からのデータを組み込む１つ以上の関数を含むソースコードを提供する動作３１０は、少なくとも一部にデータと、データが取得された遠隔位置及びデータが取得されたときの遠隔位置に関連付けられたソース識別子ステータスコード（例えば、ウェブページのチェックサム又はハッシュ）と、遠隔位置のアドレスとを含む関数のグループを、別々に使用可能かつ構築可能な関数で提供することを含んでもよい。関数のグループは、非一過性のコンピュータ可読メモリ記憶媒体上の関数のデータベース、リポジトリ、アーカイブ、又はライブラリに記憶されてもよい。関数のグループの各関数は、関連するデータ及びメタデータと共に、個別のＰＯＭなどのソースコードフォーマットで記憶されてもよい。関数のグループの各関数は、任意の他のオープン標準フォーマットのＸＭＬフォーマットなどのソースコードフォーマットであってもよい。いくつかの例では、関数のグループの各関数は、ソースコードにモジュール式に挿入されてもよい。
【０１００】
ソースコードがビルドツールで処理されて、関数及び関数を実行するためのデータを含む実行可能コンピュータプログラムを作成するとき、各関数内のデータがチェック及び検証されてもよい。実行可能コンピュータプログラムは、１つ以上の関数、変換関数、検証関数、チェックサムクエリ、及び本明細書に開示される関数のいずれかを実行するためのデータを含むアーティファクト（例えば、ＪＡＲファイル）の一部とすることができる。
【０１０１】
方法３００は、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作３２０を含む。いくつかの例では、ビルドツールを実行するステップは、非一過性のコンピュータ可読メモリ記憶媒体（例えば、ハードドライブ、プロセッサ、メモリなど）に記憶されたビルドツールを用いてビルドを開始することを含んでもよい。
【０１０２】
いくつかの例では、ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、コンピュータ若しくはコンピュータネットワーク上で、又はコンピュータ若しくはコンピュータネットワークを用いて実行される。いくつかの例では、ビルドツールを実行して、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、ソースコードを、コンピュータ可読かつ実行可能なフォーマット又は実行可能なコンピュータプログラムにコンパイル可能なフォーマットにコンパイル、ビルド、又は他の方法で変換することを含む。例えば、ビルドツールを実行するステップは、ソースコードを、データが１つ以上のライブラリとして組み込まれた検証済みのアーカイブフォーマットにコンパイルすることを含んでもよい。検証済みのアーカイブフォーマットは、本明細書に開示されるように、署名付きＪＡＲファイルなどを含んでもよい。コンパイルプロセス中、ソースコードに含まれている記述されたテスト（例えば、検証関数）に従ってデータが有効であることを保証するために、ソースコード内のデータをテストすることができる。コンパイルプロセス中、データ、１つ以上の関数、少なくとも１つの検証関数、チェックサムクエリ、ソース識別子ステータスコード、又はソースコード内の任意の他のオブジェクト（又は、それに基づく実行可能コンピュータプログラム）は、ソースコード内の変換関数によって変換されるか、又はソースコードによって参照されてもよい。例えば、データは、第１のフォーマットから第２のフォーマットに変換されてもよく、又はデータの演算を実行して出力を提供するより大きい関数に組み込まれてもよい。データは変換され得るが、結果として得られる変換後の実行可能コンピュータプログラムは、実行可能コンピュータプログラムの出力を必要に応じて再現できることを保証するために、チェックサムクエリ、ソース識別子ステータスコード、検証関数、変換関数などの元のバージョンに関連する情報の一部又はすべてを維持する。
【０１０３】
ＪＡＲファイルは、実行可能コンピュータプログラムの１つ以上の関数を実行するためのコンピュータ実行可能命令（例えば、コード）を含んでもよい。実行可能コンピュータプログラムを含むＪＡＲファイル内の実行可能命令は、少なくとも１つの遠隔位置から取得されて実行可能コンピュータプログラムに組み込まれたデータを使用して、１つ以上の関数を実行し、その関数から出力を提供する。
【０１０４】
いくつかの例では、ビルドツールを実行して、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、Ｗａｆなどの依存関係チェックを強制するビルドツールを実行することを含む。ビルドツールは、チェックサムクエリを実行して、各関数の各データセットに対応する（遠隔位置にある）ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の一致をチェックするようにプログラムされる。ビルドツールは、少なくとも１つの検証関数を実行して、データ及び／又はデータ上で演算する１つ以上の関数の有効性をチェックするようにプログラムされる。ビルドツールは、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致しない場合、又は検証関数がデータは無効であると判定した場合に、ビルドブレーク関数を実行するようにプログラムされる。
【０１０５】
方法３００は、実行可能コンピュータプログラムが存在するかどうかを判定する動作３３０を含む。実行可能コンピュータプログラムが存在するかどうかを判定するステップは、ビルドツール又は別のプログラム若しくはツールによって自動的に実行されてもよい。ビルドツール又は別のプログラム若しくはツールは、ビルドが中断若しくは完了したという視覚的な表示又は警告を提供してもよい。例えば、ビルドツールは、実行可能コンピュータプログラムをＪＡＲファイルフォーマット（又は、同様のフォーマット）で、選択された位置に出力してもよい。ＪＡＲファイルの存在は、実行可能コンピュータプログラムが存在し、その中のデータが現在のものであり、そのように検証済みであることを示す。ＪＡＲファイルはまた、データ、データに関連付けられたメタデータ、遠隔位置、ソース識別子ステータスコード、チェックサムクエリ、少なくとも１つの検証関数、ビルドブレーク関数、又は前述のもののいずれかの以前のバージョンを、ＪＡＲファイル内の個別のアーティファクトとして含む。実行可能コンピュータプログラムが存在するかどうかを判定するステップは、ユーザによってファイル位置の目視検査を通して実行されてもよい。実行可能コンピュータプログラムが存在するかどうかを判定するステップは、特定の位置（例えば、ファイル、ウェブアドレス、又は電子メールアドレス）に警告を送信することを指定する、ビルドツール又は実行可能コンピュータプログラムのコードによって実行されてもよい。
【０１０６】
いくつかの例では、レポート関数は、実行可能コンピュータプログラムが存在すること又は存在しないことをユーザ又はプログラムに警告してもよい。ビルドがない場合、１つ以上の関数が、どのデータが現在のものではないのか、又は有効ではないのか（例えば、ビルドがどこで中断されたか）をユーザに自動的に通知してもよい。このような例では、レポート関数は、どのデータが最新ではないのか、又は有効ではないのか、及びそのデータを組み込む関連する関数を指定してもよい。
【０１０７】
いくつかの例では、方法３００は、データを組み込む１つ以上の関数を含む実行可能コンピュータプログラムを出力するステップを含む。いくつかの例では、データを組み込む１つ以上の関数を含む実行可能コンピュータプログラムを出力するステップは、実行可能コンピュータプログラムを、ウェブサイト、データベース、ファイルフォルダ、電子メールアドレスなどの電子ファイルに自動的に通信することを含んでもよい。このような例では、ビルドツールは、実行可能コンピュータプログラムを電子ファイルに出力するための命令を含んでもよい。実行可能コンピュータプログラム（例えば、実行可能コード、又はＪＡＲファイル全体）は、後で使用するためにコンピュータプログラム製品として出力されてもよい。
【０１０８】
いくつかの例では、方法３００は、実行可能コンピュータプログラムを（サービスとして）実行して、その中の１つ以上の関数を実行するステップを含む。例えば、実行可能コンピュータプログラムは、データを使用して、１つ以上の関数で１つ以上のクエリを実行して出力を提供してもよい。出力は、特定の質問への回答、又は実行可能コンピュータプログラムが回答するように構築されているより大きい質問への回答の中のフィードであってもよい。実行可能コンピュータプログラムの実行するステップは、コンピュータ、コンピュータネットワーク、又はその中の関数を実行するために備えられた他の電子デバイス上で実行可能コンピュータプログラムを実行することを含んでもよい。
【０１０９】
図４は、一実施形態による、ソースコード４１０上でビルドツール４３０を実行するプロセス４００のブロック図である。本明細書に開示されるように、ソースコード４１０は、１つ以上の関数４１２、１つ以上のチェックサムクエリ４１４、少なくとも１つの検証関数４１５、ビルドブレーク関数４１６、又は前述のものの組合せを含んでもよい。ソースコード４１０は、データ４１１及びソース識別子ステータスコード４１３の参照位置を含んでもよい。
【０１１０】
ソースコード４１０は、非一過性のコンピュータ可読メモリ記憶媒体上に配置されてもよい。例えば、ソースコード４１０は、ハードドライブ、メモリスティック、プロセッサ、ＲＡＭ、ＲＯＭ、ディスク、又は任意の他の非一過性のコンピュータ可読記憶媒体に記憶されてもよい。ソースコード４１０は、本明細書に開示されるようなオープン標準フォーマットとすることができる。
【０１１１】
データ４１１は、ソースコード４１０に記憶されてもよい。いくつかの例では、データは、ソースコード４１０によって参照されるリポジトリ、アーカイブ、又はライブラリに記憶されてもよい。したがって、データは、直接又は依存関係として、ソースコードに含まれてもよい。データ４１１は、ソースコード４１０の他の構成要素によってアクセス可能及び使用可能であってもよい。
【０１１２】
１つ以上の関数４１２はそれぞれ、クエリ、クエリに回答するためのデータ４１１、又はソースコード内のデータ４１１の位置への参照を含んでもよい。いくつかの例では、１つ以上の関数４１２は、本明細書に開示されるように、データ４１１が取得された遠隔位置についてのソース識別子ステータスコード４１３を含んでもよい。したがって、１つ以上の関数４１２のそれぞれは、データ４１１に基づいてクエリに要求及び回答する完全な手段を提供することができる。
【０１１３】
ソースコードは、ソース識別子ステータスコード４１３、チェックサムクエリ４１４、及びデータ４１１が現在のものであり有効であることを一括して検証するための少なくとも１つの検証関数４１５を含む。例えば、データが変化したかどうかを判定するために、ソース識別子ステータスコード４１３（例えば、チェックサム又はハッシュ）が、遠隔位置にある現在のソース識別子ステータスコードと比較される。
【０１１４】
１つ以上のチェックサムクエリ４１４は、遠隔位置の電子アドレスにある特定の関数内のデータに対応する遠隔位置から、（例えば、データに関連付けられた）ソースコードに記憶されている現在のソース識別子ステータスコードにアクセスして取得するための命令を含んでもよい。いくつかの例では、１つ以上のチェックサムクエリ４１４は、遠隔位置の電子アドレス、及び特定の関数内のデータに対応する遠隔位置から現在のソース識別子ステータスコードにアクセスして取得するための命令を含んでもよい。１つ以上のチェックサムクエリ４１４は、特定の関数内のデータに対応するソース識別子ステータスコード４１３と、データが取得された遠隔位置の電子アドレスにある現在のソース識別子ステータスコードとを比較するための命令を含む。チェックサムクエリ４１４は、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致するかどうかを判定する。
【０１１５】
ソースコード４１０は、１つ以上の関数のそれぞれ、又は遠隔位置から取得されたデータを含む１つ以上の関数のそれぞれに対応するソース識別子ステータスコード４１３及びチェックサムクエリ４１４を含んでもよい。ソースコード４１０は、ソースコード４１０の関数におけるソース識別子ステータスコード４１３のそれぞれを、それに対応する現在のソース識別子ステータスコードを用いてチェックするための命令を有する、単一のチェックサムクエリ４１４を含んでもよい。
【０１１６】
いくつかの例では、チェックサムクエリ４１４は、データ４１１が以前に依存関係を介してチェックされている場合などに一部のデータ４１１のビルドにおいて実行されない場合がある。しかしながら、ビルドが実行されるたびに、少なくとも１つの検証関数４１５が実行される。
【０１１７】
少なくとも１つの検証関数４１５は、データ４１１にアクセスし、データ４１１上で１つ以上の関数を実行して、データが、選択されたフォーマット（例えば、ＸＭＬ、ＨＴＭＬなど）であるかどうか、選択された範囲の値を含むかどうか、選択されたタイプの値（例えば、日、分、グラム、メートル、密度など）を含むかどうか、又は選択された範囲若しくはタイプの出力値を生成するかどうかを判定するための命令を含んでもよい。少なくとも１つの検証関数４１５は、選択された標準に従ってデータが有効であるかどうかを判定する。少なくとも１つの検証関数４１５は、本明細書に開示されるように、データにアクセスし、データ４１１の１つ以上の値が選択された条件（例えば、選択された範囲の値など）を満たすかどうか、又はデータ４１１のフォーマットが選択されたフォーマットであるかどうかを判定する関数を含んでもよい。したがって、１つ以上の関数４１２は、データが選択された条件を満たしているためデータが有効であること、又はデータが選択された条件を満たしていないためデータが無効であることを示す、クエリに対する回答を提供することができる。
【０１１８】
ビルドブレーク関数４１６は、１つ以上の関数のうちの少なくとも１つの中のデータに対応するソース識別子ステータスコード及び現在のソース識別子ステータスコードが一致しない場合、又は少なくとも１つの検証関数がデータは無効であると判定した場合にビルドを停止するための命令４１７を含む。ビルドブレーク関数４１６は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、データが有効であると検証された場合に実行可能コンピュータプログラムを出力するための命令４１８を含む。
【０１１９】
ビルドツール４３０は、Ａｐａｃｈｅ  Ａｎｔ、Ａｐａｃｈｅ  Ｍａｖｅｎ、Ｇｒａｄｌｅ、ＭＳＢｕｉｌｄ、ｓｂｔ、Ｗａｆなどの、本明細書に開示されるビルドツールのいずれかを含んでもよい。ソースコード４１０は、ビルドツール４３０を含むコンピュータ上に構築されるか、又はコンピュータに通信されてもよい。例えば、ソースコード４１０又はデータ４１１及びその中の１つ以上の関数４１２は、未構築のコンピュータプログラム製品として記憶されてもよい。ビルドツール４３０を使用して、ソースコード４１０を、検証済みのアーカイブフォーマットなどで検証済みのデータを組み込む実行可能コンピュータプログラム４３２に構築してもよい。例えば、ビルドツール４３０を使用して、ソースコード４１０を、データ４１１が１つ以上のアーカイブ又はライブラリとして含まれたＪＡＲファイルに構築してもよい。実行可能コンピュータプログラム４３２は、本明細書に開示されるような関数におけるクエリに回答するための関数及び検証済みのデータを含む。例では、実行可能コンピュータプログラム４３２は、１つ以上のデータ４１１、１つ以上の関数４１２、ソース識別子ステータスコード４１３、遠隔位置のアドレス、チェックサムクエリ４１４、少なくとも１つの検証関数、ビルドブレーク関数４１６、メタデータ、又は前述のもののいずれかの以前のバージョンと共に、検証済みのアーカイブフォーマットファイル（例えば、ＪＡＲファイル）にある。ＪＡＲファイルの構成要素は、個々の構成要素（例えば、アーティファクト）としてＪＡＲファイルに記憶されてもよい。ビルドツール４３０は、チェックサムクエリ、１つ以上の検証関数、変換関数を実施し、ソースコード４１０を、データ４１１を用いて１つ以上の関数４１２を実行することが可能な実行可能コンピュータプログラムにコンパイルする。
【０１２０】
ビルドツール４３０は、ビルドブレーク関数４１６に基づいてビルドを中断することができる。このような例では、ビルドツール４３０は、ビルドが中断されているという表示４３４を提供してもよい。例えば、ビルドツール４３０は、レポート関数に関して本明細書に開示されるように、ビルドが中断されていることを示すテキストを含むレポートを出力してもよい。このような例（図示せず）では、ソースコード４１０は、本明細書に開示されるように、レポート関数を含んでもよい。
【０１２１】
図５は、１つ以上の実施形態による、検証済みのデータが含まれた実行可能コンピュータプログラムを作成及び実行するためのコンピュータシステム５００の概略図である。コンピュータシステム５００は、遠隔位置５２０にアクセスできるコンピュータ５１０を含む。コンピュータ５１０は、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、ネットワーク、クラウドコンピューティングデバイス、タブレット、スマートフォンなど、本明細書に開示される任意のコンピュータと同様又は同一であってもよい。例えば、コンピュータ５１０は、インターネット、イントラネット、クラウドストレージなどを介して遠隔位置５２０にアクセスするための機器及びプログラミングを有してもよい。コンピュータ５１０は、その中にソースコード４１０を記憶する。例えば、ソースコード４１０は、コンピュータ５１０内のメモリ（例えば、ＲＡＭ若しくはＲＯＭ）、プロセッサ、又は他の記憶デバイス（例えば、ディスク）のうちの１つ以上に記憶されてもよい。
【０１２２】
コンピュータ５１０は、ソースコード４１０を構築するために使用されてもよく、又は遠隔位置５２０（例えば、インターネット接続を介したウェブサイト、イントラネット接続を介したデータベース、ディスク、ＵＳＢドライブなど）からソースコード４１０の少なくとも一部を受信してもよい。例えば、コンピュータ５１０は、インターネット接続を介して遠隔位置５２０に動作可能に結合されるか、又は結合可能である。このような例では、コンピュータ５１０は、選択されたタイプのデータのリポジトリを含むウェブページにアクセスし、ウェブページから、対応するソース識別子ステータスコードと共に前記データをダウンロード５１５することができる。遠隔位置５２０は、サーバ、コンピュータなどの第２のコンピューティングデバイス上に記憶され、そこから提供されてもよい。
【０１２３】
コンピュータ５１０は、遠隔位置５２０のアドレス、データ、及び対応するソース識別子ステータスコードをソースコード４１０内に記憶してもよい。ソースコード４１０は、本明細書に開示されるようなチェックサムクエリ及びビルドブレーク関数を含む。
【０１２４】
コンピュータ５１０は、ビルドツール４３０をその中に記憶してもよい。ビルドツール４３０は、本明細書に記載されているものであってもよい。ビルドツール４３０は、実行時に、ソースコードをコンピュータ実行可能プログラムにコンパイルし、リンクし、パッケージ化してもよい。ビルドツール４３０は、実行時に、データが記憶されているそれぞれのアーティファクトにおけるデータの依存関係をチェックしてもよい。例えば、ビルドツール４３０は、チェックサムクエリを実行５３５して、データに関連付けて記憶されたソース識別子ステータスコードが、遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定してもよい。ビルドツール４３０は、実行時に、コンパイルされたフォーマットのデータの有効性をテストしてもよい。例えば、ビルドツール４３０は、少なくとも１つの検証関数を実行して、データの有効性を判定してもよい。ビルドツール４３０は、ビルドブレーク関数を実行して、データのセットのソース識別子ステータスコードが現在のソース識別子ステータスコードと一致しない場合、又は少なくとも１つの検証関数がデータは無効であると判定した場合にビルドを停止する。したがって、ビルドツール４３０の製品（例えば、実行可能コンピュータプログラム）は、有効かつ最新のデータのみを含む。ソースコード４１０又は実行可能コンピュータプログラム４３２は、コンピュータプログラム製品又はその一部として使用されてもよい。
【０１２５】
上記のように、コンピュータ５１０は、キーボード、スクリーン、タッチスクリーン、マウスなどのうちの１つ以上などのユーザインターフェース５１４を含んでもよい。ソースコード４１０は、ユーザインターフェース５１４を使用してビルド又は選択されてもよい。ビルドツール４３０は、ユーザインターフェース５１４を使用して選択及び実行されてもよい。ソースコード及び実行可能コンピュータプログラムは、ユーザインターフェース５１４上で閲覧されてもよい。ビルドツール４３０は、ビルドが停止されたという視覚的な表示（例えば、ソース識別子ステータスコード及び現在のソース識別子ステータスコード）を出力してもよい。ビルドツール４３０は、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間に対応する不一致があるデータ、データに対応する遠隔位置、及びソースコード内のそれらが位置する箇所を示してもよい。ビルドツール４３０は、データ、データに対応する遠隔位置、及びソースコード内のそれらが位置する箇所が、少なくとも１つの検証関数に従って無効であると判定されたことを示してもよい。
【０１２６】
ビルドツール４３０は、実行可能コンピュータプログラムなど、ビルドが完了したという視覚的な表示を出力してもよい。例えば、ビルドツール４３０は、実行可能コンピュータプログラムをコンピュータ５１０に出力して、ユーザインターフェース５１４上に表示してもよい。
【０１２７】
図６は、一実施形態による、本明細書に開示される方法のいずれかを実行するためのシステム６００の概略図である。システム６００は、方法１００、２００、又は３００などの本明細書に開示される方法のいずれかを実施するように構成されてもよい。システム６００は、少なくとも１つのコンピューティングデバイス６１０を含む。いくつかの実施形態では、システム６００は、ネットワーク接続を介してシステム６００に動作可能に結合されるような、１つ以上の追加のコンピューティングデバイス６１２を含んでもよい。少なくとも１つのコンピューティングデバイス６１０は、方法１００、２００、又は３００などの上記の動作のうちの１つ以上を実行するように構成され得る例示的なコンピューティングデバイスである。少なくとも１つのコンピューティングデバイス６１０は、１つ以上のサーバ、１つ以上のコンピュータ（例えば、デスクトップコンピュータ、ラップトップコンピュータ）、１つ以上のモバイルコンピューティングデバイス（例えば、スマートフォン、タブレットなど）を含むことができる。コンピューティングデバイス６１０は、少なくとも１つのプロセッサ６２０、メモリ６３０、記憶デバイス６４０、入出力（「Ｉ／Ｏ」）インターフェース６５０、及び通信インターフェース６６０を備えることができる。図６では例示的なコンピューティングデバイス６１０を示しているが、図６に示す構成要素は、システム６００又はコンピューティングデバイス６１０を制限することを意図するものではない。いくつかの実施形態では、追加又は代替の構成要素が使用されてもよい。さらに、いくつかの実施形態では、システム６００又はコンピューティングデバイス６１０は、図６に示す構成要素よりも少ない構成要素を含むことができる。例えば、システム６００は、１つ以上の追加のコンピューティングデバイス６１２を含まなくてもよい。いくつかの実施形態では、少なくとも１つのコンピューティングデバイス６１０は、サーバファーム、コンピュータネットワーク、又はコンピューティングデバイスのクラスタなどの複数のコンピューティングデバイスを含んでもよい。図６に示すコンピューティングデバイス６１０の構成要素について、以下でさらに詳細に説明する。
【０１２８】
いくつかの実施形態では、プロセッサ６２０は、コンピュータプログラムを構成するものなどの命令を実行するための（例えば、ソースコード内の関数を実行するため、又はビルドツールを実行するための）ハードウェアを含む。例えば、命令を実行するために、プロセッサ６２０は、内部レジスタ、内部キャッシュ、メモリ６３０、又は記憶デバイス６４０から命令を取り出し（又はフェッチし）、それらを復号及び実行してもよい。特定の実施形態では、プロセッサ６２０は、データ、ソース識別子ステータスコード、遠隔位置アドレス、関数などのための１つ以上の内部キャッシュを含んでもよい。一例として、プロセッサ６２０は、１つ以上の命令キャッシュ、１つ以上のデータキャッシュ、及び１つ以上の変換索引バッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）を含んでもよい。命令キャッシュ内の命令は、メモリ６３０又はストレージ６４０内の命令のコピーであってもよい。いくつかの実施形態では、プロセッサ６２０は、本明細書に開示される方法のいずれかの１つ以上の部分を実行するように構成されてもよい（例えば、プロセッサ６２０に記憶される、又はプロセッサ６２０によって実行されるプログラミングを含んでもよい）。
【０１２９】
いくつかの実施形態では、プロセッサ６２０は、方法１００、２００、若しくは３００などで本明細書に開示される動作のいずれかを実行するように、又はコンピューティングデバイス６１０又はシステム６００の１つ以上の部分に本明細書に開示される動作のうちの少なくとも１つを実行させるように構成される。このような構成は、少なくとも１つのプロセッサ６２０によって実行可能である１つ以上の動作プログラム（例えば、コンピュータプログラム製品）を含むことができる。例えば、プロセッサ６２０は、コンピュータプログラム製品の出力（及びデータの有効性）の検証を提供するために、ビルドツールを使用してソースコードを自動的に構築するように構成されてもよい。検証は、前述のように実行可能コンピュータプログラムの存在のみによって提供される。少なくとも１つのプロセッサ６２０は、実行可能コンピュータプログラムをユーザインターフェース又は追加のコンピューティングデバイスに出力するように構成されてもよい。
【０１３０】
少なくとも１つのコンピューティングデバイス６１０は、少なくとも１つの非一過性のメモリ記憶媒体（例えば、メモリ６３０及び／又はストレージ６４０）を含んでもよい。コンピューティングデバイス６１０は、プロセッサ６２０に動作可能に結合されたメモリ６３０を含んでもよい。メモリ６３０は、ビルドツール、ソースコード、データ、メタデータ、及びコンピュータプログラム、並びにプロセッサ６２０による実行のための実行可能コンピュータプログラムを記憶するために使用されてもよい。メモリ６３０は、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、ソリッドステートディスク（ＳＳＤ）、フラッシュ、相変化メモリ（ＰＣＭ：Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、又は他のタイプのデータストレージのうちの少なくとも１つ以上を含んでもよい。メモリ６３０は、内部メモリ又は分散メモリであってもよい。
【０１３１】
コンピューティングデバイス６１０は、データ、ソースコード、ビルドツール、命令などを記憶するためのストレージを有する記憶デバイス６４０を含んでもよい。記憶デバイス６４０は、少なくとも１つのプロセッサ６２０に動作可能に結合されてもよい。いくつかの実施形態では、記憶デバイス６４０は、上記のもののいずれかなどの非一過性のメモリ記憶媒体を備えることができる。記憶デバイス６４０（例えば、非一過性のメモリ記憶媒体）は、ハードディスクドライブ（ＨＤＤ）、フロッピーディスクドライブ、フラッシュメモリ、光ディスク、磁気光学ディスク、磁気テープ、又はユニバーサルシリアルバス（ＵＳＢ）ドライブ、又はこれらのうちの２つ以上の組合せを含んでもよい。記憶デバイス６４０は、取り外し可能又は取り外し不可能な（又は固定された）媒体を含んでもよい。記憶デバイス６４０は、コンピューティングデバイス６１０の内部又は外部にあってもよい。いくつかの実施形態では、記憶デバイス６４０は、不揮発性の固体メモリを含んでもよい。いくつかの実施形態では、記憶デバイス６４０は、読み取り専用メモリ（ＲＯＭ）を含んでもよい。必要に応じて、このＲＯＭは、マスクプログラムＲＯＭ、プログラムＲＯＭ（ＰＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＰＲＯＭ（ＥＥＰＲＯＭ）、電気的変更可能ＲＯＭ（ＥＡＲＯＭ）、若しくはフラッシュメモリ、又はこれらのうちの２つ以上の組合せとすることができる。
【０１３２】
いくつかの実施形態では、ソースコード、ビルドツール、データ、遠隔位置アドレス、コンピュータプログラム、実行可能コンピュータプログラムなどのうちの１つ以上は、少なくとも１つのプロセッサ６２０（例えば、プロセッサの内部キャッシュ）、メモリ６３０、又は記憶デバイス６４０のうちの１つ以上などのメモリ記憶媒体に記憶されてもよい。いくつかの実施形態では、少なくとも１つのプロセッサ６２０は、メモリ６３０又は記憶デバイス６４０のうちの１つ以上などのメモリ記憶媒体に（例えば、バス６７０を介して）アクセスするように構成されてもよい。例えば、少なくとも１つのプロセッサ６２０は、データ（例えば、ルックアップテーブル、フォームデータ、ＮＣＣＩコード、法則など）を受信し、メモリ記憶媒体内の複数のデータ点として記憶してもよい。少なくとも１つのプロセッサ６２０は、ビルドツールを実行して、中にある１つ以上の関数、データ、遠隔位置アドレス、ソース識別子ステータスコード、現在のソース識別子ステータスコード、１つ以上のチェックサムクエリ、検証関数、ビルドブレーク関数などを使用して、ソースコードを実行可能コンピュータプログラムに構築してもよい。例えば、少なくとも１つのプロセッサ６２０は、メモリ６３０又は記憶デバイス６４０などのメモリ記憶媒体内のソースコード又はその一部（例えば、個々の関数）にアクセスしてもよい。
【０１３３】
コンピューティングデバイス６１０は、１つ以上のＩ／Ｏデバイス／インターフェース６５０も含み、これらが設けられることにより、ユーザは、コンピューティングデバイス６１０との間で、データへの入力を提供し、データからの出力を受信し、また別の方法でデータを転送することができる。これらのＩ／Ｏデバイス／インターフェース６５０は、マウス、キーパッド若しくはキーボード、タッチスクリーン、スクリーン、カメラ、光スキャナ、ネットワークインターフェース、ウェブベースのアクセス、モデム、ポート、他の既知のＩ／Ｏデバイス、又はこのようなＩ／Ｏデバイス／インターフェースの６５０の組合せを含んでもよい。タッチスクリーンは、スタイラス又は指を用いてアクティブにされてもよい。
【０１３４】
Ｉ／Ｏデバイス／インターフェース６５０には、グラフィックエンジン、ディスプレイ（例えば、ディスプレイ画面又はモニタ）、１つ以上の出力ドライバ（ディスプレイドライバ）、１つ以上のオーディオスピーカ、及び１つ以上のオーディオドライバを含むがこれらに限定されない、ユーザに出力を提示するための１つ以上のデバイスが含まれ得る。特定の実施形態では、デバイス／インターフェース６５０は、ユーザに提示するためのグラフィックデータ（例えば、ポータル及び／又はテキストによる説明）をディスプレイ（例えば、家庭又はオフィスのコンピュータ画面）に提供するように構成される。グラフィカルデータは、１つ以上のグラフィカルユーザインターフェース及び／又は特定の実装に役立つ可能性がある任意の他のグラフィカルコンテンツを表してもよい。
【０１３５】
コンピューティングデバイス６１０は、通信インターフェース６６０をさらに含むことができる。通信インターフェース６６０は、ハードウェア、ソフトウェア、又はその両方を含むことができる。通信インターフェース６６０は、コンピューティングデバイス６１０と１つ以上の追加のコンピューティングデバイス６１２又は１つ以上のネットワークとの間の通信（例えば、パケットベースの通信など）のための１つ以上のインターフェースを提供することができる。例えば、通信インターフェース６６０は、イーサネット又は他の有線ベースのネットワークと通信するためのネットワークインターフェースコントローラ（ＮＩＣ）若しくはネットワークアダプタ、又はＷＩ−ＦＩなどの無線ネットワークと通信するための無線ＮＩＣ（ＷＮＩＣ）又は無線アダプタを含んでもよい。
【０１３６】
任意の好適なネットワーク及び任意の好適な通信インターフェース６６０が使用されてもよい。例えば、コンピューティングデバイス６１０は、アドホックネットワーク、パーソナルエリアネットワーク（ＰＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、若しくはインターネットの１つ以上の部分、又はこれらのうちの２つ以上の組合せと通信してもよい。これらのネットワークのうちの１つ以上の１つ以上の部分は、有線又は無線であってもよい。一例として、システム６００又はコンピューティングデバイス６１０の１つ以上の部分は、無線ＰＡＮ（ＷＰＡＮ）（例えば、ＢＬＵＥＴＯＯＴＨ（登録商標）  ＷＰＡＮなど）、ＷＩ−ＦＩネットワーク、ＷＩ−ＭＡＸ（登録商標）ネットワーク、携帯電話ネットワーク（例えば、汎欧州デジタル移動電話方式（ＧＳＭ：Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）ネットワークなど）若しくは他の好適な無線ネットワーク、又はそれらの組合せと通信してもよい。コンピューティングデバイス６１０は、必要に応じて、これらのネットワークのいずれかに好適な任意の通信インターフェース６６０を含んでもよい。
【０１３７】
いくつかの実施形態では、コンピューティングデバイス６１０は、ネットワーク接続を有するコンピュータ又はサーバを含んでもよく、コンピュータ又はサーバはその中に、ソースコード（又はその一部）、コンピュータプログラム、実行可能なコンピュータプログラム、遠隔位置アドレスなどを出力するように適合されたプログラミングを含む。
【０１３８】
コンピューティングデバイス６１０は、バス６７０を含んでもよい。バス６７０は、コンピューティングデバイス６１０の構成要素を互いに結合するハードウェア、ソフトウェア、又はその両方を含むことができる。例えば、バス６７０には、アクセラレーテッドグラフィックスポート（ＡＧＰ：Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）バス又は他のグラフィックバス、拡張業界標準アーキテクチャ（ＥＩＳＡ：Ｅｎｈａｎｃｅｄ  Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、フロントサイドバス（ＦＳＢ：ｆｒｏｎｔ−ｓｉｄｅ  ｂｕｓ）、ＨＹＰＥＲＴＲＡＮＳＰＯＲＴ（ＨＴ）相互接続、業界標準アーキテクチャ（ＩＳＡ：Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＩＮＦＩＮＩＢＡＮＤ相互接続、少ピン数（ＬＰＣ：ｌｏｗ−ｐｉｎ−ｃｏｕｎｔ）バス、メモリバス、マイクロチャネルアーキテクチャ（ＭＣＡ：Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、周辺機器相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、ＰＣＩエクスプレス（ＰＣＩｅ：ＰＣＩ−Ｅｘｐｒｅｓｓ）バス、シリアルアドバンストテクノロジーアタッチメント（ＳＡＴＡ：ｓｅｒｉａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ）バス、ビデオエレクトロニクススタンダードアソシエーションローカル（ＶＬＢ：Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ  ｌｏｃａｌ）バス、若しくは別の好適なバス、又はそれらの組合せが含まれ得る。
【０１３９】
方法１００、２００、又は３００などにおける、本明細書に記載の動作のいずれも、コンピューティングデバイス６１０によって、かつ／又はコンピューティングデバイス６１０において実行され得ることを理解されたい。追加として、又は代替的として、本明細書に記載の動作のうちの１つ以上は、追加のコンピューティングデバイス６１２などの別のコンピューティングデバイスによって、又は別のコンピューティングデバイスにおいて実行されてもよい。例えば、動作のいくつかは、パーソナルコンピュータ、スマートフォンなど（例えば、電子メッセージの受信）などの、ユーザのパーソナルコンピューティングデバイス（例えば、追加のコンピューティングデバイス６１２）によって、又はユーザのパーソナルコンピューティングデバイスに対して実行されてもよく、一方、動作のうちの１つ以上は、ユーザのパーソナルコンピューティングデバイスに動作可能に接続され得る、サーバなどの別のコンピューティングデバイス（例えば、コンピューティングデバイス６１０）によって実行されてもよい。したがって、システム６００の１つ以上の要素を互いに遠隔に分散させることができ、かつ／又はシステム６００の１つ以上の要素を併置することができる。例えば、データ又はソースコードを入力することは、追加のコンピューティングデバイス６１２を介して、コンピュータプログラムの作成者がネットワーク接続を介してデータ（及び関連するソース識別子ステータスコード）若しくはソースコードの一部をコンピューティングデバイス６１０に手動で提供することによって、又はデータ転送ルーチン、オーダ、ダンプ、若しくは他のメカニズムを介してそれらを自動的に転送することによって実行されてもよい。いくつかの実施形態では、データ、ソースコード（例えば、その一部）、又は実行可能コンピュータプログラムは、追加のコンピューティングデバイス６１２からコンピューティングデバイス６１０への直接若しくは間接のいずれかでのウェブ接続又はネットワーク接続を介するなどして、追加のコンピューティングデバイス６１２上に表示されてもよい。
【０１４０】
再び図４を参照すると、コンピュータプログラム製品は、ソースコード４１０、実行可能コンピュータプログラム４３２、又はそれらの一部のうちの１つ以上を含んでもよい。いくつかの例では、ソースコード内の１つ以上の関数、チェックサムクエリ（例えば、関数）、ビルドブレーク関数、検証関数などが、（例えば、ソースコード内で）コンピュータプログラムを組み立てるための個々の構築ブロックとして利用可能であってもよい。いくつかの例では、実行可能コンピュータプログラム内の１つ以上の関数、チェックサムクエリ（例えば、関数）、ビルドブレーク関数、検証関数などが、より大きい実行可能コンピュータプログラムを組み立てるための個々の構築ブロックとして利用可能であってもよい。
【０１４１】
図７は、一実施形態による、例示的なコンピュータプログラム製品７００のブロック図である。コンピュータプログラム製品７００は、本明細書に開示されるように、コンピュータプログラムに組み込まれたデータを検証する方法のための命令を記憶するように構成される。非一過性の信号伝達媒体７１０は、コンピュータ可読媒体７３０（例えば、読み取り専用メモリ、ＲＡＭ、磁気ディスクドライブ若しくはソリッドステートディスクなどのハードドライブ、フラッシュメモリスティック、プロセッサの内部キャッシュ、又は光ディスク）、コンピュータ記録可能媒体７４０（例えば、ＲＡＭ、ハードドライブ、メモリスティック、光ディスクなど）、コンピュータ通信媒体７５０（例えば、ＢＵＳの内部キャッシュなど）、又はそれらの組合せを含んでもよく、プログラミング命令７２０（例えば、コンピュータコード）を記憶する関連するコンピュータの処理ユニットを、本明細書に記載の方法又は動作のすべて又は一部を実行するように構成することができるプログラミング命令７２０を記憶する。命令は、例えば、「少なくとも１つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む１つ以上の関数を構築するステップ」のための１つ以上の機械可読で実行可能な命令を含んでもよい。これらの命令は、例えば、「少なくとも１つの遠隔位置からのソース識別子ステータスコードを１つ以上の関数に組み込むステップであって、ソース識別子ステータスコードが、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する、ステップ」のための１つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述するステップ」のための１つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ソースコードに少なくとも１つの検証関数を提供するステップであって、少なくとも１つの検証関数が、データが有効であることを保証するためにデータに対して１つ以上のテストを実行するように構成される、ステップ」のための１つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ソースコードにビルドブレーク関数を追加するステップであって、ビルドブレーク関数が、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも１つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ステップ」のための１つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ビルドツールを実行して、ソースコードを少なくとも１つの遠隔位置から取得されたデータを使用して１つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップ」のための１つ以上の機械可読で実行可能な命令を含んでもよい。命令は、ビルドツール又はその位置、並びにチェックサムクエリ及び少なくとも１つの検証関数を実行し、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なソースコード上のビルドツールを実行するための命令を含んでもよい。
【０１４２】
いくつかの実施形態では、命令は、本明細書に開示される方法１００、２００、又は３００の任意の部分を任意の組合せで含んでもよい。例えば、命令は、本明細書に開示されるような１つ以上の変換関数を含んでもよい。
【０１４３】
いくつかの例では、コンピュータプログラム製品７００は、ソースコード（例えば、プログラミング命令７２０）、又は少なくとも１つの遠隔位置から取得されたデータを組み込む１つ以上の関数を含む実行可能コンピュータプログラムを含んでもよい。ソースコード又は実行可能コンピュータプログラムは、１つ以上の関数内に少なくとも１つの遠隔位置からのソース識別子ステータスコードを含んでもよく、ソース識別子ステータスコードは、少なくとも１つの遠隔位置からデータが取得された日付及び位置に対応する。ソースコード又は実行可能コンピュータプログラムは、ソース識別子ステータスコードが少なくとも１つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも１つの遠隔位置に問い合わせるチェックサムクエリを含んでもよい。ソースコード又は実行可能コンピュータプログラムは、選択された基準に従ってデータが有効であるかどうかを判定するためにデータに問い合わせる少なくとも１つの検証関数を含んでもよい。ソースコード又は実行可能コンピュータプログラムは、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致する場合にのみ、コンピュータプログラムビルドが継続するように定める、ビルドブレーク関数を含んでもよい。ソースコード又は実行可能コンピュータプログラムは、ＸＭＬ又は本明細書に開示されるオープン標準フォーマットのいずれかなどの電子データ用のオープン標準フォーマットであってもよい。
【０１４４】
いくつかの例では、コンピュータプログラム製品７００は、（例えば、データが１つ以上の検証済みのライブラリ、テーブルなどとして組み込まれた）本明細書に開示される検証済みのアーカイブフォーマットのいずれかなどの実行可能コンピュータプログラムを含んでもよい。例えば、コンピュータプログラム製品７００は、ビルドツールを介してソースコードから構築されたコンピュータ実行可能コード（例えば、実行可能コンピュータプログラム）であってもよい。特定の例は、データが１つ以上の検証済みのライブラリとして組み込まれたＪＡＲファイルを含んでもよい。いくつかの例では、実行可能コード、データ、１つ以上の関数、チェックサムクエリ、少なくとも１つの検証関数、及びビルドブレーク関数が、ビルドツール（例えば、実行可能コンピュータプログラム）の出力のように存在してもよい。
【０１４５】
いくつかの例では、コンピュータプログラム製品は、関数を実行するための関連するデータを有する１つ以上の関数のコンピュータ実行可能コードのみであってもよい。このような例では、チェックサムクエリ、少なくとも１つの検証関数、及びビルドブレーク関数が、ビルド中にそれぞれの目的を果たしているので、ビルドツールの実行可能な出力として存在しなくてもよい。したがって、出力される実行可能コンピュータプログラムは、検証関数（例えば、チェックサムクエリ、検証関数、及びビルドブレーク関数）の余分なコードなしで関数を実行するコンパクトで信頼できる手段を提供することができる。
【０１４６】
本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、遠隔位置から取得されたデータを参照するコンピュータプログラムを構築及び検証するための現在のシステム及び方法に多くの改善をもたらす。本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、データ、及びデータを使用して結果を判定する関数の結果の迅速な自動検証を可能にする。例えば、本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、ビルド時のデータのステータス（例えば、データが現在のものであるかどうか）の検証を提供する。したがって、ビルドプロセスが成功した結果である実行可能コンピュータコードの存在のみによって、ユーザは、データが現在のものであり有効であることを認識し、それに基づく関数は、有効な出力を提供する。データをソースコード及び実行可能コンピュータプログラムに直接含めることによって、実行可能コンピュータプログラムは、遠隔位置に記憶されたデータを利用するプログラムよりも必要な計算能力が少なくて済み、より速い処理時間を提供することができる。本明細書に開示される方法、コンピュータプログラム製品、及びシステムにより、データを全く別のソフトウェア構成要素であるかのように扱うことができる方法でデータをパッケージ化することが可能になる。したがって、単一のプロセス（例えば、ビルド）を使用して、データ及び１つ以上の関数（例えば、ソフトウェア）の有効性を検証することができる。また、単一のビルドツールを使用して、ソフトウェア（例えば、１つ以上の関数）とデータの両方を扱うことができる。これにより、ユーザは、テスト（例えば、チェックサムクエリ）に従ってデータが現在のものであることと、テスト（例えば、検証関数）に従ってデータ及びソフトウェアが有効であることとの両方を確認するための１つの一貫した技法を使用して、データとソフトウェアの両方を扱うことが可能になる。したがって、作業又はビルドツールの重複がなくなり、これにより処理の使用量が低下し、処理速度が向上する。したがって、本明細書に開示される方法、システム、及びコンピュータプログラム製品により、データ自体を再確認する必要がなくなる。さらに、方法、コンピュータプログラム製品、及びシステムは、古いデータを最新のデータに置き換える必要があることを即座に通知する。
【０１４７】
本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、データを組み込んで中の関数を実行する実行可能コンピュータプログラムの生成及び検証を、現在の方法及びシステムよりも、忠実に再現可能で高速なものにすることができる。１つ以上の関数及びそれに関連するデータを、コンピュータプログラム（例えば、複数の関数、チェックサムクエリ、ビルドブレーク関数など）のモジュールとして使用して、ソースコードフォーマットのコンピュータプログラムの高速なモジュール構築を提供することができる。ビルドツールを実行すると、データは最新であることが検証され、有効であることが検証され、コンピュータ可読かつ実行可能なフォーマット、又は少なくともそれにコンパイル可能なフォーマットに構築（コンパイルなど）される。これにより、現在の方法及びシステムよりも正確性が向上する。
【０１４８】
様々な態様及び実施形態が本明細書に開示されているが、他の態様及び実施形態も企図されている。本明細書に開示される様々な態様及び実施形態は、例示を目的とするものであり、限定することを意図するものではない。
【図１Ａ】
2022501735.tif 000003
【図１Ｂ】
2022501735.tif 000004
【図２】
2022501735.tif 000005
【図３】
2022501735.tif 000006
【図４】
2022501735.tif 000007
【図５】
2022501735.tif 000008
【図６】
2022501735.tif 000009
【図７】
2022501735.tif 000010
【国際調査報告】
2022501735.tif 000011