JP2015197902A - オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラム - Google Patents

オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラム Download PDF

Info

Publication number
JP2015197902A
JP2015197902A JP2014077302A JP2014077302A JP2015197902A JP 2015197902 A JP2015197902 A JP 2015197902A JP 2014077302 A JP2014077302 A JP 2014077302A JP 2014077302 A JP2014077302 A JP 2014077302A JP 2015197902 A JP2015197902 A JP 2015197902A
Authority
JP
Japan
Prior art keywords
code
build
preprocessing
source code
online
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014077302A
Other languages
English (en)
Other versions
JP6204253B2 (ja
Inventor
篤史 外山
Atsushi Toyama
篤史 外山
俊之 森谷
Toshiyuki Moriya
俊之 森谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2014077302A priority Critical patent/JP6204253B2/ja
Publication of JP2015197902A publication Critical patent/JP2015197902A/ja
Application granted granted Critical
Publication of JP6204253B2 publication Critical patent/JP6204253B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】静的解析ツールを利用することなく品質の高いソフトウェアを製造することができる。
【解決手段】ユーザ端末2と、ユーザ端末2からソースコードを受信してプリプロセッシングを実施するビルドサーバ4とを備えたオンラインビルドシステム1であって、ビルドサーバ4は、所定のコードのパターンと、前記ソースコード内のバグの可能性を発見する契機となる又はバグに対処するコード記述とが対応づけられた作り込み抑制情報が格納された記憶部と、前記作り込み抑制情報を参照して前記ソースコードを検索し、前記パターンを発見した場合に、前記コード記述を当該ソースコードに追加するプリプロセッシングを実行するプリプロセッシング実行部と、を備えることを特徴とする。
【選択図】図1

Description

本発明は、ソフトウェアの品質向上を実現するオンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラムに関する。
従来、実行環境上のプログラム記述言語仕様に基づいて開発されたプログラムを、開発環境上のコンパイラ仕様に整合させる技術が提案されている(特許文献1参照)。プログラムの開発者は、特許文献1に記載された技術を用いて単体試験工程(以下、UT)を行うことで、的確かつ効率的にバグの発見・修正を行うことができる。
特開平5−197539号公報
一方、バグの中にはUTで発見が困難なものも存在する。セキュリティに脆弱なコード、性能懸念のあるコード等をソースコードに用いている場合である。これらは、ソフトウェア開発(コーディング)が手作業で行われている限り、どのような熟練者が開発してもなくすことが難しい「バグ」である。
これらのバグを取り除く方法として、静的解析ツール(coverity(登録商標)等)を用いて静的リファクタリングを実施することが知られている。しかしながら、静的解析ツールの利用には、以下に示す問題があった。
第1に、静的解析ツールのインストールの問題があった。すなわち、静的解析ツールを利用するためには、特殊なツールを開発端末へ個別にインストールしなければならなかった。この問題は、開発環境が大きく、開発端末の数が多い場合に特に問題となる。
第2に、解決策が不明瞭であるという問題がった。すなわち、静的リファクタリングを実施した結果、問題点が明らかになるものの、どのようなコーディングを行えばこの問題点が解決されるか(ソフトウェア品質が高まるか)が不明確である。この問題は、コーディング初心者が開発を行う場合に特に問題となる。
本発明は、前記問題に鑑みてなされたものであり、静的解析ツールを利用することなく品質の高いソフトウェアを製造することができる、オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラムを提供することを課題とする。
前記課題を解決するため、本発明に係るオンラインビルドシステムは、ユーザ端末と、前記ユーザ端末からソースコードを受信してプリプロセッシングを実施するビルドサーバとを備えたオンラインビルドシステムであって、前記ビルドサーバが、所定のコードのパターンと、前記ソースコード内のバグの可能性を発見する契機となる又はバグに対処するコード記述とが対応づけられた作り込み抑制情報が格納された記憶部と、前記作り込み抑制情報を参照して前記ソースコードを検索し、前記パターンを発見した場合に、前記コード記述を当該ソースコードに追加するプリプロセッシングを実行するプリプロセッシング実行部と、を備えることを特徴とする。
また、本発明に係るオンラインビルド方法は、ユーザ端末と、前記ユーザ端末からソースコードを受信してプリプロセッシングを実施するビルドサーバとを備えたオンラインビルドシステムのオンライビルド方法であって、前記ビルドサーバが、所定のコードのパターンと、前記ソースコード内のバグの可能性を発見する契機となる又はバグに対処するコード記述とが対応づけられた作り込み抑制情報が格納された記憶部を有し、前記作り込み抑制情報を参照して前記ソースコードを検索する検索ステップと、前記パターンを発見した場合に、前記コード記述を当該ソースコードに追加するコード追加ステップとを実行する、ことを特徴とする。
また、本発明に係るオンラインビルドプログラムは、前記オンラインビルド方法をオンラインビルドシステムとしてコンピュータに実行させることを特徴とする。
このようにすることで、本発明に係るオンラインビルドシステムは、ソースコード上の脆弱性(バグ)の発見を手助けする又はバグに対処するコードを自動的に埋め込むことができる。その為、本発明に係るオンラインビルドシステムは、静的解析ツールを用いて静的リファクタリングを実施することなく、従来、単体試験工程(UT)で発見が困難とされていたバグをUTで発見することができる。オンラインビルド方法およびオンラインビルドプログラムについても、オンラインビルドシステムと同様である。
また、本発明に係るオンラインビルドシステムは、前記ビルドサーバが、前記プリプロセッシング後のソースコードのコンパイルを実行するコンパイル実行部をさらに備えることを特徴とする。
このようにすることで、本発明に係るオンラインビルドシステムは、プリプロセッシングされたコード以外にも、オブジェクトファイルや実行可能形式ファイルを生成することができる。また、コンパイラのバージョンや仕様に適合したプリプロセスが可能になる。その為、本発明に係るオンラインビルドシステムは、ユーザの求めに応じて種々の生成物を提供することが可能である。
本発明に係るオンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラムによれば、静的解析ツールを利用することなく品質の高いソフトウェアを製造することができる。
本発明に係るオンラインビルドシステムの概要を説明するための図である。 本実施形態に係るユーザ端末の機能構成図である。 本実施形態に係るアカウント管理サーバの機能構成図である。 本実施形態に係るアカウント情報DBのデータ構成図である。 本実施形態に係るビルドサーバの機能構成図である。 本実施形態に係る作り込み抑制情報DBのデータ構成図である。 本実施形態に係るオンラインビルドシステムのアカウント登録処理を示すシーケンス図である。 本実施形態に係るオンラインビルドシステムのビルド処理を示すシーケンス図である。 本実施形態に係るオンラインビルドシステムのプリプロセッシングの処理を示すフローチャートである。 実施例1に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b)はバグ無しのサンプルコードを示し、(c)はプリプロセッシング後のコード記述を示している。 実施例2に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b),(c)はバグ無しのサンプルコードを示している。 実施例2に係るプリプロセッシング処理を説明するための図であり、(d)はプリプロセッシング後のコード記述を示している。 実施例3に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b),(c)はバグ無しのサンプルコードを示している。 実施例3に係るプリプロセッシング処理を説明するための図であり、(d)はバグ無しのサンプルコードを示し、(e)はプリプロセッシング後のコード記述を示している。 実施例4に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b)はバグ無しのサンプルコードを示し、(c)はプリプロセッシング後のコード記述を示している。 実施例5に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b)はバグ無しのサンプルコードを示している。 実施例5に係るプリプロセッシング処理を説明するための図であり、(c)はプリプロセッシング後のコード記述を示している。 実施例6に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b),(c)はバグ無しのサンプルコードを示している。 実施例6に係るプリプロセッシング処理を説明するための図であり、(d)はプリプロセッシング後のコード記述を示している。 実施例7に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b)はバグ無しのサンプルコードを示し、(c)はプリプロセッシング後のコード記述を示している。 実施例8に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b)はバグ無しのサンプルコードを示している。 実施例8に係るプリプロセッシング処理を説明するための図であり、(c)はプリプロセッシング後のコード記述を示している。 実施例9に係るプリプロセッシング処理を説明するための図であり、(a)はバグ有りのサンプルコードを示し、(b)はバグ無しのサンプルコードを示している。 実施例9に係るプリプロセッシング処理を説明するための図であり、(c)はプリプロセッシング後のコード記述を示している。
以下、本発明の実施するための形態を、適宜図面を参照しながら詳細に説明する。
各図は、本発明を十分に理解できる程度に、概略的に示してあるに過ぎない。よって、本発明は、図示例のみに限定されるものではない。なお、各図において、共通する構成要素や同様な構成要素については、同一の符号を付し、それらの重複する説明を省略する。
≪実施形態に係るオンラインビルドシステムの構成≫
図1に示す、オンラインビルドシステム1は、システムを利用する権利(アカウント)を特定の者に付与し、アカウントを有する者が所有するソースコード(拡張子:「.cpp」等)のビルドをオンラインで行うシステムである。
オンラインビルドシステム1は、ユーザ端末2,・・・,2と、アカウント管理サーバ3と、ビルドサーバ4とが通信回線(有線、無線を含む)を介して接続されている。以下では、各装置について説明する。
<ユーザ端末>
図2を参照して、ユーザ端末2の機能構成について説明する。ユーザ端末2は、オンラインビルドシステム1のユーザ(以下、単に「ユーザ」)が操作する装置である。ユーザ端末2では、ユーザによってソフトウェア開発が行われる。ユーザ端末2は、例えば、PC(Personal Computer)である。
ユーザ端末2を使用して行われるソフトウェア開発は、特定の言語、開発モデル、開発規模、タイミング等に限定されない。例えば、ソフトウェア開発は、C++、FORTRAN、COBOL等のプリプロセッサを用いるコンピュータ言語であればいずれでもあってよい。ソフトウェア開発は、ウォーターフォールモデル、反復型開発、アジャイル開発等の一工程であってよい。また、ソフトウェア開発は、大規模、小規模を問わない。また、ソフトウェア開発は、新規プログラムの開発、既存プログラムの修正のどちらであってもよい。
ユーザ端末2は、記憶部10と、制御部20とを備えて構成される。記憶部10は、RAM(Random Access Memory)、ROM(Read Only Memory)、HDD(Hard Disk Drive)、フラッシュメモリ等の記憶媒体から構成される。制御部20は、ユーザ端末2が備えるCPU(Central Processing Unit)によるプログラム実行処理や、専用回路等により実現される。制御部20がプログラム実行処理により実現する場合、記憶部10には、制御部20の機能を実現するためのプログラムが格納される。
記憶部10には、ユーザによって開発されたソースコード(拡張子:「.cpp」等)11が格納されている。また、制御部20には、アカウント登録要求部21と、アカウント認証要求部22と、ビルド要求部23とが備えられている。ここでは、各機能の概要のみを説明し、詳細は「オンラインビルドシステムの動作」で後記する。
アカウント登録要求部21は、ユーザからの指示によってアカウント登録要求を送信し、アカウント登録結果を受信する。ここで、アカウント登録要求の送信は、ビルドサーバ4を介してアカウント管理サーバ3に行われてもよいし、ユーザ端末2から直接行われてもよい。
アカウント認証要求部22は、ユーザからの指示によってアカウント認証要求を送信し、アカウント認証結果を受信する。ここで、アカウント認証要求の送信は、ビルドサーバ4を介してアカウント管理サーバ3に行われてもよいし、ユーザ端末2から直接行われてもよい。アカウントの認証は、例えば、ユーザ端末2からビルドサーバ4に対してソースコードのビルドの依頼がなされた場合に行う。
ビルド要求部23は、ユーザからの指示によってビルドサーバ4に対してソースコードを送信し、ソースコードから生成した生成物を受信する。ソースコードからの生成物は、ソースコードをビルドすることで生成されるものであり、例えば、(1)プリプロセッシングされたソースコード(拡張子:「.cpp」等)、(2)オブジェクトファイル(拡張子:「.o」等)、(3)実行可能形式ファイル(拡張子:「.exe」等)のことである。
<アカウント管理サーバ>
図3を参照して、アカウント管理サーバ3の機能構成について説明する。アカウント管理サーバ3は、ユーザのアカウントの管理を行う装置である。
アカウント管理サーバ3は、記憶部30と、制御部40とを備えて構成される。記憶部30は、RAM(Random Access Memory)、ROM(Read Only Memory)、HDD(Hard Disk Drive)、フラッシュメモリ等の記憶媒体から構成される。制御部40は、アカウント管理サーバ3が備えるCPU(Central Processing Unit)によるプログラム実行処理や、専用回路等により実現される。制御部40がプログラム実行処理により実現する場合、記憶部30には、制御部40の機能を実現するためのプログラムが格納される。
記憶部30には、アカウント情報DB31が格納されている。アカウント情報DB31は、各ユーザのアカウント情報が検索可能な状態で格納されているものである。図4にアカウント情報の構成を示す。アカウント情報は、ユーザID31a、パスワード31b、ユーザ名31c、生成物パターン31dで構成されている。
ユーザID31aは、ユーザを識別する情報であり、例えば、数字、英字等の組合せで構成される。パスワード31bは、ユーザが任意に決定した情報であり、例えば、数字、英字等の組合せで構成される。ユーザ名31cは、ユーザの名称を示す情報であり、例えば、漢字、平仮名、片仮名等の組合せで構成される。
生成物パターン31dは、ビルドサーバ4がソースコード(拡張子:「.cpp」等)のビルドを行った場合にユーザが受け取る生成物(オブジェクトファイル等)の種類を示す情報である。詳細は後記するが、ビルドサーバ4は、ソースコードをビルドすると(1)プリプロセッシングされたソースコード(拡張子:「.cpp」等)、(2)オブジェクトファイル(拡張子:「.o」等)、(3)実行可能形式ファイル(拡張子:「.exe」等)のいずれも生成することができる。その為、ユーザは、上記3つの中から希望するものを指定して受け取ることができる。
・パターン「1」は、生成物として「プリプロセッシングされたソースコード」のみの受け取りを希望する場合に設定される。
・パターン「2」は、生成物として「オブジェクトファイル」のみの受け取りを希望する場合に設定される。
・パターン「3」は、生成物として「実行可能形式ファイル」のみの受け取りを希望する場合に設定される。
・パターン「4」は、「プリプロセッシングされたソースコード」と「オブジェクトファイル」の二つの受け取りを希望する場合に設定される。
・パターン「5」は、「プリプロセッシングされたソースコード」と「実行可能形式ファイル」の二つの受け取りを希望する場合に設定される。
・パターン「6」は、「オブジェクトファイル」と「実行可能形式ファイル」の二つの受け取りを希望する場合に設定される。
・パターン「7」は、「プリプロセッシングされたソースコード」と「オブジェクトファイル」と「実行可能形式ファイル」の全ての受け取りを希望する場合に設定される。
続いて、図3に戻り、制御部40について説明する。制御部40には、アカウント登録部41と、アカウント認証部42とが備えられている。ここでは、各機能の概要のみを説明し、詳細は「オンラインビルドシステムの動作」で後記する。
アカウント登録部41は、ユーザからの依頼によってアカウントを登録し、登録結果を返信する。ここで、ユーザからの依頼は、ビルドサーバ4を介して行われてもよいし、ユーザ端末2から直接行われてもよい。
アカウント認証部42は、ビルドサーバ4からの依頼によってアカウントの認証を行い、認証結果をビルドサーバ4に返信する。アカウントの認証は、例えば、ユーザからビルドサーバ4に対してソースコードのビルドの依頼がなされた場合に行う。
<ビルドサーバ>
図5を参照して、ビルドサーバ4の機能構成について説明する。ビルドサーバ4は、オンラインでソースコード(拡張子:「.cpp」等)を受信し、ソースコードのビルドを行う装置である。
ビルドサーバ4は、記憶部50と、制御部60とを備えて構成される。記憶部50は、RAM(Random Access Memory)、ROM(Read Only Memory)、HDD(Hard Disk Drive)、フラッシュメモリ等の記憶媒体から構成される。制御部60は、ビルドサーバ4が備えるCPU(Central Processing Unit)によるプログラム実行処理や、専用回路等により実現される。制御部60がプログラム実行処理により実現する場合、記憶部50には、制御部60の機能を実現するためのプログラムが格納される。
記憶部50には、プリプロセッシング情報DB51が格納されている。プリプロセッシング情報DB51は、プリプロセッシング時にソースコードに追加する追加コード情報を検索可能な状態としたものである。追加コード情報は、バグの作り込みを抑制する情報(作り込み抑制情報)であり、検索コード記述51a、追加コード記述51b、追加位置51cで構成されている。なお、検索コード記述51aに対して、追加コード記述51bおよび追加位置51cが複数登録されていてもよい。
検索コード記述51aは、ソースコード内で検索対象となるコードであり、例えば、「new」、「dynamic_cast」、「iterator」等で構成される。追加コード記述51bは、検索コード記述51aが存在した場合に、ソースコードに追加するコードの情報である。追加位置51cは、検索コード記述51aが存在した場合に、追加コード記述51bを追加するソースコードの位置情報(宣言部も含む)である。詳細は、実施例で説明する。
続いて、図5に戻り、制御部60について説明する。制御部60には、アカウント登録要求部61と、アカウント認証要求部62と、プリプロセッシング実行部63と、コンパイル実行部64と、生成物提供部65とが備えられている。ここでは、各機能の概要のみを説明し、詳細は「オンラインビルドシステムの動作」で後記する。
アカウント登録要求部61は、ユーザ端末2からアカウント登録要求を受信した場合に、受信したアカウント登録要求をアカウント管理サーバ3に送信(転送)するものである。また、アカウント登録要求部61は、アカウント管理サーバ3からアカウント登録結果を受信した場合に、受信したアカウント登録結果をユーザ端末2に送信(転送)するものである。
アカウント認証要求部62は、ユーザ端末2からアカウント認証要求を受信した場合に、受信したアカウント認証要求をアカウント管理サーバ3に送信(転送)するものである。また、アカウント認証要求部62は、アカウント管理サーバ3からアカウント認証結果を受信した場合に、受信したアカウント認証結果をユーザ端末2に送信(転送)するものである。
プリプロセッシング実行部63は、プリプロセッシング情報DB51を参照して、ソースコードの中から検索対象のコード記述を検索し、対象の記述が存在した場合に所定のコードをソースコードに追加記述するものである。
コンパイル実行部64は、プリプロセッシングされたソースコードをコンパイルするものである。コンパイル実行部64は、ソースコードをコンパイルすると(1)プリプロセッシングされたソースコード(拡張子:「.cpp」等)、(2)オブジェクトファイル(拡張子:「.o」等)、(3)実行可能形式ファイル(拡張子:「.exe」等)のいずれも生成する。
生成物提供部65は、生成物パターン31dに基づいて、ユーザ端末2に生成物を送信する。
以上で、オンラインビルドシステム1の構成についての説明を終了する。
≪実施形態に係るオンラインビルドシステムの動作≫
オンラインビルドシステム1の動作について説明する。ここでは、まずアカウント登録処理について説明し、続いて、ビルド処理について説明する。オンラインビルドシステム1では、ビルド処理の実行に際して、アカウント登録処理の成功が事前に必要である。
<アカウント登録処理>
図7を参照して、オンラインビルドシステム1を利用するユーザのアカウント登録処理について説明する。
最初に、ユーザ端末2のアカウント登録要求部21は、ビルドサーバ4に対してアカウント登録要求を送信する(ステップS11)。次に、ビルドサーバ4のアカウント登録要求部61は、アカウント管理サーバ3に対してアカウント登録要求を送信する(ステップS12)。次に、アカウント管理サーバ3のアカウント登録部41は、アカウント情報を作成し、アカウント情報をアカウント情報DB31に登録する(ステップS13)。次に、アカウント管理サーバ3のアカウント登録部41は、ビルドサーバ4に対してアカウント登録応答を送信する(ステップS14)。次に、ビルドサーバ4のアカウント登録要求部61は、ユーザ端末2に対してアカウント登録応答を送信する(ステップS15)。
なお、ここでは、アカウント登録処理について説明したが、アカウント更新処理やアカウント削除処理についても同様に行うことが可能である。その場合に、図7に示す「アカウント登録」を「アカウント更新」または「アカウント削除」に読み替えるものとする。
<ビルド処理>
図8を参照して、オンラインビルドシステム1のビルド処理について説明する。
最初に、ユーザ端末2のアカウント認証要求部22は、ビルドサーバ4に対してアカウント認証要求を送信する(ステップS21)。次に、ビルドサーバ4のアカウント認証要求部62は、アカウント管理サーバ3に対してアカウント認証要求を送信する(ステップS22)。次に、アカウント管理サーバ3のアカウント認証部42は、アカウント情報DB31を参照してアカウント情報を認証する(ステップS23)。次に、アカウント管理サーバ3のアカウント認証部42は、ビルドサーバ4に対してアカウント認証応答を送信する(ステップS24)。ビルドサーバ4は、ここで、アカウント情報を取得する。次に、ビルドサーバ4のアカウント認証要求部62は、ユーザ端末2に対してアカウント認証応答を送信する(ステップS25)。なお、ビルドサーバ4によるアカウント情報の取得は、ステップS24のタイミングに限定されるものではない。
次に、ユーザ端末2のビルド要求部23は、ビルドサーバ4に対してソースコードを送信する(ステップS26)。次に、ビルドサーバ4のプリプロセッシング実行部63は、受信したソースコードのプリプロセッシングを実行する(ステップS27)。プリプロセッシングの詳細については後記する。次に、ビルドサーバ4のコンパイル実行部64は、プリプロセッシングしたソースコードのコンパイルを実行する(ステップS28)。次に、ビルドサーバ4の生成物提供部65は、取得したアカウント情報の生成物パターンに対応する生成物をユーザ端末2に対して送信する(ステップS29)。そして、ユーザは受信した生成物を用いてUTを実施する。なお、ステップS26でコンパイルできないソースコードが送信された場合には、ステップS29で生成物提供部65がユーザ端末2に対してエラー応答を生成物として送信するのがよい。
<プリプロセッシング処理>
図9を参照して、ステップS27におけるビルドサーバ4のプリプロセッシング実行部63のプリプロセッシング処理について説明する。なお、各ステップでのより詳細な処理については、実施例で説明する。
まず、プリプロセッシング実行部63は、プリプロセッシング情報DB51を参照して検索コード記述の検索(パターン検索)を行う(ステップS31)。続いて、プリプロセッシング実行部63は、ステップS31でソースコード内にパターンが有ったか否かを判定し(ステップS32)、ステップS32で“Yes”の場合に処理をステップS33に進め、ステップS32で“No”の場合に処理を終了する。
ステップS32で“Yes”の場合に、プリプロセッシング実行部63は、宣言部有りのパターンであるか否かを判定(ステップS33)し、ステップS33で“Yes”の場合に処理をステップS34に進め、ステップS33で“No”の場合に処理をステップS35に進める。ステップS33で“Yes”の場合に、プリプロセッシング実行部63は、プリプロセッシング情報DB51を参照して宣言部にコードを埋め込み(ステップS34)、処理をステップS35に進める。
ステップS33で“No”の場合、およびステップS34に続いて、プリプロセッシング実行部63は、プリプロセッシング情報DB51を参照してパターンの所定場所にコードを埋め込み(ステップS35)、処理を終了する。なお、複数のパターンの検索を行う場合には、ステップS31からステップS35までの処理を繰り返し行う。なお、ステップS34の処理とステップS35の処理とは、順序が逆であってもよい。つまり、パターンの所定場所にコードを埋め込んだ後に、宣言部にコードを埋め込んでもよい。
以上で、オンラインビルドシステム1の動作についての説明を終了する。
<DELETE_ARRAY(スカラー配列へのDELETEの使用)>
実施例1ではソースコードに「DELETE_ARRAY(スカラー配列へのDELETEの使用)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図10(a)はバグ有りのサンプルコードを示し、図10(b)はバグ無しのサンプルコードを示している。
図10(a)では、前段で配列のインスタンスを確保したにも関わらず、符号C11に示す部分で配列の先頭しか解放されていない。その為、メモリリークの原因となる。
そうならない為には、「new」で配列インスタンスを確保した場合に、図10(b)の符号C12で示すように、必ず「delete」に「[ ]」を記載する必要がある。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)「new」が記述されているソースファイルを全て検索する。
(2)ファイル内に「new」が記述されている場合、ファイルの先頭に次の3行のコードを埋め込む。
#include<crtdbg.h>
#define _CRTDBG_MAP_ALLOC
#define new ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
(3)「new」が記述されている関数(メソッド)内の末尾(’}’直前の行)に、次の1行を埋め込む。
_CrtDumpMemoryLeaks();
図10(c)は、図10(b)のコードに対するプリプロセッシング後のコードを示している。図10(c)では、符号C13に示す部分で「crtdbg.h」を「include」し、「_CRTDBG_MAP_ALLOC」を「define」している。また、符号C14に示す部分「_CrtDumpMemoryLeaks()」でログを出力している。その為、ユーザは、図10(a)に示すようにバグが有る場合でも、UT工程でこのログを確認することにより、図10(b)に示すコードに修正できる。
<FORWARD_NULL(未確認のダイナミックキャスト)>
実施例2ではソースコードに「FORWARD_NULL(未確認のダイナミックキャスト)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図11(a)はバグ有りのサンプルコードを示し、図11(b),(c)はバグ無しのサンプルコードを示している。
図11(a)では、符号C21に示す部分で「dynamic_cast」が失敗すると何も返さない(ダウンキャストが保証できないため、NULLのままとなる)。そして、符号C22に示す部分で、「NULL」に対してアクセス可能性がある。
そうならない為には、図11(b)の符号C23に示すように、参照するオブジェクトに「const」を付けずダウンキャストを保証してから、符号C24に示すようにダイナミックキャストを行うようにする。
または、図11(c)の符号C25に示すように、ダウンキャストが失敗するようであれば、コンパイルに失敗するようにする。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)「dynamic_cast」が記述されているソースファイルをすべて検索する。
(2)ファイル内に「dynamic_cast」が記述されていた場合、ファイルの先頭に次の2行のコードを埋め込む(宣言部へのコード埋め込み)。
#include<stdio.h>
#include<stdlib.h>
(3)ファイル内に「dynamic_cast」が記述されていた場合、[代入先の変数]を特定する。
(4)「dynamic_cast」記述行の次行に、次の3行のコードを埋め込む。
if( [代入先の変数] == NULL ){
fprintf(stderr, “%s”, errMsg); abort();
}
図12(d)は、図11(b)のコードに対するプリプロセッシング後のコードを示している(宣言部の記載は省略)。図12(d)では、符号C26に示す部分で「NULLチェック」を行うことで、ダイナミックキャストの成否が分かる。その為、ユーザは、図11(a)に示すようにバグが有る場合でも、UT工程でダイナミックキャストの成否を判定することにより、図11(b),(c)に示すコードに修正できる。
<INVALIDATE_ITERATOR(不正なイテレータの使用)>
実施例3ではソースコードに「INVALIDATE_ITERATOR(不正なイテレータの使用)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図13(a)はバグ有りのサンプルコードを示し、図13(b),(c),図14(d)はバグ無しのサンプルコードを示している。
図13(a)では、符号C31に示す部分でイテレータが無効化され、符号C32に示す部分で無効化されたイテレータを参照している。
そうならない為には、図13(b)に示すように、符号C33に示す部分でイテレータが不要であることを示すフラグを設け、符号C34に示す部分でフラグチェックを行うようにする。この方法は、以降の処理でイテレータを使用しない場合に有効である。
または、図13(c)に示すように、イテレータを後置インクリメントし、符号C35に示す部分でイテレータのコピーを「erase()」に渡すようにする。これにより、イテレータは無効化されない。この方法は、以降もイテレータを使用するが、終端ではない場合に有効である。
または、図14(d)に示すように、符号C36に示す部分で有効なイテレータを受け取り、符号C37に示す部分で仮の要素を代入している。これにより、イテレータは無効化されない。この方法は、以降もイテレータを使用するが、削除したイテレータの要素について感知しない場合に有効である。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)イテレータ「iterator」が記述されているソースファイルをすべて検索する。
(2)ファイル内に「iterator」が記述されていた場合、[代入先の変数]を特定する。
(3)ファイル内に次の記述があった場合、
.erase([代入先の変数])
代入先の変数の定義箇所を、文字列検索により特定し、下記のようにコピー変数を作成する。なお、作成場所は、eraseが実行されているネスト(カーリブレイス→{})の先頭に記述する。
typename std::list<T>::iterator new_it = m_lockQueue.begin();
new_it = it;
加えて、erase実施直後に次のif文を追記する。
if( it != new_it ){
fprintf(stderr, “invalid iterator used!\n”);
}
加えて、ファイル先頭に次の1行を埋め込む。(DEBUGMSGを利用せず、fprintfを利用する場合の対処)
#include<stdio.h>
図14(e)は、図13(c)のコードに対するプリプロセッシング後のコードを示している(宣言部の記載は省略)。イテレータが無効になるタイミングは「erase()」が実行された場合に限られる。図14(e)では、符号C38に示す部分で新イテレータを新たに定義しなおし、削除処理が実施された後の符号C39に示す部分で、旧イテレータと新イテレータとの間で差分があった場合にログを出力する。その為、ユーザは、図13(a)に示すようにバグが有る場合でも、UT工程でこのログを確認することにより、図13(b),(c),図14(d)に示すコードに修正できる。
<MISSING_LOCK(データに対する競合)>
実施例4ではソースコードに「MISSING_LOCK(データに対する競合)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図15(a)はバグ有りのサンプルコードを示し、図15(b)はバグ無しのサンプルコードを示している。
図15(a)では、符号C41に示す共有変数に対して、符号C42に示す部分でロックを取らずにアクセスしているので競合の可能性がある。
そうならない為には、図15(b)に示すように、共有変数に対して「grep」を行い、共有変数を使用している前の符号C43に示す部分でロックを取得し、共有変数を使用している後の符号C44に示す部分でロックを解放するようにする。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)文字列検索等でlock処理が記述されている箇所を特定する。
(2)当該処理の先頭に、以下の記述を追加する。
fprintf (stderr, “locked.\n”);
(3)文字列検索等でunlock処理が記述されている箇所を特定する。
(4)当該処理の先頭に、以下の記述を追加する。
fprintf (stderr, “unlocked.\n”);
(5)ファイル先頭に次の1行を埋め込む(宣言部へのコード埋め込み)。
#include<stdio.h>
図15(c)は、図15(b)のコードに対するプリプロセッシング後のコードを示している(宣言部の記載は一部省略)。図15(c)では、符号C45に示す部分でlock関数内にデバッグメッセージを埋め込め、符号C46に示す部分でunlock関数内にデバッグメッセージを埋め込む。その為、ユーザは、図15(a)に示すようにバグがある場合でも、共有変数の使用回数と、lock/unlockのデバッグメッセージ表示回数とを確認することにより、図15(b)に示すコードに修正できる。
<NEGATIVE_RETURNS(引数が負の値をとれない)>
実施例5ではソースコードに「NEGATIVE_RETURNS(引数が負の値をとれない)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図16(a)はバグ有りのサンプルコードを示し、図16(b)はバグ無しのサンプルコードを示している。
図16(a)では、符号C51で示す部分で負の値を返すことがあり、符号C52に示す部分で「memcpy」に負数を渡してしまうと整数オーバーフローを引き起こし、任意コード実行の脆弱性を生み出してしまう。
そうならない為には、図16(b)に示すように、符号C53で「unsigned int(size_t)版」と「signed int(ssize_t)版」を用意する(オーバーロード)。そして、符号C54で、安全な「memcpy(s_memcpy)」利用するようにする。なお、memmove, memset, memcmp, strncpy等、整数オーバーフローの危険性がある関数も同様に対処する。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)「memcpy」が記述されているソースファイルをすべて検索する(memcpy以外についても別途行う)。
(2)ファイル内に「memcpy」が記述されていた場合、「s_memcpy」に置き換える。
(3)ファイル内に「memcpy」が記述されていた場合、 ファイルの先頭に次の7行を埋め込む。
void* s_memcpy(void* dest, const void* src, std::size_t n) __THROW { return std::memcpy(dest, src, n); }
void* s_memcpy(void* dest, const void* src, ssize_t n) {
if(n < 0) {
throw std::runtime_error("s_memcpy: integer overflow detected.");
}
return s_memcpy(dest, src, (std::size_t)n);
}
図17(c)は、図16(b)のコードに対するプリプロセッシング後のコードを示している。図17(c)では、符号C55に示す部分で負数を返す可能性がある関数については、返値の評価を行っている(走行ルートを分岐している)。その為、ユーザは、図16(a)に示すようにバグがある場合でも、返値の評価を行うことにより、図16(b)に示すコードに修正できる。
<PASS_BY_VALUE(大きなパラメータの値渡し)>
実施例6ではソースコードに「PASS_BY_VALUE(大きなパラメータの値渡し)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図18(a)はバグ有りのサンプルコードを示し、図18(b),(c)はバグ無しのサンプルコードを示している。
図18(a)では、符号C61に示す部分で184バイトのオブジェクトのコピーが渡されている。一般的に16バイトを超えるオブジェクトのコピーはコストが高いとされる。
そうならない為には、図18(b)の符号C62や符号C63に示すように、インスタンスのポインタを渡すようにする。
または、図18(c)の符号C64に示すように、インスタンスの参照を渡すようにする。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)デストラクタが記述されているソースファイルをすべて検索する。
(2)ファイル内にデストラクタが記述されていた場合、ファイルの先頭に次の1行を埋め込む(宣言部へのコード埋め込み)。
#define OBJECT_SIZE_LIMIT 16
(3)ファイル内にデストラクタが記述されていた場合、デストラクタ内末尾に次の3行を埋め込む。
if( OBJECT_SIZE_LIMIT < sizeof(*this) ){
DEBUGMSG(“NodeTable memfree = %dbytes\n”, sizeof(*this));
}
図19(d)は、図18(c)のコードに対するにプリプロセッシング後のコードを示している(宣言部の記載は省略)。図19(d)では、符号C65に示す部分で、デストラクタに自身のインスタンスサイズを評価する機能を盛り込み、16バイトを超えるオブジェクトのメモリ解放があれば、デバッグメッセージを出力する。その為、ユーザは、図18(a)に示すようにバグがある場合でも、デバッグメッセージの確認を行うことにより、図18(b),(c)に示すコードに修正できる。
<SIZEOF_MISMATCH(不正なsizeofの引数)>
実施例7ではソースコードに「SIZEOF_MISMATCH(不正なsizeofの引数)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図20(a)はバグ有りのサンプルコードを示し、図20(b)はバグ無しのサンプルコードを示している。
図20(a)では、符号C71に示す部分でヒープ領域にメモリ確保したポインタを「sizeof」の引数に渡している為、「sizeof」はポインタのサイズ(4or8)しか返さない。
そうならない為には、図20(b)の符号C72に示すように、実際に確保したサイズと型のサイズを乗じた値を渡すようにする。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)「memset」が記述されているソースファイルをすべて検索する。
(2)「memset」の第3引数を検出する。
(3)ファイル内に「memset」が記述されていた場合、ファイルの先頭に次のコードを埋め込む(宣言部へのコード埋め込み)。
#include<stdio.h>
(4)「memset」の前後に次のコードを埋め込む。
unsigned int size_t = [第3引数];
if( size_t >= logMsgSize ){
memset(logMsg, 0x0, size_t );
} else {
fprintf (stderr, “memset size_t invalid = %d\n”, size_t);
}
図20(c)は、図20(b)のコードに対するにプリプロセッシング後のコードを示している(宣言部の記載は省略)。図20(c)では、符号C73に示す部分で、「size_t」を利用する関数(memset等)については、「size_t」の引数に直接「sizeof」を利用しないこととし、別途「size_t」のバイト数が配列長よりも大きいか否かの評価を行う。その為、ユーザは、図20(a)に示すようにバグがある場合でも、デバッグメッセージの確認を行うことにより、図20(b)に示すコードに修正できる。
<UNCAUGHT_EXCEPT(キャッチされない例外)>
実施例8ではソースコードに「UNCAUGHT_EXCEPT(キャッチされない例外)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図21(a)はバグ有りのサンプルコードを示し、図21(b)はバグ無しのサンプルコードを示している。
図21(a)では、符号C81で示す部分で、定義されていない「boost::lock_error」の例外をスローする。
そうならない為には、図21(b)の符号C82に示すように、発生し得る全ての例外パターンについて、処理を規定する。
プリプロセッシング実行部63は、UT工程でユーザがバグの発見をできるように、以下のコード埋め込みを行う。
(1)「Exceptionクラス」が記述されているソースファイルをすべて検索する。
(2)コンストラクタに、次の通りコードを埋め込む。
コンストラクタ(){
std::set_unexpected(unexpected_handler);
}
(3)「Exceptionクラス」内に、次の通りコードを埋め込む。
void unexpected_handler(){
fprintf(stderr, “Called unexpected handler\n”);
throw(expected_handler);
}
(4)ファイルの先頭に次のコードを埋め込む(宣言部へのコード埋め込み)。
#include<stdio.h>
図22(c)は、図21(b)のコードに対するにプリプロセッシング後のコードを示している。UT工程において例外ハンドラはスタブとして用いられるので、図22(c)の符号C83に示す部分で、「unexpected」をユーザのハンドラで上書きし、そこにログを表示するコードを記述している。さらに、ユーザのハンドラで許可(予期)している例外を発生させることで、強制終了(terminated()の発生)を防ぐことができる。その為、ユーザは、図21(a)に示すようにバグがある場合でも、UTでデバッグメッセージの確認を行うことにより、図21(b)に示すコードに修正できる。
<UNINIT_CTOR(スカラー値の未初期化)>
実施例9ではソースコードに「UNINIT_CTOR(スカラー値の未初期化)」が記述されている場合に、プリプロセッシングで追加するコード記述について説明する。
図23(a)はバグ有りのサンプルコードを示し、図23(b)はバグ無しのサンプルコードを示している。
図23(a)では、符号C91に示すように、コンストラクタでメンバ変数が初期化されておらず、符号C92に示すように、初期化されていないメンバ変数値が設定されている。
そうならない為には、図23(b)の符号C93に示すように、コンストラクタ内でメンバ変数を全て初期化する。
プリプロセッシング実行部63は、UT工程でユーザがバグの作り込みを抑制するために、以下のコード埋め込みを行う。
(1)コンストラクタに、クラス内で定義されたメンバ変数のうち、未初期化のものをすべて初期化するコードを次のように埋め込む。
クラス(){
private:
メンバ変数1 = 0;
メンバ変数2 = 0;

};
図24(c)は、図23(b)のコードに対するプリプロセッシング後のコードを示している。図24(c)の符号C94に示す部分では、コンストラクタ内でメンバ変数の初期化忘れ、またはコンストラクタ内で初期値を決定できない場合の対策として初期化フラグを設け、「setter」が呼ばれた時に初期化フラグを「ON」にし、「getter」ではすでに初期化済みか否かを判定する(通常、スカラー値の未初期化はコンパイラのワーニングとして出力される)。その為、ユーザは、図23(a)に示すようにバグがある場合でも、変数の初期化をUT時点で意識することができ、変数の初期化フローを確認する機会が生まれるので、図23(b)に示すコードに修正できる。
以上のように、実施形態に係るオンラインビルドシステム1は、ソースコード上の脆弱性(バグ)の発見を手助けするコードを自動的に埋め込むことができる。その為、本発明に係るオンラインビルドシステム1は、静的解析ツールを用いて静的リファクタリングを実施することなく、従来、単体試験工程(UT)で発見が困難とされていたバグをUTで発見することができる。
また、実施形態に係るオンラインビルドシステム1は、プリプロセッシングされたコード以外にも、オブジェクトファイルや実行可能形式ファイルを生成することができる。その為、本発明に係るオンラインビルドシステム1は、ユーザの求めに応じて種々の生成物を提供することが可能である。
[変形例]
以上、本発明の実施形態について説明したが、本発明はこれに限定されるものではなく、特許請求の範囲の趣旨を変えない範囲で実施することができる。実施形態の変形例を以下に示す。
実施形態では、アカウント管理サーバ3とビルドサーバ4とを別装置としていた。しかしながら、アカウント管理サーバ3の機能をビルドサーバ4が有する単一の装置であってもよい。また、アカウントの登録・認証を行わなくてもよい。
また、実施形態では、コンパイルをビルドサーバ4で行っていた。しかしながら、ビルドサーバ4以外(例えば、ユーザ端末2)でコンパイルを行ってもよい。
1 オンラインビルドシステム
2 ユーザ端末
3 アカウント管理サーバ
4 ビルドサーバ
50 記憶部
51 プリプロセッシング情報DB
60 制御部
63 プリプロセッシング実行部
64 コンパイル実行部
65 生成物提供部

