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

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

ICKX
March 08, 2024

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

ICKX

March 08, 2024
Tweet

More Decks by ICKX

Other Decks in Programming

Transcript

  1. • • • • スタッフエンジニア PHPエンジニア • PHP続けて20年 • 自転車

    アマチュア無線 • TYRELL IVE • ICOM • VERTICAL STRIKE ENDLESS CHALLENGE • HTTPS://QIITA.COM/WAKABADOU/ITEMS/84B48CA12F25FB2FB69C
  2. “品質” • 不具合発生件数が少ない・ゼロ • XUNITツールを整備・継続的に運用 • 開発フェーズを用意 • 自動でテストさせている •

    テストを実施している • プロセス・テストなどの技法を用意・実施している • 高機能・多機能である • 多くの人が使っている・好印象を持っているものを使用している • 新しい・最新の技術・概念を使用している
  3. 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
  4. “品質” • 不具合発生件数が少ない・ゼロ • XUNITツールを整備・継続的に運用 • 開発フェーズを用意 • 自動でテストさせている •

    テストを実施している • プロセス・テストなどの技法を用意・実施している • 高機能・多機能である • 多くの人が使っている・好印象を持っているものを使用している • 新しい・最新の技術・概念を使用している そもそも下二つはただの教条主義なんで論外なんですけどね ※教条主義:権威者が述べた事を、その精神を深くも理解せず、 杓子定規に振りまわす態度。
  5. “高機能” “品質” • “QUALITY” • “高QUALITY” “低QUALITY” • 写真として低機能 写真として高

    機能 • ここだけでの使い勝手の良し悪しは品質ではない • JPEGファイルフォーマット仕様を満たしている どちらの写真でもJPEGとして適当な品質を達成出来ています
  6. “要求事項” • 認識しうる、考えうるもの全て • 製品、人、資源、変換率、プロジェクト計画、将来の組織状態、 サービス、プロセス、組織、システムなど、 物質的なもの、非物質的なものの何れかも問いません。 • ISMS (JIS

    Q 27001) • ISMSの取得とは情報セキュリティマネジメントシステムとして 定めたプロセスがISMSの求める要求事項を満たし、 認証機関から認定を取得した事を示します。
  7. 例えば 業務上のレイヤごとに 要求を明確化し それを達成する • 例えば、自社サービスなら次の5レイヤが手を出しやすいです • 企画要求 • 設計要求

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

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

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

    のだから、このご時世においてセキュリティをないがしろにした リリースは顧客からの要求に応えていないことになる。 • なお、それらを全部判った上であえて対応しないという 経営判断もありえます。 • 「人の噂も七十五日、3ヶ月で株価が元に戻るならどうでもよくね???」
  11. ISO/IEC 25010 (JIS X 25010) • • • • •

    • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
  12. “高品質”を維持する作業の例 • “要求事項”を“治具”にし“公差に収まっているかどうか” で “品質の適合度合いを自動的に測る” • 治具って何 • Jig。加工や組み立ての際、部品や工具の作業位置を指示・誘導するために 用いる器具の総称。

    • 同一形状の製品ならば高度な熟練技術を用いずとも製品のバラツキを 最小限に抑え、迅速に大量生産することを可能にする。 • 公差って何 • 機械工学に代表される工学において許容される差のこと。 • 「公差0.5mmなんで0.3mmくらいおっきくてもOKです!」 • 「公差0mm?現実的なコストで出来る訳ねェだろ!」 • (ランダム性がなけりゃWeb系だと0が当たり前になるんだよなぁ…)
  13. • ツールを使っている KPIを設定しているだけ 言わない • 品質とは要求を満たしていること • • プロセス構築 •

    品質はプロセスに宿る • • コードの品質の話 業務品質として話をまとめよう
  14. • • 特性 • 定数 • 静的プロパティ • プロパティ •

    静的抽象メソッド • 抽象メソッド • 静的メソッド • コンストラクタ • メソッド • マジックメソッド • それぞれの要素内では可視性に基づき 次の順に配列されていること • public • protected • private
  15. • • コード 解釈される時間、読まれる時間の方が長い • 読むタイミングで読みやすくするのではなく すでに読みやすくなっている こと • •

    上記要求 要求 • クラスの特性を示す要素を先 • 安定している要素を先 • 少ない手間で呼び出される 早いタイミングで呼び出される •
  16. 翌営業日を計算して返すメソッド CREATENEXTWORKINGDATE 用語 算出基準とする年月日 指定日 日曜日 休日として指定された場合の土曜日 指定された祝日 休日 休日を除く日

    営業日 指定日を基準として指定日を含む最も近い休日ではない日 翌営業日 翌営業日を算出するために、その時点で扱っている日 対象日 翌営業日が翌月の場合でも良しとすること 月跨ぎ
  17. 翌営業日を計算して返すメソッド CREATENEXTWORKINGDATE • 要求事項 • 指定日を元に翌営業日を算出し返す事 • 入出力値は¥DateTimeImmutableとすること • 対象日が休日の場合、後ろ倒しして判定すること

    • 月跨ぎ不許可かつ月末休日の場合、前倒しすること • 次の三つの設定を1グループとして複数グループ扱えること • 土曜日を一律に休日・営業日として設定できること • リストとして与えた祝日を休日として設定できること • 月跨ぎの許可・不許可を設定できること