(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-08
(45)【発行日】2024-02-19
(54)【発明の名称】コード構築方法、装置、デバイスおよび記憶媒体
(51)【国際特許分類】
G06F 11/36 20060101AFI20240209BHJP
G06F 8/40 20180101ALI20240209BHJP
【FI】
G06F11/36 188
G06F11/36 192
G06F11/36 112
G06F8/40
(21)【出願番号】P 2022554637
(86)(22)【出願日】2021-06-10
(86)【国際出願番号】 CN2021099361
(87)【国際公開番号】W WO2021254243
(87)【国際公開日】2021-12-23
【審査請求日】2022-09-09
(31)【優先権主張番号】202010543411.0
(32)【優先日】2020-06-15
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】511151662
【氏名又は名称】中興通訊股▲ふん▼有限公司
【氏名又は名称原語表記】ZTE CORPORATION
【住所又は居所原語表記】ZTE Plaza,Keji Road South,Hi-Tech Industrial Park,Nanshan Shenzhen,Guangdong 518057 China
(74)【代理人】
【識別番号】100112656
【氏名又は名称】宮田 英毅
(74)【代理人】
【識別番号】100089118
【氏名又は名称】酒井 宏明
(72)【発明者】
【氏名】賀洪軍
【審査官】多賀 実
(56)【参考文献】
【文献】特開2010-086110(JP,A)
【文献】特開平04-337846(JP,A)
【文献】国際公開第2018/042584(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00-8/77
G06F 9/44-9/455
G06F 11/07
G06F 11/28-11/36
G06F 21/12-21/16
G06F 21/50-21/57
(57)【特許請求の範囲】
【請求項1】
プロセッサが、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成することと、
前記プロセッサが、コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行し、実行結果が一致しない場合、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整することと、
前記プロセッサが、前記コードに対して調整後のコード構築コマンドを実行することと、を含む、
コード構築方法。
【請求項2】
前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整することは、
前記プロセッサが、前記コード構築コマンドに基づいてデータベースを照会し、前記コード構築コマンドに対応する第1の調整規則を得ることと、
前記プロセッサが、前記第1の調整規則に従って前記コード構築コマンドにおける各環境変数を調整することと、を含む、
請求項1に記載のコード構築方法。
【請求項3】
前記第1の調整規則に従って前記コード構築コマンドにおける各環境変数を調整することは、
前記プロセッサが、前記コード構築コマンドにタイムスタンプが含まれている場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定することと、
前記プロセッサが、前記コード構築コマンドに乱数が含まれている場合、ターゲットファイルシステムを構築し、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステムに置き換えることと、
前記プロセッサが、前記コード構築コマンドにファイルリストシーケンスが含まれている場合、前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列することと、を含む、
請求項2に記載のコード構築方法。
【請求項4】
前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整することは、
前記プロセッサが、前記少なくとも2つのテスト構築コマンドに対応する環境変数に基づいてデータベースを照会し、前記環境変数に対応する第2の調整規則を得ることと、
前記プロセッサが、前記第2の調整規則に従って前記環境変数を調整することと、を含む、
請求項1に記載のコード構築方法。
【請求項5】
前記第2の調整規則に従って前記環境変数を調整することは、
前記プロセッサが、前記コード構築コマンドにおける環境変数がタイムスタンプである場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定することを含む、
請求項4に記載のコード構築方法。
【請求項6】
前記第2の調整規則に従って前記環境変数を調整することは、
前記プロセッサが、前記コード構築コマンドにおける環境変数が乱数である場合、ターゲットファイルシステムを構築することと、
前記プロセッサが、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステムに置き換えることと、を含む、
請求項4に記載のコード構築方法。
【請求項7】
前記第2の調整規則に従って前記環境変数を調整することは、
前記プロセッサが、前記コード構築コマンドにおける環境変数がファイルリストシーケンスである場合、前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列することを含む、
請求項4に記載のコード構築方法。
【請求項8】
コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成することは、
前記プロセッサが、コード構築過程を追跡し、コード構築過程におけるコード構築コマンドを監視することと、
前記プロセッサが、コード構築コマンドを取得すると、コード構築コマンドの実行を一時停止することと、
前記プロセッサが、前記コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成することと、を含む、
請求項1に記載のコード構築方法。
【請求項9】
コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成するように構成された生成モジュールと、
コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行し、実行結果が一致しない場合、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整するように構成された調整モジュールと、
前記コードに対して調整後のコード構築コマンドを実行するように構成された実行モジュールと、を備える、
コード構築装置。
【請求項10】
1つまたは複数のプロセッサと、
1つまたは複数のプログラムを記憶するように構成された記憶装置と、を備え、
前記1つまたは複数のプログラムが前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに請求項1~8のいずれか1項に記載のコード構築方法を実現させる、
デバイス。
【請求項11】
プロセッサによって実行されると請求項1~8のいずれか1項に記載のコード構築方法を実現するコンピュータプログラムを記憶する、
非一時的な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、2020年6月15日に中国特許庁へ提出された第202010543411.0号特許出願の優先権を主張し、そのすべての内容を参照により本願に援用する。
【0002】
本願はコンピュータ分野に関するが、これに限定されない。
【背景技術】
【0003】
近年、セキュリティ上の観点から、コードについての監査要求は益々厳しく、広範囲になり、コードバイナリ等価監査も重要な指標となっている。
【0004】
現在、コードバイナリ等価監査に対処する業界の一般的な方法には、受動的解析と能動的防御の2つの方式がある。
【0005】
受動的解析:複数回のコード構築結果を比較し、差異がタイムスタンプ、乱数、ファイルの順序などプログラムロジックに影響を与えない要素からなることを解析して明らかにし、間接的に監査対象のコードバイナリ等価性を証明する。
【0006】
能動的防御:事前に工程ソースコードを解析し、タイムスタンプ、乱数、ファイルの順序、文字セットなど、コードバイナリ等価性に影響する可能性のある要素を探し出し、プログラムロジックに影響しないことを前提として、それらを定数に修正して修復または回避し、複数の構築結果のバイナリを一致させることで、監査のコードバイナリ等価性を保証する。
【発明の概要】
【発明が解決しようとする課題】
【0007】
第1の態様において、本願は、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成することと、コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行し、実行結果が一致しない場合、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整することと、前記コードに対して調整後のコード構築コマンドを実行することと、を含む、コード構築方法を提供する。
【0008】
第2の態様において、本願は、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成するように構成された生成モジュールと、コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行し、実行結果が一致しない場合、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整するように構成された調整モジュールと、前記コードに対して調整後のコード構築コマンドを実行するように構成された実行モジュールと、を備える、コード構築装置を提供する。
【0009】
第3の態様において、本願は、1つまたは複数のプロセッサと、1つまたは複数のプログラムを記憶するように構成された記憶装置と、を備え、前記1つまたは複数のプログラムが前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに本明細書に記載のいずれかの方法を実現させる、デバイスを提供する。
【0010】
第4の態様において、本願は、プロセッサによって実行されると、本明細書に記載のいずれかの方法を実現するコンピュータプログラムを記憶する、記憶媒体を提供する。
【図面の簡単な説明】
【0011】
【
図1】
図1は、本願が提供するコード構築方法のフロー模式図である。
【
図2】
図2は、本願が提供するコード構築装置の構造模式図である。
【
図3】
図3は、本願が提供するデバイスの構造模式図である。
【発明を実施するための形態】
【0012】
本願の目的、技術案および利点をより明らかにするために、以下に図面を組み合わせて本願の実施形態について詳しく説明する。なお、本願における実施形態および実施形態における特徴は、矛盾しない限り互いに任意に組み合わせることができる。
【0013】
図面のフローチャートに示すステップは、1組のコンピュータで実行可能な命令のようにコンピュータシステムにおいて実行され得る。また、論理的な順序をフローチャートに示したが、場合によっては、提示または説明したステップを、ここでのものとは異なる順序で実行してよい。
【0014】
近年、セキュリティ上の観点から、コードに対する監査要求は益々厳しく、広範囲になっており、コードバイナリ等価監査も重要な指標となっている。
【0015】
現在、コードバイナリ等価監査に対処する業界の一般的な方法には、受動的解析と能動的防御の2つの方式がある。
【0016】
受動的解析:複数回のコード構築結果を比較し、相違がタイムスタンプ、乱数、ファイルの順序などプログラムロジックに影響を与えない要素からなることを解析して明らかにし、間接的に監査対象のコードバイナリ等価性を証明する。このように差異があった時に受動的に解析するという方式には以下のような欠点がある。1、適時性が劣る。差異を見つけてから解析した場合、ユーザの時間要求に達することができず、適時に差異解析レポートをユーザに提供することができないことが多々ある。2、再利用性が劣る。解析結果の再利用可能率が低いため、工程を入れ替えた後、時間と労力を要する重複する大量の解析作業が再び必要になる可能性がある。3、解析効率が低い。構築過程において差異は伝達されることになり、構築開始過程における微小な差異が、最終結果の大きな差異をもたらし、受動的解析の場合、バックトラック、層別解析により構築結果の差異をもたらす根本原因を探し出す必要があり、解析過程には時間と手間を要し、効率が比較的低い。
【0017】
能動的防御:事前に工程ソースコードを解析し、コードバイナリ等価性に影響を与える可能性のある要素を探し出し、タイムスタンプ、乱数、ファイルの順序、文字セットなど、プログラムロジックに影響を与えないことを前提としてこれを定数として修正して修復または回避し、複数回の構築結果のバイナリを一致させることで、監査のコードバイナリ等価性を保証する。この方法の欠点は次の通りである。1、再利用性が劣る。工程ソースコードを解析し修正する作業は再利用できず、工程を交換した後、煩雑な工程解析と修正作業を繰り返す必要がある。2、解析効率が低い。手作業で工程を解析する必要があり、作業量が多く、かつ見落としが生じる可能性がある。
【0018】
図1は本願が提供するコード構築方法のフロー模式図であり、当該方法はコードバイナリ監査に対処する場合に適用可能であり、当該方法は、ソフトウェアおよび/またはハードウェアによって実現され、デバイスに統合され得るコード構築デバイスによって実行することができる。前記デバイスはコンピュータデバイスであってよい。
【0019】
図1に示すように、本願が提供するコード構築方法は、ステップS110、S120およびS130を含む。
【0020】
ステップS110において、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成する。
【0021】
そのうち、前記環境変数は、ユーザ名、システム時間、タイムスタンプ、乱数、ファイルの順序および文字セットのうちの少なくとも1つを含む。
【0022】
そのうち、前記環境変数は、コード構築コマンドに含まれる変数であり、例えば、コード構築コマンドが圧縮されたパケットファイルコマンドを生成するものであれば、環境変数はタイムスタンプであるというものであってよい。
【0023】
そのうち、前記異なる環境変数は、異なるタイプの環境変数であってよく、同じタイプの環境変数に対応する異なる数値であってもよく、例えば、異なる環境変数は、タイムスタンプAおよびタイムスタンプBであってよく、タイムスタンプAおよびユーザ名Cであってもよいというものであってよく、本願は、これについて限定しない。
【0024】
一実施形態では、工程構築過程を追跡し、工程構築過程は、コードをバイナリ化する過程を指し、工程構築過程におけるコード構築コマンドを監視し、コード構築コマンドの実行を一時停止し、異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成することは、例えば、工程構築過程を追跡し、工程構築過程は、コードをバイナリ化する過程を指し、工程構築過程におけるコード構築コマンドを監視し、コード構築コマンドの実行を一時停止し、環境変数がシステム時間Aおよびシステム時間Bである場合、システム時間Aに応じて1つのテスト構築コマンドを生成し、システム時間Bに応じて1つのテスト構築コマンドを生成するというものであってよく、環境変数がシステム時間Aおよびユーザ名Cである場合、システム時間Aに応じて1つのテスト構築コマンドを生成し、ユーザ名Cに応じて1つのテスト構築コマンドを生成するというものであってもよく、環境変数がタイムスタンプQ、乱数Mおよびユーザ名Cである場合、タイムスタンプQに応じて1つのテスト構築コマンドを生成し、乱数Mに応じて1つのテスト構築コマンドを生成し、ユーザ名Cに応じて1つのテスト構築コマンドを生成するというものであってもよく、あるいは、環境変数がシステム時間A、システム時間Bおよびシステム時間Pである場合、システム時間Aに応じて1つのテスト構築コマンドを生成し、システム時間Bに応じて1つのテスト構築コマンドを生成し、システム時間Pに応じて1つのテスト構築コマンドを生成するというものであってよい。
【0025】
ステップS120において、コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行し、実行結果が一致しない場合、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整する。
【0026】
そのうち、コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行することは、例えば、環境変数がシステム時間Aおよびシステム時間Bである場合、システム時間Aに応じて1つのテスト構築コマンドを生成し、システム時間Bに応じて1つのテスト構築コマンドを生成し、コードに対してシステム時間Aに応じて生成したテスト構築コマンドを実行し、コードに対してシステム時間Bに応じて生成したテスト構築コマンドを実行するというもの、環境変数がシステム時間A、システム時間Bおよびシステム時間Pである場合、システム時間Aに応じて1つのテスト構築コマンドを生成し、システム時間Bに応じて1つのテスト構築コマンドを生成し、システム時間Pに応じて1つのテスト構築コマンドを生成し、コードに対してシステム時間Aに応じて生成したテスト構築コマンドを実行し、コードに対してシステム時間Bに応じて生成したテスト構築コマンドを実行し、コードに対してシステム時間Pに応じて生成したテスト構築コマンドを実行するというものであってよく、環境変数がタイムスタンプQ、乱数Mおよびユーザ名Cである場合、タイムスタンプQに応じて1つのテスト構築コマンドを生成し、乱数Mに応じて1つのテスト構築コマンドを生成し、ユーザ名Cに応じて1つのテスト構築コマンドを生成し、コードに対してタイムスタンプQに応じて生成したテスト構築コマンドを実行し、コードに対して乱数Mに応じて生成したテスト構築コマンドを実行し、コードに対してユーザ名Cに応じて生成したテスト構築コマンドを実行するというものであってもよい。
【0027】
一実施形態において、実行結果が一致しない場合、コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整することは、例えば、環境変数がシステム時間Aおよびシステム時間Bである場合、システム時間Aに応じて1つのテスト構築コマンドを生成し、システム時間Bに応じて1つのテスト構築コマンドを生成し、コードに対してシステム時間Aに応じて生成したテスト構築コマンドを実行し、コードに対してシステム時間Bに応じて生成したテスト構築コマンドを実行し、システムコードAに応じて生成したテスト構築コマンドの実行結果がXであり、システム時間Bに応じて生成したテスト構築コマンドの実行結果がYであると、実行結果Xと実行結果Yは異なるため、実行結果が一致しないので、システム時間に基づいてコード構築コマンドを調整するというものであってよく、環境変数がシステム時間A、システム時間Bおよびシステム時間Pである場合、システム時間Aに応じて1つのテスト構築コマンドを生成し、システム時間Bに応じて1つのテスト構築コマンドを生成し、システム時間Pに応じて1つのテスト構築コマンドを生成し、コードに対してシステム時間Aに応じて生成したテスト構築コマンドを実行し、コードに対してシステム時間Bに応じて生成したテスト構築コマンドを実行し、コードに対してシステム時間Pに応じて生成したテスト構築コマンドを実行し、コードに対してシステム時間Aに応じて生成したテスト構築コマンドを実行した実行結果がXであり、コードに対してシステム時間Bに応じて生成したテスト構築コマンドを実行した実行結果がYであり、コードに対してシステム時間Pに応じて生成したテスト構築コマンドを実行した実行結果がZであると、実行結果X、実行結果Yおよび実行結果Zは異なるため、実行結果が一致しないので、システム時間に基づいてコード構築コマンドを調整するというものであってよく、環境変数がタイムスタンプQ、乱数Mおよびユーザ名Cである場合、タイムスタンプQに応じて1つのテスト構築コマンドを生成し、乱数Mに応じて1つのテスト構築コマンドを生成し、ユーザ名Cに応じて1つのテスト構築コマンドを生成し、コードに対してタイムスタンプQに応じて生成したテスト構築コマンドを実行し、コードに対して乱数Mに応じて生成したテスト構築コマンドを実行し、コードに対してユーザ名Cに応じて生成したテスト構築コマンドを実行し、コードに対してタイムスタンプQに応じて生成したテスト構築コマンドを実行した実行結果がXであり、コードに対して乱数Mに応じて生成したテスト構築コマンドを実行した実行結果がXであり、コードに対してユーザ名Cに応じて生成したテスト構築コマンドを実行した実行結果がYであると、実行結果Xと実行結果Yは異なるため、実行結果が一致しないので、タイムスタンプ、乱数およびユーザ名に基づいてコード構築コマンドを調整するというものであってもよい。
【0028】
ステップS130において、前記コードに対して調整後のコード構築コマンドを実行する。
【0029】
一実施形態において、コードに対して調整後のコード構築コマンドを実行することは、例えば、環境変数がタイムスタンプであれば、コード構築コマンドのシステム時間を固定値として調整し、コードに対してシステム時間を固定値に調整したコード構築コマンドを実行し、環境変数がファイルリストシーケンスであれば、コード構築コマンドを実行結果を得た後のものに調整し、ソートツールを使用して実行結果を配列し、コードに対して調整後のコード構築コマンドを実行するというものであってよい。
【0030】
本願が提供するコード構築方法は、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成し、コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行し、実行結果が一致しない場合、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整し、前記コードに対して調整後のコード構築命令を実行することにより、複数回のコード構築結果を一致させて、再現可能なコード構築を自動的に実現することができる。
【0031】
上述した実施形態を基に、上述の実施形態を変形した実施形態を提示するが、説明を簡単にするために、変形実施形態では、上述した実施形態との相違点のみを述べる。
【0032】
一実施形態において、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整することは、前記コード構築コマンドに基づいてデータベースを照会して、前記コード構築コマンドに対応する第1の調整規則を取得することと、前記第1の調整規則に従って前記コード構築コマンドにおける各環境変数を調整することと、を含む。
【0033】
そのうち、コード構築命令と調整規則の対応関係についてのデータベースを事前に構築し、例えば、コード構築命令Wおよびコード構築命令Wにおける全ての環境変数の調整規則と、コード構築命令Gおよびコード構築命令Gにおける全ての環境変数の調整規則と、コード構築コマンドKおよびコード構築コマンドKにおける全ての環境変数の調整規則とが前記データベースに記憶されてよい。
【0034】
そのうち、前記第1の調整規則は、コード構築命令における全ての環境変数の調整規則を含んでよく、例えば、コード構築命令に環境変数Dと環境変数Eが含まれている場合、第1の調整規則は、環境変数Dの調整規則と環境変数Eの調整規則を含むというものであってよい。
【0035】
一実施形態において、コード構築コマンドに基づいてデータベースを照会して、前記コード構築コマンドに対応する第1の調整規則を取得し、前記第1の調整規則に従って前記コード構築コマンドにおける各環境変数を調整するのは、例えば、コード構築コマンドWに基づいてデータベースを照会して、コード構築コマンドWにおける全ての環境変数の調整規則を取得し、コード構築コマンドWにおける全ての環境変数が環境変数Dと環境変数Eであれば、環境変数Dの調整規則と環境変数Eの調整規則を取得し、環境変数Dの調整規則に従ってコード構築コマンドWにおける環境変数Dを調整し、環境変数Eの調整規則に従ってコード構築命令Wにおける環境変数Eを調整するというものであってよい。
【0036】
一実施形態において、前記第1の調整規則に従って前記コード構築コマンドにおける各環境変数を調整することは、前記コード構築コマンドにタイムスタンプが含まれている場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定することと、前記コード構築コマンドに乱数が含まれている場合、ターゲットファイルシステムを構築し、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステムに置き換えることと、前記コード構築コマンドにファイルリストシーケンスが含まれている場合、前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列することと、を含む。
【0037】
そのうち、前記コード構築コマンドには、タイムスタンプ(環境変数)、乱数(環境変数)およびファイルリストシーケンス(環境変数)のうちの少なくとも1つの環境変数を含んでよい。
【0038】
一実施形態において、前記コード構築コマンドにタイムスタンプが含まれている場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定し、前記コード構築コマンドに乱数が含まれている場合、ターゲットファイルシステムを構築し、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステム置き換え、前記コード構築コマンドにファイルリストシーケンスが含まれている場合、前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列することは、例えば、コード構築コマンドにタイムスタンプのみが含まれている場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定するだけでよく、コード構築コマンドにタイムスタンプおよび乱数が含まれている場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定し、かつターゲットファイルシステムを構築し、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステムに置き換える必要があり、コード構築コマンドにタイムスタンプ、乱数、ファイルリストシーケンスが含まれている場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定し、ターゲットファイルシステムを構築し、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステムに置き換え、かつ前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列する必要があるというものであってよい。
【0039】
一実施形態において、前記コード構築コマンドにおける環境変数に基づいて前記コード構築コマンドを調整することは、前記少なくとも2つのテスト構築コマンドに対応する環境変数に基づいてデータベースを照会して、前記環境変数に対応する第2の調整規則を取得することと、前記第2の調整規則に従って前記環境変数を調整することと、を含む。
【0040】
そのうち、環境変数と調整規則の対応関係に関するデータベースを事前に構築し、例えば、環境変数Dおよび環境変数Dの調整規則と、環境変数Rおよび環境変数Rの調整規則と、環境変数Hおよび環境変数Hの調整規則とが前記データベースに記憶されてよい。
【0041】
そのうち、前記第2の調整規則は、テスト構築コマンドに対応する環境変数の調整規則を含んでよい。
【0042】
一実施形態において、予めテスト構築コマンドに基づいて、実行結果の不一致をもたらす環境変数を特定し、前記環境変数は一種類であっても複数種類であってもよく、例えば、テスト構築コマンドに基づいて、実行結果の不一致をもたらす環境変数が環境変数Dであると特定すると、データベースを照会して、環境変数Dの調整規則を取得し、環境変数Dの調整規則に従って環境変数Dを調整するというものであってよい。
【0043】
なお、コード構築コマンドには複数の環境変数が含まれる可能性があり、実行結果の不一致をもたらす環境変数は1つであっても複数であってもよく、例えば、コード構築命令に環境変数Q、環境変数Dおよび環境変数Rが含まれ、実行結果の不一致をもたらす環境変数は環境変数Qであり得、コード構築命令に環境変数Qと環境変数Dが含まれ、実行結果の不一致をもたらす環境変数は環境変数Qと環境変数Dであり得、実行結果の不一致をもたらす環境変数が環境変数Qと環境変数Dであれば、環境変数Qに基づいてデータベースを照会して環境変数Qの調整規則を得て、環境変数Dに基づいてデータベースを照会して環境変数Dの調整規則を得るというものであってよい。
【0044】
具体的な例では、コード構築コマンドに環境変数Q、環境変数Dおよび環境変数Rが含まれている場合、コード構築コマンドにおける環境変数Q1に応じてテスト構築コマンドN1を生成し、コード構築コマンドにおける環境変数Q2に応じてテスト構築コマンドN2を生成し、コード構築コマンドにおける環境変数D1に応じてテスト構築コマンドV1を生成し、コード構築コマンドにおける環境変数D2に応じてテスト構築コマンドV2を生成し、コード構築コマンドにおける環境変数R1に応じてテスト構築コマンドU1を生成し、コード構築コマンドにおける環境変数R2に応じてテスト構築コマンドU2を生成し、テスト構築コマンドN1の実行結果とテスト構築コマンドN2の実行結果が一致し、テスト構築コマンドV1とテスト構築コマンドV2の実行結果が一致せず、テスト構築コマンドU1とテスト構築コマンドU2の実行結果が一致すれば、環境変数Dに基づいてデータベースを照会して環境変数Dの調整規則を得て、環境変数Dの調整規則に従って環境変数Dを調整する。
【0045】
一実施形態において、前記第2の調整規則に従って前記環境変数を調整することは、前記コード構築コマンドにおける環境変数がタイムスタンプである場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定することを含む。
【0046】
そのうち、前記固定時間は、システム設定でも人為的設定でもよく、本願はこれについて限定しない。
【0047】
一実施形態において、前記コード構築コマンドにおける環境変数がタイムスタンプである場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定することは、例えば、工程においてタイムスタンプがもたらす再現不可能ビルドの原因を探し出し、tarのようなツールで圧縮されたパケットを生成し(tarコマンドが圧縮されたパケットファイルを生成するときは、システムの現在時間に基づいてファイルヘッダにタイムスタンプが生成される。よって、同様のtarコマンドが実行されて2回生成される圧縮されたパケットファイルは、ファイルヘッダのタイムスタンプが異なるためバイナリは一致しない)、データベースを照会して対応する調整規則を探し出し、tarのような圧縮されたパケットファイルを生成するコマンドを使用し、監視モジュールが新しいtarコマンドを構築し、tarコマンドを実行するシステム時間を固定時間として設定すると、同一のtarコマンドを複数回実行して生成される圧縮されたパケットファイルはバイナリ一致を維持することができるというものであってよい。
【0048】
一実施形態において、前記第2の調整規則に従って前記環境変数を調整することは、前記コード構築コマンドにおける環境変数が乱数である場合、ターゲットファイルシステムを構築することと、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットトファイルシステムに置き換えることと、を含む。
【0049】
一実施形態において、前記コード構築命令における環境変数が乱数である場合、ターゲットファイルシステムを構築し、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステムに置き換えることは、例えば、工程において乱数がもたらす再現不可能ビルドの原因を探し出し、例えばcpioファイルを生成するときに、cpioにパッキングされたファイルのinodeは乱数であり、cpioにパッキングされたファイルのinodeがランダムであるという問題に対応する調整規則をデータベースを照会して探し出す(ext4などのようなスタンドアロンのファイルシステムを構築し、パッキングされたファイルが固定のinode値を有するように、パッキングされたファイルをこのスタンドアロンのファイルシステムに順番にコピーしてから、このスタンドアロンのファイルシステムにおいてcpioファイルを生成することで、複数回構築されたときに生成されるcpioファイルのバイナリ一致を維持する)。
【0050】
一実施形態において、前記第2の調整規則に従って前記環境変数を調整することは、前記コード構築コマンドにおける環境変数がファイルリストシーケンスである場合、前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列することを含む。
【0051】
一実施形態において、前記コード構築コマンドにおける環境変数がファイルリストシーケンスである場合、前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列することは、例えば、工程においてファイルリストシーケンスがもたらす再現不可能ビルドを探し出し、findルックアップコマンドのように、探し出した複数の結果の順序は固定でなく、例えばfindコマンドで、データベースを照会して対応する調整方法を探し出し、探し出した複数の結果を、sortなどのソートツールを使用して配列するとfindコマンドを複数回実行した検索結果は一致するというものであってよい。
【0052】
一実施形態において、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成することは、コード構築過程を追跡して、コード構築過程におけるコード構築コマンドを監視することと、コード構築コマンドが取得されたときに、コード構築コマンドの実行を一時停止することと、前記コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成することと、を含む。
【0053】
具体的な例では、工程構築全過程を追跡し、工程構築過程におけるコード構築コマンドを監視し、現在のコード構築コマンドの実行を一時停止し、異なる環境変数(例えば、ユーザ名、システム時間などは再現不可能ビルドをもたらす要因となり得る)を設定する2つのテスト構築コマンドを構築し、新たに構築された2つのテスト構築コマンドを順次実行し、2つのテスト構築コマンドの出力を比較し、出力が一致しない場合、現在のコード構築コマンドは、再現不可能ビルドのコード構築コマンドであると判定される。
【0054】
別の具体的な例では、工程における構築過程を監視し(ptraceに限らない)、工程における再現不可能ビルドの環境変数を探し出し、データベースから環境変数に対応する調整規則を探し出し、調整規則に従って環境変数を調整して新たなコード構築命令を取得し、元のコード構築コマンドを新しいコード構築コマンドに置き換え、新たなコード構築命令を実行する。
【0055】
本願は、再現不可能ビルドをもたらす環境変数に対する調整規則を事前に準備し、調整規則をデータベースに記憶し、新たな調整規則を取得した後、新たな調整規則をデータベースに追加し、データベースをリアルタイム更新する。
【0056】
本願は、既存の、再現不可能ビルドを解析した成果物を再利用することができ、工程ソースコードを修正することなく、工程構築過程において、再現不可能ビルドをもたらす環境変数を自動で位置特定、修復し、複数回構築されたバイナリの一致を保証し、これにより、コードバイナリ等価監査を容易に完成することができる。
【0057】
別の具体的な例では、工程の構築過程を監視し、工程においてタイムスタンプがもたらす再現不可能ビルドの原因を探し出し、例えば、tarツールで圧縮されたパケットを生成し(tarコマンドが圧縮されたパケットファイルを生成するときに、システムの現在時間に基づいてファイルヘッダにタイムスタンプが生成される。よって、同様のtarコマンドを実行して2回生成された圧縮されたパケットファイルは、ファイルヘッダのタイムスタンプが異なるため、バイナリが一致しない)、タイムスタンプに基づいてデータベースを照会してタイムスタンプに対応する調整規則を探し出し、tarのような圧縮されたパケットファイルを生成するコマンドを使用し、監視モジュールが新たなtarコマンドを構築し、tarコマンドを実行するシステム時間を固定時間として設定すると、同一のtarコマンドを複数回実行して生成された圧縮されたパケットファイルはバイナリの一致を維持することができ、調整規則に従ってタイムスタンプを調整して調整済みのコード構築コマンドを得、コードに対して調整済みのコード構築コマンドを実行する。
【0058】
別の具体的な例では、工程構築過程を監視し、工程において乱数がもたらす再現不可能ビルドの原因を探し出し、cpioファイルを生成するときに、cpioにパッキングされたファイルのinodeが乱数であり、cpioにパッキングされたファイルのinodeがランダムであるという問題に対応する調整規則をデータベースを照会して探し出し(ext4などのようなスタンドアロンのファイルシステムを構築し、パッキングされたファイルが固定のinode値を有するように、パッキングされたファイルをこのスタンドアロンのファイルシステムに順番にコピーしてから、このスタンドアロンのファイルシステムにおいてcpioファイルを生成することで、複数回構築されたときに生成されるcpioファイルのバイナリ一致を維持する)、調整規則に従ってコード構築コマンドを調整し、コードに対して調整後のコード構築コマンドを実行する。
【0059】
別の具体的な例では、工程の構築過程を監視し、工程においてファイルリストシーケンスがもたらす再現不可能ビルドを探し出し、例えば、findルックアップコマンドは、探し出した複数の結果の順序が固定されておらず、ファイルリストシーケンスルックアップデータベースに基づいてファイルリストシーケンスに対応する調整規則を探し出し(findコマンドのように、探し出した複数の結果をsortなどのソートツールを使用して配列すると、findコマンドを複数回実行した検索の結果は一致する)、調整規則に従ってコード構築コマンドを調整し、コードに対して調整後のコード構築コマンドを実行する。
【0060】
別の具体的な例では、工程構築を起動し、工程構築を監視し、工程構築過程におけるコード構築コマンドを監視し、現在のコード構築コマンドの実行を一時停止し、2つのテスト構築コマンドを構築する(異なる環境変数を設定し、2つのコマンドが異なるシステム時間、ユーザ名などを使用すると再現不可能ビルドをもたらす要因となりうる)、第1のテスト構築コマンドを実行し、第2のテスト構築コマンドを実行し、2つのテスト構築コマンドの実行結果を比較し、バイナリが一致しない場合、再現不可能ビルドの原因を1つ特定し、一時停止命令の復活を実行し、構築過程を調査し、構築が完了していない場合、監視工程構築過程におけるコード構築コマンドを実行するステップにジャンプし、そうでない場合はフローを終了する。
【0061】
別の具体的な例では、複数回構築されるバイナリの不一致をもたらす環境変数および環境変数の調整規則を記憶するデータベースを構築し、工程構築を起動し、工程構築を監視し、再現不可能をもたらす環境変数を探し出し、データベースから、探し出した再現不可能な環境変数の調整規則を取得し、調整規則に従って環境変数を調整し、調整後のコード構築コマンドを得る。調整後のコード構築命令を実行し、構築過程を調査し、構築が完了していなければ、監視工程構築過程におけるコード構築コマンドを実行するステップにジャンプし、そうでない場合はフローを終了する。
【0062】
本願はコード構築装置を提供し、
図2は本願が提供するコード構築装置の構造模式図であって、当該装置は、コンピュータデバイスに配置され、
図2を参照すると、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築命令を生成するように構成された生成モジュール21と、コードに対して前記少なくとも2つのテスト構築命令をそれぞれ実行し、実行結果が一致しない場合、前記コード構築命令における環境変数に基づいて、前記コード構築命令を調整するように構成された調整モジュール22と、前記コードに対して調整後のコード構築命令を実行するように構成された実行モジュール23と、を備える。
【0063】
本願が提供するコード構築装置は、本願のコード構築方法を実現するためのものであり、本願が提供するコード構築装置の実現原理と技術効果は、本願のコード構築方法と類似しているため、ここでは詳しい説明を省略する。
【0064】
上述した実施形態を基に、上述の実施形態を変形した実施形態を提示するが、説明を簡単にするために、変形実施形態では、上述した実施形態との相違点のみを述べる。
【0065】
一実施形態において、前記調整モジュール22は、前記コード構築コマンドに基づいてデータベースを照会して、前記コード構築コマンドに対応する第1の調整規則を取得し、前記第1の調整規則に従って前記コード構築コマンドにおける各環境変数を調整するように構成されてよい。
【0066】
一実施形態において、前記調整モジュール22は、前記コード構築コマンドにおける環境変数に基づいてデータベースを照会して、前記環境変数に対応する第2の調整規則を取得し、第2の調整規則に従って前記環境変数を調整するように構成されてよい。
【0067】
一実施形態において、前記調整モジュール22は、前記コード構築コマンドにおける環境変数がタイムスタンプである場合、前記コード構築コマンドに対応するシステム時間を固定時間として設定するように構成されてよい。
【0068】
一実施形態において、前記調整モジュール22は、前記コード構築コマンドにおける環境変数が乱数である場合、ターゲットファイルシステムを構築し、アーカイブ対象ファイルが固定のノード情報を具備するように、前記コード構築コマンドに対応するファイルシステムをターゲットファイルシステムに置き換えるように構成されてよい。
【0069】
一実施形態において、前記調整モジュール22は、前記コード構築コマンドにおける環境変数がファイルリストシーケンスである場合、前記コード構築コマンドに対応する少なくとも1つの実行結果を、ソートツールを使用して配列するように構成されてよい。
【0070】
一実施形態において、前記調整モジュール22は、コード構築過程を追跡して、コード構築過程におけるコード構築コマンドを監視し、コード構築コマンドが取得されたときにコード構築コマンドの実行を一時停止し、前記コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成するように構成されてよい。
【0071】
本願が提供するコード構築装置は、コード構築コマンドにおける異なる環境変数に応じて少なくとも2つのテスト構築コマンドを生成するように構成された生成モジュールと、コードに対して前記少なくとも2つのテスト構築コマンドをそれぞれ実行し、実行結果が一致しない場合、前記コード構築コマンドにおける環境変数に基づいて、前記コード構築コマンドを調整するように構成された調整モジュールと、前記コードに対して調整後のコード構築コマンドを実行するように構成された実行モジュールと、を含み、既存の再現不可能ビルドを解析した成果物を再利用することができ、ユーザが工程ソースコードを手作業で修正する必要がなく、工程構築過程において自動的に発見し、且つ再現不可能ビルドをもたらす要因を修復または回避することができ、複数回の構築結果のバイナリ一致を実現することにより、コード有効性監査の効率を向上させる。
【0072】
本願はデバイスを提供し、
図3は本願が提供するデバイスの構造模式図であって、本願は、
図3に示すように、1つまたは複数のプロセッサ51と記憶装置52とを備え、該デバイスにおけるプロセッサ51は1つまたは複数であってよく、
図3では1つのプロセッサ51を例にしており、記憶装置52は、1つまたは複数のプログラムを記憶するためのものであり、前記1つまたは複数のプログラムは、前記1つまたは複数のプロセッサ51によって実行され、前記1つまたは複数のプロセッサ51に、本明細書に記載のいずれかの方法を実現させる。
【0073】
前記デバイスは、通信装置53、入力装置54、および出力装置55をさらに含む。
【0074】
前記デバイスのうちのプロセッサ51、記憶装置52、通信装置53、入力装置54、および出力装置55は、バスまたは他の方式で接続されてよく、
図3ではバスで接続することを例としている。
【0075】
入力装置54は、入力される数字または文字情報を受信し、デバイスのユーザ設定および機能制御に関するキー信号入力を生成するように構成されてよい。出力装置55は、ディスプレイなどの表示デバイスを含んでよい。
【0076】
通信装置53は、受信器と送信器とを含んでよい。通信装置53は、プロセッサ51の制御に従って情報の送受信を行うように設けられている。情報はアップリンク許可情報を含むがこれに限らない。
【0077】
記憶装置52はコンピュータ可読記憶媒体として、本願の
図1に示されるコード構築方法に対応するプログラム命令/モジュール(例えば、コード構築装置の生成モジュール21、調整モジュール22、および実行モジュール23)のように、ソフトウェアプログラム、コンピュータ実行可能なプログラム、およびモジュールとして設置されてよい。記憶装置52はプログラム記憶領域とデータ記憶領域を含んでよく、プログラム記憶領域はオペレーティングシステムと、少なくとも1つの機能に必要なアプリケーションプログラムを記憶することができ、データ記憶領域は、デバイスの使用に応じて作成されたデータなどを記憶することができる。このほか、記憶装置52は、高速ランダムアクセスメモリを含んでよく、少なくとも1つのディスク記憶デバイス、フラッシュメモリデバイス、または他の不揮発性ソリッドステートメモリデバイスなどの不揮発性メモリを含んでよい。いくつかの例において、記憶装置52は、プロセッサ51に対して遠隔配置されたメモリをさらに含んでよく、これら遠隔メモリは、ネットワークを介してデバイスに接続することができる。上記ネットワークの例としては、インターネット、イントラネット、ローカルエリアネットワーク、移動体通信ネットワーク、およびそれらの組み合わせが挙げられるが、これらに限らない。
【0078】
本願は、プロセッサによって実行されると、本願に記載のいずれかのコード構築方法を実行するコンピュータプログラムを記憶した記憶媒体をさらに提供する。
【0079】
本願のコンピュータ記憶媒体は、1つまたは複数のコンピュータ読み取り可能な媒体の任意の組み合わせを採用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であり得る。コンピュータ可読記憶媒体は、例えば電気、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいはそれらの任意の組み合わせとすることができるがこれらに限らない。コンピュータ可読記憶媒体のより具体的な例(非網羅的なリスト)は、1つ以上の配線を有する電気接続、携帯型コンピュータディスク、ハードディスク、ランダムアクセスメモリ(Random Access Memory、RAM)、リードオンリーメモリ(Read Only Memory、ROM)、消去可能プログラマブルリードオンリーメモリ(Erasable Programmable Read Only Memory、EPROM)、フラッシュメモリ、光ファイバ、携帯型CD-ROM、光記憶デバイス、磁気記憶デバイス、または上記の任意の適切な組み合わせを含む。コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって、またはそれらと関連して使用され得るプログラムを含む、または記憶する任意の有形媒体であってよい。
【0080】
コンピュータ読み取り可能な信号媒体は、ベースバンドにおいてまたは搬送波の一部として伝搬されるデータ信号を含み、コンピュータ読み取り可能なプログラムコードが付帯されている。このような伝搬されるデータ信号は、電磁信号、光信号、または上記の任意の適切な組み合わせを含むがこれらに限らず、様々な形態をとり得る。コンピュータ読み取り可能な信号媒体は、命令実行システム、装置、またはデバイスによって、またはそれらと関連して使用され得るプログラムを送信、伝播、または伝送することができるコンピュータ可読記憶媒体以外の任意のコンピュータ可読媒体であってよい。
【0081】
コンピュータ可読媒体に含まれるプログラムコードは、無線、電気配線、光ケーブル、無線周波数(Radio Frequency、RF)など、または上記の任意の適切な組み合わせを含むがこれらに限らず、上記の任意の適切な組み合わせで送信され得る。
【0082】
一種類または複数種類のプログラミング言語またはその組み合わせにより、本願の操作を実行するコンピュータプログラムコードを書くことができ、前記プログラミング言語は、Java(登録商標)、Smalltalk、C + +のようなオブジェクト指向のプログラミング言語を含み、「C」言語または類似のプログラミング言語のような常規の手続き型プログラミング言語をさらに含む。プログラムコードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンのソフトウェアパッケージとして、部分的にユーザのコンピュータ上で部分的に遠隔コンピュータ上で実行することができ、または完全に遠隔コンピュータ若しくはサーバ上で実行されてよい。リモートコンピュータを用いる場合、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または、外部のコンピュータに接続されてよい(例えば、インターネットサービスプロバイダを使用しインターネットを介して接続される)。
【0083】
以上は、本願の例示的な実施形態に過ぎず、本願の請求範囲を制限するものではない。
【0084】
当業者には、ユーザデバイスという用語が、携帯電話、ポータブルデータ処理装置、ポータブルウェブブラウザ、または車両搭載移動局などの任意の適切なタイプのワイヤレスユーザデバイスを包含することが明らかであろう。
【0085】
一般的に、本願の様々な実施形態は、ハードウェアまたは専用回路、ソフトウェア、ロジック、またはそれらの任意の組み合わせにおいて実施されてよい。例えば、いくつかの態様はハードウェアにおいて実現されてよく、他の態様は、コントローラ、マイクロプロセッサ、または他の演算装置によって実行され得るファームウェアまたはソフトウェアにおいて実現されてよく、本願ではこれについて限定しない。
【0086】
本願の実施形態は、例えば、プロセッサエンティティにおいて、またはハードウェアによって、またはソフトウェアとハードウェアの組み合わせによって実現されるというように、モバイル装置のデータプロセッサによってコンピュータプログラム命令を実行することで実現されてよい。コンピュータプログラム命令は、アセンブラ命令、命令セットアーキテクチャ(Instruction Set Architecture, ISA )命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソースコードもしくはオブジェクトコードであってよい。
【0087】
本願の図面における任意の論理フローのブロック図は、プログラムステップを表してよく、または、互いに接続された論理回路、モジュール、および機能を表してよく、または、プログラムステップと論理回路、モジュール、および機能との組み合わせを表してよい。コンピュータプログラムは、メモリに記憶され得る。メモリは、リードオンリーメモリ(Read-Only Memory、ROM)、ランダムアクセスメモリ(Random Access Memory、RAM)、光メモリデバイスおよびシステム(デジタル多用途ディスク(Digital Video Disc、DVD)または光ディスク(Compact Disk、CD))などのような、ローカル技術環境に適した任意のタイプのメモリであり得るがこれらに限らず、任意の適切なデータストレージ技術を使用して実現してもよい。コンピュータ可読媒体は、非一時的記憶媒体を含み得る。データプロセッサは、汎用コンピュータ、専用コンピュータ、マイクロプロセッサ、デジタル信号プロセッサ(Digital Signal Processing、DSP)、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、プログラマブル論理デバイス(Field-Programmable Gate Array、FGPA)、およびマルチコアプロセッサアーキテクチャに基づくプロセッサなど、ローカル技術環境に適した任意のタイプであってよいがこれらに限らない。
【0088】
例示的かつ非限定的な例として、本願の例示的な実施形態の詳細な説明を上記に提供した。添付の図面および請求項を組み合わせて考慮すると、上記の実施形態に対する様々な修正および調整は当業者にとって自明なものであるが、本願の範囲から逸脱しない。よって、本願の適切な範囲は請求項によって決定される。