Claims (4)

  1. ユーザ端末と、前記ユーザ端末からソースコードを受信してプリプロセッシングを実施するビルドサーバとを備えたオンラインビルドシステムであって、
    前記ビルドサーバは、
    所定のコードのパターンと、前記ソースコード内のバグの可能性を発見する契機となる又はバグに対処するコード記述とが対応づけられた作り込み抑制情報が格納された記憶部と、
    前記作り込み抑制情報を参照して前記ソースコードを検索し、前記パターンを発見した場合に、前記コード記述を当該ソースコードに追加するプリプロセッシングを実行するプリプロセッシング実行部と、を備える、
    ことを特徴とするオンラインビルドシステム。
  2. 前記ビルドサーバは、
    前記プリプロセッシング後のソースコードのコンパイルを実行するコンパイル実行部をさらに備える、
    ことを特徴とする請求項1に記載のオンライビルドシステム。
  3. ユーザ端末と、前記ユーザ端末からソースコードを受信してプリプロセッシングを実施するビルドサーバとを備えたオンラインビルドシステムのオンライビルド方法であって、
    前記ビルドサーバは、
    所定のコードのパターンと、前記ソースコード内のバグの可能性を発見する契機となる又はバグに対処するコード記述とが対応づけられた作り込み抑制情報が格納された記憶部を有し、
    前記作り込み抑制情報を参照して前記ソースコードを検索する検索ステップと、
    前記パターンを発見した場合に、前記コード記述を当該ソースコードに追加するコード追加ステップとを実行する、
    ことを特徴とするオンラインビルド方法。
  4. 請求項3に記載のオンラインビルド方法をオンラインビルドシステムとしてコンピュータに実行させるためのオンラインビルドプログラム。
