Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
プログラミングを再現する
DevReplay(デブリプレイ)
誰でも達人プログラマーのように
奈良先端科学技術大学院大学 上田 裕己
ソフトウェア開発の半分はメンテナンス
2
バグ修正
25%
機能改善
25%
機能設計
20%
コード記述
30%
T. Britton, L. Jeng, G. Carver, and P. Cheak, ‘‘Reversible debug...
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の書き方
De...
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”],
”conseque...
15
ルールファイル
Textmate Snippet
tmp = a
a = b
b = tmp
a, b = b, a
ビフォー
アフター
ソースコードの変更履歴からルール生成
ビフォー アフター
“condition”: [
“tmp =...
import { チョットデキルヒト }
16
いつ :最近三ヶ月
どこで:mrubyでの
だれが:Matzさん
言語 :C/C++
のルールを教えて
export { チョットデキルヒト }
17
プロジェクト
作成者
作成日
変更前
変更後
普及率
リンク
github.com/devreplay/devreplay-pattern-generator/blob/master/sample...
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)
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
Prochain SlideShare
Chargement dans…5
×

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

189 vues

Publié le

2019年度(第26回)未踏IT人材発掘・育成事業 成果報告会
上田 裕己 / 担当PM:竹迫 良範
「開発者が行ったソースコード修正作業を学習し代行するボット 」

Publié dans : Logiciels
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

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

×