Slide 1

Slide 1 text

人類よ! コードレビューも完 全自動化 時代へ?! 今風なイケてる静的解析を大活用しよう! mabl コミュニティウェビナー #11

Slide 2

Slide 2 text

About Me 『アジャイル開発とスクラム』 https://www.amazon.co.jp/dp/4798129704/ 、『リーン開発 現場』 https://www.amazon.co.jp/dp/427406932X 藤原 大 / Dai Fujihara Japan Lead at mabl Inc. CEO at Sekai Co., Ltd. ● 現在: 独立してスーパーアジャイルコーチ 開発組織 技術顧問(プロセス、 QA中心) CTOやEMへ コーチング mabl 日本顧客向け業務全般担当 ● メルカリ: エンジニアリングマネージャ( EM) Software Engineer in Test(SET) テスト自動化、QA組織立ち上げ ● 楽天: EM、アジャイルコーチ ● 某SIer: Javaエンジニア ● 活動: ○ 『アジャイル開発とスクラム』寄稿 ○ 『リーン開発 現場』翻訳 ○ Twitter: @daipresents ○ https://daipresents.com/service/

Slide 3

Slide 3 text

インテリジェントなテスト自動化 ● クラウド/SaaSで初期コスト低 ● 簡単操作でテスト 作成や修正可能 ● AIでテストを自動修復、自動画面分析 ● クロスブラウザ対応、並列/同時実行、など クラウドならで 恩恵多数 ● CI/CDへ 組み込みも簡単

Slide 4

Slide 4 text

簡単作成&実行 不安定な操作をAIが自動修復 画面差分を自動検知

Slide 5

Slide 5 text

デスクトップアプリ

Slide 6

Slide 6 text

APIテスト

Slide 7

Slide 7 text

mabl コミュニティウェビナー

Slide 8

Slide 8 text

AIを活用したQA & テスト自動化サービス「mabl(メイブル)」 コミュニティウェビナー コードレビュー 静的解析

Slide 9

Slide 9 text

なぜコードレビュー? ● こ ウェビナーで アジャイル ・DevOps時代 開発とテスト あり かたを追い求めています ● アジャイルテスティング 実践 た めに コードレビュー 自動化も有 効です ● 今回コードレビューと静的解析 未 来をさぐる旅です

Slide 10

Slide 10 text

こ ウェビナーで目指すこと ● テスト自動化 実践者 話を聞き ながらわいわいする ● テスト自動化 成功例が今後増 えていくため プラクティスを探る ● 実践的なアジャイルテスティング が国内でどんどん出てくることを 祈って

Slide 11

Slide 11 text

注意点 ● 動画 後日公開予定です ● Discord 録音公開しません ● SNS共有OKです ● 質問 ご自由に投稿ください。 チャットへ 書き込みも大歓迎で す ● イベント後 10秒アンケートにご 協力ください

Slide 12

Slide 12 text

人類よ! コードレビューも完 全自動化 時代へ?! 今風なイケてる静的解析を大活用しよう! mabl コミュニティウェビナー #11

Slide 13

Slide 13 text

自己紹介 浅原明広 株式会社Sider ・代表取締役社長 ハワイにある"す る望遠鏡"用 ガンマ線検出器を開発し、かに星雲 研究に20代を捧げ、宇宙物理学分野で博士号取得しました。そ 後、エン ジニアとしてIT分野にキャリアチェンジ。 IBMから株式会社Fixstars を経 て、2012年からカリフォルニアに生活・ビジネス 拠点を移し、現在、株式 会社Sider にてDeveloper Experience を向上させるSaaS ソリューション 開発・販売を行っています。 角幸一郎 株式会社Sider・Sider事業担当執行役員 2009年からフリーランスとしてiOS, Android, Ruby(Sinatra, RoR), Java, PHPなどでスマートフォンアプリやサーバサイドアプリケーション、SDK 開 発などを行ってきました。2012年に法人を作り、そ ち、2014年に Siderを創業。2019年10月より株式会社Siderに統合、 ソフトウェア開発 者がより製品 開発に集中出来るような世界を作るべく、開発者・開発 チーム向け 製品を提供しています。

Slide 14

Slide 14 text

Sider 製品群 Sider Scan Sider 製品概要: - 自動コードレビューサービス - サーバー駆動(オンプレ、クラウド) - GitHub/GitLab と接続し、連携 - 有償(1500円/シート/月) 製品概要: - 重複コード分析に基づく修正漏れ検 知ツール - リポジトリを監視し、怪しいコードを見 つけたら通知 - 1リポジトリ 解析 無償 2リポジトリ目から有償 将来的に 機能 取り込み https://siderlabs.com/scan/ https://sider.review/ 17

