SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2021夏】セッションレポート

アジリティの高いソフトウェアに求められる品質とは何か――和田卓人氏が解説【デブサミ2021夏】

【A-1】アジリティを支える品質特性

  • X ポスト
  • このエントリーをはてなブックマークに追加

アジリティと関係の深い品質特性とは何か

 アジリティと関係の深い品質特性とは何か、ソフトウェア品質の国際規格であるSQuaREをもとに紐解いていきます。

SQuaRE品質モデル:製品品質の品質特性と品質副特性
SQuaRE品質モデル:製品品質の品質特性と品質副特性

 ここまでの話の中であった「適応力の維持」、つまり変更容易性はSQuaREでは「保守性」のうちの「修正性」として定義されています。実は、DXではこの「変更容易性」がキーとなっていて、「変更容易性の高いソフトウェアによるアジリティの獲得」こそがやりたいことです。「けれども、それがソフトウェアエンジニア以外には伝わっていない」と、ところてんさんの言葉を引用しながら和田さんは語ります。

 改めてSQuaRE品質モデルの保守性の項目を眺めると、「解析性」という項目があります。これは「理解容易性」と言い換えることができます。アジリティを支える品質副特性は、前述の変更容易性と、この理解容易性です。そして、この2つの品質副特性を阻害するのはComplexity(複雑さ)にほかなりません。このComplexityの兆候としては「高い認知負荷(High cognitive load)」、「変更の増幅(Change amplification)」、そして「未知の未知(Unknown unknown)」があります。

「クソコード」は「認知負荷の高いコード」

 我々エンジニアは、理解し難かったり美しくなかったりするコードと出会ったときに、しばしば「クソコード」というあまり美しくない表現を使うことがあります。

 「クソコードという言葉は、解像度が高くありません」。では、こういったコードを表現するにはどのような言葉が適切なのでしょうか。

 「いわゆるクソコードの問題は、短期記憶に収まらないほど複雑であるということ。つまり、クソコードは『認知負荷の高いコード』と言い換えることができます」。ついつい使ってしまいがちなクソコードという言葉ですが、たしかに本質的な課題は認知負荷の高さであるといえます。

High cognitive load(高い認知負荷)
High cognitive load(高い認知負荷)

 2つ目の兆候である変更の増幅(Change amplification)は、いわゆる「コピペコード」が引き起こします。似たような処理を行っているコードをコピペする。そのコードにバグが見つかり修正することになる。なんということだ、あちらこちらにコピペが広がっているではないか!!……という苦い経験は、エンジニアなら誰でもあるのではないでしょうか(余談ですが、私は新卒1年目の頃にコピペで数100件のテストケースを作成していたところ先輩からAPIの仕様変更を告げられ、泣きながら夜通しコードを修正する羽目になったことがあります)。

 そして3つ目の兆候、「知らないことを知らない(Unknown unknown)」。無知の知にもたどり着いていない状態。和田さんが「これが最も手強い敵です」と語る通り、「わからない」ということがわかっていなければどのように行動するべきかさえわかりません。

「知らないことを知らない」ことが引き起こした悲劇の例
「知らないことを知らない」ことが引き起こした悲劇の例

 この「知らないことを知らない」ことによる悲劇の一例が、図で紹介したNamingに起因する仕様誤認です。enabledだったらdisabledを返す、という仕様は「知って」いないとそうとは理解できないものでしょう。

変更容易性(Modifiability)を向上させる戦術

 依存関係は変更の発散と認知負荷の上昇を、不透明さは未知の未知と認知負荷の上昇を引き起こし、複雑さを大きくしていきます。この複雑さを抑え、変更容易性を向上させるためにはどうしたらいいのか。

 「変更容易性を向上させる戦術は、結合度と凝集度にあります」低い結合度と高い凝集度、良い設計であることを示す指標。この2つが、改めて変更容易性向上の要として浮かび上がってきました。

次のページ
アジリティの本質

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2021夏】セッションレポート連載記事一覧

もっと読む

この記事の著者

小田中 育生(オダナカ イクオ)

 開発(Develop)を愛する人たちの集まり、DevLOVEによく出没する人。 所属する企業においては、研究開発のディレクションとエンジニアがいきいきと働けるDX(Developer eXperience)を重視した風土づくりという両輪を回し続けている。 近年はアジャイル開発に助けられているが、一番助けてくれているのはいつも一緒にいるチームメンバーたちだったりする。 Twitter:@dora_e_m note:https://note.com/dora_e_m 著書『いちばんやさしいアジャイル開発の教本』(インプレス)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/14671 2021/10/15 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング