Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

178 views

Published on

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

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

×