SlideShare a Scribd company logo
1 of 42
プログラミングを再現する
DevReplay(デブリプレイ)
誰でも達人プログラマーのように
奈良先端科学技術大学院大学 上田 裕己
ソフトウェア開発の半分はメンテナンス
2
バグ修正
25%
機能改善
25%
機能設計
20%
コード記述
30%
T. Britton, L. Jeng, G. Carver, and P. Cheak, ‘‘Reversible debugging software - quantify the time a
cost saved using reversible debuggers,’’ 2013.
2
プログラミングは大変
3
新人を即戦力に教育
採用技術の切り替え
平
成
令
和
大規模なシステムの変更
プログラム言語やAPIの更新
3
4
たぶん動く,よし!
プログラミングは雑になりがち
開発者
gets(str);
5
こう直してはどうでしょう by Matz
DevReplay
- gets(str);
+ scanf("%s", str);
DevReplay: 疑似ペアプログラミング
開発者
このプログラムどう?
gets(str);
6
tmp = a
a = b
b = tmp
a, b = b, a
ビフォー アフター
a % b != 0 a % b
ビフォー アフター
7
サポート言語
サポート環境
Language Serverで利用可能
既存ツールと組み合わせて運用
8
一般的な書き方
L=sorted(array)
l_=_sorted(array)
既存ツールと組み合わせて運用
9
一般的な書き方
Python2の書き方
DevReplay
L=sorted(array)
L=list(array)
L.sort()
l_=_sorted(array)
既存ツールと組み合わせて運用
10
L=sorted(array)
一般的な書き方
L=list(array)
L.sort()
l_=_sorted(array)
l_=_list(array)
l.sort()
Python2の書き方
DevReplay
DevReplay 利用方法
11
共有拡張・改善ルール学習 修正
DevReplay 利用方法
12
共有拡張・改善修正ルール学習
13
tmp = a
a = b
b = tmp
a, b = b, a
ビフォー アフター
ソースコードの変更履歴からルール生成
14
ルールファイル
Textmate Snippet
tmp = a
a = b
b = tmp
a, b = b, a
“condition”: [
“tmp = $1”,
“$1 = $2”,
“$2 = tmp”],
”consequent”: [
“$1, $2 = $2, $1”],
ビフォー
アフター
ソースコードの変更履歴からルール生成
ビフォー アフター
15
ルールファイル
Textmate Snippet
tmp = a
a = b
b = tmp
a, b = b, a
ビフォー
アフター
ソースコードの変更履歴からルール生成
ビフォー アフター
“condition”: [
“tmp = $1”,
“$1 = $2”,
“$2 = tmp”],
”consequent”: [
“$1, $2 = $2, $1”],
import { チョットデキルヒト }
16
いつ :最近三ヶ月
どこで:mrubyでの
だれが:Matzさん
言語 :C/C++
のルールを教えて
export { チョットデキルヒト }
17
プロジェクト
作成者
作成日
変更前
変更後
普及率
リンク
github.com/devreplay/devreplay-pattern-generator/blob/master/sample/matz.json
見逃し疑い
DevReplay 利用方法
18
共有拡張・改善ルール学習 修正
エディタで修正,GitHubでレビュー
19
GitHubVisual Studio Code
20
サポート言語
サポート環境
Language Serverで利用可能
DevReplay 利用方法
21
共有ルール学習 修正 拡張・改善
ルールの説明,重要度,作者を表示
22
カスタマイズなし
ルールの説明,重要度,作者を表示
23
カスタマイズなし カスタマイズあり
DevReplay 利用方法
24
拡張・改善ルール学習 修正 共有
知識は変化し実行不可能
25
20172015 2016
Python:
毎年スタイルが出現
知識は変化し実行不可能
26
20172015 2016
Python:
毎年スタイルが出現
Web情報:
人によってバラバラ
quit() import sys
sys.exit()
exit()
知識を実行可能なファイルとして共有
27
コンテンツ DevReplay
ファイル
GitHub 共通知
プラットフォーム
ルール
DevReplayの構成
28
DevReplay
コマンドライン コードレビュー エディタ
自動学習 デフォルトルールチーム・個人オリジナル
12種類以上のデフォルトルールを利用可能
29
フレームワークAPIのメンテナンスプログラミング言語の標準ルール
要望に応じて追加予定
MyRule extends OtherRules
30
DevReplayの利用例
31
教育・競技プログラミング OSSプロジェクトに提案
32
scanf("%s", value);
if(n%2==0)
ビフォー アフター
講義課題
競技プログラミング
33
fgets(value,
sizeof(value), stdin);
scanf("%s", value);
if(n%2==0) if(n!=0 && n%2==0)
ビフォー アフター
メモリの確保
値の確認
講義課題
競技プログラミング
DevReplayの利用例
34
26%を提出前に修正可能
教育・競技プログラミング OSSプロジェクトに提案
DevReplayの利用例
35
26%を提出前に修正可能 77% (7/9)が採用
教育・競技プログラミング OSSプロジェクトに提案
36
[](const
std::function<void()> fn)
[](std::function<void()>
fn)
Name: myTestNameTag name: myTestNameTag
ビフォー アフター
クロージャーのコピーを破棄
リファクタリング
TensorFlow
Ansible
プロジェクトへ投稿 (TensorFlow)
37
学習元のコミットメッセージ
学習元コミットID 学習元開発者ID
開発者の反応
38
Looks Good To Me: なんかいい感じ
協力いただいたプロジェクト様
39
Visual Studio Code
TensorFlow
Ansible
DefinitelyTyped
Kubernetes
Flutter
Home Assistant
React native
今後の予定(ルール)
40
要望に応じて随時追加
手伝ってもらえると
ルールに名前が載ります
ルール編集用UIの作成エディタ機能として実装
今後の予定(プラットフォーム)
41
サポートの追加プルリクエストの自動投稿
開発者の自動評価
42
DevReplay
https://devreplay.github.io

