Timetable

Back to Timetable
こだわりを静的解析で表現しよう 90分で作って動かす自作analyzer入門
僕が初めて静的解析ツールを作ったきっかけは境界値のテストケースが漏れているにもかかわらずテストカバレッジ100%と表示されていた違和感からです。一般的なカバレッジや既製のlintだけでは、境界を跨ぐテスト入力が十分に用意されているかまでは保証できません。さらにAIにコードを書かせる機会が増えている今、コーディング規約などのルールでは品質を守りきれなくなっています。そこで自分のこだわりを静的解析ツールに落とし込むことで、人が書いたコードにもAIが生成したコードにも、プロンプトや文書だけに頼らず、同じルールを継続的・機械的に適用できるようになると考えました。
本ワークショップでは、境界値分析・同値分割の観点でテーブルテストの網羅性を検証するツールを題材に、ASTの読み方から始めて自分の手で静的解析ツールを実装します。当日は、事前に公開するハンズオン用リポジトリをcloneし、同じく事前公開する教材を参照しながら、3ステップで進めていきます。
1.関数を見つけて報告する
2.if文から境界値を抽出する
3.テスト値と照合して警告する
完成品はif文の境界値とその前後がテーブルテストのテストケースに含まれていなければ警告するCLIツールです。
本ワークショップのゴールは、参加者がASTを使ってコードを機械的に検査する仕組みを体験し、既製のlintやtypecheckだけでは守れないルールに出会ったとき、「自作の静的解析という選択肢もある」と思い出せるようになることです。自分で書いた処理から診断が出る面白さを持ち帰ってもらうことを目指します!
対象者:
・Goの基本文法の読み書きができる方
・ASTに関心があるが手を出せていない人
事前に準備いただくもの:
・GoのコードとGitが実行できる環境
・ノートPCの電源アダプタ
タイムテーブル:
0~10分:ASTに出会った自分の経験
10~25分:ASTとは(ASTの説明と読み方、コードをASTに変換してみる)
25~30分:analysisフレームワークの仕組み
30~45分:Step1 関数を見つけて報告する
45~60分:Step2 if文から境界値を抽出する
60~80分:Step3 テスト値と照合して警告する+発展課題
80~90分:完全版デモ・CI組み込み・まとめ
つばさ 九州工業大学大学院
Goを中心にバックエンド開発を学んでいる学生です。