A3-4

編集状況をリアルタイムに中継する同期的なコードレビュー支援ツール
A Code Review Tool with Real-time Relay and Synchronized Indicationof Editing Situation for Programming Education
中矢 誠*1, 豊田 竜也*1, 川鯉 光起*1, 富永 浩之*1
Hiroyuki TOMINAGA*1*1 香川大学大学院工学研究科*1Graduate School of Engineering, Kagawa University
Email: s15g479@stu.kagawa-u.ac.jp

Makoto NAKAYA*1, Tatsuya TOYODA*1, Kouki KAWAGOI*1,

あらまし：演習を伴う輪講を支援するシステムの一環として，プログラミング課題を提示し，各自の解答を相互に検証するコードレビュー支援ツールを開発している．コードレビューの進行モデルと支援のフェーズを定め，ツールの利用方法を整理する．エディタ部でのコード編集と同期表示，指摘箇所を範囲指定してのコメントの投稿，イベント発生によるスナップショットの保存，タイムラインの閲覧，実施ログの表示などの機能を実装した．試用実験の結果を基に，今後の改良を進め，運用評価を行っていく．
キーワード：プログラミング言語教育，グループ学習，コードレビュー支援1.

はじめに輪講は，数人の持ち回りで分担し，文献を読み進めていくものである．事前に準備した資料を基に，発表者が講義を行い，参加者同士が議論する．相互に教え合うことで，効果的で効率的な学習に繋げる．
情報系分野では，書籍に記載された例題や練習問題などを用いた演習を実施することもよくある．
本研究に先立ち，情報系分野の解説書を題材とし，演習を取り入れた輪講を支援するシステム Lexit を提案している(1)．一連の輪講をプロジェクトと捉え，個々の輪講をセッションとして，全体の進行を統括する．また，輪講で配布するレジュメや発表でのスライドなどの資料を管理する．本研究では，Lexit
システムの一環として，プログラミング課題を提示し，各自の解答を相互に検証するコードレビュー支援ツール Redoc を開発している(2)．

2.

コードレビューの概要

本研究のコードレビューでは，チーム内のメンバが作成したプログラムのソースコードに対して，本人を交えて，チーム内外のメンバで閲覧し議論する．
各自が作成したソースコードに対して，問題点や改善点を指摘したり，本人に助言や指導を行う．
ユーザの役割は，コードを作成してレビューされる者をレビュイー，コードを閲覧してレビューするものをレビュアーと呼ぶ．一般に，コードレビューの目的は，教育的なものと，成果的なものとの 2 つの側面がある．教育的な側面では，レビュイーのコードをメンバ全員で共有，レビュイーによる意図・目的や設計との対応の説明，レビュアーから作成者へ不明点などの質疑応答，メンバ相互による問題点や改善点の指摘，レビュイーへの助言や指導などがある．成果的な側面では，暗黙知の明示化と意識化，コーディング規約や開発ツールの標準化，各自のコーディング技能や特性の相互理解，プロジェクトのメンバとしての相互のコミュニケーション，システム開発の目標や理念の確認がある．本研究では，前者の教育的な側面に特化して支援を検討する．

3.

コードレビュー支援ツールのフェーズ

4.

コードレビュー支援ツールの利用方法本研究の Redoc は，Web 上のシステムであり，クライアント側のブラウザで動作する．Redoc は，輪講セッションの演習において，提示されたプログラミング課題に対して解答コードを提出し，レビューを実施し，復習を行うまでを支援する．Redoc での支援は，コード作成，レビュー実施，復習再現の 3つのフェーズに分けられる(図 1)．
コード作成フェーズでは，プログラミング課題が提示され，各自が解答コードを作成する．作成した解答コードの提出は，Redoc を通してサーバ側へのアップロードで行う．提出された解答コードの一覧から，レビューを実施するコードを選択する．選択されたコードを対象として，レビュー実施フェーズに移行する．レビュー実施フェーズでは，レビュイーは，コード作成フェーズで選ばれたコードを提出した参加者であり，その他の参加者はレビュアーとなる．レビュイーのコードや，コーディングそのものに対して，コメントを投稿することによりレビューを行う．復習再現フェーズは，レビューの実施ログを基に，レビューの様子を再現する．コードレビ
ューを欠席した参加者や，出席はしたが復習を行いたい参加者が利用し，レビューの過程を追体験する．

