Upgrade to Pro — share decks privately, control downloads, hide ads and more …

品質が高いコードって何?

ICKX
February 10, 2024

 品質が高いコードって何?

ICKX

February 10, 2024
Tweet

More Decks by ICKX

Other Decks in Programming

Transcript

  1. 自己紹介 • 若葉 章(わかば あきら) • 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」もよろしくね。
  2. こ の プ レ ゼ ン は 工 学 士

    を お 持 ち の 方 が 「 え っ 、 そ れ は 常 識 で は ? 」 と な る 程 度 の 非 エ ン ジ ニ ア 向 け の 初 歩 的 な 知 見 を お 楽 し み い た だ く 発 表 で す 。
  3. ぼんやり思われている「コードの“品質”が高い」 • 不具合発生件数が少ない・ゼロ • PHPUnitなどのxUnitツールを整備・継続的に運用している • テスト・ステージングなどの開発フェーズを用意している • 自動でテストさせている •

    テストを実施している • プロセス・テストなどの技法を用意・実施している • 高機能・多機能である • 多くの人が使っている・好印象を持っているものを使用している • 新しい・最新の技術・概念を使用している
  4. 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
  5. よって、これらを実施しているだけでは 「“品質”が高い」状態になる事はありません • 不具合発生件数が少ない・ゼロ • PHPUnitなどのxUnitツールを整備・継続的に運用している • テスト・ステージングなどの開発フェーズを用意している • 自動でテストさせている

    • テストを実施している • プロセス・テストなどの技法を用意・実施している • 高機能・多機能である • 多くの人が使っている・好印象を持っているものを使用している • 新しい・最新の技術・概念を使用している そもそも下二つはただの教条主義なんで論外なんですけどね ※教条主義:権威者が述べた事を、その精神を深くも理解せず、 杓子定規に振りまわす態度。
  6. “高機能”を提供しつつ“品質”を満たしている例 • JPEGは保存時に“Quality”パラメータを付与する事ができます。 • これにより“高Quality”な画質でも “低Quality” な画質でも 保存する事ができます。 • より粗い画像は写真として低機能、より鮮明な画像は写真として高

    機能と言えます。 • ここだけでの使い勝手の良し悪しは品質ではないということです。 • どちらにしてもJPEGファイルフォーマット仕様を満たしているため、 どちらの写真でもJPEGとして適当な品質を達成出来ています。
  7. 例えば 業務上のレイヤごとに 要求を明確化し それを達成する • 例えば、自社サービスなら次の5レイヤが手を出しやすいです • 企画要求 • 設計要求

    • 製造要求 • サービス要求 • あたり前要求 • それぞれ、前レイヤが定める要求に依存して、自身の要求が定まります
  8. 5レイヤごとの例 • 企画要求:企画で実現しようとしている特性に対する顧客の要求 • 顧客が想像すらできない、未来にありえる顧客の要求。 車や家の広告にある、ライフスタイルの提案などが参考になる。 • 設計要求:企画を実現するために必要な特性の組み合わせの要求 • 新たに必要となる特性の水準や品質に対する要求。

    • 製造要求:実装に当たっての達成すべき水準や機能に対する要求 • サービス要求:使い出、設定、サポートなど利用に対する要求 • 当たり前要求:当たり前過ぎて通常、暗黙に了解されている要求 • セキュリティや実行効率、法令要求事項、規制要求事項など • 非機能要件として”見えない化”されがち
  9. そのままでは 高品質足りえません。 • 繰り返しになりますが“品質”はまず要求ありきです。 • 経営層から達成すべき要求が提示され、初めて高品質を 指向することができます。 • ここは特に重要な点なのですが コードの質の追求は経営課題です。

    • 不具合の少ないコード、変化に追従しやすいコード、 セキュアなコード。いずれにしても経営層がそれを必要とし 要求しない限りは、“品質”の話自体を始めることが できません。
  10. そんな訳はない • 経営層の品質マネジメント自体の質の話になります。 • ISO9001で要求される“顧客重視”の観点が抜け落ちている ことになるからです。 • 例えばセキュリティ。 • 顧客は安全にサービスを利用することを暗黙的に要求している

    のだから、このご時世においてセキュリティをないがしろにした リリースは顧客からの要求に応えていないことになる。 • なお、それらを全部判った上であえて対応しないという 経営判断もありえます。 • 「人の噂も七十五日、3ヶ月で株価が元に戻るならどうでもよくね???」
  11. ”識者たる私たち”が定めることの出来る要求 • 例えばセキュア実装 • 私たちが定義するセキュアな状態をまず定義します • 定義したセキュアな状態を実現するために必要なことを列挙します • 例えば… •

    XSSを実現できないことを要求します[MUST] • サニタイズは行いません[MUST] • 出力は全てescapeを行います[MUST] • escapeはコンテキストに依存しなければなりません [MUST] • そのためにコンテキスト境界を超える出力は許しません [MUST] 許されない例) $href = ‘href=“hoge.php”’;からの<a <?php echo $href; ?>>
  12. システム・ソフトウェア製品の品質モデル ISO/IEC 25010 (JIS X 25010) • 機能適合性 • 機能完全性

    • 機能正確性 • 機能適切性 • 性能効率性 • 時間効率性 • 資源効率性 • 容量満足性 • 互換性 • 共存性 • 相互運用性 • セキュリティ • 機密性 • インテグリティ • 否認防止性 • 責任追跡性 • 真正性 • 保守性 • モジュール性 • 再利用性 • 解析性 • 修正性 • 試験性 • 移植性 • 適応性 • 設置性 • 置換性 • 使用性 • 適切度認識性 • 習得性 • 運用操作性 • ユーザエラー • 防止性 • ユーザインター • フェーズ快美性 • アクセシビリティ • 信頼性 • 成熟性 • 可用性 • 障害許容性 • 回復性
  13. “高品質”を維持する作業の例 • “要求事項”を“治具”にし“公差に収まっているかどうか” で “品質の適合度合いを自動的に測る” • 治具って何 • JIG。加工や組み立ての際、部品や工具の作業位置を指示・誘導するために 用いる器具の総称。

    • 同一形状の製品ならば高度な熟練技術を用いずとも製品のバラツキを 最小限に抑え、迅速に大量生産することを可能にする。 • 公差って何 • 機械工学に代表される工学において許容される差のこと。 • 「その差の枠内に収まっていればOKです!」
  14. おさらい • 何らかのツールを使っている、KPIを設定しているだけでは 品質が高いとは言わない • 品質とは要求を満たしていること • そのためまずは要求が必要 • 要求を満たし続けるためにはプロセス構築が必要

    • 品質はプロセスに宿る • 出来る所から要求として文書化していこう • コードの品質の話をするためには製品品質から切り離して 業務品質として話をまとめよう