JP2014077302A 2014-04-03 2014-04-03 オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラム Active JP6204253B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014077302A JP6204253B2 (ja) 2014-04-03 2014-04-03 オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014077302A JP6204253B2 (ja) 2014-04-03 2014-04-03 オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラム

Publications (2)

Publication Number Publication Date
JP2015197902A true JP2015197902A (ja) 2015-11-09
JP6204253B2 JP6204253B2 (ja) 2017-09-27

Family

ID=54547515

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014077302A Active JP6204253B2 (ja) 2014-04-03 2014-04-03 オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラム

Country Status (1)

Country Link
JP (1) JP6204253B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180061589A (ko) * 2016-11-30 2018-06-08 주식회사 플루이딕 소프트웨어 빌드 시스템 및 이를 이용한 소프트웨어 빌드 방법
WO2020139281A1 (en) * 2018-12-24 2020-07-02 Turkcell Teknoloji Arastirma Ve Gelistirme Anonim Sirketi A pre-compilation error detection system

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1165837A (ja) * 1997-08-27 1999-03-09 Oki Electric Ind Co Ltd 外部ファイルデータのデータ例外検出方法及び外部ファイルデータのデータ例外検出プログラムを記録した記録媒体
JPH11296366A (ja) * 1998-04-07 1999-10-29 Nec Corp エラー検出装置及びエラー検出方法及び記録媒体
JP2004240477A (ja) * 2003-02-03 2004-08-26 Mitsubishi Electric Corp ソースコード静的解析支援システムおよび静的解析装置
JP2005182102A (ja) * 2003-12-16 2005-07-07 Nec Corp ビルドシステム及び方法並びにビルド用プログラム、ビルドサーバ
JP2005284785A (ja) * 2004-03-30 2005-10-13 Jfe Steel Kk プログラム開発装置
JP2008027171A (ja) * 2006-07-20 2008-02-07 Kyocera Mita Corp 画像形成装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1165837A (ja) * 1997-08-27 1999-03-09 Oki Electric Ind Co Ltd 外部ファイルデータのデータ例外検出方法及び外部ファイルデータのデータ例外検出プログラムを記録した記録媒体
JPH11296366A (ja) * 1998-04-07 1999-10-29 Nec Corp エラー検出装置及びエラー検出方法及び記録媒体
JP2004240477A (ja) * 2003-02-03 2004-08-26 Mitsubishi Electric Corp ソースコード静的解析支援システムおよび静的解析装置
JP2005182102A (ja) * 2003-12-16 2005-07-07 Nec Corp ビルドシステム及び方法並びにビルド用プログラム、ビルドサーバ
JP2005284785A (ja) * 2004-03-30 2005-10-13 Jfe Steel Kk プログラム開発装置
JP2008027171A (ja) * 2006-07-20 2008-02-07 Kyocera Mita Corp 画像形成装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180061589A (ko) * 2016-11-30 2018-06-08 주식회사 플루이딕 소프트웨어 빌드 시스템 및 이를 이용한 소프트웨어 빌드 방법
WO2020139281A1 (en) * 2018-12-24 2020-07-02 Turkcell Teknoloji Arastirma Ve Gelistirme Anonim Sirketi A pre-compilation error detection system

