Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
開発の生産性を高める事を考える
Search
biwakonbu
November 12, 2023
Technology
0
200
開発の生産性を高める事を考える
開発の生産性をどうやったら上げられるのかを考えつつ、以外とコストになっている事があるテストに焦点をあてて話をしています。
biwakonbu
November 12, 2023
Tweet
Share
More Decks by biwakonbu
See All by biwakonbu
Django を使い続ける理由
biwakonbu
0
190
爆速なPythonフレームワーク
biwakonbu
0
190
HTMX触ってみた
biwakonbu
0
210
スタートアップの技術顧問を3年間続けて発生した事と気付き
biwakonbu
0
490
プログラミングを体系的に学べる言語 Python を推したい
biwakonbu
0
160
プログラミング言語F#を学びはじめました
biwakonbu
0
400
「プログラミングを習得する」を考えてみた
biwakonbu
0
110
Python の型事情について
biwakonbu
0
130
ESLint使ってますか?
biwakonbu
0
140
Other Decks in Technology
See All in Technology
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.4k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1.1k
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
580
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
620
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
110
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
190
Context Engineeringの取り組み
nutslove
0
380
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
430
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
0
130
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
390
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
640
22nd ACRi Webinar - ChipTip Technology Eric-san's slide
nao_sumikawa
0
100
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
330
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
57
Embracing the Ebb and Flow
colly
88
5k
Exploring anti-patterns in Rails
aemeredith
2
260
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
180
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.1k
The Spectacular Lies of Maps
axbom
PRO
1
530
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
Mind Mapping
helmedeiros
PRO
0
90
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
440
How to Think Like a Performance Engineer
csswizardry
28
2.5k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
Transcript
開発の生産性を高める事を考える 株式会社coroutine 東川 諒央
自己紹介 1 プログラムが正しい仕事をする 3 テストって面倒で大変な仕事 4 生産性の高い開発できていますか? 2 5 Python
ではどうやるのか? 6 まとめ
自己紹介 1 株式会社 coroutine 東川 諒央 @biwakonbu 大学教員 ゲームバックエンド フリーランス
経歴 Go Python 実績言語 Ruby 技術顧問 エンジニア教育 業務 設計 プログラミング インフラ etc… Rust Haskell TypeScript 趣味言語 Lisp
> 生産性の高い開発できていますか? ※自分への問いかけです
生産性の高い開発できていますか? 2 ❏ 高い生産性を実現する方法とは? ❏ なるべく人間を働かせない ❏ 仕様をシンプルにする ❏ 割り切るラインを作る
❏ プログラムが正しい仕事をする ❏ 人間の時間を取る程のことじゃないことはどんどん任せる ❏ PR レビュー時の小さな指摘、コードフォーマットの調整など ❏ API の仕様書はコードから生成する ❏ 自動テストを作る ❏ 組織、チームに知見を貯める ❏ 仕組み化する
生産性の高い開発できていますか? 2 ❏ 生産性と一口にいってもやっている事によって意味が異なる ❏ 例1) 受託開発の場合 ❏ 短期 ~
中期の仕事が多い場合は早く形にし、顧客の合意を取る事が正義 ❏ 設計や自動化に凝りすぎるとコスト高に ❏ こだわるべきは毎回の PJ 立ち上げ~納品までで発生する繰り返し作業の省略 ❏ 例2) 長期運用サービスの場合 ❏ サービスの成長に伴いカオス化する仕様との戦い ❏ 品質維持コストが二次曲線になる ❏ 歴史的経緯で変わった仕様によってデッドコードの発生と管理コストの増大 ❏ こだわるべきはメンバーの新規参入時の障壁の除去と 品質維持のための活動の低減
> プログラムが正しい仕事をする
プログラムが正しい仕事をする 3 ❏ プログラムがするべき正しい仕事とは? ❏ 人の仕事を奪う ❏ リントの導入は仕事を奪ってるか? ❏ フォーマッタは?
❏ 静的型解析は? ❏ 自動テストをやってちゃんと奪われましたか? ❏ ツールや仕組みを導入するという事は仕事を増やすという事 ❏ つまり...... 仕事を増やした結果、仕事の総量が減る事が重要
プログラムが正しい仕事をする 3 ❏ コストの掛け方を間違えるとどうなるか? ❏ 例えば自動テストの場合 ❏ 損益分岐点を越えないのであれば極論不要 ❏ 開発3日で納品するものには多分不要ですよね?
❏ このケースで問題なのは、自動テストの性質 ❏ 人間が作業しないと作れないのが問題 ❏ 実行は機械だけど、作成は人間という構図 ❏ ただ、完全に不要という話ではないので注意 ❏ ややこしい内容にはテストが必要 ❏ テストを書く部分を見極めようという話 引用: ソフトウェアのテスト自動化とは?メリットや留意 点、実行方法、ツールなどを紹介 | Sqripts
> 今日はテストの話をします
テストって面倒で大変な仕事 4 ❏ テストコードの作成は非常に大変でコストが嵩み (かさ*み) がち ❏ 状況によっては書かないという選択を取るような場合も ❏ さらにテストがあってもなお不安でもある
❏ そこで最近話題の「Property Based Testing (PBT)」に着目する ❏ Property とは、”特性” の事を指す ❏ 「特定の入力が与えられると出力として期待される特性」をテストするもの ❏ ランダム値を特性の幅に合わせて縮小させながら繰り返し入力テストを行うのが本筋 ❏ 要するに、テストコードを書く量を本質的に減らせる筈 (不要になるとは言わない)
> Python ではどうやるのか?
Python ではどうやるのか? 5 ❏ Hypothesis というライブラリを使う
Python ではどうやるのか? 5 ❏ Hypothesis というライブラリを使う 通常の "自動化された "ソフトウェアテストは、驚くほど手作業だ。コンピューターが実行す るすべてのシナリオを、誰かが手作業で書かなければならないのだ。仮説はこれを解決
できる。 Hypothesisは、テストプロセスを自動化する新世代のツールです。問題領域に対する人 間の理解と機械知能を組み合わせ、テストを書く時間を減らしながらテストプロセスの質を 向上させます。 (Google 日本語訳)
Python ではどうやるのか? 5
Python ではどうやるのか? 5
Python ではどうやるのか? 5
Python ではどうやるのか? 5
Python ではどうやるのか? 5
Python ではどうやるのか? 5
使用感 5 ❏ 慣れが必要な部分は結構ありそう ❏ ランダム生成がベースにあり、全てを網羅する事は必ず保証される訳ではない ❏ 必ずテストして欲しい「入力値」は設定できる ❏ テストで落ちた内容を
Redis などで共有できるのは便利そう ❏ 書いてみてどうか? ❏ 大量にテストデータを書いてソースを汚すのは確かになさそう ❏ Copilot と相性が良くてほぼ書かなくても大体やりたい事ができた ❏ 今回はいっしょくたにテストを書いたけど、従来通りわけた方が良さそう ❏ 労力は削減できそうか? ❏ 慣れに依存する所は大きそうだけど、慣れるとめちゃくちゃ楽だと思う ❏ 単体テストも統合テストも入力値を大量に試せるのは嬉しい
> まとめ
まとめ 6 ❏ 仕事の削減を実現するためにプロパティベースドテストを Python で試してみた ❏ テストコードを少なく大量のケースを担保できるのはスクリプト言語と相性が良さそう ❏ 自動的なテスト生成なのでテストケースのノウハウがあまり必要にならないのが良い
❏ 100%抜けを見つけるというより、 10%の労力で80%の精度を担保するくらいのイメージ ❏ 詳細なケースは都度ケース指定で足して育てていくのが正解っぽい ❏ 今回は時間の都合で紹介しなかったけど、 schemathesis というのもある ❏ OpenAPI / GraphQL のスキーマを利用して API を PBT するツール ❏ API テストの入力を大量自動化できるのは嬉しい ❏ Django REST Framework や FastAPI で導入できると作業とテストの効率が良さそう ❏ 開発 -> スキーマ自動生成 -> スキーマを利用したテスト自動化の流れは強い ❏ Python は静的型解析 + PBT で省力で健全な開発環境を構築できそうな未来が見えてきた
まとめ 6 ❏ プロパティベーステスト本の発売に触発されて今回の内容にしました
P.S. 大阪プログラミングコミュニティ始めました エンジニアのための学習・交流を行うコミュニティスペースを作っています 勉強したい人や人と繋がりたい人に向けてサービス提供していきます 色々なご相談にも対応します ・就活・キャリアアップ相談 ・業務に関する相談 ・個人的な学習の相談 大阪でのエンジニアコミュニティを応援します ・勉強会場として無料で場所貸し
・むしろ開催応援のギフト券なども考えています ・長く続く開発者コミュニティ作りを実行します
おわり