Slide 15

Slide 15 text

Sider 製品概要 ● 機能1 コードレビュー機能 ○ 利用シーン: Pull Request/Merge Request ○ 概要: 30以上 解析機で対象となるコードを 分析し、問題点を指摘 ● 機能2 コード品質分析機能 ○ 利用シーン: 振り返り、統合テスト時、 リリー ス前後、など ○ 概要: クローン、複雑性、コード規模など、 様々なソフトウェアメトリクスからコード 品 質を分析 2. コード品質分析機能 (Sider Web UI) 1. コードレビュー機能 (Sider Web UI or GitHub/Lab 画面) or * *GitLab 版で 機能2 現時点で 利用できません クラウド・オンプレ駆動 https://sider.review/

Slide 16

Slide 16 text

Sider Scan 製品概要 19 1. リポジトリを監視 2. 変更漏れなど バグを検出し  チームに通知 1リポジトリ 無償利用可能 今すぐダウンロード https://siderlabs.com/ リポジトリを監視し、ソースコード内に潜むバグを自動検出 不具合 発生を未然に防ぎます

Slide 17

Slide 17 text

AIを活用したQA & テスト自動化サービス「 mabl(メイブル)」 コミュニティウェビナー Q. 修正漏れバグ AI監視ができる?

Slide 18

Slide 18 text

