IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ノースロップ グラマン システムズ コーポレイションの特許一覧

特許7562011プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法
<>
  • 特許-プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法 図1
  • 特許-プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法 図2
  • 特許-プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法 図3
  • 特許-プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法 図4
  • 特許-プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法 図5
  • 特許-プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-26
(45)【発行日】2024-10-04
(54)【発明の名称】プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法
(51)【国際特許分類】
   G06F 11/36 20060101AFI20240927BHJP
   G06F 8/30 20180101ALI20240927BHJP
【FI】
G06F11/36
G06F8/30
【請求項の数】 15
(21)【出願番号】P 2023550274
(86)(22)【出願日】2022-01-17
(65)【公表番号】
(43)【公表日】2024-02-20
(86)【国際出願番号】 US2022012663
(87)【国際公開番号】W WO2022182440
(87)【国際公開日】2022-09-01
【審査請求日】2023-09-05
(31)【優先権主張番号】17/183,956
(32)【優先日】2021-02-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】520128820
【氏名又は名称】ノースロップ グラマン システムズ コーポレーション
(74)【代理人】
【識別番号】100099759
【弁理士】
【氏名又は名称】青木 篤
(74)【代理人】
【識別番号】100123582
【弁理士】
【氏名又は名称】三橋 真二
(74)【代理人】
【識別番号】100092624
【弁理士】
【氏名又は名称】鶴田 準一
(74)【代理人】
【識別番号】100114018
【弁理士】
【氏名又は名称】南山 知広
(74)【代理人】
【識別番号】100153729
【弁理士】
【氏名又は名称】森本 有一
(72)【発明者】
【氏名】ダニエル ダブリュ プラウェッキー
【審査官】松平 英
(56)【参考文献】
【文献】国際公開第2019/142266(WO,A1)
【文献】特開2018-163432(JP,A)
【文献】特開2011-81496(JP,A)
【文献】特開2015-26365(JP,A)
【文献】Verification of Airborne Software in Compliance with DO-178C,[online],LDRA Software Technology,2017年,pp. 1-21,https://ldra.com/wp-content/uploads/2023/09/LDRA_tool_suite_and_DO-178C_white_paper_V2.0.pdf
【文献】Complete Verification and Validation for DO-178C,[online],Vector,2019年10月,pp.1-20,https://cdn.vector.com/cms/content/know-how/aerospace/Document/Complete_Verification_and_Validation_for_DO-178C.pdf
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
11/07
11/28-11/36
18/00-18/40
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
システムであって、
機械可読命令とデータとを記憶するためのメモリであって、前記データが、ある段階におけるプログラムコードを表すビルドコードを含む、メモリと、
前記メモリにアクセスし、前記機械可読命令を実行するための1つ以上のプロセッサと、を備え、前記機械可読命令が、
前記ビルドコードを評価して、前記ビルドコードが前記プログラムコードのためのプログラムコード開発標準に準拠するかどうかを判定して、前記ビルドコード内のコーディングエラーを識別するようにプログラムされたコード開発エンジンであって、前記コーディングエラーについて前記ビルドコードを訂正するためのエラー訂正ソリューションを推奨するようにプログラムされている、コード開発エンジンと、
前記プログラムコードのためのモデル化されたプログラムコード環境において前記ビルドコードをシミュレーションして、前記ビルドコード内のコーディング失敗を識別するようにプログラムされたコードランタイムシミュレーションエンジンであって、前記コーディング失敗について前記ビルドコードを訂正するための失敗訂正ソリューションを推奨するようにプログラムされている、コードランタイムシミュレーションエンジンと、
前記コーディングエラー及び/又はコーディング失敗が前記ビルドコードにおいて訂正されることに応答して、前記ビルドコードについての許容可能リスクのレベルに基づいて、前記ビルドコードを評価して、前記ビルドコードがプログラムコード環境での使用に許容可能であるかどうかを判定するようにプログラムされている、ビルドコード出力モジュールと、を備える、システム。
【請求項2】
コーディング開発エンジンが、
前記プログラムコードのソフトウェア開発のためのルール及び/又は制約を特徴付ける学習されたコーディング開発標準のライブラリに基づいて、前記ビルドコード内の前記コーディングエラーを識別するようにプログラムされた、機械学習開発標準(ML-DL)アルゴリズムと、
プログラムコード及び/又はビルドコード内のコーディングエラーに対する前のエラー訂正ソリューションを特徴付ける学習されたコーディングエラーソリューションのライブラリに基づいて、前記コーディングエラーを訂正するための前記エラー訂正ソリューションを推奨するようにプログラムされた、MLコードエラー訂正(ML-CEC)アルゴリズムと、
前記エラー訂正ソリューションに基づいて前記ビルドコード内の前記コーディングエラーを訂正するようにプログラムされた、コード更新訂正(CUC)モジュールと、を備える、請求項1に記載のシステム。
【請求項3】
前記コーディング開発エンジンが、静的解析手法を適用して前記ビルドコードを評価して、前記ビルドコードが第2のコーディングエラーを含むかどうかを判定するようにプログラムされた静的コードテストモジュールを更に備え、前記コーディングエラーが、第1のコーディングエラーであり、前記ML-CECアルゴリズムが、前記第2のコーディングエラーの評価及び前記学習されたコーディングエラーソリューションのライブラリに基づいて前記第2のコーディングエラーを訂正するための第2のエラー訂正ソリューションを推奨するようにプログラムされており、前記CUCモジュールが、前記第2のエラー訂正ソリューションに基づいて前記ビルドコード内の前記第2のコーディングエラーを訂正するようにプログラムされている、請求項2に記載のシステム。
【請求項4】
前記コーディング開発エンジンが、
コードカバレッジ解析手法を適用して、テストケースに基づいて前記ビルドコードを評価して、前記ビルドコードの実行中に行使された又は行使されなかった前記ビルドコードの量を決定して、コードカバレッジレポートデータを提供するようにプログラムされた、コードカバレッジテストモジュールと、
前記コードカバレッジレポートデータに基づいて前記ビルドコード内の異常を識別するようにプログラムされており、前記識別された異常の評価とエラー異常データベースとに基づいて前記ビルドコード内の第3のコーディングエラーを識別するように更にプログラムされた、コード評価モジュールと、を更に備える、請求項3に記載のシステム。
【請求項5】
前記ML-CECアルゴリズムが、前記学習されたコーディングエラーソリューションのライブラリに基づいて前記第3のコーディングエラーを訂正するための第3のエラー訂正ソリューションを推奨するようにプログラムされており、前記CUCモジュールが、前記第3のエラー訂正ソリューションに基づいて前記ビルドコード内の前記第3のコーディングエラーを訂正するようにプログラムされている、請求項4に記載のシステム。
【請求項6】
前記コーディング開発エンジンが、前のプログラムコード及び/又はビルドコードの挙動をテストするために採用された以前のテストケースを特徴付けるテストケーストレーニングデータに基づいてトレーニングされたMLテストケース生成器を更に備え、前記MLテストケース生成器が、前記テストケースを提供するようにプログラムされている、請求項5に記載のシステム。
【請求項7】
前記コードランタイムシミュレーションエンジンが、少なくとも1つのシミュレーションモジュールを備え、前記少なくとも1つのシミュレーションモジュールが、
シミュレーションパラメータに基づいて、前記プログラムコードのための前記プログラムコード環境のモデル化されたプログラムコード環境を生成し、
前記モデル化されたプログラムコード環境において前記ビルドコードをシミュレーションし、かつ
前記モデル化されたプログラムコード環境における前記ビルドコードの前記シミュレーションに基づいて、前記ビルドコードの挙動及び/又は性能を特徴付けるシミュレーション結果データを出力するようにプログラムされている、請求項6に記載のシステム。
【請求項8】
前記コードランタイムシミュレーションエンジンが、学習されたシミュレーションパラメータのライブラリに基づいて、シミュレーションのために前記モデル化されたプログラムコード環境を構成するために前記少なくとも1つのシミュレーションモジュールのための前記シミュレーションパラメータを推奨するようにプログラムされたMLシミュレーションパラメータアルゴリズムを備え、前記学習されたシミュレーションパラメータのライブラリが、モデル化されたプログラムコード環境を構成するための前のシミュレーションパラメータを特徴付け、
前記コードランタイムシミュレーションエンジンが、前記ビルドコード内の前記コーディング失敗を識別するために、前記少なくとも1つのシミュレーションモジュールによって生成されたシミュレーション結果データを評価するようにプログラムされた、コードランタイムプロセス及び制御モジュールを更に備える、請求項7に記載のシステム。
【請求項9】
前記コードランタイムシミュレーションエンジンが、
前記プログラムコード及び/又はビルドコード内のコーディング失敗に対する前の失敗訂正ソリューションを特徴付ける学習されたコーディング失敗ソリューションのライブラリに基づいて、前記コーディング失敗を訂正するための前記失敗訂正ソリューションを推奨するようにプログラムされたMLコード失敗訂正(ML-CFC)アルゴリズムと、
前記失敗訂正ソリューションに基づいて前記ビルドコード内の前記コーディング失敗を訂正するようにプログラムされたコード失敗更新(CFU)モジュールと、を更に備える、請求項8に記載のシステム。
【請求項10】
前記コードランタイムプロセス及び制御モジュール並びに前記コード評価モジュールのうちの1つが、前記ビルドコードにおいて訂正され、かつ/又は訂正されていないコーディング欠陥のタイプと数値コーディング欠陥とを示すコード欠陥訂正結果データを生成するようにプログラムされており、前記ビルドコード出力モジュールが、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定するために、前記ビルドコードの前記許容可能リスクのレベルに基づいて、前記コード欠陥訂正結果データを評価するようにプログラムされた許容可能性判定モジュールを備える、請求項9に記載のシステム。
【請求項11】
前記ビルドコードが、前記プログラムコードが開発されているときに、前記コーディング開発エンジンによる評価、及び前記コードランタイムシミュレーションエンジンによるシミュレーション、のうちの1つが行われる、
前記ビルドコードが、前記プログラムコードに対するユーザ定義の変更に基づいて、前記コーディング開発エンジンによる評価、及び前記コードランタイムシミュレーションエンジンによるシミュレーション、のうちの1つが行われる、並びに
前記プログラムコードが、レガシープログラムコードに対応する、のうちの1つである、請求項10に記載のシステム。
【請求項12】
前記機械可読命令が、前記ビルドコードの許容可能バージョンに対応するリリースされたプログラムコードを受信又は取り出すようにプログラムされた環境インターフェースモジュールを更に含み、前記コードランタイムシミュレーションエンジンが、前記モデル化されたプログラムコード環境において前記リリースされたプログラムコードをシミュレーションして、前記ビルドコード内の更なるコーディング失敗を識別するようにプログラムされており、前記コードランタイムシミュレーションエンジンが、他のコーディング失敗について前記リリースされたプログラムコードを訂正するための別の失敗訂正ソリューションを推奨するようにプログラムされており、かつ前記ビルドコード出力モジュールが、前記リリースされたプログラムコードを評価して、前記リリースされたプログラムコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定するようにプログラムされている、請求項11に記載のシステム。
【請求項13】
コンピュータ実装方法であって、
プログラムコードのソフトウェア開発中のある段階における、又は前記ソフトウェア開発後の前記プログラムコードを表すビルドコードを受信することと、
前記プログラムコードのためのプログラムコード環境のモデル化されたプログラムコード環境において前記ビルドコードをシミュレーションして、前記ビルドコードの挙動及び/又は性能を決定することと、
前記ビルドコードの前記挙動及び/又は性能を評価して、前記ビルドコード内のコーディング失敗を識別することと、
前記コーディング失敗の評価と、プログラムコード及び/又はビルドコードにおけるコーディング失敗についての前の失敗訂正ソリューションを特徴付ける学習されたコーディング失敗ソリューションのライブラリとに基づいて、前記コーディング失敗を訂正するための失敗訂正ソリューションを識別することと、
前記ビルドコード内の前記コーディング失敗を訂正することに応答して、前記ビルドコードについての許容可能リスクのレベルに基づいて、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定することと、を含む、コンピュータ実装方法。
【請求項14】
前記モデル化されたプログラムコード環境が、MLシミュレーションパラメータアルゴリズムによって推奨されるシミュレーションパラメータに基づいて生成され、前記MLシミュレーションパラメータアルゴリズムが、学習されたシミュレーションパラメータのライブラリに基づいて前記シミュレーションパラメータを推奨するようにプログラムされており、前記学習されたシミュレーションパラメータのライブラリが、モデル化されたプログラムコード環境を構成するための前のシミュレーションパラメータを特徴付ける、請求項13に記載のコンピュータ実装方法。
【請求項15】
前記ビルドコードが、前記プログラムコード環境での使用に許容可能であるかどうかを判定することが、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定するために、前記ビルドコードについての前記許容可能リスクのレベルに基づいてコード失敗訂正結果データを評価することを含み、前記コード失敗訂正結果データが、前記ビルドコードにおいて訂正され、かつ/又は訂正されていないコーディング失敗のタイプと数値コーディング失敗とを示す、請求項13に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願)
本出願は、2021年2月24日に出願された米国特許出願第17/183956号の優先権を主張し、その全体は、本明細書に組み込まれる。
【0002】
(発明の分野)
本開示は、システム及び方法のプログラムコード欠陥及び使用の許容可能性の判定に関する。
【背景技術】
【0003】
ソフトウェア開発は、アプリケーション、フレームワーク、プログラマブルロジックデバイスマイクロコード)、又は他のソフトウェア構成要素の作成及び維持に関与する、考案、仕様化、設計、プログラミング、文書化、テスト、及びバグ修正のプロセスである。ソフトウェア開発は、時には計画され構造化されたプロセスにおける、所望のソフトウェアの着想からソフトウェアの最終的な明示までの間に関与し得る全てのものを含むことができる。ソフトウェア開発は、研究、新規開発、プロトタイピング、修正、再利用、再設計、保守、又はソフトウェア製品をもたらす任意の他の活動を含むことができる。場合によっては、ソフトウェア開発には、ソフトウェアへの新しい特徴又は機能の追加、及び発見された問題の訂正を含むことができる。
【0004】
プログラム解析は、正確性、堅牢性、安全性、活性などの特性に関して、開発中などにコンピュータコードの挙動を解析するプロセスであり、場合によっては、対象ソフトウェアが許容可能な安全性リスクハザードに対して開発されることである。プログラム解析は、プログラムの最適化及びプログラムの正確性(例えば、プログラムがセーフティクリティカルシステムで動作できることを保証すること)に焦点を当てる。前者は、リソース使用量を削減しながらプログラムの性能を向上させることに焦点を当てる一方で、後者は、プログラムが行うべきことを確実に行うことに焦点を当てる。
【0005】
機械学習(Machine learning、ML)は、人工知能(artificial intelligence、AI)のサブセットであり、コンピュータがアルゴリズム及び統計モデルを使用して、学習又はトレーニングデータセットを分析した後、明示的にコード化された命令を使用せずにタスクを正確に実行し、事実上、過去の経験から一般化するためにパターン及び推論に依拠する。MLベースのシステムは、これまで見られなかった、又は考慮されていなかった、個々のケースごとにコード化することが不可能であろう問題を解決することができる。MLアルゴリズムのタイプには、とりわけ、教師あり学習、教師なし学習、及び特徴学習が含まれる。トレーニングデータでトレーニングできるMLモデルのタイプには、人工ニューラルネットワーク、決定木、サポートベクターマシン、回帰分析モデル、ベイジアンネットワーク、遺伝的アルゴリズム、主構成要素分析、及びクラスター分析が含まれる。
【発明の概要】
【0006】
本開示は、プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法に関する。
【0007】
一例では、システムは、機械可読命令とデータとを記憶するためのメモリを含むことができる。データは、ある段階におけるプログラムコードを表すことができるビルドコードを含むことができる。システムは、メモリにアクセスし、機械可読命令を実行することができる1つ以上のプロセッサを含むことができる。機械可読命令は、コード開発エンジン、コードランタイムシミュレーションエンジン、及びビルドコード出力モジュールを含むことができる。コード開発エンジンは、ビルドコードを評価して、ビルドコードがプログラムコードのためのプログラムコード開発標準に準拠するかどうかを判定して、ビルドコード内のコーディングエラーを識別するようにプログラムすることができる。コード開発エンジンは、コーディングエラーについてビルドコードを訂正するためのエラー訂正ソリューションを推奨するようにプログラムすることができる。コードランタイムシミュレーションエンジンは、プログラムコードのためのモデル化されたプログラムコード環境においてビルドコードをシミュレーションして、ビルドコード内のコーディング失敗を識別するようにプログラムすることができる。コードランタイムシミュレーションエンジンは、コーディング失敗についてビルドコードを訂正するための失敗訂正ソリューションを推奨するようにプログラムすることができる。ビルドコード出力モジュールは、コーディングエラー及び/又はコーディング失敗がビルドコードにおいて訂正されることに応答して、ビルドコードについての許容可能リスクのレベルに基づいて、ビルドコードを評価して、ビルドコードがプログラムコード環境での使用に許容可能であるかどうかを判定するようにプログラムすることができる。
【0008】
別の例では、コンピュータ実装方法は、プログラムコードのソフトウェア開発中のある段階におけるプログラムコードを表し得るビルドコードを提供することと、プログラムコードのソフトウェア開発のためのルール及び/又は制約を特徴付ける学習されたコーディング開発標準のライブラリに基づいて、ビルドコードを評価して、ビルドコード内のコーディングエラーを識別することと、コーディングエラーの評価と、プログラムコード及び/又はビルドコードにおけるコーディングエラーについての前のエラー訂正ソリューションを特徴付ける学習されたコーディングエラーソリューションのライブラリとに基づいて、コーディングエラーを訂正するためのエラー訂正ソリューションを推奨することと、エラー訂正ソリューションに基づいて、ビルドコードを更新して、ビルドコード内のコーディングエラーを訂正することと、ビルドコード内のコーディングエラーを訂正することに応答して、ビルドコードについての許容可能リスクのレベルに基づいて、ビルドコードがプログラムコードのためのプログラムコード環境での使用に許容可能であるかどうかを判定することと、を含むことができる。
【0009】
更なる例では、コンピュータ実装方法は、プログラムコードのソフトウェア開発中のある段階における、又はソフトウェア開発後のプログラムコードを表すものであり得るビルドコードを受信することと、プログラムコードのためのプログラムコード環境のモデル化されたプログラムコード環境においてビルドコードをシミュレーションして、ビルドコードの挙動及び/又は性能を決定することと、ビルドコードの挙動及び/又は性能を評価して、ビルドコード内のコーディング失敗を識別することと、コーディング失敗の評価と、プログラムコード及び/又はビルドコードにおけるコーディング失敗についての前の失敗訂正ソリューションを特徴付ける学習されたコーディング失敗ソリューションのライブラリとに基づいて、コーディング失敗を訂正するための失敗訂正ソリューションを識別することと、ビルドコード内のコーディング失敗を訂正することに応答して、ビルドコードについての許容可能リスクのレベルに基づいて、ビルドコードがプログラムコード環境での使用に許容可能であるかどうかを判定することと、を含むことができる。
【図面の簡単な説明】
【0010】
図1】プログラムコード欠陥及び使用の許容可能性の判定のためのシステムの一例を示す。
図2】コードランタイムシミュレーションエンジンの一例を示す。
図3】コード開発エンジンの一例を示す。
図4】ビルドコード出力モジュールの一例を示す。
図5】プログラムエラー訂正及び許容可能性判定のための方法の一例を示す。
図6】プログラムエラー訂正及び許容可能性判定のための方法の一例を示す。
【発明を実施するための形態】
【0011】
本開示は、プログラムコード欠陥及び使用の許容可能性の判定のためのシステム及び方法に関する。プログラムコード検証(又は証明)のための既存の手法は、プログラムコードが意図されたシステム(例えば、セーフティクリティカルシステム、ミッションクリティカルシステム、セキュリティクリティカルシステムなど)での使用に許容可能であるかどうかを判定するために、ソフトウェア開発根拠の人間の主観的評価に依拠する。プログラムコード検証は、プログラムコードの許容可能性を判定するために、1つ以上の実践、テスト、及び/又は標準を使用することを伴う。場合によっては、プログラムコード検証は、プログラムコードについてのアーチファクト(又は根拠)(例えば、リスクアセスメント(例えば、プログラムコードによってもたらされるリスク)、プログラムが実行されるべきコンピューティングシステムのタイプ、使用事例、統一モデリング言語(unified modeling language、UML)図、分類図、プログラムコードを開発する際に使用される画像、ソフトウェア文書(例えば、プログラムコードの特性又は属性を記述する文書)、会議メモ、プロトタイプなど)を評価することを含むことができる。
【0012】
プログラムコードが使用されるべきプログラムのタイプ及び/又は対応するコンピューティング環境に応じて、プログラムコードが許容可能であるかどうかの判定を行うためのプログラムコード許容可能性評価のための異なるプログラムコード検証方法が開発されている。許容可能であると識別された(又はフラグ付けされた)プログラムコードは、プログラムコードテスト基準(例えば、所与のレベルの正確性、コーディングエラー、安全性、及び/又は信頼性など)及び/又は規定のソフトウェア開発標準に準拠すると判定されたプログラムコードに対応することができる。場合によっては、プログラムコード検証は、ソフトウェアテストツール及び/又はソフトウェアメトリックを使用して、プログラムコードが使用に許容可能であるかどうかを判定することを伴う。例えば、航空機用途では、プログラムコードの許容可能性を評価するためにDO-178(例えば、DO-178B又はDO-178C)が採用される。連邦航空局(Federal Aviation Administration、FAA)は、セーフティクリティカルプログラムコードが航空環境で安全に機能するかどうかを検証及び判定するための基礎となるベースライン及びガイダンス(例えば、標準)としてDO-178を適用する。
【0013】
しかしながら、プログラムコードの開発とプログラムコードが許容可能であるかどうかを判定することと併せて、大量の根拠を評価するために人間を使用することは、表面的で不完全な、かつ/又は許容できないほど長期にわたる評価をもたらす可能性がある。更にまた、評価のために人間を使用することは、時間がかかり、主観的である。その結果、ソフトウェア及び/又はプログラマブルロジックデバイスマイクロコード)を許容可能なものとして証明することは、時間がかかり、分析集約的であり、テスト集約的であり、文書化集約的であり、人手集約的であり、評価者の意見に主観的であり、プログラムコードが許容可能であるかどうか(例えば、安全であるか否か)に関して不確実性をもたらす可能性がある。
【0014】
更にまた、現在の評価方法は、より新しいプログラムコード開発標準のために設計されているので、既存のプログラムコード検証方法は、レガシープログラムコードに容易には適用できない。例えば、プログラムコードを許容可能なものとして確立するために使用される既存のプログラムコード検証方法は、「関与段階(stage-of-involvement)」アプローチ(又はプロセス)に基づく。これは、一定の保証タスクがソフトウェア開発サイクル内の非常に特定の時点で実行されなければならないことを意味する。しかしながら、これは、「関与段階」プロセスによって、レガシーコードを書き直すか又はレガシーコードを「そのまま」受け入れるよう強制するかのいずれかの必要が生じるため、レガシーコードにとって問題である。加えて、既存のレガシーコードは文書化が不十分であり、したがって、レガシーコードを再設計することは、通常、実行可能な選択肢ではない。
【0015】
更に、ML及び/又はAIを採用するセーフティクリティカルプログラムコードを評価するために使用される既存のプログラムコード検証方法は、静的ソフトウェアイメージング手法(例えば、決定論的プログラムコードテスト手法)に基づく。したがって、これらの方法では、監視あり環境及び監視なし環境で見られる自己修正コードの新たな方向が、エピックがプログラムコードの初期リリースであるコード形態を変更するため、許容可能な範囲で安全に使用できるという保証を提供することはできない。加えて、既存のプログラムコード検証方法は、プログラムコードが許容可能であるかどうかを判定する前に、プログラムコードが完了している(例えば、完全に開発され、検証の準備ができている)こと、及び/又は根拠に基づくプロセスが完了している(例えば、検証が十分なレベルまで完全に完了している)ことを必要とする。
【0016】
開発の異なるステージ(例えば、計画段階、解析段階、設計段階、実装段階、並びに/又はテスト及び統合段階)の間にプログラムコードを評価して、プログラムコードが許容可能であり、ひいては使用するのに安全であるかどうかを判定するためのシステム及び方法が、本明細書に記載される。本明細書に記載されるシステム及び方法は、プログラムコードのソフトウェア開発ライフサイクルを監視し、プログラムコードの現在の状態又はバージョンが使用に許容可能である(例えば、使用するのに安全である)かどうかを判定(例えば、計算)することができる。コンピュータプログラムが開発されている(例えば、1つ以上のモジュールが更新されている、改善されている、などの)ときに、本明細書に記載されるシステム及び方法は、プログラムコードの開発を(例えば、連続的に)監視して、プログラムコード内の欠陥(例えば、障害、エラー、及び失敗)を識別し、プログラムコードの安全性のレベルを示す値に対応するプログラムコードの許容可能性を定量化することができる。いくつかの例では、本明細書に記載されるシステム及び方法は、ユーザ(例えば、開発者)を識別するか若しくはユーザに推奨を提供するようにプログラムすることができ、又はいくつかの例では、識別された欠陥を訂正するための提案を提供するようにプログラムすることができる。したがって、ユーザがプログラムコードを開発しているときに、本明細書に記載されるシステム及び方法は、コーディング欠陥をユーザに通知することができ、かついくつかの例では、コーディング欠陥を訂正するためのソリューションを提供することができる。
【0017】
いくつかの例では、コード開発エンジンは、ビルドコード内のコーディングエラーを識別及び訂正するために、プログラムコードのソフトウェア開発中のある段階における、又はソフトウェア開発後のプログラムコードを表すことができるビルドコードを評価するようにプログラムすることができる。コード開発エンジンは、ビルドコードを評価し、コーディングエラーを訂正するための推奨を提供するか、又はプログラムコードのためのコード開発標準に準拠するようにビルドコードを更新するようにプログラムすることができる。コード開発エンジンは、ビルドコード出力モジュールと通信するようにプログラムすることができ、ビルドコード出力モジュールは、コーディングエラーがビルドコードにおいて訂正されることに応答して、ビルドコードについての許容可能リスクのレベルに基づいて、ビルドコードを評価して、ビルドコードがプログラムコード環境での使用に許容可能であるかどうかを判定するようにプログラムすることができる。
【0018】
いくつかの例では、コードランタイムシミュレーションエンジンは、プログラムコードのためのモデル化されたプログラムコード環境においてビルドコードをシミュレーションして、ビルドコード内のコーディング失敗を識別及び訂正するようにプログラムすることができる。コードランタイムシミュレーションエンジンは、プログラムコードのソフトウェア開発中及び/又はソフトウェア開発後にビルドコードを受信し、ビルドコードを処理して、ビルドコード内のコーディング失敗を識別するために、公称条件、公称外条件、及びストレス条件に基づいてビルドコードの性能をシミュレーションするようにプログラムすることができる。コードランタイムシミュレーションエンジンは、プログラムコードのそれぞれのビルドが許容可能である(例えば、使用するのに安全である)かどうかに関して、ビルドコード出力モジュールによって判定するためにビルドコードを評価するようにプログラムすることができる。更なる例として、コードランタイムシミュレーションエンジンは、(例えば、プログラムコードが使用される)プログラムコードのためのプログラムコード環境をモデル化し、モデル化されたプログラムコード環境においてビルドコードをシミュレーションして、ビルドコードの挙動及び/又は性能を確認する(例えば、システム障害及び/又は人の損失につながり得るビルドコードのアクションに対応する潜在的な安全でない挙動を識別する)ようにプログラムすることができる。コード開発エンジンは、ビルドコード出力モジュールと通信するようにプログラムすることができ、ビルドコード出力モジュールは、失敗エラーがビルドコードにおいて訂正されることに応答して、ビルドコードについての許容可能リスクのレベルに基づいて、ビルドコードを評価して、ビルドコードがプログラムコード環境での使用に許容可能であるかどうかを判定するようにプログラムすることができる。
【0019】
したがって、記載されるシステム及び方法は、プログラムコード検証のための大量の根拠の主観的評価のために人間を使用することを排除し、改善された(例えば、より高速な)プログラムコードの展開を可能にするプログラムコード検証のための決定論的アプローチを提供する。更に、本明細書に記載されるシステム及び方法は、レガシープログラムコードが許容可能であるかどうかを判定するために、レガシープログラムコードが検証されることを可能にする。更にまた、本明細書に記載されるシステム及び方法は、プログラムコードが対応するプログラムアプリケーション環境で使用するのに安全であることを確実にするために、ML及び/又はAIアルゴリズムを採用してそのようなプログラムコードを証明するために使用され得る。本明細書に記載されるシステム及び方法は、プログラムコードが開発されているときにプログラムコードを評価することができるため、プログラムコードの許容可能性は、プログラムコード開発と同調して評価することができ、したがって、プログラムコードが許容可能であるかどうかを判定する前にプログラムコードが(例えば、現在は必要とされるように)完全に開発される必要はない。
【0020】
図1は、プログラムコード欠陥及び使用の許容可能性の判定のためのシステム100の一例を示す。システム100は、サーバ、クラウド環境、コンピュータ、例えばラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、ワークステーション、サーバなどの上に実装することができる。システム100は、1つ以上のプロセッサ102とメモリ104とを含むことができる。メモリ104は、機械可読命令を記憶することができ、機械可読命令は、プログラムコード環境での許容可能な使用のためのプログラムコード評価及び修正のために、1つ以上のプロセッサ102によって取り出され実行されることができる。プログラムコード環境は、プログラムコードが採用されるべきコンピューティング環境に対応することができる。例として、コンピューティング環境は、航空機で採用されるようなコンピューティングシステムに対応することができる。したがって、いくつかの例では、システム100は、プログラムコード106が、DO-178によって定義されるような安全性重視アプリケーションガイドラインに準拠し、したがって使用に許容可能である(例えば、使用するのに安全である)かどうかを判定するために使用することができる。
【0021】
例として、メモリ104は、例えば、揮発性メモリ(例えば、ランダムアクセスメモリ)、不揮発性メモリ(例えば、ハードディスクドライブ、ソリッドステートドライブ、フラッシュメモリフラッシュメモリなど)、又はそれらの組み合わせなどの非一時的コンピュータ記憶媒体として実装することができる。1つ以上のプロセッサ102は、例えば、1つ以上のプロセッサコアとして実装され得る。本例では、システム100の構成要素は、同じシステム上に実装されるものとして示されているが、他の例では、構成要素は、異なるシステム(例えば、コンピュータ、デバイスなど)にわたって分散され得、例えば、ネットワーク(例えば、無線及び/又は有線ネットワーク)を介して通信する。いくつかの例では、システム100は、プラグインとして実装し、コンピュータプログラムに(例えば、ソフトウェアアプリケーションに)組み込むことができる。一例として、コンピュータプログラムは、統合開発環境(integrated development environment、IDE)に対応することができる。他の例では、システム100は、開発者又は開発者のグループがプログラムコード106を開発するために協働するときに、1つ以上のIDE(例えば、ソフトウェアアプリケーション)及び/又は他のソフトウェア開発ツールを監視するようにプログラムすることができる。
【0022】
図1の例では、メモリ104は、コード入力モジュール108を含むことができる。いくつかの例では、コード入力モジュール108は、プログラムコード106が開発されているときに、プログラムコード106(例えば、モジュール、ソフトウェアユニット、コンピュータソフトウェア構成アイテム(computer software configuration item、CSCI)、マイクロコード及び/又は同様のもの)を受信するようにプログラムすることができるか又はそれを受信する。他の例では、プログラムコード106が開発されているとき、プログラムコード106は、プログラムコードモデル110によって、又はプログラムコードモデル110として表すことができる。例えば、ソフトウェアモデリングツールを採用してプログラムコードモデル110を生成することができる。コード入力モジュール108は、プログラムコードモデル110を取り出すか又は受信するようにプログラムすることができる。いくつかの例では、コード入力モジュール108は、プログラムコードモデル110に基づいてビルドコード112を提供するようにプログラムすることができる。他の例では、ビルドコード112は、プログラムコード106に対応することができる。いくつかの例では、プログラムコード106は、レガシープログラムコードを含むか、又はそれに対応することができる。更なる例として、プログラムコード106は、ML及び/又はAIアルゴリズムを含むことができる。いくつかの例では、システム100を採用して、プログラムコード106がプログラムコード環境での早期使用のために展開することができるように、ソフトウェア開発中にプログラムコード106のそれぞれのビルドを評価することができる。
【0023】
いくつかの例では、ビルドコード112は、プログラムコード106が1人以上のユーザによって開発されているときに、そのプログラムコード106のバージョンに対応することができる。したがって、いくつかの例では、プログラムコードモデル110は、プログラムコード106の開発中にプログラムコード106に対する変更又は更新を反映することができる。プログラムコード106が、初期プログラムコードビルドから、最終プログラムコードビルド(例えば、使用又は証明の準備ができている)に開発されているときに、したがって場合によっては、製品品質コード(例えば、対応するプログラムコードアプリケーションにおいて使用するための要件を満たすか又は満足させるプログラムコードであって、いくつかの例では、リリースされたプログラムコードと称される)に開発されているときに、プログラムコードモデル110は、対応するプログラムコードビルドを反映するように更新することができる。したがって、プログラムコード106がそのソフトウェア開発ライフを通して遷移及び変化するときに、プログラムコードモデル110は、遷移及び/又は変化を捕捉し、したがってプログラムコード106の現在のバージョンを記述するように更新することができる。したがって、いくつかの例では、プログラムコード106が更新されているときに、プログラムコード106のプログラムコードモデル110も更新することができ、コード入力モジュール108は、これを使用してビルドコード112を更新することができる。ビルドコード112は、プログラムコード106又はプログラムコードモデル110に対する更新を反映するために、コード入力モジュール108によって継続的に更新することができる。したがって、ビルドコード112は、ソフトウェア開発サイクル中のある段階におけるプログラムコード106又はプログラムコードモデル110のバージョンを表すものであることができる。
【0024】
いくつかの例では、メモリ104は、プログラムコード106がプログラムコード106のためのコード開発標準を満たすかどうかを判定するためにビルドコード112を評価するようにプログラムすることができるコード開発エンジン114を含むことができる。コード開発エンジン114は、コーディング開発標準に対するビルドコード112の評価に基づいて、プログラムコード106内のコーディングエラー及び障害(本明細書ではまとめて「コーディングエラー」と呼ばれる)を発見するようにプログラムすることができる。コード開発エンジン114は、ビルドコード112を評価し、コーディングエラーを訂正するための推奨を提供するか、又はプログラムコード106のコード開発標準に準拠するようにビルドコード112を更新するようにプログラムすることができる。
【0025】
例えば、コード開発エンジン114は、プログラムコード106がコーディングエラーを含むことを出力デバイス116上(例えば、ディスプレイ上)でユーザに警告し、そのコーディングエラーを訂正するための推奨を提供するようにプログラムすることができる。更なる例として、コーディングエラーが、(例えば、プログラムコード106に取り組むある開発者が所与のグローバル変数値を使用し、プログラムコード106に取り組む異なる開発者が同じグローバル変数値を使用する)グローバル変数競合に対応する場合、警告は、グローバル変数競合、及びグローバル変数競合を訂正するためのソリューション(例えば、異なるグローバル変数値を使用することを推奨する)を識別することができる。
【0026】
他の例では、コード開発エンジン114は、ビルドコード112を更新してコーディングエラーを訂正して、更新されたビルドコード118を提供し、それによってビルドコード112を自動的に訂正するようにプログラムすることができる。更新されたビルドコード118は、プログラムコードモデル110又はプログラムコード106を更新するために、メモリ104に記憶されたビルドコード出力モジュール120によって採用することができる。したがって、1つ以上のコーディングエラーがコード開発エンジン114によって訂正されるときに、ビルドコード出力モジュール120は、プログラムコード106内の対応するコーディングエラーを訂正するためにプログラムコードモデル110又はプログラムコード106を更新するようにプログラムすることができる。
【0027】
いくつかの例では、ビルドコード出力モジュール120は、更新されたビルドコード118を評価して、プログラムコード106のそれぞれのビルドが許容可能であるかどうかを判定するようにプログラムすることができる。許容可能リスクのレベルは、プログラムコード106のユーザ及び/又はエンティティによって定義することができる。いくつかの例では、許容可能リスクのレベルは、プログラムコード106の安全性リスクに対応することができる。ビルドコード出力モジュール120は、コード使用要件に関して、更新されたビルドコード118のリスク確率を計算する(例えば、信頼性を提供する)ようにプログラムすることができる。例えば、対応する標準によって定義される安全コード使用要件を、リスク確率を計算するために採用することができる。例として、安全コード使用要件は、MIL-STD-882E規格(例えば、完了済みの該当する厳密さレベルのタスクの完了の程度に関するMIL-STD-882E規格の表VIのソフトウェアハザードリスク)に基づいて提供され得る。いくつかの例では、コード使用要件は、プログラムコード106の安全要件又は目的に対応することができる。安全要件又は目的は、1人以上のユーザ、エンティティ、及び/又は組織によって指定することができる。いくつかの例では、安全要件又は目的は、コードがフェイルセーフであるように設計されなければならない、コードの全ての機能障害が検出可能でなければならない、かつ/又は調停されたアクティブ/アクティブ冗長処理経路を使用してセーフティクリティカル機能が実装されなければならないという目的を含むことができる。
【0028】
ビルドコード出力モジュール120は、更新されたビルドコードが許容可能であるかどうかを判定するために、ユーザ及び/又はエンティティによって定義された許容可能リスクのレベルに対してリスク確率を評価するようにプログラムすることができる。いくつかの例では、ビルドコード出力モジュール120は、更新されたビルドコード118が許容可能であることを出力デバイス116上でユーザに警告するようにプログラムすることができる。いくつかの例では、ビルドコード出力モジュール120は、プログラムコード106のそれぞれのビルドの安全性リスクをユーザに示すリスク確率を出力デバイス116上に提供するようにプログラムすることができる。例えば、安全性リスクは、更新されたビルドコード118が、許容可能リスクのレベルに基づいて更新されたビルドコード118が十分な信頼性があるという保証状態を達成したことを示すことができる。いくつかの例では、更新されたビルドコード118の許容可能性は、アプリケーション固有であることができ、したがって安全性リスクは、アプリケーション主導であることができる。例として、(例えば、複数のシミュレーションを実行することによって)ビルドコード112をシミュレーションし、機能的異常が検出されなかった後、安全性リスクは、更新されたビルドコード118が保証状態を達成したことを示すことができる。
【0029】
いくつかの例では、メモリは、コードランタイムシミュレーションエンジン122を含むことができる。コードランタイムシミュレーションエンジン122は、コード開発エンジン114と同時に、又はプログラムコード開発後に実行することができる。コードランタイムシミュレーションエンジン122は、ビルドコード112をシミュレーションして、ビルドコード112内のコーディング失敗(例えば、弱点、異常、欠陥及び/又は同様のもの)を発見するようにプログラムすることができる。コードランタイムシミュレーションエンジン122は、プログラムコード106の開発ライフサイクル中にビルドコード112を受信し、ビルドコード112を処理して、ビルドコード112内のコーディング失敗を識別するために、公称条件、公称外条件、及びストレス条件に基づいてビルドコード112の性能をシミュレーションするようにプログラムすることができる。コードランタイムシミュレーションエンジン122は、プログラムコード106のそれぞれのビルドが許容可能である(例えば、使用するのに安全である)かどうかに関して、ビルドコード出力モジュール120によって判定するためにビルドコード112を評価するようにプログラムすることができる。更なる例として、コードランタイムシミュレーションエンジン122は、(例えば、プログラムコード106が使用される)プログラムコード106のためのプログラムコード環境をモデル化し、モデル化されたプログラムコード環境においてビルドコード112をシミュレーションして、ビルドコード112の挙動及び/又は性能を確認する(例えば、システム障害及び/又は人の損失につながり得るビルドコード112のアクションに対応する潜在的な安全でない挙動を識別する)ようにプログラムすることができる。いくつかの例では、モデル化されたプログラムコード環境は、オペレーティングシステム、アプリケーション層、及びボードサポートパッケージを含むことができる。
【0030】
いくつかの例では、コードランタイムシミュレーションエンジン122は、ビルドコード112の所与の数のシミュレーションに応答してビルドコード出力モジュール120と通信するようにプログラムすることができる。いくつかの例では、ビルドコード112の各シミュレーションの後、コードランタイムシミュレーションエンジン122は、更新されたビルドコード118を提供するために、各シミュレーション中に識別されたコーディング失敗を訂正することによってビルドコード112を更新するようにプログラムすることができる。更なる例では、ビルドコード出力モジュール120は、更新されたビルドコード118を採用してプログラムコード106及び/又はプログラムコードモデル110を更新して、プログラムコード106内の失敗を訂正するようにプログラムすることができる。いくつかの例では、コードランタイムシミュレーションエンジン122は、ビルドコード出力モジュール120に、本明細書に記載される更新されたビルドコード118のリスク確率を計算させるようにプログラムすることができる。いくつかの例では、更新されたビルドコード118のリスク確率は、ビルドコード112の各シミュレーション後に計算され、出力デバイス116上に表示されて、プログラムコード106のそれぞれのビルドに対応する更新されたビルドコード118によってもたらされる安全性リスクに関する連続的な更新をユーザに提供することができる。
【0031】
いくつかの例では、コード開発エンジン114及びコードランタイムシミュレーションエンジン122は、更新されたビルドコード118を提供するために協働するように構成することができる。例えば、コード開発エンジン114は、コーディングエラーを訂正するためにビルドコード112を更新するようにプログラムすることができ、コードランタイムシミュレーションエンジン122は、コーディング失敗を訂正するためにビルドコード112を更新するようにプログラムすることができる。システム100は、コーディングエラー及び/又はコーディング失敗(例えば、失敗、エラー条件、望ましくない挙動など)が訂正された、更新されたビルドコード118を提供するように構成することができる。
【0032】
いくつかの例では、更新されたプログラムコード又は更新されたビルドコード118は、プログラムコード環境で採用することができる。例として、プログラムコード環境は、航空機などのより大きなシステムの一部であり得るコンピューティングシステムなどのシステムに対応することができる。プログラムコード環境に展開されると、システム100は、環境インターフェースモジュール124を採用して、更新されたプログラムコード又は更新されたビルドコード118の実行されたバージョンを受信することができる。いくつかの例では、更新されたプログラムコード又は更新されたビルドコード118の性能(例えば、挙動)は、更新されたプログラムコードがML又はAIアルゴリズムを採用する例などにおいて、変化し得る。更新されたプログラムコードの性能は、更新されたプログラムコード又は更新されたビルドコード118が実行されているときに変化し得るので、更新されたプログラムコード又は更新されたビルドコード118の安全性リスクは変化し得る。
【0033】
環境インターフェースモジュール124は、リリースされたプログラムコード126に対応する更新されたプログラムコード又は更新されたビルドコード118の実行されたバージョンを、受信又は取り出すようにプログラムすることができる。環境インターフェースモジュール124は、リリースされたプログラムコード126がコーディング失敗(例えば、プログラムコード126のリリース後バージョンの許容可能性を低下させる失敗)を含むかどうかを判定するシミュレーションのために、リリースされたプログラムコード126をコードランタイムシミュレーションエンジン122に提供するようにプログラムすることができる。いくつかの例では、環境インターフェースモジュール124は、コードランタイムシミュレーションエンジン122による処理のために、リリースされたプログラムコード126を機械コードからプログラミング言語コードに変換するための逆コンパイラを含むことができる。
【0034】
いくつかの例では、リリースされたプログラムコード126のコーディング失敗は、ビルドコード112に関して本明細書に記載されるのと同じ又は同様の方法で更新されたリリースされたプログラムコードを提供するために、コードランタイムシミュレーションエンジン122によって訂正することができる。ビルドコード出力モジュール120は、更新されたリリースされたプログラムコードが(例えば、プログラムコード環境での)使用に許容可能であるかどうかを判定するために、更新されたビルドコード118に関して本明細書に記載されるものと同じ又は類似して更新されたリリースされたプログラムコードを評価するようにプログラムすることができる。
【0035】
ビルドコード出力モジュール120は、更新されたリリースされたプログラムコードが許容可能であるかどうかを出力デバイス116上でユーザに警告するようにプログラムすることができる。ビルドコード出力モジュール120は、例えば、更新されたフィールドプログラムコードが使用に許容可能であるという判定に応答して、プログラムコードモデル110及び/又はプログラムコード106を更新して、コードランタイムシミュレーションエンジン122によって行われたリリースされたプログラムコード126の1つ以上のコーディング失敗の訂正を反映するために、更新されたリリースされたプログラムコードを採用するようにプログラムすることができる。いくつかの例では、ビルドコード出力モジュール120は、リリースプログラムコード126が実行のために記憶されているコンピューティングシステムと通信し、リリースされたプログラムコード126を更新するようにプログラムすることができる。したがって、いくつかの例では、システム100は、リリースされたプログラムコード126が(例えば、航空機の)コンピューティングシステム上に存在するときに、リリースされたプログラムコード126を更新して、コードランタイムシミュレーションエンジン122によって識別された失敗を訂正することができる。
【0036】
いくつかの例では、ビルドコード出力モジュール120は、更新されたビルドコード118が許容可能リスクで許容可能に安全なCSCIを達成することができるリスク確率に対応する現在の信頼性レベルを計算及び表示するために集約され得る性能パラメータを、出力デバイス116上に表示するためのグラフィカルユーザインターフェース(graphical user interface、GUI)データを生成するようにプログラムすることができる。性能パラメータは、コード開発エンジン114及び/又はコードランタイムシミュレーションエンジン122の各々によって、これらのエンジンが実行されているときに提供される性能データに基づくなど、システム100によって計算することができる。
【0037】
出力デバイス116上に表示される性能パラメータのタイプは、対応するビルド若しくはプログラムコード、及び/又はそのようなコードが採用されるアプリケーションに基づくことができる。例えば、性能パラメータは、成功したシミュレーション(例えば、コードランタイムシミュレーションエンジン122によって実装される)の数、公称シミュレーション及び公称外シミュレーションの分布、ビルドコード112内で発見された欠陥の数、ビルドコード112内の欠陥のタイプ、ビルドコード112に関して(例えば、デッドコードを排除するため、又はデコードを保持するがデッドコードへのジャンプがないことを証明するために)ユーザ入力を必要とする決定点、ビルドコード112が指定通りに実行されるリスクのアセスメント、ビルドコード112が指定通りに実行されないか、又は有害若しくは危険な状況を生成するリスクのアセスメント、ユーザ定義のリスクレベルを達成するために必要とされ得る時間量の推定、及び/又はハザードリスクドライバ(例えば、メモリ制約、スループット、過剰デッドコード、過剰コード標準違反など)を含むことができる。加えて、ビルドコード出力モジュール120は、ユニットレベル、コンピュータソフトウェアユニットレベル、及びコンピュータソフトウェア構成ユニット(computer software configuration unit、CSCU)を含む、コード開発の異なるレベルにおける保証コンプライアンスメトリックを出力デバイス116上に表示するようにプログラムすることができる。したがって、個々のユーザ又はチームは、個人又はチームが開発するように割り当てられた任意の特定のコードにおける信頼性を示す安全性能メトリックを視覚化することができる。
【0038】
これに応じて、システム100を採用して、開発の異なるステージ(例えば、計画段階、解析段階、設計段階、実装段階、並びに/又はテスト及び統合段階)の間にプログラムコード106を評価して、プログラムコード106が許容可能である(例えば、使用するのに安全である)ことを確認又は証明することができる。システム100は、コーディングエラーについてプログラムコード106を評価し、コーディングエラーを訂正するか、又はコーディングエラーに関して出力デバイス116上でユーザに警告し、いくつかの例ではコーディングエラーを訂正するためのソリューションを提供するように構成することができる。いくつかの例では、システム100は、プログラムコード106内のコーディング失敗を識別するために、プログラムコード開発中又はプログラムコード開発後にプログラムコード106をシミュレーションするように構成することができる。システム100は、コーディング失敗を訂正するか、又はコーディング失敗に関して出力デバイス116上でユーザに警告するように構成することができ、いくつかの例では、コーディング失敗を訂正するためのソリューションを提供するように構成することができる。
【0039】
したがって、システム100は、ユーザが、プログラムコード106の開発中にいつでも許容可能性(例えば、安全性リスク)について評価することを可能にする。したがって、ユーザはいつでも、開発中にサブジェクトターゲットコンピュータソフトウェア構成アイテム(CSCI)をフィールドすることができる。したがって、システム100は、リアルタイムプログラムコードの増分定量的アセスメントを可能にする。したがって、システム100は、ソフトウェア証明時間(例えば、コードが安全な方法で意図されたように実行される信頼性を決定論的に定量化するため)及びコストを削減し、プログラムコードが許容可能である精度及び信頼性を改善し、変更及び/又は修正後のプログラムコードの再証明のための時間量を削減し、レガシーコードを許容可能であると証明し、ML/AI技術を採用するプログラムコードを証明することができる。
【0040】
図2は、コードランタイムシミュレーションエンジン200の一例を示す。いくつかの例では、コードランタイムシミュレーションエンジン200は、システム100内で採用することができ、したがって、図1に示すようなコードランタイムシミュレーションエンジン122に対応することができる。したがって、いくつかの例では、図2の例の以下の説明において、図1の例を参照することができる。コードランタイムシミュレーションエンジン122は、ビルドコード202(例えば、図1に示すようなビルドコード112)をシミュレーションして、プログラムコード106のそれぞれのビルドに対応するビルドコード202内のコード失敗(例えば、弱点、異常、欠陥及び/又は同様のもの)を発見するようにプログラムすることができる。コードランタイムシミュレーションエンジン200は、プログラムコードの開発ライフサイクルの間又はその後にビルドコード202を受信し、プログラムコード106の許容可能性を判定するために、ビルドコード202を処理して、公称条件、公称外条件、及びストレス条件に基づいてビルドコード202の性能をシミュレーションするようにプログラムすることができる。
【0041】
場合によっては、プログラムコード106が使用のために容易に利用可能であることが望ましいが、プログラムコード106は、(例えば、プログラムコード証明のための既存の根拠に基づくプロセスを介して)正式に証明されていない場合があり、したがって、プログラムコードがそれぞれのプログラムコード環境での使用にどのように許容可能であり、ひいてはどのように安全であるかが不明である。ユーザ、エンティティ、及び/又は組織は、そのようなプログラムコードがユーザ及び/若しくはエンティティにもたらし得る法的リスクに起因して、又は非証明プログラムコードが使用に安全であるという保証の欠如に起因して、あるコンピューティングシステムにおいて非証明プログラムコードを採用することを望まない場合がある。例えば、いくつかの商用及び軍事飛行用途では、プログラムコード106が許容可能であり、したがってセーフティクリティカルシステムでの使用に安全であると正式に証明される前に、プログラムコード106を使用することが望ましい場合がある。しかしながら、ユーザ又はエンティティは、プログラムコード106が既存のプログラムコード証明規格に従って正式に証明されるまでプログラムコード106が許容可能であるという保証のレベルを有さないので、これは時間がかかり、主観的なプロセスであり、正式な証明プロセスが完了するまで、対応する飛行用途において(例えば、戦闘機において)プログラムコード106を採用することはできない。
【0042】
これらの課題を克服するために、コードランタイムシミュレーションエンジン200を採用して、プログラムコード106のそれぞれのビルドが許容可能であるかどうかを判定するために、正式な証明プロセスの前及び/又はその間にプログラムコード106を評価することができる。コードランタイムシミュレーションエンジン200は、プログラムコード106のそれぞれのビルドが、プログラムコード106に対して定義された許容可能リスクのレベルに準拠するかどうかを判定するために、ビルドコード202をシミュレーションするようにプログラムすることができる。したがって、コードランタイムシミュレーションエンジン200は、ユーザ及び/又はエンティティが許可されると判定したリスクの量にプログラムコード106が準拠するという保証のレベルを提供するようにプログラムすることができる。これに応じて、ユーザ及び/又はエンティティは、プログラムコード106のそれぞれのビルドが許容可能であり、したがって使用するのに安全である(例えば、財産及び/又は人間の生活に害をもたらす失敗を引き起こさない)ことを保証しながら、航空用途などのプログラムコードアプリケーションにおいてプログラムコード106のそれぞれのビルドを容易に採用することができる。
【0043】
いくつかの例では、コードランタイムシミュレーションエンジン200は、コードランタイムプロセス及び制御(code run-time process and control、CRC)モジュール204を含むことができる。CRCモジュール204は、公称シミュレーションモジュール206、ストレスシミュレーションモジュール208、及び非公称シミュレーションモジュール210を制御して、ビルドコード202の性能を(例えば、リアルタイムで)シミュレーションするようにプログラムすることができる。各モジュール206、208、及び208は、ビルドコード202の挙動及び/又は性能を評価するためにビルドコード202をシミュレーションするためのそれぞれのプログラムコード環境をモデル化するようにプログラムすることができる。いくつかの例では、モジュール206、208、及び210の各々についてのシミュレーションの数は、(例えば、入力デバイスにおけるユーザ入力情報に基づいて)CRCモジュール204によって決定することができる。更なる例では、ビルドコード202のシミュレーションのタイプは、CRCモジュール204によって決定することができる。
【0044】
例として、CRCモジュール204は、ビルドコード202のシミュレーション、したがってプログラムコード106のそれぞれのビルドのために、ビルドコード202をシミュレーションモジュール206、208、及び210の各々に提供するようにプログラムすることができる。各シミュレーションモジュール206、208、及び210は、それぞれのシミュレーション環境(例えば、プログラムコード106が使用される、又は使用されているモデル化されたプログラムコード環境)においてビルドコード202をシミュレーションして、ビルドコード202におけるコーディング失敗を判定又は識別するようにプログラムすることができる。各シミュレーションモジュール206、208、及び210によってモデル化されるそれぞれのシミュレーション環境は、それぞれのシミュレーションパラメータデータ212、214、及び216に基づくことができる。それぞれのシミュレーション環境は、プログラムコード106が採用されるべき、ターゲット又は意図された環境に対応することができる。例えば、プログラムコード106がセーフティクリティカルシステム(例えば、航空機、車、兵器システム、医療デバイス、原子力発電所など)で使用される場合、シミュレーションモジュール206、208、及び210は、セーフティクリティカルシステムをモデル化し、モデル化されたセーフティクリティカルシステムにおいてビルドコード202をシミュレーションすることができる。シミュレーションモジュール206、208、及び210の各々は、シミュレーション結果データ218、220、及び222を生成するようにプログラムすることができる。
【0045】
例として、シミュレーション結果データ218、220、及び22は、成功したシミュレーションの数、公称及び公称外シミュレーションの分布、発見された欠陥の数、欠陥のタイプ、ビルドコード202に関して(例えば、デッドコードを排除するため、又はデコードを保持するがデッドコードへのジャンプがないことを証明するために)ユーザ入力を必要とする決定点、ビルドコード202が指定通りに実行されるリスクのアセスメント、ビルドコード202が指定通りに実行されないか、又は有害若しくは危険な状況を生成するリスクのアセスメント、ユーザ定義のリスクレベルを達成するために必要とされ得る時間量の推定、及び/又はハザードリスクドライバ(例えば、メモリ制約、スループット、過剰デッドコード、過剰コード標準違反などを含むことができる。シミュレーション結果データ218、220、及び222は、CRCモジュール204に提供することができる。
【0046】
CRCモジュール204は、シミュレーション結果データ218、220、及び222を評価して、ビルドコード202内のコーディング失敗を識別し、それによって、プログラムコード106のそれぞれのビルドを識別するようにプログラムすることができる。例えば、ビルドコード302が(例えば、モジュール206、208、及び/又は210によってシミュレーションされる)ランタイム条件にさらされるとき、CRCモジュール204は、ランタイム条件を監視し、シミュレーション結果データ218、220、及び22に基づいて潜在的な異常を予測するようにプログラムすることができる。例として、ランタイム中に、変数更新が遅い又は古いことが発見された場合、CRCモジュール204は、コーディング失敗に対応する異常及び異常の原因(例えば、遅い又は古い変数更新)を識別するようにプログラムすることができる。いくつかの例では、CRCモジュール204は、識別された異常を自動的に訂正するか、又はユーザが識別された異常を訂正することを要求するかのうちの1つを行うようにプログラムすることができる。いくつかの例では、変数更新が遅い又は古い理由が、更新タスクが低い優先度に設定されているためである場合、CRCモジュール202は、(例えば、人間と同様に学習された履歴に基づいて)プログラムすることができ、本明細書に記載される、コーディング失敗更新モジュール230からの推奨などに基づいて、更新タスクに対してより高い優先度を推奨することができる。
【0047】
いくつかの例では、モデリング解像度は、モデリング特異性データ224に基づいて指定することができる。モデリング特異性データ224は、CRCモジュール204によって識別された1つ以上のコーディング失敗を引き起こす可能性のある、それぞれのシミュレーション環境をモデリングするためのモデリング詳細のレベルを識別することができる。したがって、いくつかの例では、モデル化されたシミュレーション環境の解像度レベルは、モデリング特異性データ224に基づくことができる。例として、モデリング特異性データ224が、航空機環境においてビルドコード202を検証する際に航空機の環境制御システム(environment control system、ECS)がモデリングされないことを示す場合、少なくとも1つのシミュレーションモジュール206、208、及び210は、ECSなしでプログラムコードを実行するためのセーフティクリティカルシステムを用いて航空機環境をモデリングするようにプログラムすることができる。いくつかの例では、シミュレーションモジュール206、208、及び210の各々は、モデリング特異性データ224に基づく異なる特異性の程度に従って、そのそれぞれのシミュレーション環境をモデリングするようにプログラムすることができる。
【0048】
いくつかの例では、CRCモジュール204は、シミュレーションモジュール206、208、及び210に、順次構成又はループ構成でビルドコード202をシミュレーションさせ、各モジュールシミュレーションに続いて、後続のモジュールシミュレーションの前にそれぞれのシミュレーションモジュールによって識別された1つ以上のコーディング失敗を訂正させるようにプログラムすることができる。例えば、CRCモジュール204が、公称シミュレーションモジュール206によって提供されたシミュレーション結果データ218に基づいて、ビルドコード202内のコーディング失敗の第1のセットを識別した場合、ビルドコード202内のコーディング失敗のこの第1のセットは、ストレスシミュレーションモジュール208によるビルドコード202のシミュレーションの前に訂正することができる。いくつかの例では、CRCモジュール204が、ストレスシミュレーションモジュール208によって提供されたシミュレーション結果データ220に基づいて、ビルドコード202内の失敗の第2のセットを識別した場合、ビルドコード202内の失敗のこの第2のセットは、ストレスシミュレーションモジュール206によるビルドコード202のシミュレーションの前に訂正することができる。更なる例では、CRCモジュール204が、非公称シミュレーションモジュール210によって提供されたシミュレーション結果データ222に基づいてビルドコード202内の失敗の第3のセットを識別した場合、ビルドコード202内の失敗のこの第3のセットは、本明細書に記載されるのと同じ又は同様の方法で、公称シミュレーションモジュール206によるビルドコード202のシミュレーションの前に訂正することができる。
【0049】
例として、公称シミュレーションモジュール206は、公称シミュレーションパラメータデータ212に基づいてそれぞれのモデル化された環境においてビルドコード202をシミュレーションするようにプログラムすることができる。公称シミュレーションパラメータデータ212は、MLシミュレーションパラメータアルゴリズム226によって提供することができる。MLシミュレーションパラメータアルゴリズム226は、ビルドコード202のシミュレーションのためのそれぞれのシミュレーション環境を構成するために、各モジュール206、208、及び210のシミュレーションパラメータを提供する(例えば、推奨する)ようにプログラムすることができる。MLシミュレーションパラメータアルゴリズム226は、シミュレーションパラメータトレーニングデータに基づいてトレーニングすることができる。
【0050】
いくつかの例では、公称シミュレーションパラメータデータ212は、プログラムコードがシミュレーションされるべき公称条件(例えば、プログラムコードの通常動作条件)に従ってそれぞれの環境をモデル化するための、公称条件データ及び/又はパラメータを含むことができる。いくつかの例では、公称シミュレーションパラメータデータ212は、システムの要素が設計通りに動作し、動作及び環境要因が計画及び予測通りになるように、それぞれの環境(例えば、航空機用途)の要素を特徴付けることができる。
【0051】
いくつかの例では、MLシミュレーションパラメータアルゴリズム226は、学習されたシミュレーションパラメータ228のライブラリに基づいて公称シミュレーションパラメータデータ212を決定するようにプログラムすることができる。学習されたシミュレーションパラメータのライブラリ228は、以前のシミュレーション結果に基づいて開発されたシミュレーションパラメータ知識のライブラリに対応することができる。したがって、学習されたシミュレーションパラメータのライブラリは、モデル化されたプログラムコード環境のパラメータ及びシミュレーション結果データ(例えば、MLシミュレーションパラメータアルゴリズム226によって推奨された以前のシミュレーションパラメータが、シミュレーションされたプログラムコードにおけるコーディング失敗をもたらしたかどうか)を構成するために、前のシミュレーションパラメータ(例えば、以前の公称、ストレス、及び/又は非公称シミュレーションパラメータ)を特徴付けることができる。
【0052】
公称シミュレーションパラメータデータ212に基づく公称シミュレーションモジュール206による各シミュレーション(例えば、エピック)に続いて、CRCモジュール204は、シミュレーション結果データ218及び公称シミュレーションパラメータデータ212を、学習されたシミュレーションパラメータ228のライブラリの一部として記憶するようにプログラムすることができ、その結果、後続のシミュレーションのために、MLシミュレーションパラメータアルゴリズム226は、更新された公称シミュレーションパラメータデータを提供することができる。したがって、各シミュレーションに続いて、CRCモジュール204は、MLシミュレーションパラメータアルゴリズム226が教師なし学習を介して再実施され得るように、各識別された失敗を公称シミュレーションパラメータデータ212と関連付け、その関連付けを、学習されたシミュレーションパラメータ228のライブラリ内に又はその一部として記憶するようにプログラムすることができる。
【0053】
MLシミュレーションパラメータアルゴリズム226は、CRCモジュール204によって、更新された公称シミュレーションパラメータデータとして公称シミュレーションモジュール206に提供され得るシミュレーションパラメータの後続の決定(例えば、推奨)のために、学習されたシミュレーションパラメータの再実施されたライブラリを採用するようにプログラムすることができる。公称シミュレーションモジュール206は、更新された公称シミュレーションパラメータデータに基づいてそれぞれの環境をモデル化してビルドコード202をシミュレーションし、ビルドコード202内に追加のコーディング失敗が存在するかどうかを判定するようにプログラムすることができる。追加の失敗は、(例えば、CRCモジュール204によって)発見された場合、本明細書に記載されるのと同じ又は同様の方法で処理することができる。したがって、公称シミュレーションモジュール206における後続のシミュレーションは、MLシミュレーションパラメータアルゴリズム226が、公称シミュレーションモジュール206におけるビルドコード202内の更なるコーディング失敗につながる可能性がより高い公称シミュレーションパラメータを識別するようにプログラムすることができるように、以前に学習されたイベントに基づいて修正することができる。
【0054】
更なる例として、ストレスシミュレーションモジュール208は、ストレスシミュレーションパラメータデータ214に基づいてそれぞれのモデル化された環境においてビルドコード202をシミュレーションするようにプログラムすることができる。ストレスシミュレーションパラメータデータ214は、MLシミュレーションパラメータアルゴリズム226によって提供することができる。ストレスシミュレーションパラメータデータ214は、ビルドコード202がシミュレーションされるべきストレス影響条件に従ってそれぞれの環境をモデル化するための、ストレス条件データ及び/又はパラメータ(例えば、それぞれのコードについてタイミング要件が依然として保存されることを保証するために増加及び監視され得る異なるシナリオを作成するためのストレステスト)に対応することができる。いくつかの例では、ストレスシミュレーションパラメータデータ214は、それぞれの環境において作用し得るストレス条件を特徴付けることができ、そのうちのいくつかは、ビルドコード202の性能又は挙動に影響を及ぼし得る。
【0055】
いくつかの例では、MLシミュレーションパラメータアルゴリズム226は、学習されたシミュレーションパラメータ228のライブラリに基づいてストレスシミュレーションパラメータデータ214を決定するようにプログラムすることができる。ストレスシミュレーションパラメータデータ214に基づくストレスシミュレーションモジュール208による各シミュレーション(例えば、エピック)に続いて、CRCモジュール204は、学習されたシミュレーションパラメータ228のライブラリの一部としてシミュレーション結果データ220を記憶するようにプログラムすることができ、その結果、後続のシミュレーションのために、MLシミュレーションパラメータアルゴリズム226は、更新されたストレスシミュレーションパラメータデータを提供することができる。したがって、各シミュレーションに続いて、CRCモジュール204は、MLシミュレーションパラメータアルゴリズム226が教師なし学習を介して再実施されるように、各識別された失敗をストレスシミュレーションパラメータデータ214と関連付け、その関連付けを、学習されたシミュレーションパラメータ228のライブラリ内に又はその一部として記憶するようにプログラムすることができる。
【0056】
MLシミュレーションパラメータアルゴリズム226は、CRCモジュール204によって、更新されたストレスシミュレーションパラメータデータとしてストレスシミュレーションモジュール208に提供され得るストレスシミュレーションパラメータの後続の決定(例えば、推奨)のために、学習されたシミュレーションパラメータの再実施されたライブラリを採用するようにプログラムすることができる。ストレスシミュレーションモジュール208は、更新されたストレスシミュレーションパラメータデータに基づいてそれぞれの環境をモデル化してビルドコード202をシミュレーションし、ビルドコード202内に追加のコーディング失敗が存在するかどうかを判定するようにプログラムすることができる。追加のコーディング失敗は、(例えば、CRCモジュール204によって)発見された場合、本明細書に記載されるのと同じ又は同様の方法で処理され得る。したがって、ストレスシミュレーションモジュール208における後続のシミュレーションは、MLシミュレーションパラメータアルゴリズム226が、ビルドコード202における更なる失敗につながる可能性がより高いストレスシミュレーションパラメータを選択又は識別するようにプログラムすることができるように、以前に学習されたイベントに基づいて修正することができる。
【0057】
更なる例として、非公称シミュレーションモジュール210は、非公称シミュレーションパラメータデータ216に基づいてそれぞれのモデル化された環境においてビルドコード202をシミュレーションするようにプログラムすることができる。非公称シミュレーションパラメータデータ216は、MLシミュレーションパラメータアルゴリズム226によって提供することができる。非公称シミュレーションパラメータデータ216は、シミュレーション中にビルドコード202に影響を与え得るランダム条件に従ってそれぞれの環境をモデル化するための、公称外データ及び/又はパラメータに対応することができる。いくつかの例では、非公称シミュレーションパラメータデータ216は、システムの要素が設計通りに動作しているが、動作及び環境要因が計画又は予測通りではないように、それぞれの環境(例えば、航空機用途)の要素を特徴付けることができる。例えば、公称外データ及び/又はパラメータは、負の姿勢に対応することができ、シミュレーションの結果として負の姿勢が発見された場合、コードランタイムシミュレーションエンジン200は、これを公称外条件としてフラグを立てることができる。何が公称外又は非公称であるかについての初期ルールは、学習されたシミュレーションパラメータ228のライブラリに基づいて生成することができる。しかしながら、コードランタイムシミュレーションエンジン200が、レポートがユーザに提供されるますます多くのシミュレーションにさらされるにつれて、ユーザが追加の公称外条件を定義するにつれて、コードランタイムシミュレーションエンジン200は、この経験から学習することができる。したがって、コードランタイムシミュレーションエンジン200は、負の高度が異常である場合、負の対気速度も異常であるはずであり、負のコンパス方位も公称外の異常であるはずであると結論付けることができる。
【0058】
いくつかの例では、MLシミュレーションパラメータアルゴリズム226は、学習されたシミュレーションパラメータ228のライブラリに基づいて非公称シミュレーションパラメータデータ216を決定するようにプログラムすることができる。非公称シミュレーションパラメータデータ216に基づく非公称シミュレーションモジュール210による各シミュレーション(例えば、エピック)に続いて、CRCモジュール204は、学習されたシミュレーションパラメータ228のライブラリの一部としてシミュレーション結果データ222を記憶するようにプログラムすることができ、その結果、後続のシミュレーションのために、MLシミュレーションパラメータアルゴリズム226は、更新された非公称シミュレーションパラメータデータを提供するようにプログラムすることができる。したがって、各シミュレーションに続いて、CRCモジュール204は、MLシミュレーションパラメータアルゴリズム226が教師なし学習を介して再実施されるように、各識別された失敗を非公称シミュレーションパラメータデータ216と関連付け、その関連付けを、学習されたシミュレーションパラメータ228のライブラリ内に又はその一部として記憶するようにプログラムすることができる。
【0059】
いくつかの例では、MLシミュレーションパラメータアルゴリズム226は、CRCモジュール204によって、更新された非公称シミュレーションパラメータデータとして非公称シミュレーションモジュール210に提供され得る非公称シミュレーションパラメータの後続の決定(例えば、推奨)のために、学習されたシミュレーションパラメータの再実施されたライブラリを採用するようにプログラムすることができる。非公称シミュレーションモジュール210は、更新された非公称シミュレーションパラメータデータに基づいてそれぞれの環境をモデル化してビルドコード202をシミュレーションし、ビルドコード202内に追加のコーディング失敗が存在するかどうかを判定するようにプログラムすることができる。追加の失敗は、(例えば、CRCモジュール204によって)発見された場合、本明細書に記載されるのと同じ又は同様の方法で処理することができる。したがって、非公称シミュレーションモジュール210における後続のシミュレーションは、MLシミュレーションパラメータアルゴリズム226が、非公称シミュレーションモジュール210におけるビルドコード202内の更なるコーディング失敗につながる可能性がより高い非公称シミュレーションパラメータを選択又は識別するようにプログラムすることができるように、以前に学習されたイベントに基づいて修正することができる。
【0060】
本明細書に記載される例では、単一のMLシミュレーションパラメータアルゴリズム及び学習されたシミュレーションパラメータの対応するライブラリが、シミュレーションパラメータ推奨のために採用されるが、他の例では、それぞれのMLシミュレーションパラメータアルゴリズム及びライブラリが、各シミュレーションモジュール206、208、及び210のために採用されることができる。したがって、いくつかの例では、第1のMLシミュレーションパラメータアルゴリズム及び学習されたシミュレーションパラメータの第1のライブラリを採用して、公称シミュレーションモジュール206のための公称シミュレーションパラメータデータ212を提供することができ、第2のMLシミュレーションパラメータアルゴリズム及び学習されたシミュレーションパラメータの第2のライブラリを採用して、ストレスシミュレーションモジュール208のためのストレスシミュレーションパラメータデータ214を提供することができ、第3のMLシミュレーションパラメータアルゴリズム及び学習されたシミュレーションパラメータの第3のライブラリを採用して、非公称シミュレーションモジュール210のための非公称シミュレーションパラメータデータ216を提供することができる。
【0061】
いくつかの例では、少なくとも1つの失敗が、それぞれのシミュレーション結果データ218、220、又は222に基づいてCRCモジュール204によって発見された場合、CRCモジュール204は、コード失敗更新(code failure update、CFU)モジュール230と通信するようにプログラムすることができる。いくつかの例では、CFUモジュール230は、学習されたコーディング失敗ソリューションのライブラリ232と通信するようにプログラムすることができる。学習されたコーディング失敗ソリューションのライブラリ232は、開発されたコード更新知識のライブラリに対応することができる。したがって、学習されたコーディング失敗ソリューションのライブラリ232は、CFUモジュール230によって実装された以前のコード失敗ソリューション(例えば、訂正、変更、修正など)を特徴付けることができる。学習されたコーディング失敗ソリューションのライブラリ232は、(例えば、プログラムコード106又は他のプログラムコード、ビルドコード202、及び/他のビルドコードに関連付けられた)1つ以上の以前のビルドコード内の1つ以上の以前のコーディング失敗と、発見された失敗を訂正するために実装するための関連付けられた更新(例えば、ソリューション)とを識別することができる。
【0062】
CFUモジュール230は、発見された失敗を訂正するための失敗訂正ソリューションを識別するために、発見された失敗に基づいて、学習されたコーディング失敗ソリューションのライブラリ232に問い合わせるようにプログラムすることができる。CFUモジュール230は、失敗訂正ソリューションに基づいて、ビルドコード202を更新して、発見された失敗を訂正し、更新されたビルドコード234を提供するようにプログラムすることができる。したがって、いくつかの例では、ビルドコード202内の発見された失敗は、学習されたコーディング失敗ソリューションのライブラリ232に基づいてCFUモジュール230によって更新することができる。いくつかの例では、発見された失敗が新しい失敗であり、したがって、学習されたコーディング失敗ソリューションのライブラリ232によって識別されなかった場合、CFUモジュール230は、発見された失敗の手動訂正のために出力デバイス116上で(例えば、ユーザがアクセスすることができるディスプレイ上で)ユーザに警告するようにプログラムすることができる。
【0063】
更なる例として、学習されたコーディング失敗ソリューションのライブラリ232は、MLコード失敗訂正(ML code failure correction、ML-CFC)アルゴリズム236と通信することができる。いくつかの例では、ML-CFCアルゴリズム236は、学習されたコーディング失敗ソリューションのライブラリ232を含むことができる。ML-CFCアルゴリズム236は、学習されたコーディング失敗ソリューションのライブラリ232に基づいて、ビルドコード202内のコーディング失敗の訂正(例えば、ソリューション)を識別するようにプログラムすることができる。いくつかの例では、ML-CFCアルゴリズム236は、更新されたビルドコード234を提供するために、学習されたコーディング失敗ソリューションのライブラリ232に基づいて、発見された失敗を訂正するための失敗訂正ソリューションを識別するようにプログラムすることができる。
【0064】
いくつかの例では、対応するシミュレーションモジュール206、208、及び210によるそれぞれのシミュレーションに続いて、CFUモジュール230は、対応するシミュレーションモジュール206、208、及び210又は異なるシミュレーションモジュール206、208、及び210による後続のシミュレーションのために、更新されたビルドコード234をCRCモジュール204に提供するようにプログラムすることができる。いくつかの例では、CRCモジュール204は、コーディング失敗が訂正されたかどうかを判定するために、対応するシミュレーション結果データ218、220、及び222を評価するようにプログラムすることができる。CFUモジュール230は、失敗訂正ソリューションに基づいて失敗が訂正されたかどうかの評価に基づいて、教師なし学習を介してML-CFCアルゴリズム236を再実施するために、学習されたコーディング失敗ソリューションのライブラリ232を更新するようにプログラムすることができる。いくつかの例では、対応するシミュレーションモジュール206、208、及び210によるそれぞれのシミュレーションに続いて、CFUモジュール230は、対応するシミュレーションモジュール206、208、及び210又は異なるシミュレーションモジュール206、208、及び210による後続のシミュレーションのために、更新されたビルドコード234をCRCモジュール204に提供するようにプログラムすることができる。したがって、ビルドコード202は、コーディング失敗を訂正するために更新することができ、更新されたビルドコード234は、MLシミュレーションパラメータアルゴリズム226によって提供される更新されたシミュレーションパラメータに基づいて、追加のコーディング失敗について、対応するシミュレーションモジュール206、208、及び210によってシミュレーションすることができる。
【0065】
いくつかの例では、CFUモジュール230は、コード更新要求238を生成するようにプログラムすることができる。コード更新要求238は、発見された失敗を識別することができる。コード更新要求238は、更新されたビルドコード234を提供するためのビルドコード202の手動更新(例えば、訂正)のために、ユーザに(例えば、出力デバイス116上で)提供することができる。例えば、CFUモジュール230は、出力デバイス116上でコード更新要求238とともにGUI出力データを提供するようにプログラムすることができるGUI生成器を含むことができる。GUI出力データは、発見された失敗を訂正するためにユーザが対話することができる要素を含むことができる。
【0066】
いくつかの例では、CRCモジュール204は、コード失敗訂正結果データ240を生成するようにプログラムすることができる。コード失敗訂正結果データ240は、ビルドコード202において訂正され、かつ/又は訂正されていないコーディング失敗のタイプと数値コーディング失敗とを示すことができる。CRCモジュール204は、更新されたビルドコード234、したがってプログラムコード106の許容可能性を判定するなどの更なる処理のために、コード失敗訂正結果データ240をビルドコード出力モジュール120に通信するようにプログラムすることができる。したがって、コードランタイムシミュレーションエンジン200は、プログラムコード106のソフトウェア開発中又はソフトウェア開発後にプログラムコード106内のコーディング失敗を訂正するようにプログラムすることができる。
【0067】
図3は、コード開発エンジン300の一例を示す。いくつかの例では、コード開発エンジン300は、システム100内で採用することができ、したがって、図1に示すコード開発エンジン114に対応することができる。したがって、図3の例の以下の説明において、図1図2の例を参照することができる。コード開発エンジン300は、開発中にプログラムコード106を評価して、プログラムコード106がプログラムコード106に対して定義された開発標準を満たすかどうかを判定するようにプログラムすることができる。したがって、プログラムコードアプリケーション(例えば、プログラムコード106が、航空機などのセーフティクリティカル環境、銀行システムなどのセキュリティクリティカル環境などで使用されるかどうか)に基づいて、コード開発エンジン300は、開発中にプログラムコード106を評価し、1人以上のユーザに推奨を提供するように、又は、いくつかの例では、開発標準に準拠するようにプログラムコード106を更新するようにプログラムすることができる。
【0068】
いくつかの例では、コード開発エンジン300は、プログラムコード106のそれぞれのビルドのビルドコード302を受信するようにプログラムすることができる。コード開発エンジン300は、コード評価モジュール304を採用することができる。コード評価モジュール304は、ML開発標準(ML development standard、ML-DS)アルゴリズム306と通信するようにプログラムすることができる。ML-DSアルゴリズム306は、ビルドコード302がビルドコード開発標準に準拠するかどうかを判定するために、開発標準トレーニングデータに基づいてトレーニングすることができる。いくつかの例では、ML-DSアルゴリズム306は、エンティティ、ユーザ(例えば、開発者)のグループ、ビルドコード環境(例えば、航空機用途)のためのビルドコード標準に基づいてトレーニングされる。ML-DSアルゴリズム306は、学習されたコード開発標準のライブラリ308に基づいて、ビルドコード302がビルドコード開発標準に準拠するかどうかを判定するようにプログラムすることができる。学習されたコード開発標準のライブラリ308は、ビルドコード開発標準を特徴付けることができる。いくつかの例では、学習されたコード開発標準のライブラリ308は、プログラムコード106の開発のためのルールのセットを含み得る最良のコーディング実践を特徴付けることができる。したがって、いくつかの例では、学習されたコード開発標準のライブラリ306によって定義されるビルドコード開発標準は、プログラムコード106の仕様、プログラムコード106を開発するための1つ以上の実践、テスト、及び/又は標準を含むことができる。追加の例では、学習されたコード開発標準のライブラリ306によって定義されるビルドコード開発標準は、プログラムコード106の信頼性、堅牢性、セキュリティ、及び/又は安全性に関する正しい、好ましい、及び/又はソフトウェア開発実践を含むことができる。
【0069】
ML-DSアルゴリズム306は、学習されたコード開発標準のライブラリ306に基づいて、ビルドコード302内のコーディングエラーについてビルドコード302を評価するようにプログラムすることができる。コーディングエラーとして、シンタックスエラー、ランタイムエラー、ロジックエラー、合併エラー、算術エラー、リソースエラー、インターフェースエラー、機能エラー、衝突、競合状態、変数割り当てエラー、バッファオーバーランなどを挙げることができる。いくつかの例では、コーディングエラーとして、ビルドコード302、したがってプログラムコード106の安全性に影響を及ぼし得る他のソフトウェアエラーを挙げることができる。ML-DSアルゴリズム306は、学習されたコード開発標準のライブラリ308に基づいて、既知の履歴エラー及び/又は望ましくない特性についてビルドコード302を評価するようにプログラムすることができる。例えば、学習が増加するにつれて、望ましくない特性についての知識は増加されることができる。ビルドコード302は、CPU利用に関して可能な限り多くの追加の帯域幅を可能にするように最適化することができる。例として、2つ以上の入力及び/又は出力を有するコードモジュールは、望ましくない可能性がある。いくつかの例では、セーフティクリティカル機能に関連するユーザ修正された構成可能パラメータは、権限制限が確立されていない限り許可されるべきではなく、望ましくない可能性がある。ML-DSアルゴリズム306は、各識別された(例えば、発見された)コーディングエラーを、訂正のためにコード評価モジュール304に通信するようにプログラムすることができる。
【0070】
いくつかの例では、コード評価モジュール304は、コード更新訂正(code update correction、CUC)モジュール310と通信するようにプログラムすることができる。CUCモジュール310は、ビルドコード302内の各発見されたコーディングエラーを識別するコーディングエラー情報を受信するようにプログラムすることができる。CUCモジュール310は、MLコードエラー訂正(ML code error correction、ML-CEC)アルゴリズム316と通信するようにプログラムすることができる。いくつかの例では、ML-CECアルゴリズム316は、学習されたコーディングエラーソリューションのライブラリ312と通信することができる。学習されたコーディングエラーソリューションのライブラリ312は、開発されたコード訂正知識のライブラリに対応することができる。したがって、学習されたコーディングエラーソリューションのライブラリ312は、プログラムコード及び/又はビルドコード内のコーディングエラーのための前のエラー訂正ソリューション(例えば、更新、変更、修正など)を特徴付けることができる。
【0071】
いくつかの例では、ML-CECアルゴリズム316は、更新されたビルドコード314を提供するために、学習されたコーディング訂正のライブラリ312に基づいて、ビルドコード302内の各発見されたコーディングエラーを訂正するためのエラー訂正ソリューションを識別する(例えば、推奨する)ようにプログラムすることができる。CUCモジュール310は、ビルドコード302を更新して各発見されたエラーを訂正し、識別されたエラー訂正ソリューションに基づいて、更新されたビルドコード314を提供するようにプログラムすることができる。したがって、ビルドコード302内の発見されたコーディングエラーは、ML-CECアルゴリズム316によって推奨されるエラー訂正ソリューションに基づいて、CUCモジュール310によって更新することができる。
【0072】
いくつかの例では、発見されたコードエラーが新しいコーディングエラーであり、したがって、学習されたコーディングエラーソリューションのライブラリ312によって識別されない場合、CUCモジュール310は、新しいコーディングエラーの手動訂正のために(例えば、出力デバイス116上で)ユーザに警告するようにプログラムすることができる。いくつかの例では、CUCモジュール310は、発見されたエラーに対するエラー訂正ソリューションについて出力デバイス116上でユーザに警告するようにプログラムすることができ、ユーザは、エラー訂正ソリューションを評価して、発見されたエラーを訂正するためにエラー訂正ソリューションを使用すべきか、又は代替のエラー訂正ソリューションを採用すべきかを判定することができる。いくつかの例では、コード評価モジュール304は、更新されたビルドコード314をML-DSアルゴリズム306に提供するようにプログラムすることができる。ML-DSアルゴリズム306は、追加のコーディングエラーについて更新されたビルドコード314を評価するようにプログラムすることができる。いくつかの例では、訂正された発見されたエラーは、更新されたビルドコード314に、追加のコーディングエラーを提示させる可能性がある。ML-DSアルゴリズム306は、本明細書に記載されるのと同じ又は同様の方法で、追加のコーディングエラーを、訂正のために発見するようにプログラムすることができる。
【0073】
いくつかの例では、コード評価モジュール304は、発見されたコーディングエラーが訂正されたかどうかの表示をCUCモジュール310に提供するようにプログラムすることができる。例えば、ML-DSアルゴリズム306が、追加のコーディングエラーに対する更新されたビルドコード314の評価において発見されたエラーを識別しない場合、CUCモジュール310は、将来のコーディングエラー訂正に対するML-CECアルゴリズム316の学習を強化するようにプログラムすることができる。CUCモジュール310は、ML-CECアルゴリズム316が教師なし学習を介して再実施されるように、学習されたコーディングエラーソリューションのライブラリ312を更新して、発見されたコーディングエラーに対するエラー訂正ソリューションを含むようにプログラムすることができる。
【0074】
いくつかの例では、コード評価モジュール304は、ビルドコード302を静的コードテストモジュール318に通信するようにプログラムすることができる。静的コードテストモジュール318は、静的解析手法を適用して(例えば、ビルドコード302を実行することなく)ビルドコード302を検査するようにプログラムすることができる。静的コードテストモジュール318は、ビルドコード302を評価して、ビルドコード302が、プログラミングエラーを含むかどうか、コーディング標準に違反するかどうか(例えば、ビルドコード302が、様々なコンストラクトにおけるインデント数、スペース/タブの使用及び/又は同様のものなどの、ビルドコード302のために定義されたコーディングフォーマットに違反するかどうか)、未定義の値、シンタックス違反、セキュリティ脆弱性及び/若しくは同様のものを有するかどうか、を判定するようにプログラムすることができる。
【0075】
静的コードテストモジュール318は、静的コード解析に基づいて識別されたビルドコード302内のコーディングエラーを特徴付ける静的コード評価コーディングエラー情報を、コード評価モジュール304に通信するようにプログラムすることができる。静的コード解析に基づいて識別されたビルドコード302内のコーディングエラーは、静的識別コーディングエラーと呼ぶことができる。コード評価モジュール304は、学習されたコード開発標準のライブラリ308が、教師なし学習を介して再実施されるように、静的コード評価コーディングエラー情報に基づいて、学習されたコード開発標準のライブラリ308を更新するようにプログラムすることができる。したがって、学習されたコード開発標準のライブラリ308は、ML-DSアルゴリズム306が、後続のビルドコード標準開発評価において静的に識別されたコーディングエラーを識別する(例えば、発見する)ようにプログラムすることができるように、静的に識別されたコーディングエラーに基づく静的コードテストルールを含むように更新することができる。
【0076】
いくつかの例では、コード評価モジュール304は、静的に識別されたコーディングエラーを、CUCモジュール310に通信するようにプログラムすることができる。CUCモジュール310は、更新されたビルドコード314を提供するために、ML-CECアルゴリズム316を採用して、学習されたコーディングエラーソリューションのライブラリ312に基づいてエラー訂正ソリューションを識別するようにプログラムすることができる。CUCモジュール310は、エラー訂正ソリューションに基づいて、ビルドコード302を更新してビルドコード302内の静的に識別されたコーディングエラーを訂正し、更新されたビルドコード314を提供するようにプログラムすることができる。いくつかの例では、CUCモジュール310は、静的に識別されたコーディングエラーに関して出力デバイス116上でユーザに警告し、静的に識別されたコーディングエラーを訂正するためにユーザがビルドコード302を訂正することを可能にするようにプログラムすることができ、したがって、更新されたビルドコード314が提供されるようにすることができる。更なる例では、CUCモジュール310は、静的に識別されたコーディングエラーを訂正する際にユーザを支援するために、エラー訂正ソリューションを出力デバイス上に出力するようにプログラムすることができる。
【0077】
いくつかの例では、コード評価モジュール304は、ビルドコード302内の静的に識別されたコーディングエラーが訂正されたかどうかの表示をCUCモジュール310に提供するようにプログラムすることができる。例えば、ML-DSアルゴリズム306が、(例えば、コーディングエラーについて)更新されたビルドコード314の後続の評価において、静的に識別されたコーディングエラーを識別しない場合、CUCモジュール310は、ML-CECアルゴリズム316の学習を強化するようにプログラムすることができる。CUCモジュール310は、ML-CECアルゴリズム316の学習が教師なし学習を介して再実施されるように、学習されたコーディングエラーソリューションのライブラリ312を更新して、静的に識別されたコーディングエラーを含むようにプログラムすることができる。
【0078】
いくつかの例では、コード評価モジュール304は、ビルドコード302をコードカバレッジテストモジュール320に通信するようにプログラムすることができる。コードカバレッジテストモジュール320は、コードカバレッジ解析手法を適用して、テストケースに基づいてビルドコード302を検査し、ビルドコード302の実行中に行使された又は行使されなかったビルドコード302の量を決定するようにプログラムすることができる。各テストケースは、学習されたテストケースのライブラリ322に記憶することができる。学習されたテストケースのライブラリ322に記憶された各テストケースは、テスト目的(例えば、特定のプログラムパスを行使するため、又は仕様要件への準拠を検証するため)を達成するためのビルドコード302に対する入力、実行条件、テスト手順、及び/又は予想される結果の仕様を識別することができる。いくつかの例では、学習されたテストケースのライブラリは、ビルドコード302の要件が満たされていることを検証するための正式に定義されたテストケース、及び/又はビルドコード302が同様のクラスのビルドコードとして期待通りに動作していることを検証するための非公式に定義されたテストケースを含むことができる。
【0079】
コードカバレッジテストモジュール320は、学習されたテストケースのライブラリ322からのそれぞれのテストケースに従って実行中にビルドコード302を評価する(例えば、監視する)ようにプログラムすることができる。コードカバレッジテストモジュール320は、コードカバレッジレポートデータを提供するようにプログラムすることができる。コードカバレッジレポートデータは、関数カバレッジ情報(例えば、ビルドコード302内のいくつの関数が実行されたか)、ステートメントカバレッジ情報(例えば、ビルドコード302内のいくつのステートメントが実行されたかの情報)、分岐カバレッジ情報(例えば、ビルドコード302内のいくつの分岐が実行されたか)、条件カバレッジ情報(例えば、ビルドコード302内のいくつのブール式が真及び偽の値についてテストされたか)、ラインカバレッジ情報(例えば、ビルドコード302のコードのいくつのラインがテストされたか)、修正条件/決定カバレッジ(modified condition/decision coverage、MCDC)、エッジカバレッジ(例えば、制御フローグラフのいくつのエッジが実行されたか)などを含むことができる。
【0080】
コードカバレッジテストモジュール320は、コードカバレッジレポートデータをコード評価モジュール304に通信するようにプログラムすることができる。コード評価モジュール304は、コードカバレッジレポートデータに基づいてビルドコード302内の異常の第1のセット(例えば、1つ以上の異常)を識別するようにプログラムすることができる。異常の第1のセットは、ビルドコード302内の異常を引き起こすコーディングエラーを識別するために、エラー異常データベースに対してコード評価モジュール304によって評価され得る。ビルド302内の異常を引き起こすコーディングエラーは、コードカバレッジ識別されたコーディングエラーと呼ぶことができる。
【0081】
例として、コード評価モジュール320は、開発中に、又はユーザがリスクアセスメントのためにシステムに要求を行う評価プロセスの任意の時点で、ビルドコード302の「ステートメントカバレッジ」アセスメントを連続的に行うようにプログラムすることができる。コード評価モジュール320がビルドコード320の連続的な「ステートメントカバレッジ」アセスメントを実行すると、デッドコードが発見され得る。CUCモジュール310は、機能的影響がないことを保証するためのシミュレーションが後に続くデッドコードを除去するようにプログラムすることができる。いくつかの例では、コード評価モジュール320は、デッドコードへのジャンプがないことを保証することを選択するようにプログラムすることができる。コード評価モジュール320は、デッドコードへの全てのジャンプが排除されたという信頼性に基づいて、デッドコードを除去するか又はデッドコードを保持するかのいずれかの選択肢を、出力デバイス116を介してユーザに報告するようにプログラムすることができる。コード評価モジュール320は、ユーザ決定を覚え、これを学習されたコーディングエラーソリューションのライブラリ312に記憶するようにプログラムすることができる。ステートメントカバレッジを介して将来のデッドコード評価を評価するとき、コード評価モジュール320は、ジャンプが除去されたという信頼性を持ってコードを保持するのではなく、デッドコードを除去することをユーザが好むことを学習する。したがって、コード評価モジュール320は、ここで、プログラムコード106が変化する(例えば、進化する)につれて、デッドコードを検出及び排除することを知る。
【0082】
コーディング異常データベースは、異常と、識別された異常を引き起こし得るそれぞれのコーディングエラーとを識別することができる。コード評価モジュール↓304は、学習されたコード開発標準のライブラリ308が教師なし学習を介して再実施されるように、コードカバレッジ識別されたコーディングエラーに基づいて、コードカバーカバレッジテストルールを含むように、学習されたコード開発標準のライブラリ308を更新するようにプログラムすることができる。したがって、ML-DSアルゴリズム306は、カバーカバレッジテストルールに基づいて、(例えば、プログラムコード又は異なるプログラムコードの)ビルドコード内のコードカバレッジ識別されたコーディングエラーを識別する(例えば、発見する)ようにプログラムすることができる。
【0083】
いくつかの例では、コード評価モジュール304は、コードカバレッジ識別されたコーディングエラーをCUCモジュール310に通信するようにプログラムすることができる。CUCモジュール310は、更新されたビルドコード314を提供するために、学習されたコーディング訂正のライブラリ312に基づいて、コードカバレッジ識別されたコーディングエラーに対するエラー訂正ソリューションを識別するために、ML-CECアルゴリズム316を採用するようにプログラムすることができる。いくつかの例では、CUCモジュール310は、コードカバレッジ識別されたコーディングエラーに関して出力デバイス116上でユーザに警告し、コードカバレッジ識別されたコーディングエラーを訂正するためにユーザがビルドコード302を訂正することを可能にするようにプログラムすることができ、したがって、更新されたビルドコード314が提供されるようにすることができる。更なる例では、CUCモジュール310は、コードカバレッジ識別されたコーディングエラーを訂正する際にユーザを支援するために、エラー訂正ソリューションを出力デバイス116上に出力するようにプログラムすることができる。
【0084】
いくつかの例では、コード評価モジュール304は、ビルドコード302内のコードカバレッジ識別されたコーディングエラーが訂正されたかどうかの表示をCUCモジュール310に提供するようにプログラムすることができる。例えば、ML-DSアルゴリズム306が、(例えば、コーディングエラーについて)更新されたビルドコード314の後続の評価において、コードカバレッジ識別されたコーディングエラーを識別しない場合、CUCモジュール310は、ML-CECアルゴリズム316の学習を強化するようにプログラムすることができる。CUCモジュール310は、ML-CECアルゴリズム316の学習が教師なし学習を介して再実施されるように、学習されたコーディングエラーソリューションのライブラリ312を更新して、コードカバレッジ識別されたコーディングエラーを含むようにプログラムすることができる。
【0085】
いくつかの例では、コード評価モジュール304は、ビルドコード302の挙動をテストしてビルドコード302内のコーディング異常を識別する(例えば、発見する)ようにプログラムすることができる。例えば、コード評価が例えばセーフティクリティカルコードであった場合、コード評価モジュール304によって、出力の決定論及びタイミングを考慮することができる。結果として、コード評価モジュール304は、コード出力の決定論的側面が保証されることを保証するために、テストを適用し、各テストの結果を評価するようにプログラムすることができる。別の例では、コードの目的がターゲット捕捉であった場合、コード評価モジュール304によって精度を考慮することができる。その結果、コード評価モジュール304は、ターゲット捕捉が低レベルの曖昧さを有し、かつ正確なターゲットの信頼性が許容可能なレベルであることを保証するようにプログラムすることができる。
【0086】
いくつかの例では、ビルドコード302の挙動は、学習されたテストケースのライブラリ322からのテストケースに基づいて、コード評価モジュール304によってテストすることができる。MLに基づいて、コード評価モジュール304は、SWが許容可能に安全であるという信頼性をユーザに提供するために、どのテストが実行されなければならないかを理解するようにプログラムすることができる。ターゲット捕捉に関連付けられた、評価されている新しいコードが提示されると、コード評価モジュール304は、ML履歴(例えば、学習されたテストケースのライブラリ322)に基づいて、ターゲット捕捉システムが典型的にテストのセットにさらされることを知る。コード評価モジュール304は、要求される信頼性レベルを得るために追加のテストが必要であると判定し、次いでこれらの追加のテストを学習されたテストケースのライブラリ322に追加するようにプログラムすることができる。
【0087】
コード評価モジュール304は、少なくとも1つのテストケースに従ってビルドコード302の挙動を特徴付けるテストケース結果データを生成するようにプログラムすることができる。コード評価モジュール304は、テストケース結果データに基づいてビルドコード302内の異常の第2のセット(例えば、1つ以上の異常)を識別するために、テストケース結果データを評価するようにプログラムすることができる。異常の第2のセットは、ビルドコード302内の異常を引き起こすコーディングエラーを識別するために、エラー異常データベースに対してコード評価モジュール304によって評価され得る。異常の第2のセットによって引き起こされるコーディングエラーは、テストケース識別されたコーディングエラーと呼ぶことができる。
【0088】
例えば、テストが導入され実行されると、コード評価モジュール304によってテストの有効性を判定するために、後続のシミュレーションが行われる。テストの進化によりいくつかの検出物が成功裏に排除された場合、コード評価モジュール304は、テストの有効性を知ることができ、それを学習されたエピックとして適用し、それを学習されたテストケースのライブラリ322に追加することができる。他のテストが全く又はほとんど利益をもたらさない場合、コード評価モジュール304は、これらのテストを低い優先順位に置くようにプログラムすることができる。結果として、コード評価モジュール304は、特定のテストが大きな利益を提供し、テストが低い利益をもたらすよりも高い優先度で実行されるべきであることを学習するようにプログラムすることができる。いくつかの例では、コード評価304がプログラムされているのは、リスクを可能な限り低減するために最も優先度の高いテストを最初に実行して、結果を出力デバイス116上でユーザに報告することである。いくつかの例では、ユーザが更に多くの保証信頼性を望む場合、より低い優先順位のテストを実行して、コーナーケース異常を排除することができる。
【0089】
コード評価モジュール304は、学習されたコード開発標準のライブラリ308が、教師なし学習を介して再実施されるように、テストケース識別されたコーディングエラー情報に基づいて、学習されたコード開発標準のライブラリ308を更新するようにプログラムすることができる。したがって、学習されたコード開発標準のライブラリ308は、ML-DSアルゴリズム306が、後続のビルドコード標準開発評価においてテストケース識別されたコーディングエラーを識別する(例えば、発見する)ようにプログラムすることができるように、テストケース識別されたコーディングエラーに基づくテストケースルールを含むように更新することができる。
【0090】
いくつかの例では、コード評価モジュール304は、テストケース識別されたコーディングエラーをCUCモジュール310に通信するようにプログラムすることができる。CUCモジュール310は、更新されたビルドコード314を提供するために、学習されたコーディング訂正のライブラリ312に基づいて、テストケース識別されたコーディングエラーに対するエラー訂正ソリューションを識別するために、ML-CECアルゴリズム316を採用するようにプログラムすることができる。いくつかの例では、CUCモジュール310は、テストケース識別されたコーディングエラーに関して出力デバイス116上でユーザに警告し、テストケース識別されたコーディングエラーを訂正するためにユーザがビルドコード302を訂正することを可能にするようにプログラムすることができ、したがって、更新されたビルドコード314が提供されるようにすることができる。更なる例では、CUCモジュール310は、テストケース識別されたコーディングエラーを訂正する際にユーザを支援するために、エラー訂正ソリューションを出力デバイス116上に出力するようにプログラムすることができる。
【0091】
いくつかの例では、コード評価モジュール304は、ビルドコード302内のテストケース識別されたコーディングエラーが訂正されたかどうかの表示をCUCモジュール310に提供するようにプログラムすることができる。例えば、ML-DSアルゴリズム306が、(例えば、コーディングエラーについて)更新されたビルドコード314の後続の評価において、テストケース識別されたコーディングエラーを識別しない場合、CUCモジュール310は、ML-CECアルゴリズム316の学習を強化するようにプログラムすることができる。CUCモジュール310は、ML-CECアルゴリズム316の学習が教師なし学習を介して再実施されるように、学習されたコーディングエラーソリューションのライブラリ312を更新して、テストケース識別されたコーディングエラーを含むようにプログラムすることができる。
【0092】
いくつかの例では、コード評価モジュール304は、MLテストケース生成器324と通信するようにプログラムすることができる。MLテストケース生成器324は、学習されたテストケースのライブラリ322に基づいて、ビルドコード302の挙動をテストするためのテストケースを推奨するようにプログラムすることができる。MLテストケース生成器324は、本明細書に記載されるように、ビルドコード302の挙動をテストするために、テストケースをコード評価モジュール304に提供するようにプログラムすることができる。したがって、コード評価モジュール304は、MLテストケース生成器324によって推奨されるそれぞれのテストケースに従って、ビルドコードデータ302の挙動を特徴付けるテストケースデータを生成するようにプログラムすることができる。MLテストケース生成器324によって識別されたテストケースは、本明細書に記載されるように、ビルドコード302内のコーディング異常を発見するために、ビルドコード302の挙動をテストするために採用することができる。MLテストケース生成器324は、ビルドコード302内の更なる異常につながる可能性がより高いテストを識別するように強化することができる。したがって、MLテストケース生成器324のテスト推奨品質は、ビルドコード302内の異常につながる可能性がより高いテストをより効果的に識別するために、各テスト推奨に従って改善することができ、それによって、プログラムコードの許容可能性のレベルを増加させる。
【0093】
更なる例として、コード評価モジュール304は、コードエラー訂正結果データ326を生成するようにプログラムすることができる。コードエラー訂正結果データ326は、ビルドコード302において訂正され、かつ/又は訂正されていないコーディングエラーのタイプと数値コーディングエラーとを示すことができる。コード評価モジュール304は、本明細書に記載されるように、更新されたビルドコード314、したがってプログラムコード106の許容可能性を判定するなどの更なる処理のために、コードエラー訂正データ326をビルドコード出力モジュール120に通信するようにプログラムすることができる。
【0094】
したがって、コード開発エンジン300は、プログラムコード106の開発中にコーディングエラーを訂正するようにプログラムすることができる。いくつかの例では、コード開発エンジン300は、コーディングエラーに関して出力デバイス116上でユーザに警告し、プログラムコード106内のコーディングエラーを訂正するためのエラー訂正ソリューションを提供することができる。コーディング開発エンジン300は、プログラムコード106がプログラムコード106に対して定義された開発標準に準拠し、それによってプログラムコード106のコーディング品質を改善するように、プログラムコード106のユーザ(例えば、開発者)を支援するように構成することができる。更に、開発中にプログラムコード106のコーディングエラーを訂正することにより、プログラムコード106の早期展開が可能となる。
【0095】
図4は、ビルドコード出力モジュール400の一例を示す。いくつかの例では、ビルドコード出力モジュール400は、図1に示すようなビルドコード出力モジュール120に対応することができる。したがって、図4の例の以下の説明において、図1図3の例を参照することができる。ビルドコード出力モジュール400は、許容可能性判定モジュール402及びプログラムコード更新モジュール404を含むことができる。許容可能性判定モジュール402は、コード失敗訂正結果データ406及びコードエラー訂正結果データ408を受信するようにプログラムすることができる。コード失敗訂正結果データ406は、図2に示したコード失敗訂正結果データ240に対応することができる。コードエラー訂正結果データ408は、図3に示したコード失敗エラー結果データ326に対応することができる。
【0096】
許容可能性判定モジュール402は、更新されたビルドコード410を評価して、更新されたビルドコード410が展開のために許容可能である(例えば、使用のためにより安全である)かどうかを判定するようにプログラムすることができる。更新されたビルドコード410は、図1に示すように、更新されたビルドコード118に対応することができる。したがって、いくつかの例では、更新されたビルドコード410は、図1に示すように、コード開発エンジン114及び/又はコードランタイムシミュレーションエンジン122によって行われたビルドコード112への変更を含むことができる。いくつかの例では、更新されたビルドコード410は、図2に示されるような更新されたビルドコード234、又は図3に示されるような更新されたビルドコード314に対応することができる。許容可能性判定モジュール402は、許容可能リスクデータ412を受信するようにプログラムすることができる。許容可能リスクデータ412は、更新されたビルドコード410に対して許容可能であるとユーザが判定したリスクのレベルを示すことができる。例えば、リスクレベルは、更新されたビルドコード410に対して許容可能であるとユーザがみなした値又は確率に対応することができる。
【0097】
いくつかの例では、許容可能性判定モジュール402は、発見されたコーディング欠陥のタイプ(例えば、失敗及び/又はエラー)と、ビルドコード202内の識別されたコーディング欠陥がコード失敗訂正データ406及び/又はコードエラー訂正データ408に基づいて訂正されたかどうかとに基づいて、コード許容可能性基準閾値を更新するようにプログラムすることができる。許容可能性判定モジュール402は、コーディング欠陥条件リスト414に対してコーディング欠陥のタイプを評価して、それぞれのコーディング欠陥値を識別するようにプログラムすることができる。許容可能性判定モジュール402は、それぞれのコード欠陥値に基づいてコード許容可能性基準閾値を更新するようにプログラムすることができる。いくつかの例では、コーディング欠陥条件リスト414は、コーディング欠陥のタイプに関するカテゴリを含み、各カテゴリコーディング欠陥をコーディング欠陥値に関連付けることができる。
【0098】
例として、コーディング欠陥条件リスト414は、破局的故障カテゴリ、危険故障カテゴリ、重故障カテゴリ、軽故障カテゴリ、及び/又は無影響故障カテゴリを含むことができる。破局的故障カテゴリは、クラッシュ又は人命の喪失を引き起こす可能性があるそれぞれのビルドコードにおける破局的故障に対応することができる。危険故障カテゴリは、システム(例えば、航空機)又はシステムのオペレータが適切に動作する能力を低下させる可能性があり、したがってシステムの安全性又は少なくとも性能に影響を与える、それぞれのビルドコードにおける危険故障に対応することができる。重故障カテゴリは、危険故障よりも影響が少ない可能性があるが、本質的に重大であるか、又は少なくともシステムの機能性を著しく低下させる可能性がある、それぞれのビルドコード内の重故障に対応することができる。軽故障カテゴリは、システムに対する影響が重故障よりも少ない可能性があるが、システムの性能において顕著である、対応するビルドコードにおける軽故障に対応することができる。無影響故障カテゴリは、システムの安全性、システムの動作、又はシステムオペレータの作業負荷に影響を及ぼさない無影響故障に対応することができる。
【0099】
上述したように、各カテゴリ故障タイプは、コーディング欠陥値に関連付けられる。システム(例えば、航空機)の安全性に対してより大きい影響を有する故障カテゴリは、システムの安全性に対して低減された影響を有する故障カテゴリよりも大きい故障値を有することができる。例えば、破局的故障カテゴリのコーディング欠陥値は、重故障カテゴリのコーディング欠陥値よりも大きい可能性があり、危険故障カテゴリのコーディング欠陥値は、重故障カテゴリのコーディング欠陥値よりも大きい可能性がある。重故障カテゴリは、軽カテゴリ故障よりも大きいコーディング欠陥値を有する可能性があり、軽カテゴリ故障は、無影響故障カテゴリよりも大きいコーディング欠陥値を有する。いくつかの例では、コーディング欠陥条件リスト414は、論理エラー失敗カテゴリ、シンタックス失敗カテゴリ、セマンティックエラーカテゴリ、ランタイム失敗カテゴリ、及び/又は同様のエラーコーディングカテゴリを含むことができ、これらのカテゴリの各々は、それぞれのコーディング欠陥値に関連付けられ得る。
【0100】
いくつかの例では、許容可能性判定モジュール402は、コーディング欠陥条件リスト414からのコーディング欠陥値に基づいて、コード許容可能性基準閾値を新しい値に更新するようにプログラムすることができる。コード許容可能性基準閾値のこの更新は、更新されたコード許容可能性基準閾値を提供するための、コード許容可能性基準閾値に対するコーディング欠陥値の乗算、除算、減算、又は加算することを含むことができる。例えば、更新されたビルドコード410を提供するためにビルドコード112における破壊的故障、危険故障、及び/又は重故障が訂正されると、コード許容可能性基準閾値は、更新されたビルドコード410の許容可能性を反映するように更新することができる。いくつかの例では、コード許容可能性基準閾値は、許容可能リスクデータ412によって定義される更新されたビルドコード410に対して許容可能であるとユーザが判定したリスクのレベル以上であることができる。許容可能性判定モジュール402は、更新されたビルドコード410がセーフティクリティカル用途などのプログラムコード環境での使用に許容可能であることを示す、許容可能性表示データ416を提供するようにプログラムすることができる。許容可能性判定モジュール402は、プログラムコード106のそれぞれのビルドに対応する更新されたビルドコード410が使用のために許容可能である(例えば、使用のためにより安全である)ことをユーザに警告するために、許容可能性表示データ416を出力デバイス116に通信するようにプログラムすることができる。
【0101】
いくつかの例では、許容可能性判定モジュール402は、安全目標データ418を受信するようにプログラムすることができる。許容可能性判定モジュール402は、安全目標データ418に基づいて、更新されたビルドコード410がプログラムコード106の安全要件又は安全目標に準拠するリスク確率を計算するようにプログラムすることができる。いくつかの例では、許容可能性判定モジュール402は、安全目標データ418に基づいて、プログラムコード106に対する安全性又は目標の遵守について、更新されたビルドコード410を評価するようにプログラムすることができる。許容可能性判定モジュール402は、更新されたビルドコード410が許容可能であるかどうかを判定するために、ユーザ及び/又はエンティティによって定義された許容可能リスクのレベルに対してリスク確率を評価するようにプログラムすることができる。いくつかの例では、許容可能性判定モジュール402は、更新されたビルドコード410がプログラムコード106のそれぞれのビルドに対応して許容可能であることを出力デバイス116上でユーザに警告するようにプログラムすることができる。いくつかの例では、許容可能性判定モジュール402は、更新されたビルドコード410の安全性リスクの表示をユーザに提供するために、許容可能性表示データ416としてリスク確率を出力デバイス116上に提供するようにプログラムすることができる。
【0102】
いくつかの例では、許容可能性判定モジュール402は、プログラムコード更新モジュール404と通信してプログラムコード106を修正して、更新されたプログラムコード410を提供するようにプログラムすることができる。プログラムコード更新モジュール404は、更新されたビルドコード410を採用してプログラムコードモデル110又はプログラムコード106を更新するようにプログラムすることができる。したがって、コード開発エンジン114によってコーディングエラーが訂正されて、更新されたビルドコード410が提供されると、プログラムコード更新モジュール404は、プログラムコードモデル110又はプログラムコード106を更新して、プログラムコード106内のこれらのコーディングエラーを訂正するようにプログラムすることができる。いくつかの例では、コードランタイムシミュレーションエンジン122によってコーディング失敗が訂正されて、更新されたビルドコード410が提供されると、プログラムコード更新モジュール404は、プログラムコードモデル110又はプログラムコード106を更新して、プログラムコード106内のこれらのコーディング失敗についてプログラムコード106を訂正するようにプログラムすることができる。いくつかの例では、プログラムコード更新モジュール404は、更新されたビルドコード410を更新されたプログラムコード410として(例えば、ユーザに)提供するようにプログラムすることができる。したがって、プログラムコード更新モジュール404は、更新されたプログラムコード410を提供するために開発システムとインターフェースするようにプログラムすることができる。
【0103】
これに応じて、ビルドコード出力モジュール400は、更新されたビルドコード410が許容可能であるかどうか、したがっていくつかの例では、セーフティクリティカル用途での使用のためにより安全であるかどうかを判定するようにプログラムすることができる。いくつかの例では、ビルドコード出力モジュール400は、コード開発エンジン114及び/又はコードランタイムシミュレーションエンジン122によって識別されたプログラムコード106内の欠陥(例えば、失敗及び/又はエラー)を訂正するために、1人以上のユーザがプログラムコード106を開発しているときにプログラムコード106を更新し、それによってプログラムコード品質(例えば、プログラムコード106の機能及び構造的品質)を改善するようにプログラムすることができる。
【0104】
前述の構造的及び機能的特徴を考慮して、例示的な方法は、図5図6を参照してより良好に認識されるであろう。説明を簡単にする目的で、図5図6の例示的な方法は、連続的に実行されるように示され、説明されているが、いくつかの動作は、他の例では、異なる順序で、複数回、及び/又は本明細書に示され記載されているものと並行して起こり得るので、本例示的な方法は、図示されている順序によって制限されないことを理解及び認識されたい。
【0105】
図5は、プログラムエラー訂正及び許容可能性判定のための方法500の一例を示す。方法500は、図1に示すようなシステム100によって実装することができる。したがって、図5の例の以下の説明において、図1図3の例を参照することができる。方法500は、502において、プログラムコードのソフトウェア開発中のある段階におけるプログラムコード(例えば、図1に示されるようなプログラムコード106)を表すことができるビルドコード(例えば、図1に示されるようなビルドコード112)を提供することによって開始することができる。504において、学習されたコーディング開発標準のライブラリ(例えば、図3に示すような学習されたコーディング開発標準のライブラリ308)に基づいて、ビルドコードを(例えば、図1に示すようなコーディング開発エンジン114によって)評価して、ビルドコード内のコーディングエラーを識別することができる。学習されたコーディング開発標準のライブラリは、プログラムコードのソフトウェア開発のためのルール及び/又は制約を特徴付けることができる。
【0106】
506において、コーディングエラーを訂正するためのエラー訂正ソリューションを、コーディングエラーの評価と、学習されたコーディングエラーソリューションのライブラリ(例えば、図3に示されるような学習されたコーディングエラーソリューションのライブラリ312)とに基づいて、(例えば、図3に示されるようなML-CECアルゴリズム316によって)推奨することができる。学習されたコーディングエラーソリューションのライブラリは、プログラムコード及び/又はビルドコード内のコーディングエラーのための前のエラー訂正ソリューションを特徴付けることができる。508において、エラー訂正ソリューションに基づいて、ビルドコードを(例えば、図3に示すようなCUCモジュール310によって)更新して、ビルドコード内のコーディングエラーを訂正することができる。510において、ビルドコード内のコーディングエラーを訂正することに応答して、(例えば、図4に示されるような許容可能リスクデータ412によって定義されるような)ビルドコードについての許容可能リスクのレベルに基づいて、ビルドコードがプログラムコードのためのプログラムコード環境での使用に許容可能であるかどうかについての判定を(例えば、図4に示されるような許容可能性判定モジュール402によって)行うことができる。
【0107】
図6は、プログラムエラー訂正及び許容可能性判定のための方法600の一例を示す。方法600は、図1に示すようなシステム100によって実装することができる。したがって、図6の例の以下の説明において、図1図4の例を参照することができる。方法600は、602において、プログラムコードのソフトウェア開発中のある段階における、又はソフトウェア開発後のプログラムコード(例えば、図1に示されるようなプログラムコード106)を表すことができるビルドコードを(例えば、図1に示されるようなコードランタイムシミュレーションエンジン122において)受信することによって開始することができる。ビルドコードは、図1に示されるようなビルドコード112に対応することができる。604において、ビルドコードを、プログラムコードのためのプログラムコード環境のモデル化されたプログラムコード環境において(例えば、公称シミュレーションモジュール206、ストレスシミュレーションモジュール208、及び/又は非公称シミュレーションモジュール210のうちの少なくとも1つによって)シミュレーションして、ビルドコードの挙動及び/又は性能を決定することができる。
【0108】
606において、ビルドコードの挙動及び/又は性能を(例えば、図1に示されるようなCRCモジュール204によって)評価して、ビルドコード内のコーディング失敗を識別することができる。608において、コーディング失敗の評価と、プログラムコード及び/又はビルドコードにおけるコーディング失敗についての前の失敗訂正ソリューションを特徴付ける学習されたコーディング失敗ソリューションのライブラリとに基づいて、コーディング失敗を訂正するための失敗訂正ソリューションを(例えば、図2に示されるようなML-CFCアルゴリズム236によって)識別することができる。学習されたコーディング失敗ソリューションのライブラリは、図2に示すような学習されたコーディング失敗ソリューションのライブラリ232に対応することができる。610において、方法600は、ビルドコード内のコーディング失敗を訂正することに応答して、(例えば、図4に示されるような許容可能リスクデータ412によって定義されるような)ビルドコードについての許容可能リスクのレベルに基づいて、ビルドコードがプログラムコード環境での使用に許容可能であるかどうかについて(例えば、図4に示されるような許容可能性判定モジュール402を介して)判定することを含むことができる。
【0109】
上で説明したものは、例である。もちろん、構成要素又は手法の考えられる全ての組み合わせを説明することは不可能であるが、当業者は、多くの更なる組み合わせ及び順列が可能であることを認識するであろう。したがって、本開示は、添付の特許請求の範囲を含め、本出願の範囲内にあるそのような全ての変更、修正、及び変形を包含することを意図している。本明細書で使用される際、「含む」という用語は、含むが、それに限定されないことを意味し、「含んでいる」という用語は、含んでいるが、それに限定されないことを意味する。「に基づく」という用語は、少なくとも部分的に基づくことを意味する。更に、本開示又は特許請求の範囲で、「a」、「an」、「第1」、又は「別の」要素、又はそれらと同等のものが挙げられる場合、それは、1つ又は2つ以上のそのような要素を含むと解釈されるべきであり、2つ以上のそのような要素を必要とするものでも、排除するものでもない。
本明細書に開示される発明は以下を含む。
[態様1]
システムであって、
機械可読命令とデータとを記憶するためのメモリであって、前記データが、ある段階におけるプログラムコードを表すビルドコードを含む、メモリと、
前記メモリにアクセスし、前記機械可読命令を実行するための1つ以上のプロセッサと、を備え、前記機械可読命令が、
前記ビルドコードを評価して、前記ビルドコードが前記プログラムコードのためのプログラムコード開発標準に準拠するかどうかを判定して、前記ビルドコード内のコーディングエラーを識別するようにプログラムされたコード開発エンジンであって、前記コーディングエラーについて前記ビルドコードを訂正するためのエラー訂正ソリューションを推奨するようにプログラムされている、コード開発エンジンと、
前記プログラムコードのためのモデル化されたプログラムコード環境において前記ビルドコードをシミュレーションして、前記ビルドコード内のコーディング失敗を識別するようにプログラムされたコードランタイムシミュレーションエンジンであって、前記コーディング失敗について前記ビルドコードを訂正するための失敗訂正ソリューションを推奨するようにプログラムされている、コードランタイムシミュレーションエンジンと、
前記コーディングエラー及び/又はコーディング失敗が前記ビルドコードにおいて訂正されることに応答して、前記ビルドコードについての許容可能リスクのレベルに基づいて、前記ビルドコードを評価して、前記ビルドコードがプログラムコード環境での使用に許容可能であるかどうかを判定するようにプログラムされている、ビルドコード出力モジュールと、を備える、システム。
[態様2]
コーディング開発エンジンが、
前記プログラムコードのソフトウェア開発のためのルール及び/又は制約を特徴付ける学習されたコーディング開発標準のライブラリに基づいて、前記ビルドコード内の前記コーディングエラーを識別するようにプログラムされた、機械学習開発標準(ML-DL)アルゴリズムと、
プログラムコード及び/又はビルドコード内のコーディングエラーに対する前のエラー訂正ソリューションを特徴付ける学習されたコーディングエラーソリューションのライブラリに基づいて、前記コーディングエラーを訂正するための前記エラー訂正ソリューションを推奨するようにプログラムされた、MLコードエラー訂正(ML-CEC)アルゴリズムと、
前記エラー訂正ソリューションに基づいて前記ビルドコード内の前記コーディングエラーを訂正するようにプログラムされた、コード更新訂正(CUC)モジュールと、を備える、態様1に記載のシステム。
[態様3]
前記コーディング開発エンジンが、静的解析手法を適用して前記ビルドコードを評価して、前記ビルドコードが第2のコーディングエラーを含むかどうかを判定するようにプログラムされた静的コードテストモジュールを更に備え、前記コーディングエラーが、第1のコーディングエラーであり、前記ML-CECアルゴリズムが、前記第2のコーディングエラーの評価及び前記学習されたコーディングエラーソリューションのライブラリに基づいて前記第2のコーディングエラーを訂正するための第2のエラー訂正ソリューションを推奨するようにプログラムされており、前記CUCモジュールが、前記第2のエラー訂正ソリューションに基づいて前記ビルドコード内の前記第2のコーディングエラーを訂正するようにプログラムされている、態様2に記載のシステム。
[態様4]
前記コーディング開発エンジンが、
コードカバレッジ解析手法を適用して、テストケースに基づいて前記ビルドコードを評価して、前記ビルドコードの実行中に行使された又は行使されなかった前記ビルドコードの量を決定して、コードカバレッジレポートデータを提供するようにプログラムされた、コードカバレッジテストモジュールと、
前記コードカバレッジレポートデータに基づいて前記ビルドコード内の異常を識別するようにプログラムされており、前記識別された異常の評価とエラー異常データベースとに基づいて前記ビルドコード内の第3のコーディングエラーを識別するように更にプログラムされた、コード評価モジュールと、を更に備える、態様3に記載のシステム。
[態様5]
前記ML-CECアルゴリズムが、前記学習されたコーディングエラーソリューションのライブラリに基づいて前記第3のコーディングエラーを訂正するための第3のエラー訂正ソリューションを推奨するようにプログラムされており、前記CUCモジュールが、前記第3のエラー訂正ソリューションに基づいて前記ビルドコード内の前記第3のコーディングエラーを訂正するようにプログラムされている、態様4に記載のシステム。
[態様6]
前記コーディング開発エンジンが、前のプログラムコード及び/又はビルドコードの挙動をテストするために採用された以前のテストケースを特徴付けるテストケーストレーニングデータに基づいてトレーニングされたMLテストケース生成器を更に備え、前記MLテストケース生成器が、前記テストケースを提供するようにプログラムされている、態様5に記載のシステム。
[態様7]
前記コードランタイムシミュレーションエンジンが、少なくとも1つのシミュレーションモジュールを備え、前記少なくとも1つのシミュレーションモジュールが、
シミュレーションパラメータに基づいて、前記プログラムコードのための前記プログラムコード環境のモデル化されたプログラムコード環境を生成し、
前記モデル化されたプログラムコード環境において前記ビルドコードをシミュレーションし、かつ
前記モデル化されたプログラムコード環境における前記ビルドコードの前記シミュレーションに基づいて、前記ビルドコードの挙動及び/又は性能を特徴付けるシミュレーション結果データを出力するようにプログラムされている、態様6に記載のシステム。
[態様8]
前記コードランタイムシミュレーションエンジンが、学習されたシミュレーションパラメータのライブラリに基づいて、シミュレーションのために前記モデル化されたプログラムコード環境を構成するために前記少なくとも1つのシミュレーションモジュールのための前記シミュレーションパラメータを推奨するようにプログラムされたMLシミュレーションパラメータアルゴリズムを備え、前記学習されたシミュレーションパラメータのライブラリが、モデル化されたプログラムコード環境を構成するための前のシミュレーションパラメータを特徴付け、
前記コードランタイムシミュレーションエンジンが、前記ビルドコード内の前記コーディング失敗を識別するために、前記少なくとも1つのシミュレーションモジュールによって生成されたシミュレーション結果データを評価するようにプログラムされた、コードランタイムプロセス及び制御モジュールを更に備える、態様7に記載のシステム。
[態様9]
前記コードランタイムシミュレーションエンジンが、
前記プログラムコード及び/又はビルドコード内のコーディング失敗に対する前の失敗訂正ソリューションを特徴付ける学習されたコーディング失敗ソリューションのライブラリに基づいて、前記コーディング失敗を訂正するための前記失敗訂正ソリューションを推奨するようにプログラムされたMLコード失敗訂正(ML-CFC)アルゴリズムと、
前記失敗訂正ソリューションに基づいて前記ビルドコード内の前記コーディング失敗を訂正するようにプログラムされたコード失敗更新(CFU)モジュールと、を更に備える、態様8に記載のシステム。
[態様10]
前記コードランタイムプロセス及び制御モジュール並びに前記コード評価モジュールのうちの1つが、前記ビルドコードにおいて訂正され、かつ/又は訂正されていないコーディング欠陥のタイプと数値コーディング欠陥とを示すコード欠陥訂正結果データを生成するようにプログラムされており、前記ビルドコード出力モジュールが、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定するために、前記ビルドコードの前記許容可能リスクのレベルに基づいて、前記コード欠陥訂正結果データを評価するようにプログラムされた許容可能性判定モジュールを備える、態様9に記載のシステム。
[態様11]
前記ビルドコードが、前記プログラムコードが開発されているときに、前記コーディング開発エンジンによる評価、及び前記コードランタイムシミュレーションエンジンによるシミュレーション、のうちの1つが行われる、
前記ビルドコードが、前記プログラムコードに対するユーザ定義の変更に基づいて、前記コーディング開発エンジンによる評価、及び前記コードランタイムシミュレーションエンジンによるシミュレーション、のうちの1つが行われる、並びに
前記プログラムコードが、レガシープログラムコードに対応する、のうちの1つである、態様10に記載のシステム。
[態様12]
前記機械可読命令が、前記ビルドコードの許容可能バージョンに対応するリリースされたプログラムコードを受信又は取り出すようにプログラムされた環境インターフェースモジュールを更に含み、前記コードランタイムシミュレーションエンジンが、前記モデル化されたプログラムコード環境において前記リリースされたプログラムコードをシミュレーションして、前記ビルドコード内の更なるコーディング失敗を識別するようにプログラムされており、前記コードランタイムシミュレーションエンジンが、他のコーディング失敗について前記リリースされたプログラムコードを訂正するための別の失敗訂正ソリューションを推奨するようにプログラムされており、かつ前記ビルドコード出力モジュールが、前記リリースされたプログラムコードを評価して、前記リリースされたプログラムコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定するようにプログラムされている、態様11に記載のシステム。
[態様13]
コンピュータ実装方法であって、
プログラムコードのソフトウェア開発中のある段階における前記プログラムコードを表すビルドコードを提供することと、
前記プログラムコードの前記ソフトウェア開発のためのルール及び/又は制約を特徴付ける学習されたコーディング開発標準のライブラリに基づいて、前記ビルドコードを評価して、前記ビルドコード内のコーディングエラーを識別することと、
前記コーディングエラーの評価と、プログラムコード及び/又はビルドコードにおけるコーディングエラーについての前のエラー訂正ソリューションを特徴付ける学習されたコーディングエラーソリューションのライブラリとに基づいて、前記コーディングエラーを訂正するためのエラー訂正ソリューションを推奨することと、
前記エラー訂正ソリューションに基づいて、前記ビルドコードを更新して、前記ビルドコード内の前記コーディングエラーを訂正することと、
前記ビルドコード内の前記コーディングエラーを訂正することに応答して、前記ビルドコードについての許容可能リスクのレベルに基づいて、前記ビルドコードが前記プログラムコードのためのプログラムコード環境での使用に許容可能であるかどうかを判定することと、を含む、コンピュータ実装方法。
[態様14]
前記ビルドコードが、前記プログラムコード環境での使用に許容可能であるかどうかを判定することが、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定するために、前記ビルドコードについての前記許容可能リスクのレベルに基づいてコードエラー訂正結果データを評価することを含み、前記コードエラー訂正結果データが、前記ビルドコードにおいて訂正され、たかつ/又は訂正されていないコーディングエラーのタイプと数値コーディングエラーとを示す、態様13に記載のコンピュータ実装方法。
[態様15]
静的解析手法を適用して前記ビルドコードを評価して、前記ビルドコードが第2のコーディングエラーを含むかどうかを判定することであって、前記コーディングエラーが、第1のコーディングエラーである、判定することと、
第2のコーディングの評価と前記学習されたコーディングエラーソリューションのライブラリとに基づいて、前記第2のコーディングエラーを訂正するための第2のエラー訂正ソリューションを推奨することであって、前記エラー訂正ソリューションが、第1のエラー訂正ソリューションである、推奨することと、
前記第2のエラー訂正ソリューションに基づいて、前記ビルドコードを更新して、前記ビルドコード内の前記第2のコーディングエラーを訂正することと、を更に含む、態様14に記載のコンピュータ実装方法。
[態様16]
コードカバレッジ解析手法を適用して、テストケースに基づいて前記ビルドコードを評価して、前記ビルドコードの実行中に行使された又は行使されなかった前記ビルドコードの量を決定してコードカバレッジレポートデータを提供することと、
前記コードカバレッジレポートデータに基づいて、前記ビルドコード内の異常を識別することと、
識別された前記異常の評価とエラー異常データベースとに基づいて、前記ビルドコード内の第3のコーディングエラーを識別することと、
前記第3のコーディングエラーの評価と前記学習されたコーディングエラーソリューションのライブラリとに基づいて、前記第3のコーディングエラーを訂正するための第3のエラー訂正ソリューションを推奨することと、
前記第3のエラー訂正ソリューションに基づいて、前記ビルドコードを更新して、前記ビルドコード内の前記第3のコーディングエラーを訂正することと、を更に含む、態様15に記載のコンピュータ実装方法。
[態様17]
シミュレーションパラメータに基づいて、前記プログラムコードのためのモデル化されたプログラムコード環境において前記ビルドコードをシミュレーションすることであって、前記シミュレーションパラメータが、学習されたシミュレーションパラメータのライブラリに基づいてMLシミュレーションパラメータアルゴリズムによって推奨され、前記学習されたシミュレーションパラメータのライブラリが、モデル化されたプログラムコード環境のパラメータを構成するための前のシミュレーションパラメータを特徴付ける、シミュレーションすることと、
前記モデル化されたプログラムコード環境における前記ビルドコードの前記シミュレーションに基づいて、前記ビルドコードの挙動及び/又は性能を特徴付けるシミュレーション結果データを出力することと、
前記シミュレーション結果データを評価して、前記ビルドコード内のコーディング失敗を識別することと、
前記ML手法を使用して、前記コーディング失敗の評価と、前記プログラムコード及び/又はビルドコード内のコーディング失敗のための前の失敗訂正ソリューションを特徴付ける学習されたコーディング失敗ソリューションのライブラリとに基づいて、前記コーディング失敗を訂正するための失敗訂正ソリューションを識別することであって、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかの前記判定が、前記ビルドコード内の前記コーディングエラー及びコーディング失敗を訂正することに応答してのものである、識別することと、を更に含む、態様16に記載のコンピュータ実装方法。
[態様18]
コンピュータ実装方法であって、
プログラムコードのソフトウェア開発中のある段階における、又は前記ソフトウェア開発後の前記プログラムコードを表すビルドコードを受信することと、
前記プログラムコードのためのプログラムコード環境のモデル化されたプログラムコード環境において前記ビルドコードをシミュレーションして、前記ビルドコードの挙動及び/又は性能を決定することと、
前記ビルドコードの前記挙動及び/又は性能を評価して、前記ビルドコード内のコーディング失敗を識別することと、
前記コーディング失敗の評価と、プログラムコード及び/又はビルドコードにおけるコーディング失敗についての前の失敗訂正ソリューションを特徴付ける学習されたコーディング失敗ソリューションのライブラリとに基づいて、前記コーディング失敗を訂正するための失敗訂正ソリューションを識別することと、
前記ビルドコード内の前記コーディング失敗を訂正することに応答して、前記ビルドコードについての許容可能リスクのレベルに基づいて、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定することと、を含む、コンピュータ実装方法。
[態様19]
前記モデル化されたプログラムコード環境が、MLシミュレーションパラメータアルゴリズムによって推奨されるシミュレーションパラメータに基づいて生成され、前記MLシミュレーションパラメータアルゴリズムが、学習されたシミュレーションパラメータのライブラリに基づいて前記シミュレーションパラメータを推奨するようにプログラムされており、前記学習されたシミュレーションパラメータのライブラリが、モデル化されたプログラムコード環境を構成するための前のシミュレーションパラメータを特徴付ける、態様18に記載のコンピュータ実装方法。
[態様20]
前記ビルドコードが、前記プログラムコード環境での使用に許容可能であるかどうかを判定することが、前記ビルドコードが前記プログラムコード環境での使用に許容可能であるかどうかを判定するために、前記ビルドコードについての前記許容可能リスクのレベルに基づいてコード失敗訂正結果データを評価することを含み、前記コード失敗訂正結果データが、前記ビルドコードにおいて訂正され、かつ/又は訂正されていないコーディング失敗のタイプと数値コーディング失敗とを示す、態様18に記載のコンピュータ実装方法。
図1
図2
図3
図4
図5
図6