Redoc の利用方法としては，以下の 4 通りが考えられる(図 2)．1 つ目は，レビュイーを初心者，レビュアーを中級者として，中級者が初心者に一からのコーディングを指導するものである．教育内容は文法事項である．レビュアーに初心者を加え，指導の様子を見て不明点などを質問させても良い．2 つ目― 261 ―

教育システム情報学会 JSiSE2015
第 40 回全国大会 2015/9/1～9/3

は，レビュイーを初心者，レビュアーも主に初心者とする．初心者同士で，段階的な実装や，それに伴うデバッグについて議論する．初心者同士の議論で行き詰まった場合には，中級者のレビュアーがヒントを提示する．3 つ目は，レビュイーを初心者，レビュアーを中級者とする．中級者が初心者の解答したコードに対し，書法について指導する．発生する修正やデバッグ行為についても指導の対象である．4つ目は，レビュイーを上級者，レビュアーを初心者および中級者として，上級者によるコーディングの実演を行う．レビュアーからの質疑に対して，上級者が答えながら進める講義のような形式となる．

図 1 コードレビュー支援の進行モデル

ードを修正する．コメントは，コードにおける指摘箇所を指定して投稿することができる．
コードの変更は，エディタ部のコードを編集することで行う．コンパイルと実行により，動作を確認する．これらのデバッギングの状況もレビューの対象とする．ある程度の変更を行った後，レビュイーがコードのバージョンアップを指定する．以上を繰り返し，レビュイーに段階的な実装を促す．
レビュー実施ページでは，同期処理が行われる．
レビュイーによってエディタ部のコードが修正されると，他のクライアントに変更が反映される．これにより，レビュアーはリアルタイムにレビュイーのコードの変更を確認することが可能である．タイムライン部には，コメントの投稿，コンパイルと実行，レビュイーによるバージョンアップ指定などのイベントが一覧表示される．このタイムラインへの通知も同様に，リアルタイムに確認することができる．
また，イベントが記録されると，同時にコードのスナップショットが保存される．各時点のスナップシ
ョットは，タイムラインの詳細ボタンから閲覧する．
タイムラインを辿ることで，以前の状態のコードを参照することが可能である．

6.

まとめ演習を伴う輪講を支援するシステムの一環として，プログラミング課題を提示し，各自の解答を相互に検証するコードレビュー支援ツール Redoc を開発している．進行モデルを定め，ツールの利用方法を整理した．エディタ部でのコード編集と同期表示，指摘箇所を範囲指定してのコメントの投稿，イベント発生によるスナップショットの保存，タイムラインの閲覧，実施ログの表示などの機能を実装した．
運用に向けての予備実験を実施し，アンケートを行った．問題文や入出力例，コンパイルエラーや実行結果などを見ながらコードの編集を行いたいという意見があった．また，他のコメントへの明示的な返信機能も要望があった．今後の課題として，GUIや機能を改良し，復習再現フェーズも実装する．また，実施ログの時系列データを分析し，本ツールによる教育効果を検証する．

図 2 コードレビュー支援の利用方法

参考文献(1) 川鯉光起, 中矢誠, 富永浩之: "研究室規模の蔵書管理

図 3 Redoc の GUI

5.

コードレビュー支援ツールの利用方法

Redoc の機能および利用手順について，主にレビ
ュー実施フェーズについて説明する．図 3 に，レビュー実施ページの GUI を示す．中央にエディタ部，下方にタイムライン部がある．
レビューは，コメントの投稿として行う．レビュ
アーが質問や指摘，助言を行う．それに対し，レビ
ュイーは質問に回答したり，指摘や助言に従ってコと文献共有による学習支援 －コードレビューを取り入れた共時学習としての輪講の支援－", 情報処理学
会 研究報告, Vol.2012-CE-119, No.20, pp.1-10, (2013)(2) 豊田竜也, 川鯉光起, 富永浩之: "情報系分野の解説書の輪講支援システムにおけるプログラム問題のコードレビュー機能の検討", 情報科学技術フォーラム
第 12 回 全国大会, 第 4 分冊, pp.497-500, (2013)(3) 豊田竜也, 中山誠, 大川昌寛, 川鯉光起, 富永浩之:“プログラミング演習としてのコードレビューを取り入れた輪講支援システム －解答コードの同期閲覧とスナップショットへのコメント機能の実装－”, 信学
技報, Vol113, No.482, pp.59-64, (2014)― 262 ―