Sider Scan 提供する機能 1. 独自アルゴリズム* で重複コードを高速検出 2. 記述パターンを分析し、変更漏れ等 バグを自動検出 3. 発見した問題コードを通知 21 Sider Scan で実際に見つかった変更漏れバグ 例 : cdev_count をz_count に変更する を忘れている (Intel Thermal Daemon: https://github.com/intel/thermal_daemon) *特許申請中技術 // get cooling device count uint cooling_device_count; QDBusReply cdev_count = iface->call("GetCdevCount"); if (cdev_count.isValid()) { cooling_device_count = cdev_count; } else { qCritical() << "error from" << iface->interface() << "=" << cdev_count.error(); return false; } コピー元 // get zone count uint zone_count; QDBusReply z_count = iface->call("GetZoneCount"); if (z_count.isValid()) { zone_count = z_count; } else { qCritical() << "error from" << iface->interface() << "=" << cdev_count.error(); return false; } cdev_count を z_count に 修正する を忘れていませんか? コピー先

Slide 19

Slide 19 text

どうやって修正漏れを見つける ? ● 修正漏れ検知アルゴリズム1: パターン分析 ○ 重複コードペア間 コード 「違い」に注目して、「変更パターン」を辞書化 ○ 重複コード 各行が、作成した「変更パターン」に沿っているかを確認。逸脱する記述を見つ け、変更案とともに指摘 変更漏れ指摘 例: コードクローンにおいて他 変数 型が全て揃っている (緑網掛け) に対して、指摘 引数 (赤網掛け) だけshort で定義されている → 記述パターンに合わないためバグ 可能性がある 22

Slide 20

Slide 20 text

どうやって修正漏れを見つける ? ● 修正漏れ検知アルゴリズム2: 時系列分析 ○ 重複ペア間 コード 「過去」と「現在」に注目 ○ 「過去」 完全一致であった に、「現在」 ペア間でコードが異なる行を見つけたら、修正漏 れとして指摘する 現在 過去 23

Slide 21

Slide 21 text

バグらしさ 評価 ● 実際に 、これら 修正漏れ検知アルゴリズムだけだと、大量 誤検知 (偽陽性) が発生します ● 後段処理で、それぞれ 指摘 「優先度」を独自 アルゴリズムで評価し、優先的に見ていた だきたい(おそらくバグに近い) 順でソートします。 ● こ 評価処理で、ヒューリスティクスと機械学習による分類を組み合わせています。 24

Slide 22

Slide 22 text

実際にあった!著名OSS で 修正漏れバグ 実際に50以上 著名OSSで修正漏れバグを見つけています ● OmegaT (翻訳ソフト, プルリクエストマージ済 ) ○ https://github.com/omegat-org/omegat/pull/98 ● クロノスグループ SPIRV-Tools (グラフィックス言語SPIR-V向けツール群, プルリクエストマージ済 ) ○ https://github.com/KhronosGroup/SPIRV-Tools/issues/4497 ● Google V8 (JSエンジン, プルリクエストレビュー中 ) ○ https://chromium-review.googlesource.com/c/v8/v8/+/2897323 ● phpMyAdmin (MySQL 管理ツール, プルリクエストマージ済 ) ○ https://github.com/phpmyadmin/phpmyadmin/pull/16904 ● Apache Kafka (分散データストリーミング・プラットフォーム , プルリクエストマージ済 ) ○ https://issues.apache.org/jira/browse/KAFKA-13248 ● Vercel 社 Hyper (ターミナルエミュレーター , プルリクエストマージ済 ) ○ https://github.com/vercel/hyper/issues/5911 ● そ 他、NVIDIA, ARM, Intel, Cisco 等 オープンソースプロジェクトでも多数 バグを発見 プルリクエスト準備中 25

Slide 23

Slide 23 text

修正漏れ 例1 ● おそらくコピペしたと思われる、 2つ 異なるファイル間 重複 コードで、左 ”TimeOrderWindowsStoreBuilde に関する処 理、コピー元と思われる右 ”WindowStoreBuilde” に関する処 理を行っている。しかし、左 コードで、 WindowStoreBuilder 修正を忘れている ● コミュニティに指摘したところ、確かにバグであるとして Pull Request マージ済 ● OSS: Apache Kafka ● 概要: 大規模チャットサービスなどに採用されてい る分散データストリーミング・プラットフォーム ● 言語: Java, Scala ● リポジトリ: https://github.com/apache/kafka 26

Slide 24

Slide 24 text

修正漏れ 例2 ● OSS: Wordpress ● 概要: コンテンツ・マネジメントシステム言語 : PHP, JS ● リポジトリ: https://github.com/WordPress/WordPres s /WordPress-extract/wp-includes/sodium_compat/src/Core32/Curve25519.php (同一ファイル内部で 重複コード ) ● 左右 重複箇所を見比べた際に、明らかにインスタンス名 がずれている ● 自動生成されたようなコード 連続 (3003行)で、人間 レ ビューで 間違いに気づきにくい 27

Slide 25

Slide 25 text

AIを活用したQA & テスト自動化サービス「 mabl(メイブル)」 コミュニティウェビナー Q. コードレビュー 自動化ができる?

Slide 26

Slide 26 text

Quick Demo プルリクエスト 自動コードレビュー https://sider.review/gh/repos/202486306/pulls/2650?statuses%5B%5D=close d&statuses%5B%5D=fixed&statuses%5B%5D=opened コード品質 可視化と改善 https://sider.review/gh/repos/202486306/branches/master/commits/1c1a3fea 8849cfe6c756e43e8192ae169346034f ※パブリックリポジトリ Sider 解析結果 誰でも未登録で閲覧可能です

Slide 27

Slide 27 text

AIを活用したQA & テスト自動化サービス「 mabl(メイブル)」 コミュニティウェビナー ● 実務に最適なコードレビューガイドライ ン ● コード品質 可視化と改善 ● 組織内で ナレッジ 共有 ● 幅広いコード解析

Slide 28

Slide 28 text

実務に最適なコードレビューガイドライン - 1000 OSSで共通して守られるルール みをSider コーディングガイドラインに採 用。カスタマイズも可能。 多く 人がLinterでチェックしているが実 際に 守っていないルールをSiderで 無 効化している。以下各言語ごと無効にして いるデファクトなルール数一例 - JS: 2〜 - Python: 26〜 - Java: 多量 - Ruby: 31〜

Slide 29

Slide 29 text

コード品質 可視化と改善 コード 変更頻度が高い = リファクタリングする意義がある 各種 メトリクスが悪い = 生産性を落としている原因である 可能性が高い 上記 2軸でリファクタリングする価 値 あるコード(ファイル)を可視化 し、改善を促す

Slide 30

Slide 30 text

組織内で ナレッジ 共有 一部引用元: https://github.com/sider/goodcheck-rules 社内で頻回に起こるタイプミス、表記ゆれを抑止 pattern: Github message: Did you mean "GitHub"? pattern: ヶ月 message: | Did you mean "か月"? DB 変更時に行ってほしいことを提示 pattern: "ActiveRecord::Schema.define" glob: "db/schema.rb" message: | This PR changes the database schema. When doing a DB migration, please follow these steps: CSS アンチパターンを明示 pattern: regexp: '\s(z-index:)\s*(?!.*\$.*)' glob: '**/*.{css,scss}' message: | z-indexを指定するときに 変数を使ってください。 反映される優先順位がわかりづらくなります。

Slide 31

Slide 31 text

ご参加ありがとうございました ● 毎月開催予定です。 ● イベント後 10秒アンケートにぜ ひご協力ください。 ● こ あと、懇親会もか て DiscordにてAsk the speaker を 開催します。お酒を飲みながらゆ るりとご参加ください。