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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ICKX
February 10, 2024
Programming
4.9k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
品質が高いコードって何?
ICKX
February 10, 2024
More Decks by ICKX
See All by ICKX
AIの揺らぎに“コシ”を与える階層化品質設計
ickx
0
470
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
180
階層化自動テストで開発に機動力を
ickx
1
900
検索条件にCRITERIAを
ickx
0
92
「兵法」から見る質とスピード
ickx
1
540
あなたの知らない新潟
ickx
0
98
香川にはTyrellがあるからね
ickx
0
430
品質が高いコードって何?Rev2.1
ickx
2
1.1k
【PHPerKaigi2021】PHPでCSVを安心して扱うために
ickx
4
3.3k
Other Decks in Programming
See All in Programming
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
360
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
3
1.6k
えっ!!コードを読まずに開発を!?
hananouchi
0
220
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.7k
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
310
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
140
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
180
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
210
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
260
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
380
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Thoughts on Productivity
jonyablonski
76
5.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1k
Transcript
「“品質”が高いコード」って何? 同人ソフトサークル Project ICKX 若葉 章 @effy_staffs (EFFY開発チーム)
自己紹介 • 若葉 章(わかば あきら) • 2010年~ 同人ソフトサークル Project ICKX
• プロデューサー / 営業 / インフラ / サーバサイド... / ゲームの実開発以外全部 • 本職はスタッフエンジニアっぽいこともするPHPエンジニア • PHP続けて20年 PHP3の頃からお世話になっています • 最近の趣味は自転車とアマチュア無線 • Tyrell IVEで東京湾一周したり • ICOM IC-705やID-52で移動運用試したり • Nintendo Switch で『VERTICAL STRIKE ENDLESS CHALLENGE』販売中 • Qiitaで『PHPで高速に・省メモリ・確実に日本語CSVを扱う方法』公開中 https://qiita.com/wakabadou/items/84b48ca12f25fb2fb69c 「composer require fw3/streams」をよろしくね。 「composer require tacddd/tacddd」もよろしくね。
こういうの
宣伝 私の知りうる限り最も妥当にSJISのCSVを 直接扱えるライブラリ “fw3/streams “ 最新版にてZIPファイル内のCSVファイルを ”そのまま直接”扱えるようになりました。 ぜひ使ってみてね。
こんな感じ。 メソッドで種類を指定し、 ファイルパスとZIP内のパスを 記述するだけでOK CSVの設定はふつう !!注意!!foreachを使用しない 巻き戻せないストリームのため ここだけ定石から外れる
こ の プ レ ゼ ン は 工 学 士
を お 持 ち の 方 が 「 え っ 、 そ れ は 常 識 で は ? 」 と な る 程 度 の 非 エ ン ジ ニ ア 向 け の 初 歩 的 な 知 見 を お 楽 し み い た だ く 発 表 で す 。
「“品質”が高い」 とは何でしょうか?
ぼんやり思われている「コードの“品質”が高い」 • 不具合発生件数が少ない・ゼロ • PHPUnitなどのxUnitツールを整備・継続的に運用している • テスト・ステージングなどの開発フェーズを用意している • 自動でテストさせている •
テストを実施している • プロセス・テストなどの技法を用意・実施している • 高機能・多機能である • 多くの人が使っている・好印象を持っているものを使用している • 新しい・最新の技術・概念を使用している
それら “だけ”だったらば
「“品質”が高い」 とは言えません
そもそも “品質” とは何でしょうか?
“品質”とは “対象”に“本来備わっている特性”の 集まりが“要求事項”を満たす“程度” ISO 9000 (JIS Q 9000:2015)
ISO 25000で定義される “ソフトウェアの品質”では 明示された条件下で使用するとき、 明示的ニーズ又は暗黙のニーズを満たす ためのソフトウェア製品の能力 ISO/IEC 25000:2014 (JIS X
25000:2017) 他にも色々あるので興味が出たら調べてみてね • 品質管理 ISO/IEC 25000 • 品質モデル ISO/IEC 25010 • 品質測定 ISO/IEC 25022 • 品質測定 ISO/IEC 25023 • 品質要求 ISO/IEC 25030 • 品質評価 ISO/IEC 25040
“品質”とは “先んじて定められた要求事項”に対して “どの程度、要求を満たしているか”が“品質”です。 “完了の定義をしろ、話はそれからだ” ってプロポーザルあったよね
つまり“品質”とは “要求を満たしていること”
よって、これらを実施しているだけでは 「“品質”が高い」状態になる事はありません • 不具合発生件数が少ない・ゼロ • PHPUnitなどのxUnitツールを整備・継続的に運用している • テスト・ステージングなどの開発フェーズを用意している • 自動でテストさせている
• テストを実施している • プロセス・テストなどの技法を用意・実施している • 高機能・多機能である • 多くの人が使っている・好印象を持っているものを使用している • 新しい・最新の技術・概念を使用している そもそも下二つはただの教条主義なんで論外なんですけどね ※教条主義:権威者が述べた事を、その精神を深くも理解せず、 杓子定規に振りまわす態度。
“要求事項”の話の前に “機能” について
“多機能”はさておき“高機能”とは • “品質”の定義にあった 「本来備わっている“特性”の集まりが要求事項を満たす程度」 • そこにある“特性”の違いになります。 個々の“特性”に “備わっているものの働きが優れていること”
“要求事項” とは何でしょうか?
“高機能”を提供しつつ“品質”を満たしている例 • JPEGは保存時に“Quality”パラメータを付与する事ができます。 • これにより“高Quality”な画質でも “低Quality” な画質でも 保存する事ができます。 • より粗い画像は写真として低機能、より鮮明な画像は写真として高
機能と言えます。 • ここだけでの使い勝手の良し悪しは品質ではないということです。 • どちらにしてもJPEGファイルフォーマット仕様を満たしているため、 どちらの写真でもJPEGとして適当な品質を達成出来ています。
“要求事項”とは… “ニーズ又は期待” “明示されている、通常暗黙のうちに了解されている” “義務として要求されている” 又は
“要求事項”が 対象とするものは • 認識しうる、考えうるもの全て • 製品、人、資源、変換率、プロジェクト計画、将来の組織状態、 サービス、プロセス、組織、システムなど、 物質的なもの、非物質的なものの何れかも問いません。 • 非物質的なものでIT業界でよく聞くものにISMS
(JIS Q 27001) があります。 • ISMSの取得とは情報セキュリティマネジメントシステムとして 定めたプロセスがISMSの求める要求事項を満たし、 認証機関から認定を取得した事を示します。
“高品質” とは何でしょうか?
“高品質”とは • “定められた要求事項”に対して“要求を満たしている”ことです。 • 超過でも未満でもなりません。 • めっぽう忘れられがちですが、 未満だけでなく、超過もダメです。
“高品質” を達成するには?
例えば 業務上のレイヤごとに 要求を明確化し それを達成する • 例えば、自社サービスなら次の5レイヤが手を出しやすいです • 企画要求 • 設計要求
• 製造要求 • サービス要求 • あたり前要求 • それぞれ、前レイヤが定める要求に依存して、自身の要求が定まります
5レイヤごとの例 • 企画要求:企画で実現しようとしている特性に対する顧客の要求 • 顧客が想像すらできない、未来にありえる顧客の要求。 車や家の広告にある、ライフスタイルの提案などが参考になる。 • 設計要求:企画を実現するために必要な特性の組み合わせの要求 • 新たに必要となる特性の水準や品質に対する要求。
• 製造要求:実装に当たっての達成すべき水準や機能に対する要求 • サービス要求:使い出、設定、サポートなど利用に対する要求 • 当たり前要求:当たり前過ぎて通常、暗黙に了解されている要求 • セキュリティや実行効率、法令要求事項、規制要求事項など • 非機能要件として”見えない化”されがち
「あれ?そうなると我々が 日ごろ目指している “高品質なコード”って…」
そのままでは 高品質足りえません。 • 繰り返しになりますが“品質”はまず要求ありきです。 • 経営層から達成すべき要求が提示され、初めて高品質を 指向することができます。 • ここは特に重要な点なのですが コードの質の追求は経営課題です。
• 不具合の少ないコード、変化に追従しやすいコード、 セキュアなコード。いずれにしても経営層がそれを必要とし 要求しない限りは、“品質”の話自体を始めることが できません。
なるほど! 「納期さえ間に合えば良い」 が正なんだ…
そんな訳はない • 経営層の品質マネジメント自体の質の話になります。 • ISO9001で要求される“顧客重視”の観点が抜け落ちている ことになるからです。 • 例えばセキュリティ。 • 顧客は安全にサービスを利用することを暗黙的に要求している
のだから、このご時世においてセキュリティをないがしろにした リリースは顧客からの要求に応えていないことになる。 • なお、それらを全部判った上であえて対応しないという 経営判断もありえます。 • 「人の噂も七十五日、3ヶ月で株価が元に戻るならどうでもよくね???」
とはいえ弊意思決定層…
とはいえ弊意思決定層…
このそれぞれのレイヤにおいて 要求を達成する “プロセス” 構築しそれを実施することで “高品質” を達成できるようになります
品質はプロセスに宿る
それは製品品質追求の話で、 直接のコード品質ではないのでは?
そうです 追求すべき品質は大きく 製品品質と業務品質に 分けることが出来ます
ここがごっちゃになるせいで 今まで品質の話は大混乱 に陥りがちでした
コードの品質を改善したくば 業務品質の改善が必要となります
“業務品質”としての コード品質 を達成するには?
コントロール出来る所 からはじめよう
”識者たる私たち”が定めることの出来る要求 • 例えばセキュア実装 • 私たちが定義するセキュアな状態をまず定義します • 定義したセキュアな状態を実現するために必要なことを列挙します
”識者たる私たち”が定めることの出来る要求 • 例えばセキュア実装 • 私たちが定義するセキュアな状態をまず定義します • 定義したセキュアな状態を実現するために必要なことを列挙します • 例えば… •
XSSを実現できないことを要求します[MUST] • サニタイズは行いません[MUST] • 出力は全てescapeを行います[MUST] • escapeはコンテキストに依存しなければなりません [MUST] • そのためにコンテキスト境界を超える出力は許しません [MUST] 許されない例) $href = ‘href=“hoge.php”’;からの<a <?php echo $href; ?>>
”識者たる私たち”が定めることの出来る要求 はい、要求が1セットできあがりました。 • サニタイズは行いません[MUST] • 出力は全てescapeを行います[MUST] • escapeはコンテキストに依存しなければなりません [MUST] •
そのためにコンテキスト境界を超える出力は許しません [MUST] 許されない例) $href = ‘href=“hoge.php”’ => <a <?php echo $href; ?>>
これって コードレビューで指摘 するようなことなのでは?
そうだよ
ただし、次の点が変わります 予め定められた要求に依り 要求の下に統治する
ただのガイドラインを止め 明確に「する」「してもよい」 「してはならない」を要求し 要求を満たしているかどうかで コードの品質を測ります
個別最適な個人技から 定められたプロセスに 則った業務遂行へ
そして コードレビューを実施すること 自体も業務プロセスとして 要求します
そうやって要求する プロセスを定義、積み上げる事で 業務品質を向上する事が出来ます
定義すべき対象の 指針はないの?
システム・ソフトウェア製品の品質モデル ISO/IEC 25010 (JIS X 25010) • 機能適合性 • 機能完全性
• 機能正確性 • 機能適切性 • 性能効率性 • 時間効率性 • 資源効率性 • 容量満足性 • 互換性 • 共存性 • 相互運用性 • セキュリティ • 機密性 • インテグリティ • 否認防止性 • 責任追跡性 • 真正性 • 保守性 • モジュール性 • 再利用性 • 解析性 • 修正性 • 試験性 • 移植性 • 適応性 • 設置性 • 置換性 • 使用性 • 適切度認識性 • 習得性 • 運用操作性 • ユーザエラー • 防止性 • ユーザインター • フェーズ快美性 • アクセシビリティ • 信頼性 • 成熟性 • 可用性 • 障害許容性 • 回復性
適切な要求と仕様が ある前提で“高品質”を 維持するには
“高品質”を維持する作業の例 • “要求事項”を“治具”にし“公差に収まっているかどうか” で “品質の適合度合いを自動的に測る” • 治具って何 • JIG。加工や組み立ての際、部品や工具の作業位置を指示・誘導するために 用いる器具の総称。
• 同一形状の製品ならば高度な熟練技術を用いずとも製品のバラツキを 最小限に抑え、迅速に大量生産することを可能にする。 • 公差って何 • 機械工学に代表される工学において許容される差のこと。 • 「その差の枠内に収まっていればOKです!」
“治具”として見るxUnit • PHPUnitをはじめとしたxUnitツール群は “治具”として活用する ことができます。 • プログラマが受けた要求を元に仕様をテストケースとして起こし、 要求する枠内に収まっていればOK => まさに“治具”
• 冪等性もあるので、なんどでも簡単に実施可能 => まさに“治具” • この観点でxUnitを見れば、だいぶテストケースも設計しやすく なります。
xUnitではどこまで やるべきなのか
まずは徹底して要求を テストコードに 落とし込むこと
ごくふつうの テストコードでは?
あれ?そうなると境界値テスト などのテスト技法は…?
まず先に要求ありきです 要求に対して適切な技法として 境界値テストが選択される という順番になります
まとめ 品質が高いコードとは 要求を満たしているコード
おさらい • 何らかのツールを使っている、KPIを設定しているだけでは 品質が高いとは言わない • 品質とは要求を満たしていること • そのためまずは要求が必要 • 要求を満たし続けるためにはプロセス構築が必要
• 品質はプロセスに宿る • 出来る所から要求として文書化していこう • コードの品質の話をするためには製品品質から切り離して 業務品質として話をまとめよう