JP6336919B2 - ソースコードレビュー方法及びそのシステム - Google Patents

ソースコードレビュー方法及びそのシステム Download PDF

Info

Publication number
JP6336919B2
JP6336919B2 JP2015007378A JP2015007378A JP6336919B2 JP 6336919 B2 JP6336919 B2 JP 6336919B2 JP 2015007378 A JP2015007378 A JP 2015007378A JP 2015007378 A JP2015007378 A JP 2015007378A JP 6336919 B2 JP6336919 B2 JP 6336919B2
Authority
JP
Japan
Prior art keywords
source code
review
score
management unit
unit
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.)
Active
Application number
JP2015007378A
Other languages
English (en)
Other versions
JP2016133946A (ja
Inventor
昭裕 長井
昭裕 長井
中村 秀樹
秀樹 中村
前岡 淳
淳 前岡
大二郎 村田
大二郎 村田
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2015007378A priority Critical patent/JP6336919B2/ja
Publication of JP2016133946A publication Critical patent/JP2016133946A/ja
Application granted granted Critical
Publication of JP6336919B2 publication Critical patent/JP6336919B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明はソフトウェア開発におけるソースコードレビューを支援する方法及びシステムに係る。
オープンソースソフトウェア開発において、GitHub(非特許文献1)のようなサービスを利用した不特定多数の開発者と共同開発を行っていく開発手法が採用されてきている。
これらのサービスは、不特定多数の開発者からPull Requestと呼ばれるソースコード差分のレビュー依頼を受け、当該ソフトウェアのオーナーがレビューをし、レビューが完了したソースコード差分を取り込んでいく開発手法を、システムとしてサポートしている。
近年、企業内でも従来行われてきたウォーターフォールモデルの開発から、このようなサービス・システムを利用したアジャイル的開発手法の適用がなされようとしているが、ソースコードレビューのコストが大きいことが問題となっている。
ソースコードレビューコスト削減への公知の取り組みとして、特許文献1が存在する。
これは、レビュー対象となるソースコードを静的解析し、コーディング上の警告を出力し、その警告に優先度を付与することで、レビューコストを削減する。しかし、昨今行われているアジャイル開発においては、品質は自動テストにより担保し、なおかつソフトウェアの仕様は作りながら変わっていくものである。また、仕様を変更するときは、そのソフトウェアが当初目指していたコアとなるコンセプト、例えばユーザビリティやデザインが守られているかどうかが非常に重要である。
この時、開発チームとしては、品質と同程度にソフトウェアの仕様がどのように変えられたかということに関心があり、より詳細にレビューされなければならない。しかし、静的解析においては、そのような開発チームの関心の度合いを知る術を持たない。
特開2008-52424
Git, GitHub, Gerrit, Stash
GitHub, Chris Dawson, Oreilly Media, ISBN-13:978-1449368012
アジャイル開発等の手法を採用したソフトウェア開発において、ソースコードレビュー時に、開発チームの関心度の高い箇所を優先的に出力することで、ソースコードレビューの漏れをなくすと同時に、レビューコストの削減を行う。
関心度の高い箇所はより多く変更され、また、多くのレビューコメントが付くという前提に立ち、ソースコード中の各関数の変更回数や、変更内容、レビューシステムに投稿されたレビューの多寡、バージョン管理システムの派生開発状況といった情報から、当該開発チームにおけるソースコードの関心度をスコア付けし、よりスコアの高い箇所が変更された場合、その箇所を優先的にレビュー画面に出力するようにする。
重要な箇所のレビューを優先的に実行しレビュー時間の短縮が期待できる。
アジャイル開発を行った場合の開発の流れ 本実施例におけるレビューシステムのハードウェア構成図の例 本実施例におけるレビューシステムのソフトウェア構成図の例 本実施例におけるレビューシステムの処理の流れを示すフローチャートの例 管理単位テーブルのテーブル構成図の例 スコアテーブルのテーブル構成図の例 レビュー依頼記録部に保存されるデータの例 レビュー依頼スコア情報記録部に保存されるデータの例 レビューコメントテーブルのテーブル構成図の例 スコア補正値テーブルのテーブル構成図の例 レビュー依頼情報の例 管理単位変更情報の例 スコア計算処理部のフローチャートの例 マージ処理部のフローチャート レビュー入力画面の例 レビュー依頼選択画面の例 ソースコードリポジトリの例
以下、本発明に係る実施例を、図面を用いて説明する。
図1はアジャイル開発を行った場合の開発の流れである。この例では1から始まる上のラインがmaster branch1、3から始まるラインが他のグループで開発されmaster branch1 へ開発機能を定期的にマージしているdev branch2、7から始まるラインがdev branch2から分割されレビュー後にdev branch2へマージされるtopic branch3を示しています。
この例ではレビュー依頼が7から9のノード6で表されています。ノード6の中には大量の形式的な修正を行うためのレビュー依頼や、経験年数の少ないプログラマからのレビュー依頼、重要な機能修正のためのレビュー依頼が含まれています。
図2はソースコードレビューシステムが稼働する計算機のハードウェア構成の一例である。
計算機101は、CPU(Central Processing Unit)102、主記憶装置としてのメモリ103、ネットワークデバイス104、外部記憶装置としてのストレージデバイス105から構成される。CPU102は、メモリ103上にロードされたアプリケーションプログラム111やOS(Operating System)110を実行したり、ネットワークデバイス104、ストレージデバイス105等の周辺機器を制御するために利用される。メモリ103は、ストレージデバイス105に保存されたアプリケーションプログラム111や、OS110や各種データをロードし、CPU102から参照するために利用される。
また、レビューシステム201もメモリ103にロードされ、CPU102により実行される。ネットワークデバイス104は、例えば有線LANカードであり、ネットワーク106を介し、他の計算機たとえば開発者端末107が接続され、そこからソースコードを受信したり、要求に対する応答として、Web画面などを表示するための情報をやりとりするために利用される。ネットワークデバイス104としては、ほかに、無線LANやInfiniband,Myrinet,Firewireなども利用することができる。ストレージデバイス105は、アプリケーションプログラムやOSだけでなく、バージョン管理システムが管理するソースコードリポジトリ、ソースコードのスコア、レビューコメント、プログラマのスコア補正値を記録するために使われる。
ストレージデバイス105としては、具体的にはHDD(Hard Disk Drive),SSD(Solid State Drive)、ブロックストレージ、ファイルストレージ、クラウドストレージ、テープ、また、ネットワークデバイスを介した他の計算機上にあるストレージデバイスを利用してもよい。また、計算機101は、実ハードウェアを必ずしも持つ必要はなく、ソフトウェア的に構築された仮想計算機でもよい。
図17は本発明で前提とするバージョン管理システムが管理するソースコードリポジトリの一例である。本発明においてソースコードリポジトリは、ソースコード記録部215に格納される。ソースコードリポジトリは、ある時点のソースコードの内容を一意に識別するためのバージョンID1700、前記バージョンIDにおける変更元を示す親バージョンID1701、当該バージョンに更新した作業者を記録するコミッタ1702、当該バージョンに更新した日時を記録するコミット日時1703、派生開発情報を記録するブランチ1704、また、各バージョンIDに含まれるファイル名1705およびその内容1706を記録している。
バージョンID1700はバージョン管理システムにより自動的に付与され、このバージョンIDを指定することで利用者は、前記バージョン管理システムに記録されたソースコード一式を得ることができる。このような情報を記録・管理する公知のバージョン管理システムとして、GitやSubversion等があり、本発明ではこのようなバージョン管理システムおよび、その記録形式であるソースコードリポジトリ利用することができる。
図3はレビューシステム201のソフトウェア構成図の例である。レビューシステム201はWebフロントエンド202を持ち、ユーザからWebブラウザや、RESTのようなHTTPを利用した通信手段によってアクセスされる。本実施例ではWebによるフロントエンドを持つことを想定しているが、一般的なGUIを持ったアプリケーションでもよいし、他の通信手段を用いたフロントエンドでもよい。
レビューシステム201はレビュー依頼受付部206を持つ。Webフロントエンド202経由でレビュー依頼受付部206が受け付けたソースコードは、管理単位分割処理部208が本レビューシステムで管理する管理単位に分割したものと併せ、ソースコード記録部215に記録される。
レビュー受付部205は開発者がWebフロントエンド202を介し、レビュー依頼者が依頼したソースコードへの変更にレビューやコメントを受け取る。レビュー受付部205で受け付けられたレビュー情報はレビューデータ記録部212へ保存される。
そして、作業者評価値計算部210を経由し、レビューを行った作業者への評価を行った後、作業者評価値を作業者評価値テーブル213に保存する。
レビュー依頼受付部206はソースコードの変更を受け付ける。レビュー依頼受付部206で受け付けたレビュー依頼に含まれるソースコードへの変更差分は、管理単位分割処理部208により本レビューシステムで管理する単位に分割され、ソースコード記録部215へと記録される。分割された管理単位はスコア計算処理部209へ送付され、当該レビュー依頼に含まれる管理単位の変更に関する重要度が計算される。
計算されたスコアはスコア情報記録部214と、レビューデータ記録部212およびレビュースコア情報記録部211に記録される。
レビューデータ記録部212にはレビュー依頼の情報を記録するレビュー依頼情報と、レビューコメントを記録するレビューコメントテーブルが含まれる。
スコア情報記録部214には、管理単位毎のスコアを記録しているスコアテーブル、レビュー依頼者のレビュー時・被レビュー時のスコアが記録されるユーザスコアテーブル、 レビュー依頼がどのブランチ(派生開発)に関連するかを示す対応ブランチテーブル、変更内容の種別毎の加算スコアを設定する変更種別スコアテーブルが含まれる。
ソースコード記録部215には、実際にソースコードを記録するためのソースコードリポジトリと、レビューシステムでスコア管理対象とする管理単位の情報を格納した管理単位テーブルが含まれる。
ソースコードリポジトリはソースコードのバージョンを一意に特定でき、誰がいつ行った変更か分かる保存形式であればよい。
図4はレビューシステムの処理の流れを示すフローチャートの例である。
ステップ250でレビューシステムはソースコード情報、変更者情報、適用ブランチ名を受付け、ステップ251でソースコード情報から管理単位を求める。ステップ252で求められた管理単位から管理単位毎のスコアを管理単位の種別、変更者情報、変更内容等の情報から求める。レビュー依頼者から依頼されレビュー依頼に含まれる管理単位のうち最もスコアの高い管理単位を選択し、ステップ253で各々のレビュー依頼を選択された管理単位のスコアを基に降順に並べ替えて出力することにより関心の高いレビュー依頼を優先的にレビュアーがレビューすることが可能となる。この他にレビュアーの設定により受付順、ブランチ毎に出力しても良い。このような設定により受け付けた順序に処理することや、重要度の高いブランチからレビューをすることが可能となる。
出力したレビュー依頼に関するレビュアーのレビューが完了し、ステップ254でソースコードへの反映の可否を受け付けたときは、ステップ255反映依頼をしたユーザに当該ソースコードへの修正を反映する権限があることを確認し、修正を対応するソースコードへ反映する。
ステップ256で修正内容がソースコードへ反映された場合は管理単位、ステップ257で変更者情報、変更内容から修正に関連する管理単位のスコア、変更者のスコアを更新する。
図5は管理単位テーブル300のテーブル構成図の例を示している。
管理単位テーブル300の各レコードは管理単位ID301、管理単位の内容を記録している管理単位302、当該管理単位が含まれるファイル名を表すファイル303のカラムからなる。
この例では1行目に管理単位ID301として”mnbvc”という値が記録され、管理単位の内容が”int main(int, char *)”であり、対応するファイル名が”main.c”という値である。
管理単位ID” qazxs ”は管理単位がソースコードでない場合の例である。この場合管理単位の内容は無く、対応するファイル名”property.conf”だけが記録されている。
非ソースコードファイルの場合、ファイル全体で重要度を管理するため、管理単位フィールド308には有意な情報を含めない。管理単位テーブル300では、この、管理単位302とファイル303の値を元に管理単位ID301を対応付けている。
図6スコア情報記録部にあるスコアテーブル400の内容である。スコアテーブル400の各レコードは、ソースコードのバージョンを表すバージョンID410と、当該バージョンに含まれる管理単位に対応する管理単位ID402、当該管理単位のスコアを表すスコア403が対応づけて格納されている。
フィールド404の値はソースコードリポジトリで利用されるバージョンIDと同様のものを利用する。
管理単位ID402を用いて、管理単位テーブル300から管理単位の情報を取得する。
図7はレビュー依頼記録部212に保存されるデータを示している。レビュー依頼記録部にはバージョンID501、レビュー依頼ID502、レビュー依頼最新バージョン503、マージ先ブランチ504が対応づけられたテーブル、レビュー依頼ID521、レビュー依頼バージョン522、レビュー依頼バージョンID523が対応づけられたテーブル及び、レビュー依頼バージョンID531、要レビュー管理単位ID532、作業者名533が対応づけられたテーブルが含まれる。
記憶領域を削減するためにテーブルを分割しているが一つのテーブルで表現しても良い。
図8はレビュー依頼スコア情報記録部214に保存されるデータを示している。
レビュー依頼スコア情報記録部214にはバージョンID551とレビュー依頼ID552が対応づけて格納されたテーブルとレビュー依頼ID561、管理単位ID562、レビュー加算スコア563が対応づけて格納されたテーブルと、レビュー依頼ID571、レビュー依頼バージョン572、レビュー依頼バージョンID573が対応づけて格納されたテーブル及びレビュー依頼バージョンID581、要レビュー管理単位ID582、レビュー重要度スコア583、マージ時加算スコア584、レビューフラグ585が対応づけて格納されたテーブルが含まれる。
これらのテーブルも記憶領域を削減するためにテーブルを分割しているが一つのテーブルで表現しても良い。
図9はレビューコメントテーブル600に格納されている情報を表している。レビューコメントテーブル600の各レコードは、レビュー依頼を識別するためのレビュー依頼バージョンID601、レビューコメントがつけられた管理単位を表す管理単位ID402、レビューコメントがつけられた行を記録する行603、レビューでの指摘内容の分類を示す指摘内容分類604、レビューコメントを記録するレビューコメント405からなる。
スコア情報記録部214には開発差分適用先ブランチのブランチ名をあらわすブランチ名701、開発差分が適用された際のスコア補正値を表す補正値702が対応づけて格納されている。
図10は スコア情報記録部214に含まれるスコア補正値テーブル800に格納されている情報を表している。
スコア補正値テーブル800は、変更の種類801、該当箇所のスコア802、影響箇所803、影響箇所のスコア804が対応づけて格納されている。
1行目のデータは変更の種類が“関数の追加”、変更の種類が“関数の追加”、追加された関数(管理単位)に加算するスコアが“10”であることを表している。
影響箇所803は、変更の種類”関数の追加“に対する影響箇所を表しており、この場合”呼出元関数“が影響箇所となる。影響箇所のスコア804は、影響箇所803で示された影響箇所に加算するスコアの値であり、スコア”5“を加算することを意味している。
スコア情報記録部214には作業者レビュー補正値テーブルが格納されている。
作業者レビュー補正値テーブルは、作業者名、レビュー時スコア決定用補正値、被レビュー時スコア補正値からなる。
たとえば、作業者名は作業者を識別する名前が格納されている。名前により作業者を識別してもよいが、SSH公開鍵情報や、名前より生成されたハッシュ値など、作業者を一意に識別できる情報であればどのようなものでもよい。
レビュー時スコア決定用補正値は、レビュー依頼中に、複数の作業者の変更が含まれる場合、習熟度の低い、つまり重点的にレビューが必要と思われる作業者が行った変更にはレビュー重要度を高く評価するために用いられる。
被レビュー時スコア補正値の値は、レビューコメントが付いた際に使われる値である。習熟度の低い作業者が書いたコードには多くのレビューコメントが付くと予想されるため、対応する修正箇所のスコアが上がりすぎないよう調整するために用いられる。
図11はレビュー依頼受付部206が受け取るレビュー依頼情報1000の内容を表している。コメント受付部はネットワークデバイス等を通して、レビュー依頼情報を受け取る。レビュー依頼情報1000には、レビュー依頼ID1001、ベースバージョンID1003、適用先ブランチ1005、変更内容1007からなる。
新たにレビュー依頼を行う場合はレビュー依頼ID1001に空白や、NULLなどの、値がセットされる。
ベースバージョンID1003はソースコードリポジトリで使われるバージョンIDがセットされ、このレビュー依頼に含まれる変更内容が、当該バージョンIDをベースに書かれたものであることを意味する。
適用先ブランチ1005はこのレビュー依頼に含まれる変更内容が記載されたブランチに適用される。
変更内容1007は変更内容の実体1009へのポインタである。変更内容の実体は作業者1010と、変更内容1012が含まれる。
変更内容1012はどのような変更が加えられるかを示す差分情報が格納されている。形式はどのようなものでもよいが、本実施例ではUNIX(登録商標)で使われるdiff形式で記載されている。
レビュー依頼情報1000の形式は、XML,JSON,YAMLといったテキスト形式で表現してもよいし、GitやSubversionの通信形式をそのまま利用してもよい。
図12の管理単位変更情報1020は管理単位分割処理部208からスコア計算処理部209に処理を引き継ぐ際に渡す中間データ構造である。
管理単位変更情報1020は、レビュー依頼ID1021、ベースバージョンID1023、適用先ブランチ1025、管理単位ID1027、作業者1029、変更の種類1031、変更内容1033からなる。
レビュー依頼1021、ベースバージョンID1023、適用先ブランチ1025、作業者1029については、レビュー依頼情報1000に含まれる同名のフィールドの値がコピーされる。
管理単位ID1027については、管理単位分割処理部208で分割された変更内容1033が、どの管理単位に属するかの情報が入る。
変更の種類1031は、当該変更内容がどのような変更であるかの要約情報が入り、「関数の追加」「コードの追加」「関数の削除」「コードの削除」「その他」の値を取りうる。変更内容1033は、レビュー依頼情報1000に含まれる変更内容1013を、本システムで扱う管理単位に分割したものである。
レビュー依頼受付部206は、レビュー依頼情報1000の受信を契機に実行される。
受信したレビュー依頼情報が新規かどうかを判定する。ここでは、受信したレビュー依頼情報1000のレビュー依頼ID1001の内容を参照し、既存のレビュー依頼の再投稿であるかどうかを確認する。レビュー依頼情報1000のレビュー依頼ID1001に、空白やNULLといった値が格納されていた場合は、受け付けたレビューは新規と判断し、当該レビュー依頼のバージョンを1とし、レビュー依頼のために新しいレビュー依頼IDを生成する。ここで生成するレビュー依頼IDはシステム内で一意に識別できるものであればどのようなものでもよい。
たとえば、連番や、レビュー依頼に含まれるソースコード等から算出したハッシュ値などを利用してもよい。ステップ1101において、既存のレビューIDが存在すると判定された場合は、レビュー依頼記録部220のテーブル500から、受信したレビュー依頼情報1000に含まれるレビュー依頼ID1001をキーに検索し、該当するカラムに記録されたレビュー依頼最新バージョン503に1を加算し、今回受信したレビュー依頼のバージョンとする。
受信したレビュー依頼情報が新規かどうかを判定処理が完了すると、新しいレビュー依頼バージョンIDの生成を行い、レビュー依頼記録部、レビュースコア情報記録部に受信したレビュー依頼情報の対応項目を記入し、処理を終了する。
管理単位分割処理部208では、レビュー依頼情報1000を管理単位変更情報1020の形に成形し、スコア計算処理部209に処理を引き継ぐ。
まず、受信したレビュー依頼情報1000に含まれる変更内容を、本レビューシステムで扱う管理単位に分割する。
次に、分割した管理単位に対する変更について、以降の処理を繰り返し実行する。
分割した変更内容に対する新しい管理単位変更情報1020を生成する。管理単位変更情報1020に含まれる、レビュー依頼ID1021、ベースバージョンID1023、適用先ブランチ1025、作業者1029は、受信したレビュー依頼情報1000の同名カラムより値をコピーする。
当該変更内容がどの管理単位に属するかを判定するし、新規の管理単位に対する変更である場合は、新規管理単位IDを発行する。
既存管理単位に対する変更である場合は、管理単位テーブル300より関数名をキーに検索し、管理単位IDを取得する。
次に、変更の種類1031を判定する。変更の種類1031には、「関数の追加」「コードの追加」「関数の削除」「コードの削除」「その他」の値を取りうる。この分類は、たとえば、GNU Coreutilsに含まれるdiffコマンドで出力された結果を利用しこれを判断する。diffコマンドの出力では行単位で「追加」「削除」を判別することができるが、ここではdiffコマンドで出力された行単位の変更について、対応する変更元の行を見て、どのように変更されたかを分類する。
「関数の追加」ではdiffの出力において関数のすべてが追加される場合、「コードの追加」では変更先の関数が存在し、かつコードを追加している場合、「関数の削除」ではdiffの出力で関数がすべて削除されている場合、「コードの削除」では変更先の関数が存在し、かつコードが削除されている場合、そしてそれ以外が「その他」と分類される。
最後に、作成された管理単位変更情報1020をスコア計算処理部209に渡し、処理を終了する。
図13はスコア計算処理部209で行われる処理である。
本処理は管理単位分割処理部208の処理の完了を契機に実行される。ステップ1110では、管理単位分割処理部208より、管理単位変更情報1020のリストを受け取る。ステップ1111では、前記ステップで受信したリストに含まれる各要素について以降の処理を繰り返し実行する。
ステップ1112では、変更の種類1031を参照し、変更内容の種別判断を行う。ステップ1113は「関数の追加」と判断された場合の処理である。つまり、変更の種類が「関数の追加」であった場合である。ステップ1113では新規追加された関数のスコアを計算する。ステップ1113で新規追加された関数のスコアは、呼出元関数のスコアと同じ値とする。たとえば”void new_func(void)”という関数が追加され、これが”int main(int, char *)”から呼び出されるのであれば、管理単位テーブル300とスコアテーブル400の情報を利用し、呼出元の関数”int main(int, char *)”のスコア”100”をそのまま新規追加された関数”void new_func(void)”に設定する。なお、複数個所から当該関数が呼ばれる場合は、そのなかの最大値を採用するものとする。呼出箇所の特定はctags,cscope,OpenGlok,GNU Globalのようなクロスリファレンスツールを用いる。
他に、プログラムスライシング、記号実行などの技術を用いてもよい。この呼び出し箇所の特定は、管理単位分割処理部208から受信した管理単位変更情報1020のみからでは判断できないため、ベースバージョンID1023で示されるバージョンのソースコードをソースコードリポジトリから取り出し、変更内容1034を適用したもので解析を行う。
次に、前記計算したスコアに、スコア補正値テーブル800にある「コードの追加」のスコアと、作業者レビュー補正値テーブル900の「作業者レビュー補正値」を乗じたものを加算し、レビュー重要度スコア583の値を決定する。同時に、スコア補正値テーブル800から「コードの追加」相当のスコアをマージ時加算スコア584として保存する。
ステップ1114は「コードの追加」と判断された場合の処理である。つまり、変更の種類1031が「コードの追加」であった場合である。ステップ1114では、変更が加えられた関数のスコアをスコアテーブル400カラム403から取得し、これにスコア補正値テーブル800を参照し、「コードの追加」の値に作業者のレビュー補正値902を乗じたもの加算し、これをレビュー重要度スコア583とする。同時に、スコア補正値テーブル800の「コードの追加」のスコアをマージ時加算スコア584とする。
ステップ1115は「関数の削除」と判断された場合の処理である。つまり、変更の種類1031が「関数の削除」であった場合である。ここではレビュー重要度スコア583は当該関数のスコアに、スコア補正値テーブル800の「関数の削除」のスコアに作業者のレビュー補正値902を乗じたものを採用する。マージ時加算スコア584は呼出元関数に加算するものとする。
ステップ1116は「コードの削除」と判断された場合の処理である。つまり、変更の種類が「コードの削除」であった場合である。ここでは、レビュー重要度スコア583はコードが削除された関数のスコアに、スコア補正値テーブル800の「コードの削除」のスコアに作業者のレビュー補正値902を乗じたものを採用する。マージ時加算スコア584は、スコア補正値テーブル800の「コードの削除」の値を採用する。
ステップ1117は「それ以外」と判断された場合の処理である。つまり、変更の種類1031が「それ以外」または、変更が行われた管理単位がプログラムソースコード以外であった場合である。ここでは、スコア補正値テーブル800に従い、レビュー重要度スコア583と、マージ時加算スコア584の計算を行う。たとえば変更の種類が「コメントの変更」であった場合は、スコア補正値テーブル800を参照すると”+2”となっている。レビュー重要度スコアではこれに作業者レビュー補正値テーブル900のレビュー時スコア決定用補正値902の値を乗じる。たとえば”プログラマB”は”1.2”というレビュー時スコア決定用補正値を持っているため、レビュー重要度スコア583に加算する値は2×1.2の2.4となる。マージ時加算スコア584には作業者レビュー補正値テーブル900の値は使わず、単純に+2する。
ステップ1118では、管理単位分割処理部208より受信したすべての管理単位変更情報に対するスコア計算が終わったか確認し、未完了である場合はステップ1111に戻り、同様の処理を行う。すべての管理単位に対するスコア計算が終わった場合、ステップ1119では、前記計算されたスコアと、管理単位分割処理部208から受信した管理単位変更情報1020に含まれるレビュー依頼ID1021、ベースバージョンID1023、適用先ブランチ1025と使い、レビュー依頼記録部220とレビュー依頼スコア情報記録部220に、当該レビュー依頼の情報を格納する。
図14はマージ処理部207で行われる処理のフローチャートである。本処理はレビュー受付部より実行される。ステップ1201ではマージに際し、コンフリクトが発生しないことを確認する。コンフリクトの確認は、ソースコードリポジトリにGitを採用した場合であれば、”git merge”コマンドによりマージを試み、その成否を確かめることで行う。または、変更差分をパッチファイル化し、UNIX(登録商標)のpatchコマンドによる変更適用の成否を確認してもよい。
これら前記方法が成功する場合はコンフリクトが起きないものとして扱う。失敗する場合は、コンフリクトが起きるものとして扱い、この場合はステップ1207にて作業者にコンフリクト解消を促す画面を出力し、処理を終了する。コンフリクトが起きないことが確認できたら、スコア計算処理を行う。
ステップ1202では、レビュー依頼記録部220およびレビュー依頼スコア情報記録部214から当該レビュー依頼情報および加算するためのスコア情報を取得する。ここではレビュー依頼IDをキーに、マージ先ブランチ504、レビュー加算スコア563、レビュー依頼バージョンID573を得て、さらにレビュー依頼バージョンID573をキーに、作業者名533およびマージ時加算スコア584を得る。
ステップ1203では、ステップ1202で得た、各管理単位に設定されたマージ時スコア加算値584の値に、当該レビュー依頼の適用先ブランチのブランチ補正値702を乗じる。ここでのブランチ補正値702は、ステップ1202で得たマージ先ブランチ504の値をキーに、補正値702の値を取得している。ステップ1205では、ステップ1203で得られたスコアを、当該変更を行った作業者のスコアへ加算し、作業者評価値テーブル213に記録する。ここでは、ステップ1202で得られた作業者533をキーに、作業者評価値テーブル213を検索し、その値を記録する。
ステップ1205ではソースコードリポジトリに本レビュー依頼1000がもつ全てのソースコード差分1013を該当するソースコードに反映する。ステップ1206では、ステップ1205でソースコードリポジトリに反映した結果得られたバージョンIDをもつレコードをスコアテーブル400に追加し、ステップ1203で計算したマージ時スコア加算値を各管理単位に加算し、スコアテーブル400に記録する。
レビュー受付部205ではレビュー画面を出力するためにまずレビュースコア情報記録部214より、レビュースコア情報を取得する。レビュー依頼ID552をキーにレビュー依頼バージョンID523を検索し、該当したレビュー依頼バージョンID523をキーにレビュー重要度スコア583を検索する。
次に、検索した結果の、各管理単位のレビュー重要度スコア583でソートを行い、レビューフラグ585で「完了」のついた管理単位を表示対象から除外する。レビューコメントテーブル600より、レビュー依頼バージョンIDをキーに、レビューコメント情報を取得する。各管理単位の指摘内容分類を分類毎に数え、一番多い指摘内容を選択する。
レビュー画面にレビュー重要度順で変更が行われた管理単位を表示し、同時になぜその管理単位が重要であるかの参考情報として、指摘の多いレビュー内容分類を併せて表示を行う。
図15がレビュー入力画面で表示される例である。レビュー入力画面1600は、当該レビュー依頼で行われたファイル変更を示すフィールド1601と、当該変更を行った作業者名フィールド1602、当該変更内容を示すフィールド1603と、指摘の多いレビュー内容を知らせるフィールド1605が表示される。1604は変更があった行を点線で囲んで表示している様子である。本実施例では図16のフィールド1605のように一番多い指摘内容分類を表示し、レビュアーに注意を促す。
レビュー入力部206は他の開発者からレビューを受け付ける。
開発者によりレビューコメントが付けられたことを契機に実行され、当該レビュー依頼にコメントする必要があるかどうかの選択を受付ける。
レビュー依頼にコメントする必要が無いという選択を受け付けた場合は、当該変更差分のレビューフラグ585を「完了」とする。レビュー依頼にコメントする必要が有るという選択を受け付けた場合は、スコア補正値テーブル800から「レビューコメントが付いた」スコアと、作業者補正値テーブルから作業者の被レビュー時補正値903を取得し、乗じたものを当該管理単位のレビュースコア加算値とし、この値をレビュー加算スコア563に記録する。
次に、レビューを行った作業者を評価するため、評価値を加算する。ここではスコア補正値テーブル800の「レビューを行った」ポイントを作業者評価値テーブル213の作業者評価値1502に加算し、処理を終了する。
作業者評価値テーブル213は作業者名を表すカラム1501と、作業者評価値を表すカラム1502を含んでいる。
図16はレビュー依頼選択画面の例である。
レビュー依頼毎に、件名、登録日時、適用先ブランチ、レビュー依頼バージョン、スコア等が表示される。レビュー依頼はスコアの高い順や、登録日時の順番、ブランチ毎のようにレビュアーの目的に応じて並びを選択することができる。
表示されたレビュー依頼に対応づけられた「レビューをする」ボタンを選択することにより、当該レビュー依頼のレビューを実施することが可能となる。
以上説明した本実施例のソースコードレビューシステムによれば、次のような効果がある。
(1)スコア計算処理部を追加することで、ソースコード中の関数またはファイル毎に、開発チームにとって関心度の高さを定量化することができ、ソースコードのレビュー依頼が発行された際、関心の高いソースコードの変更箇所が優先的に表示されるため、レビュアーは本発明の表示する順に重点的にレビューを行えばよくなり、レビューコストの削減と、効果的なレビューを実現することができる。
(2)加えて、関心の高いと思われるソースコードの変更の量や、今まで行ったレビューの多寡により、作業者の作業量やその重要度を推測することができ、作業者の評価を行うことが可能となる。
(3)加えて、スコア計算処理部がバージョン管理システムのブランチ情報と連携することで、ソースコードの変更を行う適用先ブランチの情報により、その変更の重要度を推測することが可能となる。
(4)作業者レビュー補正値をスコア計算処理部に追加することで、多くのレビューが必要な習熟度の低い作業者が行った変更が、本システムにおいて必要以上に重要と誤認されることを防ぐことができる。
101 計算機、102 CPU、103 メモリ、104 ネットワークデバイス、105 ストレージデバイス、110 OS、106 ネットワーク、107 開発者端末、201 レビューシステム、202 Webフロントエンド、203 ソースコード受付部、204 作業者評価表示部、205 レビュー受付部、206 レビュー依頼受付部、207 マージ処理部、208 管理単位分割処理部、209 スコア計算処理部、210 作業者評価値計算部、211 レビュースコア情報記録部、212 レビューデータ記録部、214 スコア情報記録部、215 ソースコード記録部、220 レビュー依頼記録部、600 レビューコメントテーブル、400 スコアテーブル、900 作業者レビュー補正値テーブル、700 ブランチ補正値テーブル、800 スコア補正値テーブル、300 管理単位テーブル、213 作業者評価値テーブル

Claims (14)

  1. ソースコードを格納するソースコード記録部と
    前記ソースコードの修正のレビュー依頼を受け付けるレビュー依頼受付部と、
    前記レビュー依頼受付部で受け付けたソースコード修正をソースコード記録部に保持されたソースコードへ反映するマージ処理部と、
    レビュー依頼を受け付けた前記ソースコード修正を対応する管理単位に分割し、スコア情報記録部に格納された前記管理単位と前記管理単位に対する関心度を示すスコアと、ユーザ情報記録部に格納された前記レビュー依頼を発行したユーザIDに対応づけられたユーザスコア情報を用いて修正に対応する管理単位毎にスコアを計算するスコア計算処理部と、
    計算された管理単位のスコアとレビュー依頼を対応づけてスコアの降順に出力する出力部とを備え
    前記スコア情報記録部に格納されたスコア情報は対応する管理単位が修正されたときに加算され、
    前記ユーザ情報記録部に格納されたユーザIDに対応づけられたユーザスコアはレビュー依頼を受け付けたときに加算されることを特徴とするソースコードレビューシステム。
  2. 前記管理単位は少なくとも関数を含むことを特徴とする請求項に記載のソースコードレビューシステム。
  3. 前記ソースコード記録部は複数のバージョンのソースコードを格納し、
    前記複数のバージョンのソースコードの一つにソースコード修正のレビュー依頼を受け付けソースコードが修正されたとき、当該修正された管理単位を含む他のバージョンのソースコードについても対応する管理単位のスコアを加算することを特徴とする請求項に記載のソースコードレビューシステム。
  4. 前記ソースコードにソースコード修正のレビュー依頼を受け付けソースコードが修正されたとき、当該修正された管理単位に関連する他の管理単位のスコアを加算することを特徴とする請求項に記載のソースコードレビューシステム。
  5. 前記関連とはソースコードを修正した管理単位を含む関数の呼び出しであることを特徴とする請求項に記載のソースコードレビューシステム。
  6. 加算するスコアは前記修正された管理単位との関連性に基づいて異なる値を加算することを特徴とする請求項に記載のソースコードレビューシステム。
  7. 過去に依頼されたレビュー依頼の内容と数に基づき管理単位に対応づけてレビューコメントを出力することを特徴とする請求項1に記載のソースコードレビューシステム。
  8. ソースコード記録部がソースコードを格納し
    レビュー依頼受付部が前記ソースコード修正のレビュー依頼を受け付け、
    マージ処理部が前記レビュー依頼受付部で受け付けたソースコード修正をソースコード記録部に保持されたソースコードへ反映し、
    スコア計算処理部がレビュー依頼を受け付けた前記ソースコード修正を対応する管理単位に分割し、スコア情報記録部に格納された前記管理単位と前記管理単位に対する関心度を示すスコアと、ユーザ情報記録部に格納された前記レビュー依頼を発行したユーザIDに対応づけられたユーザスコア情報を用いて修正に対応する管理単位毎にスコアを計算し、
    出力部が計算された管理単位のスコアとレビュー依頼を対応づけてスコアの降順に出力し、
    前記スコア情報記録部に格納されたスコア情報は対応する管理単位が修正されたときに加算され、
    前記ユーザ情報記録部に格納されたユーザIDに対応づけられたユーザスコアはレビュー依頼を受け付けたときに加算されることを特徴とするソースコードレビュー方法。
  9. 前記管理単位は少なくとも関数を含むことを特徴とする請求項に記載のソースコードレビュー方法。
  10. 前記ソースコード記録部は複数のバージョンのソースコードを格納し、
    前記複数のバージョンのソースコードの一つにソースコード修正のレビュー依頼を受け付けソースコードが修正されたとき、当該修正された管理単位を含む他のバージョンのソースコードについても対応する管理単位のスコアを加算することを特徴とする請求項に記載のソースコードレビュー方法。
  11. 前記ソースコードにソースコード修正のレビュー依頼を受け付けソースコードが修正されたとき、当該修正された管理単位に関連する他の管理単位のスコアを加算することを特徴とする請求項に記載のソースコードレビュー方法。
  12. 前記関連とはソースコードを修正した管理単位を含む関数の呼び出しであることを特徴とする請求項11に記載のソースコードレビュー方法。
  13. 加算するスコアは前記修正された管理単位との関連性に基づいて異なる値を加算することを特徴とする請求項11に記載のソースコードレビュー方法。
  14. 過去に依頼されたレビュー依頼の内容と数に基づき管理単位に対応づけてレビューコメントを出力することを特徴とする請求項に記載のソースコードレビュー方法
JP2015007378A 2015-01-19 2015-01-19 ソースコードレビュー方法及びそのシステム Active JP6336919B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015007378A JP6336919B2 (ja) 2015-01-19 2015-01-19 ソースコードレビュー方法及びそのシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015007378A JP6336919B2 (ja) 2015-01-19 2015-01-19 ソースコードレビュー方法及びそのシステム

Publications (2)

Publication Number Publication Date
JP2016133946A JP2016133946A (ja) 2016-07-25
JP6336919B2 true JP6336919B2 (ja) 2018-06-06

Family

ID=56426264

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015007378A Active JP6336919B2 (ja) 2015-01-19 2015-01-19 ソースコードレビュー方法及びそのシステム

Country Status (1)

Country Link
JP (1) JP6336919B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110134605A (zh) * 2019-05-16 2019-08-16 北京达佳互联信息技术有限公司 验证代码的方法、装置、计算机设备和存储介质
CN111008038B (zh) * 2019-12-19 2022-08-02 南京邮电大学 一种基于逻辑回归模型的pull request被合并概率的计算方法
JP7484206B2 (ja) 2020-02-12 2024-05-16 日本電気株式会社 ソフトウェア開発支援装置、ソフトウェア開発支援方法、プログラム、及びソフトウェア開発支援システム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002342129A (ja) * 2001-05-17 2002-11-29 Hitachi Ltd コーディングチェック方式
JP2007323299A (ja) * 2006-05-31 2007-12-13 Sharp Corp レビュー実施順序決定装置、レビュー実施順序決定プログラム、レビュー実施順序決定プログラムが格納された記録媒体およびレビュー実施順序決定方法
JP2008071110A (ja) * 2006-09-14 2008-03-27 Xanavi Informatics Corp ソースコードレビュー支援装置

Also Published As

Publication number Publication date
JP2016133946A (ja) 2016-07-25

Similar Documents

Publication Publication Date Title
US20210342313A1 (en) Autobuild log anomaly detection methods and systems
US11366747B2 (en) Unified test automation system
US9898280B2 (en) Automatic code review and code reviewer recommendation
US9852196B2 (en) ETL tool interface for remote mainframes
US9703692B2 (en) Development supporting system
US10621212B2 (en) Language tag management on international data storage
JP4845153B2 (ja) 複数のクライアントを用いた分散環境で更新作業のコンフリクトを回避するシステム、方法、サーバ及びコンピュータプログラム
US9734043B2 (en) Test selection
US11983512B2 (en) Creation and management of data pipelines
US10120658B2 (en) Method and system for realizing software development tasks
CN110928772A (zh) 一种测试方法及装置
JP2021500658A (ja) インタラクティブ・ワークフローを実行するコンピュータ実施方法、システム、およびコンピュータ・プログラム製品、ならびにコンピュータ・プログラム
CN111158674A (zh) 组件管理方法、系统、设备及存储介质
CN111078637B (zh) 脚本文件上线方法、装置、计算机设备及存储介质
JP6336919B2 (ja) ソースコードレビュー方法及びそのシステム
KR101975272B1 (ko) 협업 의존성 기반 컴포넌트 재사용 추천 시스템 및 방법
US9395977B2 (en) Locating program code units after software refactoring
US10116512B2 (en) Service discovery and/or effort estimation in networked computing environments
US11740995B2 (en) Source quality check service
JP4535906B2 (ja) Umlモデル作成支援方法及びその装置
CN113220592B (zh) 自动化测试资源的处理方法、装置、服务器及存储介质
JP2019101829A (ja) ソフトウェア部品管理システム、計算機および方法
CN110221952B (zh) 业务数据的处理方法及装置、业务数据处理系统
CN115469844A (zh) 代码处理方法、系统、计算机集群、介质及程序产品
JP2018028776A (ja) ソフトウェア資産管理装置、ソフトウェア資産管理方法、および、ソフトウェア資産管理プログラム

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20170110

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20170112

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170321

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180123

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180323

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: 20180410

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180507

R150 Certificate of patent or registration of utility model

Ref document number: 6336919

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150