More Related Content

Similar to 2019年度未踏: 開発者が行ったソースコード修正作業を学習し代行するボット-DevReplay-

TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
ta2c
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
智啓 出川
 
Qua s tom-メトリクスによるソフトウェアの品質把握と改善
Qua s tom-メトリクスによるソフトウェアの品質把握と改善Qua s tom-メトリクスによるソフトウェアの品質把握と改善
Qua s tom-メトリクスによるソフトウェアの品質把握と改善
Hironori Washizaki
 

Similar to 2019年度未踏: 開発者が行ったソースコード修正作業を学習し代行するボット-DevReplay- (20)

本の紹介
本の紹介本の紹介
本の紹介
 
The evolution of c#
The evolution of c#The evolution of c#
The evolution of c#
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
 
C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみよう
 
C++による数値解析の並列化手法
C++による数値解析の並列化手法C++による数値解析の並列化手法
C++による数値解析の並列化手法
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
gRPCurlDotNet.pptx
gRPCurlDotNet.pptxgRPCurlDotNet.pptx
gRPCurlDotNet.pptx
 
Bjarne dont speaking
Bjarne dont speakingBjarne dont speaking
Bjarne dont speaking
 
Enshu1
Enshu1Enshu1
Enshu1
 
第0回bluemixユーザー会 Bluemix最新情報 BMXUG
第0回bluemixユーザー会 Bluemix最新情報 BMXUG第0回bluemixユーザー会 Bluemix最新情報 BMXUG
第0回bluemixユーザー会 Bluemix最新情報 BMXUG
 
わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋 #37 (20151114) TDD道場 #25
 
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
 
LLVM overview 20110122
LLVM overview 20110122LLVM overview 20110122
LLVM overview 20110122
 
Qua s tom-メトリクスによるソフトウェアの品質把握と改善
Qua s tom-メトリクスによるソフトウェアの品質把握と改善Qua s tom-メトリクスによるソフトウェアの品質把握と改善
Qua s tom-メトリクスによるソフトウェアの品質把握と改善
 
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jpRAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
RAD Studioで実践する継続的インテグレーション アプリとデベロッパーの価値を拡張するエッセンス #dcamp_jp
 
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
enchant.jsを使った子ども向けプログラミングワークショップ講義内容
enchant.jsを使った子ども向けプログラミングワークショップ講義内容enchant.jsを使った子ども向けプログラミングワークショップ講義内容
enchant.jsを使った子ども向けプログラミングワークショップ講義内容
 