Also Published As

Publication number Publication date
JP6204253B2 (ja) 2017-09-27

Similar Documents

Publication Publication Date Title
US10055592B2 (en) Systems and methods to generate a type based self-assembling indirect control flow graph
US11100546B2 (en) Method and system for provenance tracking in software ecosystems
EP3674954B1 (en) Security control method and computer system
Zhang et al. Precise and accurate patch presence test for binaries
US20220318399A1 (en) Method and contract rewriting framework system for supporting smart contracts in a blockchain network
US20170286692A1 (en) Vulnerability finding device, vulnerability finding method, and vulnerability finding program
US10387627B2 (en) Systems and methods for analyzing software
Nelaturu et al. Verified development and deployment of multiple interacting smart contracts with VeriSolid
US20220198003A1 (en) Detecting added functionality in open source package
CN108595950A (zh) 一种结合远程认证的sgx安全增强方法
CN112068874B (zh) 软件项目持续集成方法、装置、终端设备和存储介质
US11461472B2 (en) Automatic correctness and performance measurement of binary transformation systems
US20170344746A1 (en) Utilizing likely invariants for runtime protection of web services
CN115168847A (zh) 应用补丁生成方法、装置、计算机设备及可读存储介质
JP6204253B2 (ja) オンラインビルドシステム、オンラインビルド方法およびオンラインビルドプログラム
Soewito et al. Android sensitive data leakage prevention with rooting detection using Java function hooking
CN104603791A (zh) 签名验证装置及签名验证方法和程序
US20190102279A1 (en) Generating an instrumented software package and executing an instance thereof
CN114417347A (zh) 应用程序的漏洞检测方法、装置、设备、存储介质和程序
Mu et al. Colafuze: Coverage-guided and layout-aware fuzzing for android drivers
Maggio et al. Seance: Divination of tool-breaking changes in forensically important binaries
CN112947948B (zh) 应用服务的部署方法及装置
Küchler et al. AbsIntIO: Towards Showing the Absence of Integer Overflows in Binaries using Abstract Interpretation
US20240134979A1 (en) Systems and Methods for API Security Integration
CN111159663B (zh) 指令定位方法和装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160722

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170424

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170509

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170620

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170829

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170831

R150 Certificate of patent or registration of utility model

Ref document number: 6204253

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150