(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-26
(45)【発行日】2023-02-03
(54)【発明の名称】コンピュータプログラムに組み込まれたデータを自動的に検証する方法
(51)【国際特許分類】
G06F 8/30 20180101AFI20230127BHJP
G06F 8/65 20180101ALI20230127BHJP
G06F 11/36 20060101ALI20230127BHJP
【FI】
G06F8/30
G06F8/65
G06F11/36 196
(21)【出願番号】P 2021517317
(86)(22)【出願日】2019-09-26
(86)【国際出願番号】 US2019053112
(87)【国際公開番号】W WO2020069096
(87)【国際公開日】2020-04-02
【審査請求日】2021-05-21
(32)【優先日】2018-09-28
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】320010114
【氏名又は名称】コティヴィティ インコーポレイテッド
(74)【代理人】
【識別番号】110001210
【氏名又は名称】弁理士法人YKI国際特許事務所
(72)【発明者】
【氏名】クリール クリストファー テイラー
(72)【発明者】
【氏名】アルビス マイケル
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2003-256202(JP,A)
【文献】特開2013-077188(JP,A)
【文献】特開2017-016444(JP,A)
【文献】特表2015-526820(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/30
G06F 8/65
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
コンピュータプログラムに組み込まれたデータを検証する方法であって、
少なくとも1つの遠隔位置から取得されたデータを前記コンピュータプログラムのソースコードに組み込む1つ以上の関数を構築するステップと、
前記少なくとも1つの遠隔位置からのソース識別子ステータスコードを前記1つ以上の関数に組み込むステップであって、前記ソース識別子ステータスコードが、前記少なくとも1つの遠隔位置から前記データが取得された日付及び位置に対応する、ステップと、
前記ソース識別子ステータスコードが前記少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために前記少なくとも1つの遠隔位置に問い合わせるチェックサムクエリを前記ソースコードに記述するステップと、
前記ソースコードに少なくとも1つの検証関数を提供するステップであって、前記少なくとも1つの検証関数が、前記データが有効であることを保証するために前記データに対して1つ以上のテストを実行するように構成される、ステップと、
前記ソースコードにビルドブレーク関数を追加するステップであって、前記ビルドブレーク関数が、前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードが一致し、前記少なくとも1つの検証関数が前記データは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ステップと、
ビルドツールを実行して、前記ソースコードを前記少なくとも1つの遠隔位置から取得された前記データを使用して前記1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップと、
を含むことを特徴とする方法。
【請求項2】
請求項1に記載の方法であって、
少なくとも1つの遠隔位置から取得されたデータを前記コンピュータプログラムの前記ソースコードに組み込む1つ以上の関数を構築するステップが、前記データを前記コンピュータプログラム内にアーカイブすることを含む、
ことを特徴とする方法。
【請求項3】
請求項1に記載の方法であって、
前記ソースコードが電子データ用のオープン標準フォーマットである、
ことを特徴とする方法。
【請求項4】
請求項3に記載の方法であって、
オープン標準フォーマットがxmlフォーマットを含む、
ことを特徴とする方法。
【請求項5】
請求項1に記載の方法であって、
前記実行可能コンピュータプログラムが、前記データが1つ以上の検証済みライブラリとして組み込まれた検証済みのアーカイブフォーマットで出力される、
ことを特徴とする方法。
【請求項6】
請求項5に記載の方法であって、
前記検証済みのアーカイブフォーマットが署名付きJARファイルを含む、
ことを特徴とする方法。
【請求項7】
請求項1に記載の方法であって、
前記チェックサムクエリが、ソース識別子ステータスコードと、前記ソース識別子ステータスコードに対応する前記少なくとも1つの遠隔位置のユニフォームリソースロケータにおける前記現在のソース識別子ステータスコードとの間の対応関係を検査する、
ことを特徴とする方法。
【請求項8】
請求項7に記載の方法であって、
前記ソース識別子ステータスコードがチェックサム又はハッシュを含み、
前記現在のソース識別子ステータスコードが現在のチェックサム又は現在のハッシュを含む、
ことを特徴とする方法。
【請求項9】
請求項8に記載の方法であって、
前記1つ以上の関数が、前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードとの間の不一致に関するレポートを提供するとともにそれに関連するデータを識別するレポート関数を含む、
ことを特徴とする方法。
【請求項10】
請求項1に記載の方法であって、
前記ソースコードに少なくとも1つの検証関数を提供するステップであって、前記少なくとも1つの検証関数が、前記データが有効であることを保証するために前記データに対して1つ以上のテストを実行するように構成される、ステップが、前記データが前記ソースコードによって指定されたフォーマットであることを確認するために前記データをテストする関数を提供することを含む、
ことを特徴とする方法。
【請求項11】
請求項1に記載の方法であって、
前記ソースコードに少なくとも1つの検証関数を提供するステップであって、前記少なくとも1つの検証関数が、前記データが有効であることを保証するために前記データに対して1つ以上のテストを実行するように構成される、ステップが、前記データに前記少なくとも1つの検証テストの1つ以上の基準を満たす値が含まれていることを確認するために前記データをテストする関数を提供することを含む、
ことを特徴とする方法。
【請求項12】
請求項1に記載の方法であって、
前記少なくとも1つの遠隔位置からのソース識別子ステータスコードを前記1つ以上の関数に組み込むステップが、前記少なくとも1つの遠隔位置に対応するユニフォームリソース識別子からのチェックサム又はハッシュを前記1つ以上の関数に組み込むことを含む、
ことを特徴とする方法。
【請求項13】
請求項1に記載の方法であって、
前記実行可能コンピュータプログラム上で変換関数を実行して、前記実行可能コンピュータプログラムを第1のフォーマットから第2のフォーマットに変換するステップをさらに含む、
ことを特徴とする方法。
【請求項14】
請求項13に記載の方法であって、
前記第1のフォーマットがカンマ区切り値フォーマットであり、
前記第2のフォーマットがApache Avroフォーマットである、
ことを特徴とする方法。
【請求項15】
請求項13に記載の方法であって、
前記第1のフォーマットがカンマ区切り値フォーマットであり、
前記第2のフォーマットがJavaScriptオブジェクト表記法フォーマットである、
ことを特徴とする方法。
【請求項16】
請求項13に記載の方法であって、
前記第1のフォーマットが拡張マークアップ言語フォーマットであり、
前記第2のフォーマットがハイパーテキストマークアップ言語フォーマットである、
ことを特徴とする方法。
【請求項17】
請求項1に記載の方法であって、
ビルドツールを実行して前記ソースコードを実行可能コンピュータプログラムにコンパイルするステップが、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、又はWafを実行することを含む、
ことを特徴とする方法。
【請求項18】
コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法であって、
少なくとも1つの遠隔位置からのデータをソースコードに直接インポートするステップと、
前記少なくとも1つの遠隔位置からのソース識別子ステータスコードを前記ソースコードに組み込むステップであって、前記ソース識別子ステータスコードが、前記少なくとも1つの遠隔位置から前記データが取得された日付及び位置に対応する、ステップと、
前記ソース識別子ステータスコードが前記少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために前記少なくとも1つの遠隔位置に問い合わせるチェックサムクエリを前記ソースコードに記述するステップと、
前記ソースコードに少なくとも1つの検証関数を提供するステップであって、前記少なくとも1つの検証関数が、前記データが有効であることを保証するために前記データに対して1つ以上のテストを実行するように構成される、ステップと、
前記ソースコードにビルドブレーク関数を追加するステップであって、前記ビルドブレーク関数が、前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードが一致し、前記少なくとも1つの検証関数が前記データは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ステップと、
ビルドツールを実行して、前記ソースコードを前記少なくとも1つの遠隔位置から取得された前記データを使用する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップと、
第2のビルドツールにおいて前記実行可能コンピュータプログラムに対して変換関数を実行して、前記実行可能コンピュータプログラムを第1のフォーマットから第2のフォーマットに変換するステップであって、前記第2のビルドツールが、変換された前記データが有効であることを保証するために、変換された前記データに対して前記少なくとも1つの検証関数及びビルドブレーク関数を実行する、ステップと、
を含むことを特徴とする方法。
【請求項19】
請求項18に記載の方法であって、
少なくとも1つの遠隔位置からのデータをソースコードに直接インポートするステップが、前記ソースコードに前記データのアーカイブ又はライブラリを手動で構築する、
ことを含むことを特徴とする方法。
【請求項20】
請求項18に記載の方法であって、
少なくとも1つの遠隔位置からのデータをソースコードに直接インポートするステップが、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、又はWafを含む依存関係チェックを強制するビルドツールの標準的な依存関係インポートメカニズムを使用することを含む、
ことを特徴とする方法。
【請求項21】
請求項18に記載の方法であって、
前記少なくとも1つの遠隔位置からのソース識別子ステータスコードを前記ソースコードに組み込むステップが、前記ソース識別子ステータスコードを前記ソースコード内の前記データに関連付けることを含む、
ことを特徴とする方法。
【請求項22】
請求項21に記載の方法であって、
前記少なくとも1つの遠隔位置からのソース識別子ステータスコードを前記ソースコードに組み込むステップが、チェックサム又はハッシュを前記ソースコードに追加する、
ことを特徴とする方法。
【請求項23】
請求項18に記載の方法であって、
前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードとの間の不一致に関するレポートを提供するとともにそれに関連するデータを識別するレポート関数を、前記ソースコードに追加するステップをさらに含む、
ことを特徴とする方法。
【請求項24】
請求項18に記載の方法であって、
ビルドツールを実行して、前記ソースコードを実行可能コンピュータプログラムにコンパイルするためのコンピュータプログラムビルドを実行するステップが、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、又はWafを実行することを含む、
ことを特徴とする方法。
【請求項25】
請求項18に記載の方法であって、
前記ソースコードが電子データ転送用のオープン標準フォーマットである、
ことを特徴とする方法。
【請求項26】
請求項25に記載の方法であって、
前記オープン標準フォーマットがxmlフォーマットを含む、
ことを特徴とする方法。
【請求項27】
請求項18に記載の方法であって、
前記実行可能コンピュータプログラムが、前記データが1つ以上の検証済みライブラリとして組み込まれたJARファイルで出力される、
ことを特徴とする方法。
【請求項28】
コンピュータに、
少なくとも1つの遠隔位置から取得されたデータを組み込む1つ以上の関数と、
前記1つ以上の関数内の前記少なくとも1つの遠隔位置からのソース識別子ステータスコードであって、前記少なくとも1つの遠隔位置から前記データが取得された日付及び位置に対応するソース識別子ステータスコードと、
前記ソース識別子ステータスコードが前記少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために前記少なくとも1つの遠隔位置に問い合わせる、ソースコード内のチェックサムクエリと、
前記データが有効であることを保証するために前記データに対して1つ以上のテストを実行するように構成された少なくとも1つの検証関数と、
前記ソース識別子ステータスコードと前記現在のソース識別子ステータスコードが一致し、前記少なくとも1つの検証関数が前記データは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定めるビルドブレーク関数と、
を含むソースコードを
実行させる、
ことを特徴とするコンピュータプログラ
ム。
【請求項29】
請求項28に記載のコンピュータプログラ
ムであって、
前記ソースコードが電子データ用のオープン標準フォーマットである、
ことを特徴とするコンピュータプログラ
ム。
【請求項30】
請求項29に記載のコンピュータプログラ
ムであって、
前記オープン標準フォーマットがxmlフォーマットを含む、
ことを特徴とするコンピュータプログラ
ム。
【請求項31】
請求項28に記載のコンピュータプログラ
ムであって、
前記チェックサムクエリが、前記ソース識別子ステータスコードと、前記ソース識別子ステータスコードに対応する前記少なくとも1つの遠隔位置のユニフォームリソースロケータにおける前記現在のソース識別子ステータスコードとの間の対応関係を検査する、
ことを特徴とするコンピュータプログラ
ム。
【請求項32】
請求項28に記載のコンピュータプログラ
ムであって、
前記ソース識別子ステータスコードがチェックサム又はハッシュを含み、
前記現在のソース識別子ステータスコードが現在のチェックサム又は現在のハッシュを含む、
ことを特徴とするコンピュータプログラ
ム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2018年9月28日に出願された米国特許出願第16/145,468号に対する優先権を主張するものであり、上記特許出願の開示全体を本願に引用して援用する。
【背景技術】
【0002】
データはコンピュータプログラムによって参照されることがある。データは、任意の数のフォーマットで使用されるか、又は組み込まれることがある。データは、典型的には、ファイル拡張子の参照又はプログラムへのデータライブラリの組み込みによって実行可能プログラムに組み込まれる。データは、典型的には、データが最新かつ有効であることを視覚的又はアルゴリズム的に検証できる人間によってデータが現在のものであり有効であるかどうかがチェックされる。
【0003】
回答又は判定を得るために、1つ以上の関数によってデータに問い合わせることができる。データが有効である場合、回答又は判定を信頼することができる。実行可能プログラムで使用されるデータが有効であるかどうかを判定することは、時間及び費用の負担が大きくなる可能性がある。
【0004】
サードパーティのウェブサイトから取得したデータは、予告なしに変更される可能性がある。データが変更されると、それに依存するコンピュータプログラムが無効になる可能性がある。実行可能プログラムで使用されるデータが現在のものであるかどうかを判定することは、時間及び費用の負担が大きくなる可能性がある。
【発明の概要】
【課題を解決するための手段】
【0005】
本明細書に開示される実施形態は、コンピュータコードに組み込まれたデータが現在のものであり有効であることを自動的に保証するための方法、システム、及びコンピュータプログラム製品に関する。一実施形態では、コンピュータプログラムに組み込まれたデータを検証する方法を開示する。方法は、少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築するステップを含む。方法は、少なくとも1つの遠隔位置からのソース識別子ステータスコードを1つ以上の関数に組み込むステップを含み、ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。方法は、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述するステップを含む。方法は、ソースコードに少なくとも1つの検証関数を提供するステップを含み、少なくとも1つの検証関数は、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される。方法は、ソースコードにビルドブレーク関数を追加するステップを含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法は、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップを含む。
【0006】
一実施形態では、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法を開示する。方法は、少なくとも1つの遠隔位置からのデータをソースコードに直接インポートするステップを含む。方法は、少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップを含み、ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。方法は、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述するステップを含む。方法は、ソースコードに少なくとも1つの検証関数を提供するステップを含み、少なくとも1つの検証関数は、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される。方法は、ソースコードにビルドブレーク関数を追加するステップを含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法は、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップを含む。方法は、第2のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行して、実行可能コンピュータプログラムを第1のフォーマットから第2のフォーマットに変換するステップを含み、第2のビルドツールは、変換されたデータが有効であることを保証するために、変換されたデータに対して少なくとも1つの検証関数及びビルドブレーク関数を実行する。
【0007】
一実施形態では、コンピュータプログラム製品を開示する。コンピュータプログラム製品は、ソースコードを含む。ソースコードは、少なくとも1つの遠隔位置から取得されたデータを組み込む1つ以上の関数を含む。ソースコードは、1つ以上の関数内に少なくとも1つの遠隔位置からのソース識別子ステータスコードを含み、ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。ソースコードは、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコード内に含む。ソースコードは、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成された少なくとも1つの検証関数を含む。ソースコードは、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ビルドブレーク関数を含む。
【0008】
本開示の実施形態のいずれかによる特徴は、限定されることなく互いに組み合わせて使用されてもよい。また、以下の詳細な説明及び添付図面を参照することにより、本開示の他の特徴及び利点が当業者には明らかになろう。
【0009】
図面は、本発明のいくつかの実施形態を図示しており、図面中の異なる図又は実施形態において、同一の参照番号は同一又は類似の要素又は特徴を指す。
【図面の簡単な説明】
【0010】
【
図1A】一実施形態による、コンピュータプログラムに組み込まれたデータを検証する方法の流れ図である。
【
図2】一実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法の流れ図である。
【
図3】一実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法の流れ図である。
【
図4】一実施形態による、ソースコード上でビルドツールを実行するプロセスのブロック図である。
【
図5】一実施形態による、検証済みのデータが含まれた実行可能コンピュータプログラムを作成及び実行するためのコンピュータシステムの概略図である。
【
図6】一実施形態による、本明細書に開示される方法のいずれかを実行するためのシステムの概略図である。
【
図7】一実施形態による、例示的なコンピュータプログラム製品のブロック図である。
【発明を実施するための形態】
【0011】
本明細書に開示される実施形態は、コンピュータプログラムの関数に組み込まれたデータの最新性及び有効性を自動的に検証するための方法、コンピュータプログラム製品、及びシステムに関する。コンピュータプログラムは、ソースコード上でビルドツールを実行する際に、実行可能コンピュータプログラム又はその一部を提供するように構成されたソースコードを含む。
【0012】
コンピュータプログラムの関数を実行するために使用されるデータは、アーカイブ又はライブラリとしてコンピュータプログラムのソースコードに含まれてもよい。データは、データを使用して関数を実行することが可能な個別のアーティファクトとして関数と共に記憶されてもよい。データは、インターネット上で利用可能なデータベースなどの遠隔位置から取得されてもよい。したがって、データは、データが取得された日付、位置、コンテンツ、又は遠隔位置のバージョン(例えば、ウェブページのバージョン)のうちの1つ以上から算出されたハッシュなどのソース識別子ステータスコードに関連付けられてもよい。ソース識別子ステータスコードは、対応するデータが配置されている関数、又はプログラム内のデータのアーカイブなどにおいてコンピュータプログラムに組み込まれる。
【0013】
コンピュータプログラムは、コンピュータプログラムが構築されてからソース識別子ステータスコード(例えば、ハッシュ)が変更されていないことを検証するためのチェックサムクエリを含む。チェックサムクエリは、ソース識別子ステータスコード(例えば、チェックサム又はハッシュなど)を、データが取得された位置にある現在のソース識別子ステータスコードと比較する。チェックサムクエリは、ビルドツールによって実施されるビルドプロセスにおいて実行される。
【0014】
コンピュータプログラムは、データが、選択されたフォーマットであること、及び/又は1つ以上のテスト関数を満たしている(例えば、選択された範囲内の結果をもたらす)値を有することを検証するための少なくとも1つの検証関数を含む。少なくとも1つの検証関数は、データの1つ以上の値又はフォーマットを、1つ以上の選択された値若しくは期待される値の範囲又はフォーマットと比較する。データが、選択されたフォーマット及び値範囲である場合、データは有効であると確認される。少なくとも1つの検証関数は、ビルドツールによって実施されるビルドプロセスにおいて実行される。
【0015】
ソースは、少なくとも1つのビルドブレーク関数を含み、少なくとも1つのビルドブレーク関数は、チェックサムクエリが、ソース識別子ステータスコードが現在のソース識別子ステータスコードと異なることを示す場合、及び/又は、少なくとも1つの検証関数がデータは無効であると確認した場合、ビルドを中断させる。したがって、プログラム内のソース識別子ステータスコードがデータのソースにおける現在のソース識別子ステータスコードと一致し、少なくとも1つの検証関数に従ってデータが有効である場合にのみ、コンピュータプログラムを使用して実行可能コンピュータプログラム(例えば、アプリケーション)が構築される。ソース識別子ステータスコード、チェックサムクエリ、及び少なくとも1つの検証関数を含めることによって、実行可能コンピュータプログラムに組み込まれたデータは、ビルド時に最新かつ有効であることが自動的に検証される。次いで、ビルドは、実行可能コンピュータプログラム又はその一部として、JARファイルなどの検証済みのアーカイブフォーマットでファイルリポジトリに公開される。実行可能コンピュータプログラムは、データに対して1つ以上の関数を実行するための実行可能コード(例えば、ソフトウェア命令)を含む。したがって、実行可能コンピュータプログラム又はアーカイブは、1つ以上の関数及びデータを含む実行可能コード、ソース識別子ステータスコード、チェックサムクエリ、少なくとも1つの検証関数、少なくとも1つの検証関数をチェックする基準、及びソースコードに関連する任意の他の情報を、それぞれアーカイブ内の個別のアーティファクトとして含んでもよい。したがって、各実行可能コンピュータプログラムは、それぞれの実行可能コンピュータプログラム内のデータに対して1つ以上の関数を実行するより大きい実行可能コンピュータプログラムを構築するための、検証済みのアーカイブ(検証済みのアーカイブファイル)と考えることができる。
【0016】
リポジトリは、複数の実行可能コンピュータプログラムをそれぞれの検証済みのアーカイブファイルに記憶してもよく、各アーカイブファイルは、それぞれのデータ、並びにデータ、ソース識別子ステータスコード、チェックサムクエリ、少なくとも1つの検証関数、及びビルドブレーク関数を使用する関連する1つ以上の関数を含む。また、検証済みのアーカイブファイルは、上記の関数及びデータのメタデータ、並びに任意の以前のバージョンの関数及びデータを記憶してもよい。
【0017】
検証済みのアーカイブファイル又はアーカイブファイル全体からの1つ以上のアーティファクト(例えば、データ、実行可能コンピュータプログラム、又はそれらの個々の部分)は、変換関数を使用して異なるフォーマットに変換されてもよい。変換関数は、データ、ソース識別子ステータスコード、データのソース位置情報、1つ以上の関数、チェックサムクエリ、又は少なくとも1つの検証関数のうちの1つ以上を変換して変換後の変換されたフォーマットに保持するための命令を含む。変換関数は、アーカイブ又はアーティファクトで以前に実行された変換関数を含む、元の実行可能コンピュータプログラム(例えば、アーカイブ)全体又はその中のアーティファクトの以前の変換されていないバージョン又は以前に変換されたバージョンのコピー又はメタデータを保持するための命令を含む。このようにして、ユーザは、元の基礎となる実行可能コンピュータプログラム(例えば、アーカイブ/アーティファクト)に対して実行された正確な変換を追跡することができ、それによって、変換後の実行可能コンピュータプログラムを、変更不能なものにし、その元のフォーマット及びコンテンツまで追跡可能にする。
【0018】
特定の実行可能コンピュータプログラム又はそのセットでの変換の後、又はそれらの変換と同時に、別のビルドを実行して、変換後のフォーマットで別の変換後の実行可能コンピュータプログラムを形成してもよい。この第2のビルド中、データの最新性及び有効性を保証するために、変換後の実行可能コンピュータプログラム内の変換後のチェックサムクエリ及び/又は変換後の検証関数を使用して、チェックサムクエリ、検証関数、及びビルドブレーク関数が実行されてもよい。変換後のデータ、ソース識別子ステータスコード、データのソース位置情報、少なくとも1つの関数、チェックサムクエリ、及び少なくとも1つの検証関数は、変換後のアーティファクト(例えば、変換後のフォーマットの変換後の実行可能コンピュータプログラム)として、検証済みのアーカイブファイル内に公開される。いくつかの例では、変換後のデータ又は変換後の1つ以上の関数の出力の有効性をテストするために、実行可能コンピュータプログラムに新しい検証関数を追加して第2のビルドで実行してもよい。追加の変換を実行してもよく、すべての変換を通じて、ビルド時にデータの有効性及び/又は最新性を確認することができる。
【0019】
変換の数がいくつであっても、アーカイブ内に変換関数情報(例えば、変換関数又は変換関数の位置)、及び変換後の実行可能コンピュータプログラムの以前のバージョンに対応するメタデータ(例えば、データ、ソース識別子ステータスコード、データのソース位置情報、1つ以上の関数、チェックサムクエリ、及び少なくとも1つの検証関数を含む、アーティファクト)が含まれていることによって、データの収集からデータの使用まで、データの一連の整合性を維持することができる。これらのアーカイブ及び/又はアーティファクトを様々な組合せでモジュール式に交換可能に使用して、データに対して1つ以上の関数を実行して出力を提供するより大きい実行可能コンピュータプログラムを形成することができる。このような出力は、実行可能コンピュータプログラムに組み込まれているテストに基づいて、最新かつ有効であると信頼することができる。
【0020】
本明細書に開示される実行可能コンピュータプログラム及び技法を使用することによって、実行可能コンピュータプログラムの実行可能コード(例えば、ビルドコード)における関数のデータ及び出力は、関数を含む実行可能コンピュータプログラムの存在によって、使用の前に「最新」かつ有効であることが自動的に確認される。このような確認は、実行可能コンピュータプログラム又はその一部に対して1つ以上の変換が実行されたときなど、実行可能コンピュータプログラムの元の形式に関係なく提供される。本明細書の実行可能コンピュータプログラム及び技法によって、ユーザは、データをソフトウェアの依存関係であるかのように扱うことができる。他のソフトウェアの依存関係と同様に、プログラムがコンパイルされると、すべての依存関係が解決され、実行可能プログラムに含まれる。検証可能なアーカイブを依存関係として含めることによって、依存関係のチェックを備えたビルドシステムは、データを、他のすべてのソフトウェアの依存関係と共に、検証可能なアーカイブにパッケージ化し、それらのデータを、外部データベースを必要とすることなく実行時に直接アクセス可能なものにする。本明細書に開示される実行可能コンピュータプログラム、方法、及びシステムによって、データを別個のデータベースに記憶し、別個のデータベースに問い合わせるようプログラミングする必要がなくなる。したがって、本明細書に開示される実行可能コンピュータプログラム、方法、及びシステムは、データをコードに直接組み込むことによって、(別個のデータベースを必要とする従来の形のプログラムと比較して)計算速度を向上させる。さらに、本明細書に開示される実行可能コンピュータプログラム、方法、及びシステムは、コンピュータプログラムの関数を実行するために使用されるデータの即時の検証を自動的に提供する。
【0021】
図1Aは、一実施形態による、コンピュータプログラムに組み込まれたデータを検証する方法100の流れ図である。方法100は、少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築する動作110を含む。方法100は、少なくとも1つの遠隔位置からのソース識別子ステータスコードを1つ以上の関数に組み込む動作120を含み、ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。方法100は、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作130を含む。方法100は、ソースコードに少なくとも1つの検証関数を提供する動作140を含み、少なくとも1つの検証関数は、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される。方法100は、ソースコードにビルドブレーク関数を追加する動作150を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法100は、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作160を含む。
【0022】
方法100は、動作110~160よりも多くの又は少ない動作を含んでもよい。例えば、いくつかの実施形態では、方法100から、動作120及び動作130、又は動作140が省略され、それに応じて後続の動作が調整されてもよい。さらに、方法100の動作は、提示された順序とは異なる順序で実施されてもよい。動作110~160の少なくともいくつかは、1つ以上のデスクトップコンピュータ、1つ以上のラップトップコンピュータ、1つ以上のサーバ、1つ以上のタブレットなどの、コンピュータ又はコンピューティングデバイスと共に実行されても、それらに対して実行されてもよい。
【0023】
方法100は、少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築する動作110を含む。1つ以上の関数は、回答(例えば、出力)を求めてデータに問い合わせるように定式化された関数を含んでもよい。1つ以上の関数は、値ベースのクエリ(例えば、量を決定するためのクエリ)、識別ベースのクエリ(例えば、特定のデータ、入力、又は出力を識別するためのクエリ)、論理ベースのクエリ(例えば、if-then関数、合計、又はデータに対して実行されて出力を提供する他の演算)、バイナリクエリ(例えば、yes-no関数)、又はデータを使用して回答される任意の他のクエリを含んでもよい。したがって、クエリ及びデータは、単一の関数に含まれることが可能であり、単一の関数は、より大きいコンピュータプログラム又はアプリケーションのモジュール式構築ブロックとして使用されてもよい。
【0024】
いくつかの例では、1つ以上の関数を構築するステップは、ソースコードなどのコンピュータコードで1つ以上の関数を作成することを含む。ソースコードは、電子データ用のオープン標準フォーマットであってもよい。オープン標準フォーマットは、データ交換フォーマットとすることができる。好適なオープン標準フォーマットの例には、カンマ区切り値(「CSV:Comma-Separated Values」)、拡張マークアップ言語(「XML:Extensible Markup Language」)、ハイパーテキストマークアップ言語(「HTML:Hypertext Markup Language」)、JavaScript(登録商標)オブジェクト表記法(「JSON:JavaScript Object Notation」)、コンピュータ・グラフィックス・メタファイル(「CGM:Computer Graphics Metafile」)、OpenDocument、ポータブルドキュメントフォーマット(「PDF:Portable Document Format」)、カスケーディングスタイルシート(「CSS:Cascading Style Sheets」)、ポータブルネットワークグラフィックス(「PNG:Portable Network Graphics」)、スケーラブルベクトルグラフィックス(「SVG:Scalable Vector Graphics」)、又は任意の他のオープン標準フォーマットが含まれる。
【0025】
いくつかの例では、1つ以上の関数を構築するステップは、コンピュータにおいて1つ以上の関数を作成することを含む。いくつかの例では、コンピュータコードにおいて1つ以上の関数を作成することは、ソースコード内の関数の命令を記述すること、プログラミングすること、インポートすること、又はコーディングすることを含む。いくつかの例では、少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築するステップは、データをソースコード内にアーカイブすることを含む。データは、アーカイブ、ライブラリ、テーブルなどとしてソースコードに記述されるか、又はインポートされてもよい。したがって、1つ以上の関数を実行するために使用されるデータは、ソースコードに直接含まれる。
【0026】
いくつかの例では、少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築するステップは、データをソースコードに構築することのみを含んでもよい。例えば、データは、後で使用するために、アーカイブ、ライブラリ、テーブルなどとして、オブジェクトモデル(例えば、POM)などのソースコードに直接含まれてもよい(例えば、ビルド、コーディング、インポート、変換されてもよい)。
【0027】
いくつかの例では、データには、標準(例えば、医療標準、法律など)、定量的な量(例えば、体重、口座残高、年齢など)、代表コード(例えば、品目コード、(ナショナルコレクトコーディングイニシアティブ「NCCI:National Correct Coding Initiative」)コードなどの保険コードなど)、実験データ、テストデータなどの電子データが含まれ得る。データは、遠隔位置でアクセスされ、遠隔位置から取得されてもよい。
【0028】
いくつかの例では、少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築する動作110は、少なくとも1つの遠隔位置のデータにアクセスすること、又はそのデータを取得することを含む。少なくとも1つの遠隔位置は、コンピュータプログラム(例えば、ソースコード)が作成されるコンピュータの電子アドレスとは異なる電子アドレスを含んでもよい。例えば、データは、ウェブサイトを含む遠隔位置から取得されてもよい。ウェブサイトは、法律、NCCIコード、口座残高、環境規格、安全規格、費用/価格、個人情報、消費者データ、教育データ、実験データ、テストデータなどのデータの公式ソースとしてデータを提示することができる。したがって、ウェブサイトは、cms.govのナショナルコレクトコーディングイニシアティブポリシーマニュアルアーカイブ、銀行のウェブサイト、data.govなどの統計データのソース、研究のウェブサイト(例えば、教育又は調査のウェブサイト)などの、公式ソースのウェブサイトであってもよい。ウェブサイトは、CSV、XML、HTML、PDFなどのオープン標準フォーマットでデータを提示することができる。以下でより詳細に説明するように、ウェブサイト、より具体的には、データを含むウェブページは、それに対応するソース識別子ステータスコード(例えば、チェックサム又はハッシュ)を有することができる。
【0029】
いくつかの例では、コンピュータプログラムは、コンピュータプログラムに組み込まれた少なくとも1つのデータセットにそれぞれ問い合わせ又は参照する1つ以上の関数を含んでもよい。例えば、複数の関数のそれぞれは、ソースコードに組み込まれた同じ又は異なるデータセット(例えば、アーカイブ又はライブラリ)を参照してもよい。少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築する動作110は、リモートウェブサイトから取得したデータに問い合わせる1つ以上の関数をソースコードに記述することを含んでもよい。このような例では、データは、ソースコードで再現されている場合があり、ソースコードは、XMLフォーマットである場合がある。
【0030】
方法100は、少なくとも1つの遠隔位置からのソース識別子ステータスコードを1つ以上の関数に組み込む動作120を含み、ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。いくつかの例では、少なくとも1つの遠隔位置からのソース識別子ステータスコードを1つ以上の関数に組み込むステップは、少なくとも1つの遠隔位置からのソース識別子ステータスコードを、ソース識別子ステータスコードに対応するデータに問い合わせる関数のソースコードに挿入することを含む。このような例では、関数は、遠隔位置にあるデータ、及び遠隔位置にあるデータが得られた位置、時間、及びバージョンの対応するソース識別子ステータスコードのクエリを含んでもよい。例えば、ソース識別子ステータスコードは、データアーカイブ又はデータライブラリの付随するデータの一部としてプログラムに記述されてもよい。ソース識別子ステータスコードは、データアーカイブ又はデータライブラリに関連付けられた別のコード行としてプログラムに記述されてもよい。ソース識別子ステータスコードは、ソースコードフォーマットでコードに組み込まれてもよい。
【0031】
ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。例えば、ソース識別子ステータスコードは、データが取得されるウェブページ又は他のドキュメント(ドキュメント上のすべてのデータを含む)の時間、日付、位置、バージョンの検証済み署名を含む。いくつかの例では、ソース識別子ステータスコードは、遠隔位置のチェックサム又はハッシュを含む。例えば、ソース識別子ステータスコードは、データが取得されるウェブページ又は他のドキュメントのチェックサム又はハッシュを含む。いくつかの例では、少なくとも1つの遠隔位置からのソース識別子ステータスコードを1つ以上の関数に組み込むステップは、データが収集された時間から、(例えば、ハッシュ関数を用いて)遠隔位置にあるデータのハッシュを取得又は生成することを含む。チェックサム又はハッシュは、遠隔位置にあるデータに対応する関数(例えば、SHA-512、SHA-256などの、チェックサム関数/アルゴリズム又はハッシュ関数/アルゴリズムなど)によって、データ、データがアクセス又は取得される時間及びバージョンとして作成される複数の文字を含む。したがって、データは、データが収集された時点でのソース識別子ステータスコードに関連付けられる。ソースにおいてデータがわずかに変化した場合、そこから算出された対応するチェックサム又はハッシュは、データが最初に取得されたときに生成された元のチェックサム又はハッシュと比較して、2つ以上の文字だけ変化する。したがって、チェックサム又はハッシュにおける変化は、データが変化したことを示すものとして使用することができる。
【0032】
いくつかの例では、少なくとも1つの遠隔位置からのソース識別子ステータスコードを1つ以上の関数のそれぞれに組み込むステップは、少なくとも1つの遠隔位置に対応するユニフォームリソース識別子からのチェックサム又はハッシュを1つ以上の関数に組み込むことを含んでもよい。ソース識別子ステータスコードは、ソース識別子ステータスコード(及び、関連データ)が取得される少なくとも1つの遠隔位置のアドレスと共に記憶されてもよい。例えば、ソース識別子ステータスコードは、データが取得されたウェブページのユニフォームリソースロケータ(「URL:Uniform Resource Locator」)、データが取得されたデータベースの位置、又はデータが取得されたファイルディレクトリアドレスと共に関数に(ソースコードフォーマットで)記憶されてもよい。したがって、ソースコードは、コンピュータプログラムが遠隔位置にアクセスすることを可能にするコード(例えば、情報)を含む。実施形態では、ソースコードは、少なくとも1つの遠隔位置のウェブサイト又はウェブページのアドレスを含む。いくつかの例では、ソース識別子ステータスコードは、データ、ソース識別子ステータスコード、及び遠隔位置に対応するチェックサムクエリに直接配置されてもよい。
【0033】
方法100は、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作130を含む。いくつかの例では、チェックサムクエリをソースコードに記述するステップは、チェックサムクエリをオープン標準フォーマットでソースコードに組み込むことを含む。チェックサムクエリは、ソースコードに組み込まれたソース識別子ステータスコード、及びデータに対応する少なくとも1つの遠隔位置の現在のソースコードステータス識別子を検査する。チェックサムクエリは、データに対応する(また、ソース識別子ステータスコードに対応する)少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードを取り出すための命令を含む。
【0034】
現在のソース識別子ステータスコードは、チェックサムクエリが実行された日付における遠隔位置のソース識別子ステータスコードである。現在のソース識別子ステータスコードは、現在のチェックサム又は現在のハッシュを含んでもよい。チェックサムクエリが実行されたときの現在のチェックサム又は現在のハッシュは、データが取得されたときのチェックサム又はハッシュと同じであることもあれば、異なることもある。チェックサム及びハッシュは、それらが作成されるデータに依存する。例えば、チェックサムが作成されるデータがわずかな程度でも変更されると、チェックサムは(例えば、1文字以上)変化することがある。さらに、チェックサム及びハッシュを、異なるデータを用いて複製したり、現在の技法及び計算能力を使用して逆算したりすることは不可能である。したがって、チェックサムとハッシュを比較することで、遠隔位置でデータが変化したかどうかを確実に示すことができる。
【0035】
ソース識別子ステータスコード及び現在のソース識別子ステータスコードはそれぞれチェックサム又はハッシュ(例えば、現在のチェックサム又は現在のハッシュ)を含むので、ソース識別子ステータスコードは、遠隔位置にあるデータが変化していない場合にのみ現在のソース識別子ステータスコードと一致する。チェックサムクエリは、ソース識別子ステータスコードと現在のソース識別子ステータスコードを文字ごとに比較して、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致することを保証することができる。一致は、ソース識別子ステータスコードに関連付けられているデータが最新であることを示す。一致は、1つ以上の関数の出力が現在のデータに基づいており現在の出力又は結果を提供するものであるとユーザが信頼できることを示す。
【0036】
チェックサムクエリをソースコードに記述する動作130は、データが最初に取り出されたときの遠隔位置のチェックサム又はハッシュの文字と、データが取り出された遠隔位置にある現在のチェックサム又はハッシュの文字とを比較するための命令を含むクエリを、ソースコードにプログラミング(例えば、コーディング)することを含む。少なくとも1つの遠隔位置には、ウェブページ、データベース、コンピュータファイル、ソフトウェアファイルなどが含まれ得る。したがって、チェックサムクエリは、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定し、それによって、ソース識別子ステータスコードに関連付けられたデータを検証する。例えば、チェックサムクエリは、ソースコードに記憶されたソース識別子ステータスコードと、ソース識別子ステータスコードに対応する少なくとも1つの遠隔位置のユニフォームリソースロケータにおける現在のソース識別子ステータスコードとの間の対応関係を検査してもよい。
【0037】
方法100は、ソースコードに少なくとも1つの検証関数を提供する動作140を含み、少なくとも1つの検証関数は、データ(及びそれに基づく関数)が有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される。ソースコードに少なくとも1つの検証関数を提供するステップは、ソースコードに少なくとも1つの検証関数をオープン標準フォーマットで提供することを含んでもよい。少なくとも1つの検証関数は、データ及び/又はデータを使用する関数の、標準に対する有効性を確認するために使用されてもよい。例えば、少なくとも1つの検証関数は、少なくとも1つの検証関数に従った、データの比較対象となるテスト及び/又は標準を含んでもよい。例では、ソースコードに少なくとも1つの検証関数を提供するステップは、データがソースコードによって指定されたフォーマットであることを確認するためにデータをテストする関数を提供することを含む。
【0038】
実施形態では、少なくとも1つの検証関数は、少なくとも1つの関数及びデータが選択されたフォーマット(例えば、XML、HTML、CSV、Avro、XL、XLS、JSONなど)であるかどうか、又は選択された出力を提供するかどうかを判定するために、データ、データを組み込む少なくとも1つの関数、又はデータに基づいた出力のうちの1つ以上をテストする関数を含んでもよい。例えば、検証関数は、データ文字列(例えば、データ)を読み取り、データ文字列内のデータのフォーマットが選択されたフォーマットと一致するかどうかを判定するようにビルドツールに指示するコード(コンピュータ可読かつ実行可能な命令)を含んでもよい。選択されるフォーマットは、関連するビルドツール又は変換関数によって使用されるフォーマットとすることができる。例えば、フォーマットは、少なくとも1つの関数及びデータを第2の言語(例えば、コンピュータコード又はファイルフォーマット)に変換するために変換関数によって使用されるプログラミング言語とすることができる。例では、検証関数は、ソースコード内の少なくとも1つの関数及びデータが指定されたフォーマットであることを保証するために、ソースコードのフォーマットをテンプレート又はルールのセットによって定義された指定された(例えば、所望の又は選択された)フォーマットと比較するためのテンプレート又はルールのセットを含んでもよい。
【0039】
例では、ソースコードに少なくとも1つの検証関数を提供するステップであって、少なくとも1つの検証関数が、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される、ステップは、データに少なくとも1つの検証テストの1つ以上の基準を満たす値が含まれていることを確認するためにデータをテストする少なくとも1つの検証関数を提供することを含む。例えば、少なくとも1つの検証関数は、指定された場所に日付列があるなどの特定のデータ値、又は少なくとも1つの列におけるデータの特定の範囲内の値がソースコード内のデータに含まれていることを保証するためのコード(例えば、ソースコード内の機械可読かつ実行可能な命令のセット)を含んでもよい。
【0040】
例では、少なくとも1つの検証関数は、データの特定の数の列及び/又は行がデータに含まれているかどうかを判定するなどのために、ソースコード内のデータと、選択されたデータフォーマット又は表現基準とを比較するためのコードを含んでもよい。例えば、少なくとも1つの検証関数は、ソースコード内のデータが指定された数の列及び行に一致する列及び行に配置されているかどうかを判定するようにビルドツールに指示するコードを含んでもよい。
【0041】
例では、少なくとも1つの検証関数は、データ(例えば、データを含む行及び列)が値の指定された範囲内の値を有することを確認するようにビルドツールに指示するコードを含んでもよい。例えば、4つのデータ列を期待する少なくとも1つの検証関数が記述されてもよく、第1の列は日付列であり、第2の列は浮動小数点数列、第3の列は「A」、「B」又は「C」で始まる文字列であり、第4の列はファイル内のデータの行ごとに1ずつ増加する数値である。検証関数は、データを検索してデータが期待どおりの位置(例えば、列及び行)にあることを確認することによって、データが有効であることをチェックしてもよい。例では、少なくとも1つの検証関数は、ランダムサンプル又はすべてのデータを指定された範囲の期待値と比較する関数を実行するようにビルドツールに指示してもよい。このような例では、指定された範囲の期待値には、日付、識別番号(例えば、社会保障番号、運転免許証番号、顧客番号、請求番号など)、金額(例えば、口座残高、在庫品目、消費されたリソースなど)、コード値(例えば、NCCIコード、罰則又は地方自治体コード番号など)が含まれ得る。したがって、少なくとも1つの検証関数は、データが有効であると判定され得る値の許容範囲(又は測定単位)を示す命令を含んでもよい。少なくとも1つの検証関数は、データの値をそれに関連する許容範囲と直接比較してもよい。データの値が許容範囲内にある場合、データは有効であると見なされる。
【0042】
例では、少なくとも1つの検証関数は、ソースコード内の1つ以上のデータに基づいて1つ以上の出力を提供する1つ以上のサブ関数を含むコードを含んでもよい。1つ以上のサブ関数は、(例えば、データ内のランダムサンプルを利用して)データに対して少なくとも1つの関数を実行し、それに基づいた1つ以上の出力を提供するようにビルドツールに指示してもよい。例えば、サブ関数は、データに対して又はデータを用いて1つ以上の演算を実行して出力を提供してもよく、少なくとも1つの検証関数は、許容可能な出力(又は、さらには出力のフォーマット)の範囲を含んでもよい。少なくとも1つの検証関数は、1つ以上の出力を許容範囲と比較してもよい。サブ関数の出力が許容可能な出力(又はフォーマット)の範囲内にある場合、データは有効であると見なされる。一例では、少なくとも1つのサブ関数は、データに対して数学演算を実行し、出力を提供してもよい。
【0043】
例では、少なくとも1つのサブ関数は、(例えば、サブ関数によって指示されるように)1つ以上の関数と同じデータに対して同じ演算を実行して独立した結果を提供する、独立関数を含んでもよい。独立した結果を1つ以上の関数の期待される出力と比較して、1つ以上の関数及び/又はデータの有効性を判定することができる。例えば、独立関数は、その中で1つ以上の演算を実行すると有効な出力を生成することが知られている場合があり、1つ以上の関数の出力を独立関数の出力と比較して、1つ以上の関数が有効な出力を提供するかどうかを判定することができる。このような方法で、少なくとも1つのサブ関数を含む検証関数を使用して、ビルド時に1つ以上の関数、データ、又はその両方が有効であるかどうかを判定することができる。
【0044】
同様に、独立関数は、有効であると判定されたデータ値範囲内のデータ値に対してのみ有効な出力を生成することが知られている場合がある。独立関数又は少なくとも1つの関数の一方又は両方の出力を有効な出力の値範囲と比較することによって、少なくとも1つの関数及び/又はデータの有効性を、出力を介して判定することができる。
【0045】
方法100は、ソースコードにビルドブレーク関数を追加する動作150を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。いくつかの例では、ソースコードにビルドブレーク関数を追加するステップは、ビルドブレーク関数をオープン標準フォーマットでソースコードに組み込むこと(例えば、コーディング、タイピング、インポート、プログラミングすること)を含む。ビルドブレーク関数は、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致しない場合及び/又は少なくとも1つの検証関数がデータのフォーマット又は値が無効であることを確認した場合にビルドを終了するための命令を含む。したがって、ビルドブレーク関数は、(ソース識別子ステータスコードと現在のソース識別子ステータスコードとの不一致によって示されるように)データが最新ではない場合、又は(少なくとも1つの検証関数によって判定されるように)データが有効ではない場合、プログラムビルドが完了しないようにする。例えば、ビルドブレーク関数は、ソフトウェアライブラリの依存関係をチェックするための依存関係チェックと同様又は同一であってもよい。依存関係に到達できないか、そのテストが失敗するかのいずれかの理由で依存関係を満たすことができない場合、ビルドは中断する。従来、ソフトウェアライブラリとは異なる方法で扱われていたが、本明細書に開示されるコンピュータプログラム及び技法は、データセットを全く別のソフトウェアライブラリであるかのように扱う。
【0046】
ビルドプログラムが実行可能コンピュータプログラムを出力する場合、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致すること、さらにはデータがソース(遠隔位置)において変化していないことを示すビルドブレークの欠如によって実証されるように、ユーザはデータが現在のものである(例えば、データの最新バージョンとして検証済みである)と確認することができる。ユーザは、実行可能コンピュータプログラム(例えば、アプリケーション)の存在のみによって、1つ以上の関数におけるデータが現在のものであり有効であると確信することができる。したがって、ビルドブレーク関数は、1つ以上の関数を含む実行可能コンピュータプログラムが最新の(例えば、現在の)データを使用しているかどうかを判定する容易に認識可能な手段を提供する。データの出所のチェックは、ソースコード内のデータ及び関連する関数の各セットのビルド中に1回実行されるだけでもよい。その後、ビルドツール又は後続のビルドツールは、後の関数又は依存関係においてデータが再度参照される場合にデータが最新であると見なすことができる。
【0047】
ビルドブレーク関数は、少なくとも1つの検証関数がデータは無効であると判定した場合にビルドを終了するための命令を含む。したがって、少なくとも1つの検証関数がデータは有効であると判定した場合にのみ、ビルドは継続する。例えば、ビルドブレーク関数は、少なくとも1つの関数及びデータが正しいフォーマットである(例えば、ソースコードが、選択されたフォーマットである)、かつ/又はデータが少なくとも1つの検証関数を満たす値を有する場合にのみビルドを継続するように、ビルドツールに指示する。ビルドブレーク関数は、少なくとも1つの関数の出力と独立関数の出力(両方とも少なくとも1つの検証関数によって指示される)が一致するか、有効であることが知られている範囲内にある値を有する場合にのみビルドを継続するように、ビルドツールに指示してもよい。ビルドツールが実行可能コンピュータプログラムを出力する場合、ユーザは、少なくとも1つの検証関数によって検証されたようにその中のデータが有効であることを確認することができる。このような検証は、ビルド時に、データが、遠隔位置から取得されたときと同じ検証関数又は他のテストを満たしていることを実証する。
【0048】
方法100は、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作160を含む。例では、ビルドツールは、一連の依存関係全体を通してデータが有効であることを保証するために依存関係チェックを強制するコーディングを含む。ビルドツールには、Apache Ant、Apache Maven、Gradle、MSBuild、Simple Build Tool(sbt)、Wafなどが含まれ得る。例えば、ビルドツールを実行してソースコードを実行可能コンピュータプログラムにコンパイルすることは、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、又はWafのビルドツールを実行することを含んでもよい。
【0049】
実行可能コンピュータプログラムは、JARファイルフォーマットなどの検証済みのアーカイブフォーマットで出力されてもよい。実行可能コンピュータプログラムは、本明細書に開示されるこれらの構成要素のいずれかを、データに対して1つ以上の関数を実行するための実行可能コード、データ、チェックサムクエリ、ソース識別子ステータスコード、少なくとも1つの検証関数などのアーティファクトとして含んでもよい。実行可能コンピュータプログラムは、有効かつ現在のものであることが保証されているデータを含むアーティファクト又はアーカイブを含んでもよい。例えば、実行可能コンピュータプログラム(例えば、その中のアーカイブ又はアーティファクト)は、データを含む実行可能コードの一部又は全体を含んでもよい。例えば、実行可能コンピュータプログラムは、データを利用して出力を提供する1つ以上の関数のための実行可能コードを含む。実行可能コンピュータプログラムは、1つ以上の関数をコードの一部として利用して最新かつ有効性が確認されたデータを用いて1つ以上の関数を実行することができるモジュールフォーマットなどの、離散数の1つ以上の関数の実行可能コードを含んでもよい。実行可能コンピュータプログラム(例えば、アプリケーション)は、より大きいコンピュータ可読かつ実行可能なプログラムにそのモジュール構成要素として組み込まれてもよい。いくつかの例では、複数の実行可能コンピュータプログラムが、より大きいコンピュータ可読かつ実行可能なプログラムの一部をそのモジュール構成要素として構成してもよい。例えば、より大きい実行可能プログラムはその中に、それぞれデータ及び1つ以上の関数を含む複数の実行可能コンピュータプログラムを含んでもよい。
【0050】
いくつかの例では、実行可能コンピュータプログラム(例えば、アーカイブ又は他の展開可能なアーティファクト)は、データが依存関係で利用され得るモジュールフォーマットなどで、データのみを含んでもよい。データは、それ自体では実行可能ではないが、全く別のソフトウェアライブラリであるかのように、より大きい実行可能プログラムに依存関係として組み込まれてもよい。例えば、実行可能コンピュータプログラムのデータ(例えば、有効性が確認された現在のデータアーカイブ)は、より大きい実行可能コンピュータプログラムの関数に組み込まれてもよく、関数は、データに対して1つ以上の演算を実行して、それに基づく出力を提供する。
【0051】
いくつかの例では、ソースコード又は実行可能コンピュータプログラム(例えば、アーティファクト又はアプリケーション)のうちの1つ以上が、1つ以上の変換関数によってさらに処理されてもよく、ソースコード内の関数、検証関数、チェックサムクエリ、データ文字列、ソース識別子ステータスコードなどはすべて、新しいフォーマットへの変換中に保存及び翻訳される。例えば、変換関数は、プログラム、ビルドツールの一部、又はソースコード(その中の関数及びデータを含む)を第1のフォーマット(例えば、CSV)から第2のフォーマット(例えば、XML)に変換する他のツールとすることができる。さらに、変換後のソースコードが、(現在の)変換後の実行可能コンピュータコードを作成するために使用されるすべての情報を伴うことを保証するために、変換関数又はその参照位置が、ソースコードに組み込まれてもよい。したがって、以下でより詳細に説明するように、結果として得られる変換後の実行可能コンピュータコードは、変換関数に関する情報を加えた、元のソースコード及び以前のバージョンの実行可能コンピュータコードのすべての情報を伴う。このような例では、実行可能コンピュータプログラム又はソースコードをあるフォーマットから別のフォーマットに変換するとともに、データの原点及びビルド中又は実行中にデータを用いて何が行われたか(例えば、データを出力に提供するためにどの関数が使用されたか)をユーザが追跡できるようにすることに加えて、データの出所及びデータの有効性の両方を維持することができる。
【0052】
いくつかの例では、変換関数は、1つ以上の実行可能コンピュータプログラム(例えば、アーティファクト又はアプリケーション)若しくはデータを1つ以上の依存関係として利用する関数又はより大きい実行可能コンピュータプログラムとすることができる。より大きい実行可能コンピュータプログラムビルド及び変換又はビルドを実行すると、依存関係の関連する検証関数に従って、依存関係がチェックされる(例えば、それぞれ依存関係にある実行可能コンピュータプログラム又はデータに対して検証関数が実行される)。このように、出力される実行可能コンピュータプログラム内のデータは、データが(例えば、実行可能コンピュータプログラム又はその依存関係の中の)どこに位置しているか、又はデータがどのようなフォーマットであるかに関係なく、実行可能コンピュータプログラムの存在のみによって有効であることが保証される。したがって、実行可能コンピュータプログラム内のデータ及び/又はそのデータを含む関数は、データの検証及び出所を維持しながら、より大きい実行可能コンピュータプログラムのモジュール構成要素(例えば、検証済みのアーカイブファイル構築ブロック)として使用することができる。
【0053】
ビルドツールは、ソースコードを、(例えば、ソースコード管理(「SCM:Source Code Management」)コマンドに従ったApache Mavenのプロジェクトオブジェクトモデル(「POM:Project Object Model」)ファイル内の)ソースコードフォーマットから、使用可能又は実行可能なフォーマットにコンパイル、リンク、及びパッケージ化する。例えば、ビルドツールは、ソースコードを、実行可能なコンピュータプログラム、さらにコンパイル可能なフォーマット、又はさらに変換可能なフォーマットにコンパイルしてもよい。ビルドツールは、ビルド中に依存関係チェック(チェックサムクエリの実行など)によってソースコード内のデータの現在のステータスをチェックする。ビルドツールは、ビルド中に検証関数によってソースコード内のデータの有効性も強制的にチェックする。実行可能コンピュータプログラムは、データが1つ以上の検証済みライブラリとして組み込まれた検証済みのアーカイブフォーマットで出力されてもよい。検証済みのアーカイブフォーマットは、署名付きJava(登録商標)アーカイブ(「JAR:Java Archive」)ファイルなどであってもよい。データは、zipフォーマット、tarフォーマット、又はJARファイルと互換性のある任意の他の好適なフォーマットでJARファイルに記憶されてもよい。JARファイルはアプリケーションのクラスパスに含まれ得るので、JARファイルによって、アプリケーションはその中のデータをコードとして扱うことができる。例えば、Java仮想マシンは、JARファイルを含むクラスパスから指示されたクラス及びパッケージを指定して、その中のデータをコードとして利用してもよい。したがって、JARファイル内のデータ及び関数は、それが現在のもの及び/又は有効であることを検証するために(例えば、チェックサムクエリ又は検証関数によって)チェックされた後、プログラムのコードとして利用可能になる。いくつかの例では、(対応するソース識別子ステータスコード、関連するチェックサムクエリ、及び検証関数と共に)遠隔位置から取得されたデータを含む1つ以上のJARファイルが、より大きい実行可能コンピュータプログラムの1つ以上のクラスパスに含まれてもよい。したがって、Java仮想マシンは、ビルド時、変換時、又はプログラムを実行するためのコマンド時に、データ(例えば、ライブラリ)並びにチェックサムクエリ及び検証関数を含むそれに関連する関数に対応するプログラム内のコードの位置を指定することができる。例では、Javaコンパイラは、コードをコンパイルし、後で実行するために、有効性が確認された現在のデータ(例えば、ライブラリ)のみの位置、及び/又は、データを使用するか若しくはデータに対して演算する関数を指定してもよい。したがって、方法100は、より大きい実行可能コンピュータプログラムに組み込むためのアーカイブ(例えば、データを含む展開可能なアーティファクト)を生成してもよく、アーカイブは、アーカイブ内のデータの現在性及び有効性をチェックするために必要なすべての情報及び関数を保持するとともに、データに対して1つ以上の関数を実行する。
【0054】
チェックサムクエリ、検証関数、及びビルドブレーク関数は、1つ以上の関数におけるデータの依存関係をチェックし、データの現在のステータス及び検証に基づいてビルドを継続又は停止するための命令を提供する。このチェックは、ソースコードから構築されたものであれ、実行可能コンピュータプログラムのフォーマットから別のフォーマットに変換されたものであれ、実行可能コンピュータプログラム内の複数の依存関係の各依存関係に対して実行することができる。したがって、チェックサムクエリがソース識別子ステータスコードが遠隔位置の現在のソース識別子ステータスコードと一致すると判定し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、ビルドツールは、1つ以上の関数を含む実行可能コンピュータプログラムビルドを完了する。ビルドツールは、1つ以上の関数及びデータを、JARファイルなどの実行可能コンピュータプログラムの実行可能フォーマットにコンパイルする。ビルドツールはまた、チェックサムクエリ、検証関数、及びビルドブレーク関数うちの1つ以上を、実行可能コンピュータプログラムの実行可能フォーマットにコンパイルしてもよい。ビルドツールは、チェックサムクエリ、検証関数、及びビルドブレーク関数を実行する。ビルド後に実行可能コンピュータプログラムが存在していることは、実行可能コンピュータプログラムの1つ以上の関数内のデータが現在のものであり(例えば、遠隔位置において最新であり)有効であることを示す。
【0055】
いくつかの例では、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致しない場合、又は少なくとも1つの検証関数に従ってデータが有効ではない場合、ビルドを中断すること(例えば、実行可能コンピュータプログラムを出力しないこと)を含む。ビルドブレークは、ソースコードの1つ以上の関数内のデータが最新ではないこと、又は有効ではないことを示す。いくつかの例では、ソースコードは、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の不一致に関するレポート、データ及び/又は少なくとも1つの関数の無効性に関するレポート、それらの出力、独立関数の出力、並びに(例えば、検証関数によって求められる)それらに関連する値を提供するとともにそれらに関連するデータを識別する、レポート関数を含んでもよい。レポート関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の不一致、ソースコードと選択されたコードとの間の不一致、少なくとも1つの関数の出力と独立関数の出力との間の不一致(両方とも少なくとも1つの検証関数によって指示される)、又は少なくとも1つの検証関数によって求められた値と許容可能な範囲の値との間の値の不一致に対応する特定のデータ及び遠隔位置をユーザに通知するための出力を(ビルドのサイドプロセスを介して)提供することができる。出力は、URL及びURLにおけるデータの説明など、遠隔位置及びデータライブラリを示す人間可読又は機械可読のテキストとすることができる。出力は、(例えば、ビルドツールを含む)ビルドを実行するために使用されるコンピュータのコンピュータ画面などのユーザインターフェースに送られ得る。したがって、ユーザ又はコーダは、データ及びそれに関連する遠隔位置を識別して、ソースコードの1つ以上の関数内のデータ及び関連するソース識別子ステータスコードを置き換えることが可能であり得る。ソースコードが更新された後(例えば、修正又は変換された後)、ビルドツールを再実行して、データを再テストし、本明細書に開示されるように実行可能コンピュータプログラムを出力してもよい。
【0056】
実行可能コンピュータプログラム(例えば、アーカイブ)は、リポジトリに記憶されてもよい。1つ以上の関数及びデータを含む実行可能コンピュータプログラム又はリポジトリ全体は、複数の実行可能コンピュータプログラム(例えば、データに対して1つ以上の関数を実行するための実行可能コード)を含むより大きい実行可能プログラムを形成するために、アクセス及び使用されてもよく、かつ/又は、以下でより詳細に説明するように、別のフォーマットに変換されてもよい。
【0057】
方法100は、実行可能コンピュータプログラム(又はソースコード)上で1つ以上の変換を実行又は構築するステップをさらに含んでもよい。例えば、変換関数は、実行可能コンピュータプログラム及びそれに関連するすべて又は一部の情報(例えば、アーティファクトファイル内のデータ、1つ以上の関数、ソース識別子ステータスコード、遠隔位置情報、チェックサムクエリ、検証関数、及びビルドブレーク関数)を第1のフォーマットから第2のフォーマットに変換するビルドにおいて構築及び実行されてもよい。実行可能コンピュータプログラムに関連する情報はすべて、変換中に、変換及びビルドの検証済みのアーカイブフォーマット(JARファイル)出力などで、変換及び保持されてもよい。したがって、ソースコードは、ビルドから(実行可能コンピュータコードとして)第1のフォーマットで公開され、後続の変換及びビルドによって1つ以上の追加のフォーマットに変換されることが可能であると同時に、関連付けられた元の情報(例えば、データ、1つ以上の関数、ソース識別子ステータスコード、遠隔位置情報、チェックサムクエリ、検証関数、及びビルドブレーク関数)を保持する。したがって、実行可能コンピュータプログラムのアーティファクトの形式を変更する(例えば、実行可能コード及びそれに関連する情報を新しいフォーマット又は言語に変更する)にもかかわらず、アーティファクトは元のソースコードの出所及び有効性の確認を保持する。
【0058】
いくつかの例では、実行可能コンピュータプログラム又はソースコード上で1つ以上の変換を実行又は構築するステップは、ビルド中に実行可能コンピュータプログラム上で変換関数を実行して実行可能コンピュータプログラムを第1のフォーマットから第2のフォーマットに変換することを含んでもよい。いくつかの例では、第1のフォーマットはCSVフォーマットとすることができ、第2のフォーマットはApache Avroフォーマットとすることができる。いくつかの例では、第1のフォーマットはCSVフォーマットとすることができ、第2のフォーマットはJSONフォーマットとすることができる。いくつかの例では、第1のフォーマットはXMLフォーマットとすることができ、第2のフォーマットはHTMLフォーマットとすることができる。
【0059】
変換関数は、データを変換して(例えば、データに対して演算を実行して)、データのサブセット又は変更されたバージョンを形成する関数を含んでもよい。例えば、変換は、一定の値を有するデータ又はテーブル内の一定の場所からのデータのみを取り出して、元のデータのサブセットを新しいデータセットとして形成してもよい。例では、変換関数は、データの値を第2の値で加算、乗算、除算するなど、データに対して1つ以上の数学演算を実行して、選択された新しいデータセットを出力してもよい。新しいデータセットは、元のデータのサブセットに対する新しいクエリへの出力を提供するために、新しいビルドツール又は実行可能コンピュータプログラムに記述された新しい関数によって演算されてもよい。新しいデータセットの有効性を保証するために、(変換前に)新しいビルドツール又は実行可能コンピュータプログラムに、対応する新しい検証関数が記述されてもよい。
【0060】
変換を構築及び実行することによって、データ及び関数のすべて又はいくつかを含む変換後の実行可能コンピュータプログラム又はその一部は、ソフトウェアの依存関係のように扱われる。したがって、ビルドシステムは、実行時に、他のインポートされたアーカイブ又はアーティファクト(例えば、関数、データセットなどを含む実行可能コンピュータプログラム)に対する依存関係を解決しなければならない。このプロセスを通じて、ビルドは、検証関数、チェックサムクエリ、又はビルドブレーク関数など、依存関係において指定された任意のテストを実行することになる。これらの依存関係のテストのいずれかが失敗する場合、ビルドは中断する。
【0061】
したがって、本明細書に開示される方法は、別個のリポジトリ又は同じリポジトリ内のアーカイブ(例えば、異なる関数又はデータを有する実行可能コードを記憶する検証済みのアーカイブフォーマットファイル)からのデータの変換を可能にし、次いで、これらのデータは、依存関係として扱われ、ビルド中にチェック/テストされる。ビルドシステムは、ソースアーカイブの位置に関係なく、依存するすべてのアーティファクト(例えば、データのみ、又はデータ及び関数)に対してテストを実行する。これらの依存アーティファクトのテストのいずれかが失敗する場合、ビルドは中断する。したがって、変換後の実行可能コンピュータプログラムは、すべての依存関係が有効かつ最新であることが確認された場合にのみ、出力として公開される。
【0062】
例えば、ユーザが元のデータセットの3番目の列から「B」でも「C」でもなく「A」で始まるデータをすべて引き出したい場合、新しいデータセットは、元のデータに基づいた新しいアーティファクトとなる。このような選択的な抽出は、元のデータを新しいデータ又はデータセットに変換する。新しいデータセットのパラメータ、又は新しいデータセットに対して演算する1つ以上の関数の選択された出力に従って、新しいデータセット内のデータが有効であることを確認するために、新しい検証関数が記述及び使用されてもよい。例えば、新しいデータセットが、3番目の列にあるデータ(例えば、文字列)に「A」を有する行のみを含むことを検証するための、1つ以上のテストである。いくつかの例では、ビルドシステムが新しいデータセットを含む変換後の実行可能コンピュータプログラムに対してテストを実行するとき、ビルドシステムは、新しいデータセットを形成するために使用された元のデータが有効であると見なしてもよい。いくつかの例では、ビルドシステムが新しいデータセットを含む変換後の実行可能コンピュータプログラムに対してテストを実行するとき、ビルドシステムは、元のデータセットに対する依存関係を検出し、元のデータセットに対して元の検証テストを実行してもよい。したがって、すべての依存関係及びデータが、ビルド時に有効性及び/又は最新性についてチェックされてもよい。
【0063】
別の変換は、手動でキュレートされたデータを含んでもよい。例えば、いくつかの実施形態では、データは、PDF文書などのデータが散在している文書又は他のソースから手動で取得されてもよい。データを自動的に引き出すことは、現代のソフトウェアの能力を超えている可能性があるため、手動でキュレートされなければならない。このような手動キュレーションは、手動でキュレートされたデータと元のPDF文書との間の違いに基づく変換である。ビルドシステムは、元のテスト及び手動でキュレートされたデータ用に記述されたテスト(例えば、検証関数)上で、出所のチェック(例えば、チェックサムクエリなど)を実行してもよい。したがって、ビルドプロセスは、手動でキュレートされたデータを、インポートされたデータと同様の方法で扱い、少なくともチェックサムクエリ及び検証関数を使用してその依存関係をチェックしてもよい。
【0064】
方法100は、1つ以上の実行可能コンピュータプログラムをより大きい実行可能コンピュータプログラムに組み込むステップをさらに含んでもよい。例えば、複数の実行可能コンピュータプログラム(例えば、アーティファクト又はアーカイブ)を組み立てて、各実行可能コンピュータプログラムに関連するそれぞれのデータに対して1つ以上の関数を実行するより大きい実行可能プログラムを形成してもよい。したがって、複数のデータセットに対して複数の関数を実行するより大きい実行可能コンピュータプログラムを、モジュール式に構成及び実行することができる。
【0065】
方法100によれば、データをソフトウェアと同じ方法で扱うことができ、それによってデータの「アウトオブバンド」プロセスを削除し、それに関連する不確実性又はエラーを排除する。データ並びに出所及び有効性のテストをソースコードに直接組み込むことによって、実行可能コンピュータプログラムと実行可能コンピュータプログラムが使用するデータとの間に明確な不変の関係が形成される。
【0066】
方法100は、データ自体を手動でチェック又は更新する必要なしに、実行可能プログラムの関数において有効性が確認されたデータを自動的に提供する。さらに、方法100により、データをコードと別にデータベースに記憶する必要がなくなり、遠隔のデータベースにアクセスしてデータを取り出す待ち時間がなくなる。したがって、方法100では、コンピュータプログラムでデータを使用するための従来の技法よりも、計算時間が早くなり、コード外のデータ記憶が少なくなり、検証済みの正確性が高まる。
【0067】
図1Bは、
図1Aの方法100の概略図である。方法100は、少なくとも1つの遠隔位置101から取得されたデータをコンピュータプログラムのソースコード102に組み込む1つ以上の関数を構築する動作110を含む。方法100は、少なくとも1つの遠隔位置101からのソース識別子ステータスコードを1つ以上の関数に組み込む動作120を含み、ソース識別子ステータスコードは、少なくとも1つの遠隔位置101からデータが取得された日付及び位置に対応する。方法100は、ソース識別子ステータスコードが少なくとも1つの遠隔位置101にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置101に問い合わせるチェックサムクエリをソースコード102に記述する動作130を含む。方法100は、ソースコード102に少なくとも1つの検証関数を提供する動作140を含み、少なくとも1つの検証関数は、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される。方法100は、ソースコード102にビルドブレーク関数を追加する動作150を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法100は、ビルドツール104を実行して、ソースコード102を少なくとも1つの遠隔位置101から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作160を含む。
【0068】
データは、手動入力又はダウンロードによって遠隔位置101から取得されてもよい。ソース識別子ステータスコードは、データ収集と同時に取得されてもよい。データは、遠隔位置101で見出されるフォーマットなどで生の形式で組み込まれてもよく、又はソースコード102のフォーマットなどの選択されたフォーマットに変換されてもよい。ソース識別子ステータスコードは、遠隔位置で実行されるハッシュ関数から取得されたハッシュ、又はそこから取得されたデータとすることができる。ソースコード102は、データを使用して演算を実行するための1つ以上の関数を含んでもよい。図示のように、動作130~150は、ソースコード102に対して実行されて、ソースコード103を形成してもよい。ソースコード103は、データ、ソース識別子ステータスコード、チェックサムクエリ、少なくとも1つの検証関数、1つ以上の関数、及びビルドブレーク関数を含んでもよい。
【0069】
動作160において、ソースコード103上でビルドツール104が実行されてもよい。例えば、ビルドツール104は、ソースコードを実行可能コンピュータプログラム又はその中間バージョン(実行可能コンピュータプログラムに変換可能なプログラミングフォーマット)に変換するための実行可能命令を含んでもよい。ビルドツール104は、コンピューティングシステムに、チェックサムクエリと、データが現在のものであり有効であること、又はデータが現在のものでも有効でもないこと確認するための1つ以上の検証関数とを実行させるプログラミング(例えば、コーディング)を含む。データが現在のものであり有効であることが確認された場合にのみ、ビルドツールは、データ、1つ以上の関数、チェックサムクエリ、少なくとも1つの検証関数、ソース識別子ステータスコード、遠隔位置情報などを含む実行可能コンピュータプログラム108(例えば、アーカイブファイル)を、JARファイルフォーマットなどで出力107する。実行可能なコンピュータプログラム108は、ファイルリポジトリ106に出力される。
【0070】
データが現在のものではない、又は有効ではないと判定された場合、ビルドツール104は、テストの失敗に関するレポート105を出力してもよい。ビルドツール104は、レポート105を生成するための実行可能命令を含んでもよい。レポート105は、チェックサムクエリに失敗するハッシュ若しくはハッシュに関連するデータ、又は検証関数に失敗するデータなど、テストの失敗に関する原因の特定を含んでもよい。レポート105は、データの遠隔位置を含んでもよい。したがって、ソフトウェアプログラマは、ビルドを進行させるために、ソースコード102内又はソースコード103内のデータ若しくは関数を検査、更新、又は修正してもよい。ビルドブレーク関数は、ビルドを停止することによって、有効かつ現在のデータを有する実行可能コンピュータプログラムのみが出力されることを保証する。
【0071】
上記のように、実行可能コンピュータプログラム108(例えば、アーカイブファイル)は、ファイルリポジトリ106に出力107される。実行可能コンピュータプログラム108は、リポジトリ106内でアクセスされてもよい。例えば、実行可能コンピュータプログラム108は、より大きい実行可能コンピュータプログラムを形成するために使用されてもよく、又は変換関数を使用して新しいフォーマットに変換されてもよい。
【0072】
図示のように、実行可能コンピュータプログラム108又はその一部を第1のフォーマットから第2のフォーマットに変換するための実行可能命令を含む、変換関数112が構築されてもよい。上記のように、変換は、実行可能コンピュータプログラム内のデータ及び関数(例えば、チェックサムクエリ、1つ以上の関数、少なくとも1つの検証関数、ビルドブレーク関数など)など、実行可能コンピュータプログラム108の一部又はすべてに対して実行されてもよい。例えば、変換は、アーカイブファイル内のアーティファクトの一部又はすべてに対して実行されてもよい。データ及び関数の元の形式及び変換後の形式は、メタデータフォーマット又はJARファイルのバージョン固有のファイルなどで、変換後の実行可能コンピュータプログラム118に記憶されてもよい。同様に、実行可能コンピュータプログラムを変換するために使用される変換関数112が、変換後の実行可能コンピュータプログラム118に記憶されてもよい。したがって、現在の実行可能コンピュータプログラムを作成する手段に関する完全な責任追跡性を提供するために、バージョン固有の情報及び前記バージョンがどのように作成されたかが記憶される。
【0073】
変換関数112は、変換を実行する後続のビルドツール114に含まれる。次いで、ビルドツール114は、変換後の検証関数及び変換後のチェックサムクエリに従って、データに対してチェックサムクエリ又は少なくとも1つの検証関数のうちの1つ以上を実行する。変換後の実行可能コンピュータプログラム(例えば、アーティファクト)が変換後のテストに成功した場合、変換後の実行可能コンピュータプログラム118は、変換後のファイルリポジトリ116に出力117される。変換後の実行可能コンピュータプログラム118は、元の又は以前の実行可能コンピュータプログラム108などの、変換後の実行可能コンピュータプログラム118の以前のバージョンのすべての情報を含む。したがって、データ、変換関数、ソース識別子ステータスコード、チェックサムクエリ、検証関数などを含む、実行可能コンピュータプログラム又はその中のアーティファクトに関する情報はすべて、JARファイルフォーマットなどで実行可能コンピュータプログラムに含まれる。したがって、元のデータに対して依存関係を有するデータ又はそのサブセットに対して、テストが実行される。さらに、変換後の検証関数及びチェックサムクエリに成功することによって、変換後のデータが最新かつ有効であることが実証される。
【0074】
変換後の実行可能コンピュータプログラム又はその中のアーティファクトが変換後のテストに成功しない場合、失敗したテストに関するレポート115が出力されてもよい。次いで、ソフトウェアプログラマは、変換関数をチェック又は修正し、遠隔位置101でデータを検査し、遠隔位置101からデータを再取得するか、あるいは別の方法で方法100への入力のいずれかを調査及び訂正してもよい。
【0075】
上記のように、変換後の実行可能コンピュータプログラム118は、複数の関数に従って複数のデータを分析して1つ以上の出力を提供するプログラムのモジュール式構築ブロックなどのより大きい実行可能コンピュータプログラムにおいて使用することができる。さらに、変換後の実行可能コンピュータプログラム118に対してさらなる変換が実行されてもよく、これらはすべて、実行可能コンピュータプログラム内のメタデータ又はファイルディレクトリ(例えば、検証済みのアーカイブフォーマットファイル)などにおいて、以前の情報(例えば、データ、1つ以上の関数、ソース識別子ステータスコード、少なくとも1つの検証関数など)、及び変換後の実行可能コンピュータプログラム118の以前のバージョンを保持する。
【0076】
図2は、少なくとも一実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法200の流れ図である。方法200は、少なくとも1つの遠隔位置からのデータをソースコードに直接インポートする動作210を含む。方法200は、少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込む動作220を含み、ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。方法200は、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作230を含む。方法200は、ソースコードに少なくとも1つの検証関数を提供する動作240を含み、少なくとも1つの検証関数は、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される。方法200は、ソースコードにビルドブレーク関数を追加する動作250を含み、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める。方法200は、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作260を含む。方法200は、第2のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行して、実行可能コンピュータプログラムを第1のフォーマットから第2のフォーマットに変換する動作270を含み、第2のビルドツールは、変換されたデータが有効であることを保証するために、変換されたデータに対して少なくとも1つの検証関数及びビルドブレーク関数を実行する。
【0077】
方法200は、動作210~270よりも多くの又は少ない動作を含んでもよい。例えば、動作270は、いくつかの例において省略されてもよい。さらに、方法200の動作は、提示された順序とは異なる順序で実施されてもよい。動作210~270の少なくともいくつかは、1つ以上のデスクトップコンピュータ、1つ以上のラップトップコンピュータ、1つ以上のサーバ、1つ以上のタブレットなどの、コンピュータ又はコンピューティングデバイスによって実行されても、それらと共に実行されても、それらに対して実行されてもよい。
【0078】
少なくとも1つの遠隔位置からのデータをソースコードに直接インポートする動作210は、POM内のライブラリにデータを配置することなど、少なくとも1つの遠隔位置からのデータをソースコードにダウンロードすることを含んでもよい。少なくとも1つの遠隔位置からのデータをソースコードにインポートするステップは、ウェブページ、データベース、アーカイブ、ライブラリ、又は任意の他の電子ソースからデータをダウンロードすることを含んでもよい。いくつかの例では、少なくとも1つの遠隔位置からのデータをソースコードにインポートするステップは、少なくとも1つの遠隔位置で提供されるフォーマット(例えば、HTML)でデータをダウンロードし、データをソースコードフォーマット(例えば、XML)に変換することを含んでもよい。いくつかの例では、少なくとも1つの遠隔位置からのデータをソースコードにインポートするステップは、コンピュータプログラム(例えば、ソースコードの全体によって指定されるプログラム)の1つ以上の関数にデータを直接ダウンロードすること、又は別の方法で取り込むことを含んでもよい。例えば、データは、コンピュータプログラム内の1つ以上の関数において、コンピュータプログラムのソースコードにライブラリとしてインポートされてもよい。ソースコードで記述され、データ(並びに関連するソース識別子ステータスコード及び遠隔位置アドレス)を含む1つ以上の関数は、コンピュータプログラム及び結果として得られる実行可能コンピュータプログラムを構築するためのブロックとして使用されてもよい。データは、ソースコード内又はソースコードに関連付けられたライブラリに置かれて、1つ以上の関数によって参照されてもよい。したがって、データは、ソースコード内の1つ以上の関数に含まれる。
【0079】
いくつかの例では、少なくとも1つの遠隔位置からのデータをソースコードに直接インポートするステップは、POMなどのソースコードにデータのライブラリを手動で構築することを含む。いくつかの例では、少なくとも1つの遠隔位置からのデータをソースコードに直接インポートステップは、依存関係チェックを強制するビルドツールの標準的な依存関係インポートメカニズムを使用することを含む。このような例では、ソースコードは、データが存在するPOM内の遠隔位置のアドレス(例えば、データベース、ウェブページなどのアドレス)又は場所(例えば、ディレクトリ若しくはリポジトリ)を含んでもよい。いくつかの例では、ビルドツールは、インポートコマンド及びソースコード内の遠隔位置のアドレスに対応して、ビルド中にデータをインポートしてもよい。このような例では、少なくとも1つの遠隔位置からのデータをソースコードに直接インポートするステップは、ビルド中に遠隔位置から1つ以上の関数にデータをインポートし、実行可能コンピュータコード又はコンパイル可能コンピュータコードとしてデータを出力することを含んでもよい。ビルドツールには、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、又はWafなど、本書に開示されるビルドツールのいずれかが含まれ得る。
【0080】
コンピュータプログラムのソースコード(例えば、ビルドツールを実行する前のコード)は、データを利用する1つ以上の関数を含んでもよい。例えば、1つ以上の関数は、質問への回答を求めてデータに問い合わせてもよい。関数及びクエリのタイプの例は、本明細書に開示されている。ソースコードは、XMLなどの電子データ転送用のオープン標準フォーマットであってもよい。
【0081】
少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込む動作220であって、ソース識別子ステータスコードが、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する、動作220は、1つ以上の態様において、上記で開示された動作120と同様又は同一であってもよい。例えば、少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、遠隔位置からのチェックサム又はハッシュをデータに関連するソースコードに提供することを含んでもよい。いくつかの例では、少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、ソースコードの1つ以上の関数において遠隔位置のチェックサム又はハッシュを提供することを含んでもよい。少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、チェックサム又はハッシュをソースコードに追加することを含む。いくつかの例では、少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、ソース識別子ステータスコードをソースコードにダウンロードすることを含む。
【0082】
いくつかの例では、少なくとも1つの遠隔位置からのソース識別子ステータスコードをソースコードに組み込むステップは、ソース識別子ステータスコードをソースコード内のデータに関連付けることを含む。例えば、ソース識別子ステータスコードをソースコード内のデータに関連付けることは、ソース識別子ステータスコード及びデータを単一の関数に組み込むことを含んでもよい。
【0083】
1つ以上の態様において、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述する動作230は、上記で開示された動作130と同様又は同一であってもよい。例えば、チェックサムクエリをソースコードに記述するステップは、チェックサムクエリをオープン標準フォーマットでソースコードに組み込むことを含んでもよい。チェックサムクエリは、ソースコードに組み込まれたソース識別子ステータスコード、及びデータに対応する少なくとも1つの遠隔位置の現在のソースコードステータス識別子を検査する。チェックサムクエリは、データに対応する(また、ソース識別子ステータスコードに対応する)少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードを取り出すための命令を含む。例えば、チェックサムクエリは、ソース識別子ステータスコードと、ソース識別子ステータスコードに対応する遠隔位置(例えば、URLなど)にある現在のソース識別子ステータスコードとの間の対応関係を検査する。
【0084】
1つ以上の態様において、ソースコードに少なくとも1つの検証関数を提供する動作240であって、少なくとも1つの検証関数が、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される、動作240は、上記で開示された動作140と同様又は同一であってもよい。例えば、少なくとも1つの検証関数は、データの比較対象となるテスト及び/又は標準を含む。少なくとも1つの検証関数は、オープン標準フォーマットなどでソースコードに記述されてもよい。例では、ソースコードに少なくとも1つの検証関数を提供するステップであって、少なくとも1つの検証関数が、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される、ステップは、データがソースコードによって指定されたフォーマットであることを確認するためにデータをテストする関数、又は期待される目標値若しくは目標範囲を満たす値を提供するか、若しくはそれらを含む関数を提供することを含んでもよい。
【0085】
1つ以上の態様において、ソースコードにビルドブレーク関数を追加する動作250であって、ビルドブレーク関数が、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、動作250は、上記で開示された動作150と同様又は同一であってもよい。例えば、ソースコードにビルドブレーク関数を追加するステップは、ビルドブレーク関数をオープン標準フォーマットでソースコードに組み込むこと(例えば、コーディング、タイピング、プログラミングすること)を含んでもよい。ビルドブレーク関数は、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致せず、少なくとも1つの検証関数がデータは有効であると確認した場合にビルドを終了するための命令を含む。したがって、ソースコード内のビルドブレーク関数は、データ、データに基づく任意の関数、及び関数の任意の結果又は生成物の有効性を保証するために、出所のチェック及び有効性のチェックを提供する。
【0086】
1つ以上の態様において、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作260は、上記で開示された動作160と同様又は同一であってもよい。例えば、ビルドツールを実行して、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、依存関係チェックを強制するビルドツールを実行することを含んでもよい。ビルドツールには、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、Wafなどが含まれ得る。
【0087】
ビルドツールは、ソースコードを実行可能コンピュータプログラム、又はさらにコンパイル可能又は変換可能なフォーマットにコンパイルしてもよい。ビルドツールは、ビルド中に依存関係チェック(例えば、チェックサムクエリを実行すること)によってコード内のデータの有効性をチェックする。実行可能コンピュータプログラムは、データが1つ以上の検証済みライブラリとして組み込まれた検証済みのアーカイブフォーマットで出力されてもよい。検証済みのアーカイブフォーマットは、zipフォーマット、tarフォーマットなどの署名付きJavaアーカイブ(「JAR」)ファイルであってもよい。例えば、実行可能コンピュータプログラムは、データが1つ以上のアーカイブとして組み込まれたJARファイルに出力されてもよい。
【0088】
チェックサムクエリ、少なくとも1つの検証関数、及びビルドブレーク関数は、1つ以上の関数におけるデータの依存関係をチェックし、データの最新性及び検証に基づいてビルドを継続又は停止するための命令を提供する。チェックサムクエリがソース識別子ステータスコードが遠隔位置の現在のソース識別子ステータスコードと一致すると判定し、少なくとも1つの検証関数に従ってデータが有効である場合にのみ、ビルドツールは、1つ以上の関数を含む実行可能コンピュータプログラムビルドを完了する。
【0089】
第2のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行して、実行可能コンピュータプログラムを第1のフォーマットから第2のフォーマットに変換する動作270であって、第2のビルドツールが、変換されたデータが有効であることを保証するために、変換されたデータに対して少なくとも1つの検証関数及びビルドブレーク関数を実行する、動作270は、実行可能コンピュータプログラム又はその中のアーティファクトに対して第2のビルドツールを実行することを含んでもよい。1つ以上の態様において、第2のビルドツールは、第1のビルドツールと同様又は同一であってもよい。1つ以上の態様において、第2のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行する動作270は、方法100に関して上記で開示された変換関数を用いて変換を実行する動作と同様又は同一であってもよい。例では、第2のビルドツールにおいて実行可能コンピュータプログラムに対して変換関数を実行するステップは、第2の(後続の)ビルドツールに関連付けられたSCMにおいて変換プロジェクトを作成することなど、変換関数を記述することを含む。
【0090】
第2のビルドツールは、変換関数を実行し、変換後のデータ、1つ以上の関数、検証関数、チェックサムクエリなどを用いて新しい(例えば、変換後の)実行可能コンピュータプログラムを構築するための実行可能命令を含んでもよい。例えば、第2のビルドツールは、実行可能コンピュータプログラム(例えば、JARファイル全体又はその一部)を第1のフォーマットから第2のフォーマットに変換するのに効果的な変換関数を実行してもよい。第2のビルドツールは、データを第1のフォーマット(例えば、プログラミング言語、測定単位、又は提示構成)から第2のフォーマットに変換するのに効果的な変換関数を実行してもよい。第2のビルドツールは、1つ以上の関数、チェックサムクエリ、少なくとも1つの検証関数、メタデータ、又は実行可能コンピュータプログラムの任意の他の部分を第1のフォーマットから第2のフォーマットに変換するのに効果的な変換関数を実行してもよい。
【0091】
第2のビルドツールは、第2のビルドプロセスの一部として、少なくとも1つの検証関数、変換後のデータ、変換後の関数などの有効性をテストするように適合された新しい検証関数、チェックサムクエリ、又は変換関数のうちの1つ以上を実行する。したがって、変換後のデータの有効性は、第2のビルドプロセスの実行時にも確認される。第2のビルドツールは、変換関数の目標であるデータなどに対して、実行可能コンピュータプログラムの任意の依存関係に関連付けられた少なくとも1つの検証関数を実行する。したがって、データ及び変換後のデータは、各ビルド中に有効性がチェックされる。変換後のビルドブレーク関数は、ビルドツールが、有効な(変換後の)データを有する変換後の実行可能コンピュータプログラムのみを出力することを保証するために実行される。
【0092】
変換後の実行可能コンピュータプログラムに対してさらなる変換が実施されてもよい。変換後の実行可能コンピュータプログラムは、変換後の実行可能コンピュータプログラム内の変換後のデータを使用して1つ以上の関数を実行する、より大きい実行可能コンピュータプログラムのモジュール式構築要素として使用されてもよい。
【0093】
方法200は、方法100に関して上記で開示されたように、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の不一致に関するレポート又はデータが無効であることが判明したというレポートを提供するとともにそれに関連するデータを識別するレポート関数を、ソースコードに追加するステップを含んでもよい。
【0094】
図3は、少なくとも1つの実施形態による、コンピュータプログラムに組み込まれたデータを使用してコンピュータプログラムを構築する方法300の流れ図である。方法300は、少なくとも1つの遠隔位置からのデータを組み込む1つ以上の関数を含むソースコードを提供する動作310を含む。方法300は、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作320を含む。方法300は、実行可能コンピュータプログラムが存在するかどうかを判定する動作330を含む。
【0095】
方法300は、動作310~330よりも多くの又は少ない動作を含んでもよい。例えば、動作330は、方法300から省略されてもよい。さらに、方法300の動作は、提示された順序とは異なる順序で実施されてもよい。動作310~330の少なくともいくつかは、1つ以上のデスクトップコンピュータ、1つ以上のラップトップコンピュータ、1つ以上のサーバ、1つ以上のタブレットなどの、コンピュータ又はコンピューティングデバイスと共に実行されても、それらに対して実行されてもよい。
【0096】
方法300は、少なくとも1つの遠隔位置からのデータを組み込む1つ以上の関数を含むソースコードを提供する動作310を含む。いくつかの例では、少なくとも1つの遠隔位置からのデータを組み込む1つ以上の関数を含むソースコードを提供するステップは、非一過性のコンピュータ可読メモリ記憶媒体に記憶されるような電子フォーマットでソースコードを提供することを含む。非一過性のメモリ記憶媒体には、ハードドライブ、メモリスティック、ディスク、又は中に1つ以上の関数が含まれたソースコードを含む任意の他の媒体が含まれ得る。ソースコードは、XML又は本明細書に開示される他のオープン標準フォーマットのいずれかなどの電子データ用のオープン標準フォーマットで提供されてもよい。
【0097】
1つ以上の態様において、中のソースコード及び関数は、本明細書に開示されるソースコード及び1つ以上の関数のいずれかと同様又は同一であってもよい。例えば、ソースコードは、XMLを含んでもよく、1つ以上の関数は、データの1つ以上のクエリを含んでもよい。ソースコードは、POMに含まれてもよい。ソースコード内のデータは、データを含む、データベース、ウェブページ、アーカイブなどの遠隔位置からアクセス及び取得されてよい。
【0098】
いくつかの例では、少なくとも1つの遠隔位置からのデータを組み込む1つ以上の関数を含むソースコードを提供するステップは、本明細書に開示される関数のいずれかを含むソースコードを提供することを含む。例えば、ソースコードは、少なくとも1つの遠隔位置から取得されたデータを組み込む1つ以上の関数、1つ以上の関数内の少なくとも1つの遠隔位置からの1つ以上のソース識別子ステータスコード、1つ以上のチェックサムクエリ、少なくとも1つの検証関数、1つ以上のビルドブレーク関数、又は1つ以上のレポート関数を含んでもよい。1つ以上の態様において、1つ以上の関数、データ、少なくとも1つの遠隔位置、1つ以上のソース識別子ステータスコード、1つ以上のチェックサムクエリ、少なくとも1つの検証関数、1つ以上のビルドブレーク関数、又は1つ以上のレポート関数は、本明細書に開示されているものであってもよい。例えば、ビルドブレーク関数は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致しない場合にビルドを停止するようにビルドツールに命令する。したがって、ソース識別子ステータスコードと現在のソース識別子ステータスコードが1つ以上の関数の特定の関数で一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドを継続する。
【0099】
少なくとも1つの遠隔位置からのデータを組み込む1つ以上の関数を含むソースコードを提供する動作310は、1つ以上の関数、データ、ソース識別子ステータスコード、チェックサムクエリ、ビルドブレーク関数、少なくとも1つの検証関数、レポート関数、又はソースコードの任意の他の部分を含むようにソースコードを記述することを含んでもよい。例えば、上記のオブジェクトはそれぞれ、POMに記述されてもよい。少なくとも1つの遠隔位置からのデータを組み込む1つ以上の関数を含むソースコードを提供する動作310は、少なくとも一部にデータと、データが取得された遠隔位置及びデータが取得されたときの遠隔位置に関連付けられたソース識別子ステータスコード(例えば、ウェブページのチェックサム又はハッシュ)と、遠隔位置のアドレスとを含む関数のグループを、別々に使用可能かつ構築可能な関数で提供することを含んでもよい。関数のグループは、非一過性のコンピュータ可読メモリ記憶媒体上の関数のデータベース、リポジトリ、アーカイブ、又はライブラリに記憶されてもよい。関数のグループの各関数は、関連するデータ及びメタデータと共に、個別のPOMなどのソースコードフォーマットで記憶されてもよい。関数のグループの各関数は、任意の他のオープン標準フォーマットのXMLフォーマットなどのソースコードフォーマットであってもよい。いくつかの例では、関数のグループの各関数は、ソースコードにモジュール式に挿入されてもよい。
【0100】
ソースコードがビルドツールで処理されて、関数及び関数を実行するためのデータを含む実行可能コンピュータプログラムを作成するとき、各関数内のデータがチェック及び検証されてもよい。実行可能コンピュータプログラムは、1つ以上の関数、変換関数、検証関数、チェックサムクエリ、及び本明細書に開示される関数のいずれかを実行するためのデータを含むアーティファクト(例えば、JARファイル)の一部とすることができる。
【0101】
方法300は、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行する動作320を含む。いくつかの例では、ビルドツールを実行するステップは、非一過性のコンピュータ可読メモリ記憶媒体(例えば、ハードドライブ、プロセッサ、メモリなど)に記憶されたビルドツールを用いてビルドを開始することを含んでもよい。
【0102】
いくつかの例では、ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、コンピュータ若しくはコンピュータネットワーク上で、又はコンピュータ若しくはコンピュータネットワークを用いて実行される。いくつかの例では、ビルドツールを実行して、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、ソースコードを、コンピュータ可読かつ実行可能なフォーマット又は実行可能なコンピュータプログラムにコンパイル可能なフォーマットにコンパイル、ビルド、又は他の方法で変換することを含む。例えば、ビルドツールを実行するステップは、ソースコードを、データが1つ以上のライブラリとして組み込まれた検証済みのアーカイブフォーマットにコンパイルすることを含んでもよい。検証済みのアーカイブフォーマットは、本明細書に開示されるように、署名付きJARファイルなどを含んでもよい。コンパイルプロセス中、ソースコードに含まれている記述されたテスト(例えば、検証関数)に従ってデータが有効であることを保証するために、ソースコード内のデータをテストすることができる。コンパイルプロセス中、データ、1つ以上の関数、少なくとも1つの検証関数、チェックサムクエリ、ソース識別子ステータスコード、又はソースコード内の任意の他のオブジェクト(又は、それに基づく実行可能コンピュータプログラム)は、ソースコード内の変換関数によって変換されるか、又はソースコードによって参照されてもよい。例えば、データは、第1のフォーマットから第2のフォーマットに変換されてもよく、又はデータの演算を実行して出力を提供するより大きい関数に組み込まれてもよい。データは変換され得るが、結果として得られる変換後の実行可能コンピュータプログラムは、実行可能コンピュータプログラムの出力を必要に応じて再現できることを保証するために、チェックサムクエリ、ソース識別子ステータスコード、検証関数、変換関数などの元のバージョンに関連する情報の一部又はすべてを維持する。
【0103】
JARファイルは、実行可能コンピュータプログラムの1つ以上の関数を実行するためのコンピュータ実行可能命令(例えば、コード)を含んでもよい。実行可能コンピュータプログラムを含むJARファイル内の実行可能命令は、少なくとも1つの遠隔位置から取得されて実行可能コンピュータプログラムに組み込まれたデータを使用して、1つ以上の関数を実行し、その関数から出力を提供する。
【0104】
いくつかの例では、ビルドツールを実行して、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップは、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、Wafなどの依存関係チェックを強制するビルドツールを実行することを含む。ビルドツールは、チェックサムクエリを実行して、各関数の各データセットに対応する(遠隔位置にある)ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間の一致をチェックするようにプログラムされる。ビルドツールは、少なくとも1つの検証関数を実行して、データ及び/又はデータ上で演算する1つ以上の関数の有効性をチェックするようにプログラムされる。ビルドツールは、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致しない場合、又は検証関数がデータは無効であると判定した場合に、ビルドブレーク関数を実行するようにプログラムされる。
【0105】
方法300は、実行可能コンピュータプログラムが存在するかどうかを判定する動作330を含む。実行可能コンピュータプログラムが存在するかどうかを判定するステップは、ビルドツール又は別のプログラム若しくはツールによって自動的に実行されてもよい。ビルドツール又は別のプログラム若しくはツールは、ビルドが中断若しくは完了したという視覚的な表示又は警告を提供してもよい。例えば、ビルドツールは、実行可能コンピュータプログラムをJARファイルフォーマット(又は、同様のフォーマット)で、選択された位置に出力してもよい。JARファイルの存在は、実行可能コンピュータプログラムが存在し、その中のデータが現在のものであり、そのように検証済みであることを示す。JARファイルはまた、データ、データに関連付けられたメタデータ、遠隔位置、ソース識別子ステータスコード、チェックサムクエリ、少なくとも1つの検証関数、ビルドブレーク関数、又は前述のもののいずれかの以前のバージョンを、JARファイル内の個別のアーティファクトとして含む。実行可能コンピュータプログラムが存在するかどうかを判定するステップは、ユーザによってファイル位置の目視検査を通して実行されてもよい。実行可能コンピュータプログラムが存在するかどうかを判定するステップは、特定の位置(例えば、ファイル、ウェブアドレス、又は電子メールアドレス)に警告を送信することを指定する、ビルドツール又は実行可能コンピュータプログラムのコードによって実行されてもよい。
【0106】
いくつかの例では、レポート関数は、実行可能コンピュータプログラムが存在すること又は存在しないことをユーザ又はプログラムに警告してもよい。ビルドがない場合、1つ以上の関数が、どのデータが現在のものではないのか、又は有効ではないのか(例えば、ビルドがどこで中断されたか)をユーザに自動的に通知してもよい。このような例では、レポート関数は、どのデータが最新ではないのか、又は有効ではないのか、及びそのデータを組み込む関連する関数を指定してもよい。
【0107】
いくつかの例では、方法300は、データを組み込む1つ以上の関数を含む実行可能コンピュータプログラムを出力するステップを含む。いくつかの例では、データを組み込む1つ以上の関数を含む実行可能コンピュータプログラムを出力するステップは、実行可能コンピュータプログラムを、ウェブサイト、データベース、ファイルフォルダ、電子メールアドレスなどの電子ファイルに自動的に通信することを含んでもよい。このような例では、ビルドツールは、実行可能コンピュータプログラムを電子ファイルに出力するための命令を含んでもよい。実行可能コンピュータプログラム(例えば、実行可能コード、又はJARファイル全体)は、後で使用するためにコンピュータプログラム製品として出力されてもよい。
【0108】
いくつかの例では、方法300は、実行可能コンピュータプログラムを(サービスとして)実行して、その中の1つ以上の関数を実行するステップを含む。例えば、実行可能コンピュータプログラムは、データを使用して、1つ以上の関数で1つ以上のクエリを実行して出力を提供してもよい。出力は、特定の質問への回答、又は実行可能コンピュータプログラムが回答するように構築されているより大きい質問への回答の中のフィードであってもよい。実行可能コンピュータプログラムの実行するステップは、コンピュータ、コンピュータネットワーク、又はその中の関数を実行するために備えられた他の電子デバイス上で実行可能コンピュータプログラムを実行することを含んでもよい。
【0109】
図4は、一実施形態による、ソースコード410上でビルドツール430を実行するプロセス400のブロック図である。本明細書に開示されるように、ソースコード410は、1つ以上の関数412、1つ以上のチェックサムクエリ414、少なくとも1つの検証関数415、ビルドブレーク関数416、又は前述のものの組合せを含んでもよい。ソースコード410は、データ411及びソース識別子ステータスコード413の参照位置を含んでもよい。
【0110】
ソースコード410は、非一過性のコンピュータ可読メモリ記憶媒体上に配置されてもよい。例えば、ソースコード410は、ハードドライブ、メモリスティック、プロセッサ、RAM、ROM、ディスク、又は任意の他の非一過性のコンピュータ可読記憶媒体に記憶されてもよい。ソースコード410は、本明細書に開示されるようなオープン標準フォーマットとすることができる。
【0111】
データ411は、ソースコード410に記憶されてもよい。いくつかの例では、データは、ソースコード410によって参照されるリポジトリ、アーカイブ、又はライブラリに記憶されてもよい。したがって、データは、直接又は依存関係として、ソースコードに含まれてもよい。データ411は、ソースコード410の他の構成要素によってアクセス可能及び使用可能であってもよい。
【0112】
1つ以上の関数412はそれぞれ、クエリ、クエリに回答するためのデータ411、又はソースコード内のデータ411の位置への参照を含んでもよい。いくつかの例では、1つ以上の関数412は、本明細書に開示されるように、データ411が取得された遠隔位置についてのソース識別子ステータスコード413を含んでもよい。したがって、1つ以上の関数412のそれぞれは、データ411に基づいてクエリに要求及び回答する完全な手段を提供することができる。
【0113】
ソースコードは、ソース識別子ステータスコード413、チェックサムクエリ414、及びデータ411が現在のものであり有効であることを一括して検証するための少なくとも1つの検証関数415を含む。例えば、データが変化したかどうかを判定するために、ソース識別子ステータスコード413(例えば、チェックサム又はハッシュ)が、遠隔位置にある現在のソース識別子ステータスコードと比較される。
【0114】
1つ以上のチェックサムクエリ414は、遠隔位置の電子アドレスにある特定の関数内のデータに対応する遠隔位置から、(例えば、データに関連付けられた)ソースコードに記憶されている現在のソース識別子ステータスコードにアクセスして取得するための命令を含んでもよい。いくつかの例では、1つ以上のチェックサムクエリ414は、遠隔位置の電子アドレス、及び特定の関数内のデータに対応する遠隔位置から現在のソース識別子ステータスコードにアクセスして取得するための命令を含んでもよい。1つ以上のチェックサムクエリ414は、特定の関数内のデータに対応するソース識別子ステータスコード413と、データが取得された遠隔位置の電子アドレスにある現在のソース識別子ステータスコードとを比較するための命令を含む。チェックサムクエリ414は、ソース識別子ステータスコードが現在のソース識別子ステータスコードと一致するかどうかを判定する。
【0115】
ソースコード410は、1つ以上の関数のそれぞれ、又は遠隔位置から取得されたデータを含む1つ以上の関数のそれぞれに対応するソース識別子ステータスコード413及びチェックサムクエリ414を含んでもよい。ソースコード410は、ソースコード410の関数におけるソース識別子ステータスコード413のそれぞれを、それに対応する現在のソース識別子ステータスコードを用いてチェックするための命令を有する、単一のチェックサムクエリ414を含んでもよい。
【0116】
いくつかの例では、チェックサムクエリ414は、データ411が以前に依存関係を介してチェックされている場合などに一部のデータ411のビルドにおいて実行されない場合がある。しかしながら、ビルドが実行されるたびに、少なくとも1つの検証関数415が実行される。
【0117】
少なくとも1つの検証関数415は、データ411にアクセスし、データ411上で1つ以上の関数を実行して、データが、選択されたフォーマット(例えば、XML、HTMLなど)であるかどうか、選択された範囲の値を含むかどうか、選択されたタイプの値(例えば、日、分、グラム、メートル、密度など)を含むかどうか、又は選択された範囲若しくはタイプの出力値を生成するかどうかを判定するための命令を含んでもよい。少なくとも1つの検証関数415は、選択された標準に従ってデータが有効であるかどうかを判定する。少なくとも1つの検証関数415は、本明細書に開示されるように、データにアクセスし、データ411の1つ以上の値が選択された条件(例えば、選択された範囲の値など)を満たすかどうか、又はデータ411のフォーマットが選択されたフォーマットであるかどうかを判定する関数を含んでもよい。したがって、1つ以上の関数412は、データが選択された条件を満たしているためデータが有効であること、又はデータが選択された条件を満たしていないためデータが無効であることを示す、クエリに対する回答を提供することができる。
【0118】
ビルドブレーク関数416は、1つ以上の関数のうちの少なくとも1つの中のデータに対応するソース識別子ステータスコード及び現在のソース識別子ステータスコードが一致しない場合、又は少なくとも1つの検証関数がデータは無効であると判定した場合にビルドを停止するための命令417を含む。ビルドブレーク関数416は、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、データが有効であると検証された場合に実行可能コンピュータプログラムを出力するための命令418を含む。
【0119】
ビルドツール430は、Apache Ant、Apache Maven、Gradle、MSBuild、sbt、Wafなどの、本明細書に開示されるビルドツールのいずれかを含んでもよい。ソースコード410は、ビルドツール430を含むコンピュータ上に構築されるか、又はコンピュータに通信されてもよい。例えば、ソースコード410又はデータ411及びその中の1つ以上の関数412は、未構築のコンピュータプログラム製品として記憶されてもよい。ビルドツール430を使用して、ソースコード410を、検証済みのアーカイブフォーマットなどで検証済みのデータを組み込む実行可能コンピュータプログラム432に構築してもよい。例えば、ビルドツール430を使用して、ソースコード410を、データ411が1つ以上のアーカイブ又はライブラリとして含まれたJARファイルに構築してもよい。実行可能コンピュータプログラム432は、本明細書に開示されるような関数におけるクエリに回答するための関数及び検証済みのデータを含む。例では、実行可能コンピュータプログラム432は、1つ以上のデータ411、1つ以上の関数412、ソース識別子ステータスコード413、遠隔位置のアドレス、チェックサムクエリ414、少なくとも1つの検証関数、ビルドブレーク関数416、メタデータ、又は前述のもののいずれかの以前のバージョンと共に、検証済みのアーカイブフォーマットファイル(例えば、JARファイル)にある。JARファイルの構成要素は、個々の構成要素(例えば、アーティファクト)としてJARファイルに記憶されてもよい。ビルドツール430は、チェックサムクエリ、1つ以上の検証関数、変換関数を実施し、ソースコード410を、データ411を用いて1つ以上の関数412を実行することが可能な実行可能コンピュータプログラムにコンパイルする。
【0120】
ビルドツール430は、ビルドブレーク関数416に基づいてビルドを中断することができる。このような例では、ビルドツール430は、ビルドが中断されているという表示434を提供してもよい。例えば、ビルドツール430は、レポート関数に関して本明細書に開示されるように、ビルドが中断されていることを示すテキストを含むレポートを出力してもよい。このような例(図示せず)では、ソースコード410は、本明細書に開示されるように、レポート関数を含んでもよい。
【0121】
図5は、1つ以上の実施形態による、検証済みのデータが含まれた実行可能コンピュータプログラムを作成及び実行するためのコンピュータシステム500の概略図である。コンピュータシステム500は、遠隔位置520にアクセスできるコンピュータ510を含む。コンピュータ510は、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、ネットワーク、クラウドコンピューティングデバイス、タブレット、スマートフォンなど、本明細書に開示される任意のコンピュータと同様又は同一であってもよい。例えば、コンピュータ510は、インターネット、イントラネット、クラウドストレージなどを介して遠隔位置520にアクセスするための機器及びプログラミングを有してもよい。コンピュータ510は、その中にソースコード410を記憶する。例えば、ソースコード410は、コンピュータ510内のメモリ(例えば、RAM若しくはROM)、プロセッサ、又は他の記憶デバイス(例えば、ディスク)のうちの1つ以上に記憶されてもよい。
【0122】
コンピュータ510は、ソースコード410を構築するために使用されてもよく、又は遠隔位置520(例えば、インターネット接続を介したウェブサイト、イントラネット接続を介したデータベース、ディスク、USBドライブなど)からソースコード410の少なくとも一部を受信してもよい。例えば、コンピュータ510は、インターネット接続を介して遠隔位置520に動作可能に結合されるか、又は結合可能である。このような例では、コンピュータ510は、選択されたタイプのデータのリポジトリを含むウェブページにアクセスし、ウェブページから、対応するソース識別子ステータスコードと共に前記データをダウンロード515することができる。遠隔位置520は、サーバ、コンピュータなどの第2のコンピューティングデバイス上に記憶され、そこから提供されてもよい。
【0123】
コンピュータ510は、遠隔位置520のアドレス、データ、及び対応するソース識別子ステータスコードをソースコード410内に記憶してもよい。ソースコード410は、本明細書に開示されるようなチェックサムクエリ及びビルドブレーク関数を含む。
【0124】
コンピュータ510は、ビルドツール430をその中に記憶してもよい。ビルドツール430は、本明細書に記載されているものであってもよい。ビルドツール430は、実行時に、ソースコードをコンピュータ実行可能プログラムにコンパイルし、リンクし、パッケージ化してもよい。ビルドツール430は、実行時に、データが記憶されているそれぞれのアーティファクトにおけるデータの依存関係をチェックしてもよい。例えば、ビルドツール430は、チェックサムクエリを実行535して、データに関連付けて記憶されたソース識別子ステータスコードが、遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定してもよい。ビルドツール430は、実行時に、コンパイルされたフォーマットのデータの有効性をテストしてもよい。例えば、ビルドツール430は、少なくとも1つの検証関数を実行して、データの有効性を判定してもよい。ビルドツール430は、ビルドブレーク関数を実行して、データのセットのソース識別子ステータスコードが現在のソース識別子ステータスコードと一致しない場合、又は少なくとも1つの検証関数がデータは無効であると判定した場合にビルドを停止する。したがって、ビルドツール430の製品(例えば、実行可能コンピュータプログラム)は、有効かつ最新のデータのみを含む。ソースコード410又は実行可能コンピュータプログラム432は、コンピュータプログラム製品又はその一部として使用されてもよい。
【0125】
上記のように、コンピュータ510は、キーボード、スクリーン、タッチスクリーン、マウスなどのうちの1つ以上などのユーザインターフェース514を含んでもよい。ソースコード410は、ユーザインターフェース514を使用してビルド又は選択されてもよい。ビルドツール430は、ユーザインターフェース514を使用して選択及び実行されてもよい。ソースコード及び実行可能コンピュータプログラムは、ユーザインターフェース514上で閲覧されてもよい。ビルドツール430は、ビルドが停止されたという視覚的な表示(例えば、ソース識別子ステータスコード及び現在のソース識別子ステータスコード)を出力してもよい。ビルドツール430は、ソース識別子ステータスコードと現在のソース識別子ステータスコードとの間に対応する不一致があるデータ、データに対応する遠隔位置、及びソースコード内のそれらが位置する箇所を示してもよい。ビルドツール430は、データ、データに対応する遠隔位置、及びソースコード内のそれらが位置する箇所が、少なくとも1つの検証関数に従って無効であると判定されたことを示してもよい。
【0126】
ビルドツール430は、実行可能コンピュータプログラムなど、ビルドが完了したという視覚的な表示を出力してもよい。例えば、ビルドツール430は、実行可能コンピュータプログラムをコンピュータ510に出力して、ユーザインターフェース514上に表示してもよい。
【0127】
図6は、一実施形態による、本明細書に開示される方法のいずれかを実行するためのシステム600の概略図である。システム600は、方法100、200、又は300などの本明細書に開示される方法のいずれかを実施するように構成されてもよい。システム600は、少なくとも1つのコンピューティングデバイス610を含む。いくつかの実施形態では、システム600は、ネットワーク接続を介してシステム600に動作可能に結合されるような、1つ以上の追加のコンピューティングデバイス612を含んでもよい。少なくとも1つのコンピューティングデバイス610は、方法100、200、又は300などの上記の動作のうちの1つ以上を実行するように構成され得る例示的なコンピューティングデバイスである。少なくとも1つのコンピューティングデバイス610は、1つ以上のサーバ、1つ以上のコンピュータ(例えば、デスクトップコンピュータ、ラップトップコンピュータ)、1つ以上のモバイルコンピューティングデバイス(例えば、スマートフォン、タブレットなど)を含むことができる。コンピューティングデバイス610は、少なくとも1つのプロセッサ620、メモリ630、記憶デバイス640、入出力(「I/O」)インターフェース650、及び通信インターフェース660を備えることができる。
図6では例示的なコンピューティングデバイス610を示しているが、
図6に示す構成要素は、システム600又はコンピューティングデバイス610を制限することを意図するものではない。いくつかの実施形態では、追加又は代替の構成要素が使用されてもよい。さらに、いくつかの実施形態では、システム600又はコンピューティングデバイス610は、
図6に示す構成要素よりも少ない構成要素を含むことができる。例えば、システム600は、1つ以上の追加のコンピューティングデバイス612を含まなくてもよい。いくつかの実施形態では、少なくとも1つのコンピューティングデバイス610は、サーバファーム、コンピュータネットワーク、又はコンピューティングデバイスのクラスタなどの複数のコンピューティングデバイスを含んでもよい。
図6に示すコンピューティングデバイス610の構成要素について、以下でさらに詳細に説明する。
【0128】
いくつかの実施形態では、プロセッサ620は、コンピュータプログラムを構成するものなどの命令を実行するための(例えば、ソースコード内の関数を実行するため、又はビルドツールを実行するための)ハードウェアを含む。例えば、命令を実行するために、プロセッサ620は、内部レジスタ、内部キャッシュ、メモリ630、又は記憶デバイス640から命令を取り出し(又はフェッチし)、それらを復号及び実行してもよい。特定の実施形態では、プロセッサ620は、データ、ソース識別子ステータスコード、遠隔位置アドレス、関数などのための1つ以上の内部キャッシュを含んでもよい。一例として、プロセッサ620は、1つ以上の命令キャッシュ、1つ以上のデータキャッシュ、及び1つ以上の変換索引バッファ(TLB:translation lookaside buffer)を含んでもよい。命令キャッシュ内の命令は、メモリ630又はストレージ640内の命令のコピーであってもよい。いくつかの実施形態では、プロセッサ620は、本明細書に開示される方法のいずれかの1つ以上の部分を実行するように構成されてもよい(例えば、プロセッサ620に記憶される、又はプロセッサ620によって実行されるプログラミングを含んでもよい)。
【0129】
いくつかの実施形態では、プロセッサ620は、方法100、200、若しくは300などで本明細書に開示される動作のいずれかを実行するように、又はコンピューティングデバイス610又はシステム600の1つ以上の部分に本明細書に開示される動作のうちの少なくとも1つを実行させるように構成される。このような構成は、少なくとも1つのプロセッサ620によって実行可能である1つ以上の動作プログラム(例えば、コンピュータプログラム製品)を含むことができる。例えば、プロセッサ620は、コンピュータプログラム製品の出力(及びデータの有効性)の検証を提供するために、ビルドツールを使用してソースコードを自動的に構築するように構成されてもよい。検証は、前述のように実行可能コンピュータプログラムの存在のみによって提供される。少なくとも1つのプロセッサ620は、実行可能コンピュータプログラムをユーザインターフェース又は追加のコンピューティングデバイスに出力するように構成されてもよい。
【0130】
少なくとも1つのコンピューティングデバイス610は、少なくとも1つの非一過性のメモリ記憶媒体(例えば、メモリ630及び/又はストレージ640)を含んでもよい。コンピューティングデバイス610は、プロセッサ620に動作可能に結合されたメモリ630を含んでもよい。メモリ630は、ビルドツール、ソースコード、データ、メタデータ、及びコンピュータプログラム、並びにプロセッサ620による実行のための実行可能コンピュータプログラムを記憶するために使用されてもよい。メモリ630は、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、ソリッドステートディスク(SSD)、フラッシュ、相変化メモリ(PCM:Phase Change Memory)、又は他のタイプのデータストレージのうちの少なくとも1つ以上を含んでもよい。メモリ630は、内部メモリ又は分散メモリであってもよい。
【0131】
コンピューティングデバイス610は、データ、ソースコード、ビルドツール、命令などを記憶するためのストレージを有する記憶デバイス640を含んでもよい。記憶デバイス640は、少なくとも1つのプロセッサ620に動作可能に結合されてもよい。いくつかの実施形態では、記憶デバイス640は、上記のもののいずれかなどの非一過性のメモリ記憶媒体を備えることができる。記憶デバイス640(例えば、非一過性のメモリ記憶媒体)は、ハードディスクドライブ(HDD)、フロッピーディスクドライブ、フラッシュメモリ、光ディスク、磁気光学ディスク、磁気テープ、又はユニバーサルシリアルバス(USB)ドライブ、又はこれらのうちの2つ以上の組合せを含んでもよい。記憶デバイス640は、取り外し可能又は取り外し不可能な(又は固定された)媒体を含んでもよい。記憶デバイス640は、コンピューティングデバイス610の内部又は外部にあってもよい。いくつかの実施形態では、記憶デバイス640は、不揮発性の固体メモリを含んでもよい。いくつかの実施形態では、記憶デバイス640は、読み取り専用メモリ(ROM)を含んでもよい。必要に応じて、このROMは、マスクプログラムROM、プログラムROM(PROM)、消去可能PROM(EPROM)、電気的消去可能PROM(EEPROM)、電気的変更可能ROM(EAROM)、若しくはフラッシュメモリ、又はこれらのうちの2つ以上の組合せとすることができる。
【0132】
いくつかの実施形態では、ソースコード、ビルドツール、データ、遠隔位置アドレス、コンピュータプログラム、実行可能コンピュータプログラムなどのうちの1つ以上は、少なくとも1つのプロセッサ620(例えば、プロセッサの内部キャッシュ)、メモリ630、又は記憶デバイス640のうちの1つ以上などのメモリ記憶媒体に記憶されてもよい。いくつかの実施形態では、少なくとも1つのプロセッサ620は、メモリ630又は記憶デバイス640のうちの1つ以上などのメモリ記憶媒体に(例えば、バス670を介して)アクセスするように構成されてもよい。例えば、少なくとも1つのプロセッサ620は、データ(例えば、ルックアップテーブル、フォームデータ、NCCIコード、法則など)を受信し、メモリ記憶媒体内の複数のデータ点として記憶してもよい。少なくとも1つのプロセッサ620は、ビルドツールを実行して、中にある1つ以上の関数、データ、遠隔位置アドレス、ソース識別子ステータスコード、現在のソース識別子ステータスコード、1つ以上のチェックサムクエリ、検証関数、ビルドブレーク関数などを使用して、ソースコードを実行可能コンピュータプログラムに構築してもよい。例えば、少なくとも1つのプロセッサ620は、メモリ630又は記憶デバイス640などのメモリ記憶媒体内のソースコード又はその一部(例えば、個々の関数)にアクセスしてもよい。
【0133】
コンピューティングデバイス610は、1つ以上のI/Oデバイス/インターフェース650も含み、これらが設けられることにより、ユーザは、コンピューティングデバイス610との間で、データへの入力を提供し、データからの出力を受信し、また別の方法でデータを転送することができる。これらのI/Oデバイス/インターフェース650は、マウス、キーパッド若しくはキーボード、タッチスクリーン、スクリーン、カメラ、光スキャナ、ネットワークインターフェース、ウェブベースのアクセス、モデム、ポート、他の既知のI/Oデバイス、又はこのようなI/Oデバイス/インターフェースの650の組合せを含んでもよい。タッチスクリーンは、スタイラス又は指を用いてアクティブにされてもよい。
【0134】
I/Oデバイス/インターフェース650には、グラフィックエンジン、ディスプレイ(例えば、ディスプレイ画面又はモニタ)、1つ以上の出力ドライバ(ディスプレイドライバ)、1つ以上のオーディオスピーカ、及び1つ以上のオーディオドライバを含むがこれらに限定されない、ユーザに出力を提示するための1つ以上のデバイスが含まれ得る。特定の実施形態では、デバイス/インターフェース650は、ユーザに提示するためのグラフィックデータ(例えば、ポータル及び/又はテキストによる説明)をディスプレイ(例えば、家庭又はオフィスのコンピュータ画面)に提供するように構成される。グラフィカルデータは、1つ以上のグラフィカルユーザインターフェース及び/又は特定の実装に役立つ可能性がある任意の他のグラフィカルコンテンツを表してもよい。
【0135】
コンピューティングデバイス610は、通信インターフェース660をさらに含むことができる。通信インターフェース660は、ハードウェア、ソフトウェア、又はその両方を含むことができる。通信インターフェース660は、コンピューティングデバイス610と1つ以上の追加のコンピューティングデバイス612又は1つ以上のネットワークとの間の通信(例えば、パケットベースの通信など)のための1つ以上のインターフェースを提供することができる。例えば、通信インターフェース660は、イーサネット又は他の有線ベースのネットワークと通信するためのネットワークインターフェースコントローラ(NIC)若しくはネットワークアダプタ、又はWI-FIなどの無線ネットワークと通信するための無線NIC(WNIC)又は無線アダプタを含んでもよい。
【0136】
任意の好適なネットワーク及び任意の好適な通信インターフェース660が使用されてもよい。例えば、コンピューティングデバイス610は、アドホックネットワーク、パーソナルエリアネットワーク(PAN)、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、若しくはインターネットの1つ以上の部分、又はこれらのうちの2つ以上の組合せと通信してもよい。これらのネットワークのうちの1つ以上の1つ以上の部分は、有線又は無線であってもよい。一例として、システム600又はコンピューティングデバイス610の1つ以上の部分は、無線PAN(WPAN)(例えば、BLUETOOTH(登録商標) WPANなど)、WI-FIネットワーク、WI-MAX(登録商標)ネットワーク、携帯電話ネットワーク(例えば、汎欧州デジタル移動電話方式(GSM:Global System for Mobile Communications)ネットワークなど)若しくは他の好適な無線ネットワーク、又はそれらの組合せと通信してもよい。コンピューティングデバイス610は、必要に応じて、これらのネットワークのいずれかに好適な任意の通信インターフェース660を含んでもよい。
【0137】
いくつかの実施形態では、コンピューティングデバイス610は、ネットワーク接続を有するコンピュータ又はサーバを含んでもよく、コンピュータ又はサーバはその中に、ソースコード(又はその一部)、コンピュータプログラム、実行可能なコンピュータプログラム、遠隔位置アドレスなどを出力するように適合されたプログラミングを含む。
【0138】
コンピューティングデバイス610は、バス670を含んでもよい。バス670は、コンピューティングデバイス610の構成要素を互いに結合するハードウェア、ソフトウェア、又はその両方を含むことができる。例えば、バス670には、アクセラレーテッドグラフィックスポート(AGP:Accelerated Graphics Port)バス又は他のグラフィックバス、拡張業界標準アーキテクチャ(EISA:Enhanced Industry Standard Architecture)バス、フロントサイドバス(FSB:front-side bus)、HYPERTRANSPORT(HT)相互接続、業界標準アーキテクチャ(ISA:Industry Standard Architecture)バス、INFINIBAND相互接続、少ピン数(LPC:low-pin-count)バス、メモリバス、マイクロチャネルアーキテクチャ(MCA:Micro Channel Architecture)バス、周辺機器相互接続(PCI:Peripheral Component Interconnect)バス、PCIエクスプレス(PCIe:PCI-Express)バス、シリアルアドバンストテクノロジーアタッチメント(SATA:serial advanced technology attachment)バス、ビデオエレクトロニクススタンダードアソシエーションローカル(VLB:Video Electronics Standards Association local)バス、若しくは別の好適なバス、又はそれらの組合せが含まれ得る。
【0139】
方法100、200、又は300などにおける、本明細書に記載の動作のいずれも、コンピューティングデバイス610によって、かつ/又はコンピューティングデバイス610において実行され得ることを理解されたい。追加として、又は代替的として、本明細書に記載の動作のうちの1つ以上は、追加のコンピューティングデバイス612などの別のコンピューティングデバイスによって、又は別のコンピューティングデバイスにおいて実行されてもよい。例えば、動作のいくつかは、パーソナルコンピュータ、スマートフォンなど(例えば、電子メッセージの受信)などの、ユーザのパーソナルコンピューティングデバイス(例えば、追加のコンピューティングデバイス612)によって、又はユーザのパーソナルコンピューティングデバイスに対して実行されてもよく、一方、動作のうちの1つ以上は、ユーザのパーソナルコンピューティングデバイスに動作可能に接続され得る、サーバなどの別のコンピューティングデバイス(例えば、コンピューティングデバイス610)によって実行されてもよい。したがって、システム600の1つ以上の要素を互いに遠隔に分散させることができ、かつ/又はシステム600の1つ以上の要素を併置することができる。例えば、データ又はソースコードを入力することは、追加のコンピューティングデバイス612を介して、コンピュータプログラムの作成者がネットワーク接続を介してデータ(及び関連するソース識別子ステータスコード)若しくはソースコードの一部をコンピューティングデバイス610に手動で提供することによって、又はデータ転送ルーチン、オーダ、ダンプ、若しくは他のメカニズムを介してそれらを自動的に転送することによって実行されてもよい。いくつかの実施形態では、データ、ソースコード(例えば、その一部)、又は実行可能コンピュータプログラムは、追加のコンピューティングデバイス612からコンピューティングデバイス610への直接若しくは間接のいずれかでのウェブ接続又はネットワーク接続を介するなどして、追加のコンピューティングデバイス612上に表示されてもよい。
【0140】
再び
図4を参照すると、コンピュータプログラム製品は、ソースコード410、実行可能コンピュータプログラム432、又はそれらの一部のうちの1つ以上を含んでもよい。いくつかの例では、ソースコード内の1つ以上の関数、チェックサムクエリ(例えば、関数)、ビルドブレーク関数、検証関数などが、(例えば、ソースコード内で)コンピュータプログラムを組み立てるための個々の構築ブロックとして利用可能であってもよい。いくつかの例では、実行可能コンピュータプログラム内の1つ以上の関数、チェックサムクエリ(例えば、関数)、ビルドブレーク関数、検証関数などが、より大きい実行可能コンピュータプログラムを組み立てるための個々の構築ブロックとして利用可能であってもよい。
【0141】
図7は、一実施形態による、例示的なコンピュータプログラム製品700のブロック図である。コンピュータプログラム製品700は、本明細書に開示されるように、コンピュータプログラムに組み込まれたデータを検証する方法のための命令を記憶するように構成される。非一過性の信号伝達媒体710は、コンピュータ可読媒体730(例えば、読み取り専用メモリ、RAM、磁気ディスクドライブ若しくはソリッドステートディスクなどのハードドライブ、フラッシュメモリスティック、プロセッサの内部キャッシュ、又は光ディスク)、コンピュータ記録可能媒体740(例えば、RAM、ハードドライブ、メモリスティック、光ディスクなど)、コンピュータ通信媒体750(例えば、BUSの内部キャッシュなど)、又はそれらの組合せを含んでもよく、プログラミング命令720(例えば、コンピュータコード)を記憶する関連するコンピュータの処理ユニットを、本明細書に記載の方法又は動作のすべて又は一部を実行するように構成することができるプログラミング命令720を記憶する。命令は、例えば、「少なくとも1つの遠隔位置から取得されたデータをコンピュータプログラムのソースコードに組み込む1つ以上の関数を構築するステップ」のための1つ以上の機械可読で実行可能な命令を含んでもよい。これらの命令は、例えば、「少なくとも1つの遠隔位置からのソース識別子ステータスコードを1つ以上の関数に組み込むステップであって、ソース識別子ステータスコードが、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する、ステップ」のための1つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリをソースコードに記述するステップ」のための1つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ソースコードに少なくとも1つの検証関数を提供するステップであって、少なくとも1つの検証関数が、データが有効であることを保証するためにデータに対して1つ以上のテストを実行するように構成される、ステップ」のための1つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ソースコードにビルドブレーク関数を追加するステップであって、ビルドブレーク関数が、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致し、少なくとも1つの検証関数がデータは有効であると確認した場合にのみ、コンピュータプログラムビルドが継続するように定める、ステップ」のための1つ以上の機械可読で実行可能な命令を含んでもよい。命令は、例えば、「ビルドツールを実行して、ソースコードを少なくとも1つの遠隔位置から取得されたデータを使用して1つ以上の関数を実行する実行可能コンピュータプログラムにコンパイルするのに効果的なコンピュータプログラムビルドを実行するステップ」のための1つ以上の機械可読で実行可能な命令を含んでもよい。命令は、ビルドツール又はその位置、並びにチェックサムクエリ及び少なくとも1つの検証関数を実行し、ソースコードを実行可能コンピュータプログラムにコンパイルするのに効果的なソースコード上のビルドツールを実行するための命令を含んでもよい。
【0142】
いくつかの実施形態では、命令は、本明細書に開示される方法100、200、又は300の任意の部分を任意の組合せで含んでもよい。例えば、命令は、本明細書に開示されるような1つ以上の変換関数を含んでもよい。
【0143】
いくつかの例では、コンピュータプログラム製品700は、ソースコード(例えば、プログラミング命令720)、又は少なくとも1つの遠隔位置から取得されたデータを組み込む1つ以上の関数を含む実行可能コンピュータプログラムを含んでもよい。ソースコード又は実行可能コンピュータプログラムは、1つ以上の関数内に少なくとも1つの遠隔位置からのソース識別子ステータスコードを含んでもよく、ソース識別子ステータスコードは、少なくとも1つの遠隔位置からデータが取得された日付及び位置に対応する。ソースコード又は実行可能コンピュータプログラムは、ソース識別子ステータスコードが少なくとも1つの遠隔位置にある現在のソース識別子ステータスコードと一致するかどうかを判定するために少なくとも1つの遠隔位置に問い合わせるチェックサムクエリを含んでもよい。ソースコード又は実行可能コンピュータプログラムは、選択された基準に従ってデータが有効であるかどうかを判定するためにデータに問い合わせる少なくとも1つの検証関数を含んでもよい。ソースコード又は実行可能コンピュータプログラムは、ソース識別子ステータスコードと現在のソース識別子ステータスコードが一致する場合にのみ、コンピュータプログラムビルドが継続するように定める、ビルドブレーク関数を含んでもよい。ソースコード又は実行可能コンピュータプログラムは、XML又は本明細書に開示されるオープン標準フォーマットのいずれかなどの電子データ用のオープン標準フォーマットであってもよい。
【0144】
いくつかの例では、コンピュータプログラム製品700は、(例えば、データが1つ以上の検証済みのライブラリ、テーブルなどとして組み込まれた)本明細書に開示される検証済みのアーカイブフォーマットのいずれかなどの実行可能コンピュータプログラムを含んでもよい。例えば、コンピュータプログラム製品700は、ビルドツールを介してソースコードから構築されたコンピュータ実行可能コード(例えば、実行可能コンピュータプログラム)であってもよい。特定の例は、データが1つ以上の検証済みのライブラリとして組み込まれたJARファイルを含んでもよい。いくつかの例では、実行可能コード、データ、1つ以上の関数、チェックサムクエリ、少なくとも1つの検証関数、及びビルドブレーク関数が、ビルドツール(例えば、実行可能コンピュータプログラム)の出力のように存在してもよい。
【0145】
いくつかの例では、コンピュータプログラム製品は、関数を実行するための関連するデータを有する1つ以上の関数のコンピュータ実行可能コードのみであってもよい。このような例では、チェックサムクエリ、少なくとも1つの検証関数、及びビルドブレーク関数が、ビルド中にそれぞれの目的を果たしているので、ビルドツールの実行可能な出力として存在しなくてもよい。したがって、出力される実行可能コンピュータプログラムは、検証関数(例えば、チェックサムクエリ、検証関数、及びビルドブレーク関数)の余分なコードなしで関数を実行するコンパクトで信頼できる手段を提供することができる。
【0146】
本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、遠隔位置から取得されたデータを参照するコンピュータプログラムを構築及び検証するための現在のシステム及び方法に多くの改善をもたらす。本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、データ、及びデータを使用して結果を判定する関数の結果の迅速な自動検証を可能にする。例えば、本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、ビルド時のデータのステータス(例えば、データが現在のものであるかどうか)の検証を提供する。したがって、ビルドプロセスが成功した結果である実行可能コンピュータコードの存在のみによって、ユーザは、データが現在のものであり有効であることを認識し、それに基づく関数は、有効な出力を提供する。データをソースコード及び実行可能コンピュータプログラムに直接含めることによって、実行可能コンピュータプログラムは、遠隔位置に記憶されたデータを利用するプログラムよりも必要な計算能力が少なくて済み、より速い処理時間を提供することができる。本明細書に開示される方法、コンピュータプログラム製品、及びシステムにより、データを全く別のソフトウェア構成要素であるかのように扱うことができる方法でデータをパッケージ化することが可能になる。したがって、単一のプロセス(例えば、ビルド)を使用して、データ及び1つ以上の関数(例えば、ソフトウェア)の有効性を検証することができる。また、単一のビルドツールを使用して、ソフトウェア(例えば、1つ以上の関数)とデータの両方を扱うことができる。これにより、ユーザは、テスト(例えば、チェックサムクエリ)に従ってデータが現在のものであることと、テスト(例えば、検証関数)に従ってデータ及びソフトウェアが有効であることとの両方を確認するための1つの一貫した技法を使用して、データとソフトウェアの両方を扱うことが可能になる。したがって、作業又はビルドツールの重複がなくなり、これにより処理の使用量が低下し、処理速度が向上する。したがって、本明細書に開示される方法、システム、及びコンピュータプログラム製品により、データ自体を再確認する必要がなくなる。さらに、方法、コンピュータプログラム製品、及びシステムは、古いデータを最新のデータに置き換える必要があることを即座に通知する。
【0147】
本明細書に開示される方法、コンピュータプログラム製品、及びシステムは、データを組み込んで中の関数を実行する実行可能コンピュータプログラムの生成及び検証を、現在の方法及びシステムよりも、忠実に再現可能で高速なものにすることができる。1つ以上の関数及びそれに関連するデータを、コンピュータプログラム(例えば、複数の関数、チェックサムクエリ、ビルドブレーク関数など)のモジュールとして使用して、ソースコードフォーマットのコンピュータプログラムの高速なモジュール構築を提供することができる。ビルドツールを実行すると、データは最新であることが検証され、有効であることが検証され、コンピュータ可読かつ実行可能なフォーマット、又は少なくともそれにコンパイル可能なフォーマットに構築(コンパイルなど)される。これにより、現在の方法及びシステムよりも正確性が向上する。
【0148】
様々な態様及び実施形態が本明細書に開示されているが、他の態様及び実施形態も企図されている。本明細書に開示される様々な態様及び実施形態は、例示を目的とするものであり、限定することを意図するものではない。