プログラマー
プログラマープログラマー
プログラマー
 

2019年度未踏: 開発者が行ったソースコード修正作業を学習し代行するボット-DevReplay-

Editor's Notes

  1. それでは.「過去のプログラミングを再現する,DevReplay」と題して奈良先端大の上田が発表します. 開発,Developmentを再現ReplayでDevReplay,そのままですね. 特にプログラマの皆さんは明日もお仕事があるかともいますが,よかったらぜひお試しください.
  2. 今日来られたプログラマの皆さん,きれいにプログラムを書けていますか? 研究によるとソフトウェア開発の半分はバグ修正や機能改善のメンテナンスだと言われています. 本当はコードを書いたり,機能の設計に時間を使いたいのにもったいないですよね.
  3. ですが残念なことにプログラミングには困難がつきものです. 年号を1ヶ月で変える,新人をリーナス・トーバルズ並の即戦力にする. 使ってた技術や言語,APIが更新されてしまう, こういったこと,誰かがもうやっていることはその誰かにやってもらえたら理想ですよね.
  4. 現実は,プログラミングって雑になりますよね, 私も動いたからいいかって思いながら普段プログラミングをしてます. いいわけがないんですけど.
  5. 本題に戻ると今回開発したツールは誰かのgit履歴からその人の開発方法を真似ることができます. これを使えば,例えばRubyのMatzさんとペアプログラミングをいつでも,無料でできます. 毎日一緒に作業してたらいずれは追いつく,かもしれません. 人間同士で作業するよりもトラブルになりにくいですし, 後で説明しますが,もし気に入らなければ中身を改造することもできます.
  6. こちらはVisual Studio Codeというエディタで動かしている様子です.
  7. 対応している言語や環境はこちらになります. みなさんが使われているものもいくつかあるかと思います. これ
  8. 既存ツールは一般的に正しい書き方を教えてくれます. 例えばこれはPythonのソートですが一般的なツールは変数名を小文字にしろとか空白を入れろと教えてくれます. 基本的にはこれで十分です Devreplayの場合,例えばうちの会社は古いPythonを採用しているから書き直せと教えてくれたりします.転職しましょう 2つを使うことによって一般的にもいいし,個人や会社的にも良いコードを書くことができます.
  9. 既存ツールは一般的に正しい書き方を教えてくれます. 例えばこれはPythonのソートですが一般的なツールは変数名を小文字にしろとか空白を入れろと教えてくれます. 基本的にはこれで十分です Devreplayの場合,例えばうちの会社は古いPythonを採用しているから書き直せと教えてくれたりします.転職しましょう 2つを使うことによって一般的にもいいし,個人や会社的にも良いコードを書くことができます.
  10. 既存ツールは一般的に正しい書き方を教えてくれます. 例えばこれはPythonのソートですが一般的なツールは変数名を小文字にしろとか空白を入れろと教えてくれます. 基本的にはこれで十分です Devreplayの場合,例えばうちの会社は古いPythonを採用しているから書き直せと教えてくれたりします.転職しましょう 2つを使うことによって一般的にもいいし,個人や会社的にも良いコードを書くことができます.
  11. DevReplayの利用は4つのプロセスからなります. とはいえ,それぞれ独立しているので面倒なところは飛ばして,便利そうだなって部分だけご利用ください. まず,学習.開発者の作業履歴に基づいたルールを生成します. 次に修正,エディタ上でルール違反を検知します. 更にルールは拡張,編集し状況に対応できます. 最後にGitHub上でシェアすることで,知識の共有やレビューに利用できます.
  12. DevReplayの利用は4つのプロセスからなります. とはいえ,それぞれ独立しているので面倒であれば飛ばすことも可能です.便利そうな部分だけをご利用ください. まず,学習.開発者の作業履歴に基づいたルールを生成します. 次に修正,エディタ上でルール違反を検知します. 更にルールは拡張,編集し状況に対応できます. 最後にGitHub上でシェアすることで,知識の共有やレビューに利用できます.
  13. 2つのコード例で示します. どちらも同じ変数AとBを置き換えるプログラムですが,左側のコードは1行に置き換えれます. これでチーム全員メモリの心配をせずにプログラミングができます.
  14. 学習プロセスではgitで管理したコードの変更履歴を抽象化してルールファイルとして出力します. 変更前がコンディション(条件)で変更語がconsequent(結果)として保存します. たとえばaやbという変数名,競技プログラミングをしている人以外では使わないかと思いますのでそれを何かしらの変数名として扱います.
  15. 学習プロセスではgitで管理したコードの変更履歴を抽象化してルールファイルとして出力します. 変更前がコンディション(条件)で変更語がconsequent(結果)として保存します. たとえばaやbという変数名,競技プログラミングをしている人以外では使わないかと思いますのでそれを何かしらの変数名として扱います.
  16. こちらはそのルールの例です. ざっくりいつ,だれが,どこのプロジェクトで,どのように変更したのか,それがプロジェクトでどの程度普及しているか,という情報が入っています. さらに情報が知りたい場合はリンクも用意してあります
  17. こちらはそのルールの例です. ざっくりいつ,だれが,どこのプロジェクトで,どのように変更したのか,それがプロジェクトでどの程度普及しているか,という情報が入っています. さらに情報が知りたい場合はリンクも用意してあります
  18. DevReplayの利用は4つのプロセスからなります. とはいえ,それぞれ独立しているので面倒であれば飛ばすことも可能です.便利そうな部分だけをご利用ください. まず,学習.開発者の作業履歴に基づいたルールを生成します. 次に修正,エディタ上でルール違反を検知します. 更にルールは拡張,編集し状況に対応できます. 最後にGitHub上でシェアすることで,知識の共有やレビューに利用できます.
  19. エディタで修正する,ここまではいいんですが,小賢しい,賢い開発者はそもそもインストールせずにやりたい放題書いたりします. そこで,GitHub上で人間の代わりにレビューしてもらえます.これでルールを守らない不届き者も咎めることができます.
  20. もう一度このスライド出します.言語も人気なものをサポートし ,VSCode 以外は安定していないのですが,Language Severとしても実装しています
  21. DevReplayの利用は4つのプロセスからなります. とはいえ,それぞれ独立しているので面倒であれば飛ばすことも可能です.便利そうな部分だけをご利用ください. まず,学習.開発者の作業履歴に基づいたルールを生成します. 次に修正,エディタ上でルール違反を検知します. 更にルールは拡張,編集し状況に対応できます. 最後にGitHub上でシェアすることで,知識の共有やレビューに利用できます.
  22. ここでは自動生成では出せない部分にも手が出せます. 例えばなぜ修正すべきか,その修正がどの程度重要かという情報です.
  23. ここでは自動生成では出せない部分にも手が出せます. 例えばなぜ修正すべきか,その修正がどの程度重要かという情報です.
  24. DevReplayの利用は4つのプロセスからなります. とはいえ,それぞれ独立しているので面倒であれば飛ばすことも可能です.便利そうな部分だけをご利用ください. まず,学習.開発者の作業履歴に基づいたルールを生成します. 次に修正,エディタ上でルール違反を検知します. 更にルールは拡張,編集し状況に対応できます. 最後にGitHub上でシェアすることで,知識の共有やレビューに利用できます.
  25. ただ最適なプログラミングの書き方って
  26. もう少し個人に絞ればブログ,知恵袋のようなサイト,同僚や先生に聞く方法もあります.
  27. ここまで行ってもちょっと導入の敷居高いかなと思います. なので自動生成や手打ち作業をしなくてもサンプルルールを使えるようにご用意いたしました. 各フレームワークだったりをつかえます.
  28. これを使えば自分で書かなくともコードを修正できます. ルールファイル全体で7業しかなくとも,Javascriptやreactのデフォルトルールに加えて,ローカルにある会社のルールも使えます.
  29. ここまででいろんなことに使えそうかなと想像できたかと思います. ただ,理論上でなく実際に使えるのか評価実験を行いました. 主な使い方は4つ程度,授業で提出した課題を教師なしで修正する方法,(it is literally unsupervised learning) Second is programming contest, もし正しいアルゴリズムを思いついても些細なミスで順位が上下してしまいます. 三番目はJavaのOSSを対象にします.APRツールのState of the artみんなが使っているデータがあるのでそれに従います. これまでの3つはテストに通るかどうかで
  30. ここまででいろんなことに使えそうかなと想像できたかと思います. ただ,理論上でなく実際に使えるのか評価実験を行いました. 主な使い方は4つ程度,授業で提出した課題を教師なしで修正する方法,(it is literally unsupervised learning) Second is programming contest, もし正しいアルゴリズムを思いついても些細なミスで順位が上下してしまいます. 三番目はJavaのOSSを対象にします.APRツールのState of the artみんなが使っているデータがあるのでそれに従います. これまでの3つはテストに通るかどうかで
  31. ここまででいろんなことに使えそうかなと想像できたかと思います. ただ,理論上でなく実際に使えるのか評価実験を行いました. 主な使い方は4つ程度,授業で提出した課題を教師なしで修正する方法,(it is literally unsupervised learning) Second is programming contest, もし正しいアルゴリズムを思いついても些細なミスで順位が上下してしまいます. 三番目はJavaのOSSを対象にします.APRツールのState of the artみんなが使っているデータがあるのでそれに従います. これまでの3つはテストに通るかどうかで
  32. メッセージは 見える人はちょっと見てほしいんですが,一度でもコミットするとGitHubさんがContributorとして名前の横にタグを付けてくれるんですね ほとんどTensorFlowの知識ないのに.
  33. メッセージは 見える人はちょっと見てほしいんですが,一度でもコミットするとGitHubさんがContributorとして名前の横にタグを付けてくれるんですね ほとんどTensorFlowの知識ないのに.
  34. 今回はこちらのプロジェクト様へプルリクエストを投げてレビューいただきました. GitHubさんが発表された持っろも人気があるプロジェクトを上から順に選びました. 知らないプロジェクトがほとんどでしたがコントリビューターになれました. 気が向いたら今度使ってみようと思います
  35. 今日来られた方には自動生成したルールに頼らずとも自分のルールがある方, VSCodeなんて新興エディタは苦手だという方もいるかと思います. DevReplayは,入出力の形式を自由に選べるよう各機能をバラバラに構成しています. なぜこんな形にしたかというと各機能がまだまだ完全ではなく. ルール自動生成アルゴリズムのように未完成の研究成果や VS Codeのように私の趣味に依る部分が大きくそのあたりは今後置き換えていく必要があるからです. 例えば,ルール自動生成スクリプトを回すことすら面倒な場合はサンプルルール集を使えるようにしています. これも私の基準で集めただけで,専門の人から見ると相当改善点があるかと思います. また,出力部分も現在はVS CodeとGitHubでサポートしてますが VS Codeに実装したというのは私の趣味で他のいいエディタが発表されるかもわからないので Language Server Protocolという複数のエディタに同一の機能を提供するシステムとして移植中です. VS Codeサポートではルールの重要度によって警告の色を変える,ボタン一つで自動修正を行う, ルールファイルを検索するといった機能を行わせていますが, Language Server Protocolに移植することでAtom, Vim, Emacs, Eclipseでも同じことができるようになります. 本当は今日までに間に合わせたかったのですがもう一週間ほどお待ち下さい.
  36. アウトプット側まずはレビューだけでなく自発的にプルリクエストを投稿したり, ディストピアっぽいですが模範的な開発者を評価をやろうと思います. エディタや言語,まだ増やせますよね. 言語についてはC#でもlatexでもエディタ上では使えますがデフォルトルール等はまだ作ってないので作る予定です. エディタはlanguage serverの実装だけではどうにもならないエディタに,プラグインを個別に作成する予定です.
  37. 以上で報告を終わります.最後に左の動画でDevReplayの概要をまとめます. Npmで使えます.