kiyomitsu blog

Software Tech Blog

アジャイルソフトウェア開発技術検定試験 レベル1を受験しました

2021/01/23(土)に、アジャイルソフトウェア開発技術検定試験 レベル1を受けました。

この試験は、アジャイル開発について、開発チームに入るにあたって最低限押さえておくべき入門レベルの知識があることを証明するものです。

私自身、アジャイル、という言葉は知っているものの、具体的にどういった価値観を持って、どのようにして開発を進めるのか、といったことをあまり知らなかったので、今回の試験を通して、アジャイル開発の基礎を学べたのはとても良かったと思っています。

試験概要

受験料:10,000円

試験形式:選択問題 60問

試験時間:60分

合格基準:正答率80%以上(単純計算で48問正解)

実施方法:特定の試験会場にて、コンピュータから出題される問題に回答

申込方法:プロメトリックから申込

レベル1 出題範囲:

受験した動機

私自身、今後のエンジニアとしての成長の観点から、現在の開発の仕方はおろか、考え方にも限界を感じていたため、アジャイル開発手法をしっかり勉強して、まずは資格という形で基礎を理解できた、という実感を得たいというのが動機でした。

私の、最初のエンジニアとしてのキャリアは、モバイルネットワーク系の保守・運用がメインで、その部署の特色的にウォーターフォール型開発に近い形で物事を進めていました。しかし、1年以上前に、Salesforce等のSaaS開発エンジニアとして転職してから、日々の開発スピードが他のメンバーより遅いなと感じていました。もちろん、業務知識やSalesforceSaaS開発に関するスキル・知識がほぼ無かったというのもあるが、ある程度経験を積んでいっても、やはり同僚よりも遅いなと思い、そもそも開発スタイルに問題があるのではないかと考えに至ったわけです。

だからこそ、新たな考え方・知識を吸収するため、まずはアジャイル開発に関する基礎知識を身につけようと思いました。

試験対策

以下のレベル1用の試験対策本を2〜3周ほど読んだだけでした。 対策本として出してるだけあって、これを読むだけで、ほぼ全ての試験問題を解けるようになっていると思いました。

結果(スコア)

結果は、スコア 92 / 100%だった。要は合格、ということ。

基礎レベルの合格とはいえ、まずは「しっかり基礎を押さえられたな」という自信に繋がりました。 「プロジェクト管理」については、確かに、自信の無い回答が多かったので、しっかり知識として固めて、アジャイル開発の実践に繋げたいです。 f:id:kiyomitsu0726:20210124020539p:plain

まとめ

今回のレベル1試験は、アジャイル開発に関する基礎知識をチェックするものなので、実践レベルでの技術を証明したことにはならないが、アジャイル開発の導入を検討されている方には、まずは全体像を把握という意味で、とても意味ある試験だと思います。

アジャイルソフトウェア開発技術検定試験には、レベル2というランクの試験が設けられているので、近々、受験してみようと思います。

ソフトウェア開発における結合性・凝集性とは?

今回は、「Adaptive Code ~ C#実践開発手法 第2版」より、適応性のあるコードを書くための、ものの見方の一つである、結合性と凝集性について学んだので、共有したいと思います。

※ ここでいう、適応性のあるコードとは、「ソフトウェアの機能追加や修正等が必要になっても、柔軟に対応できるコード」のことを指します。

適応性のあるコードと結合性・凝集性の関係は?

適応性のあるコードは、コード全体の結合性の弱さ(低さ)凝集性の強さ(高さ)という利点の上に成り立っています。

そのため、結合性と凝集性を意識しながらコードを書いていけば、コードは適応性を持つことができます。

f:id:kiyomitsu0726:20201011113235p:plain
適応性は、結合性の弱さと凝集性の強さの上に成り立っている

結合性

ソフトウェア開発における結合性とは、「ソフトウェア要素間の相互依存性の強さ」を指します。

※「ソフトウェア要素」というのは、メソッド、クラス、コンポーネント等のさまざまなソフトウェアの構成要素のことを示します。

結合性の程度は、「強い(高い)・弱い(低い)」という形で表すことができ、「弱い(低い)」方が望ましいです。

なぜ、結合性は弱い方がいいの?

「結合性が強い」とは、ソフトウェア要素間の相互依存性が強く、コードを修正・追加する度に、他の部分にも影響が出やすい状態を指します。そのため、コード内容の理解が難しかったり、バグを生みやすくなってしまいます。

「結合性が弱い」とは、ソフトウェア要素間の相互依存性が弱く、コードを修正・追加しても、他の部分にも影響が出にくい状態を指します。つまり、それぞれのソフトウェア要素が独立している状態(あるいはそれに近い状態)にあるので、コードの内容が理解しやすく、バグも生みにくくなります。

そのため、「結合性が弱い」方が望ましいのです。

凝集性

ソフトウェア開発における凝集性とは、「ソフトウェア要素間の関連性・共通性の強さ」を指します。

※ここでは「関連性」や「共通性」を、ある目的を果たすために必要なものかどうか、と定義します。ある要素間の関連性・共通性が強いと、目的のあるコードを書けていることになり、逆に弱いと、目的の見えないカオスなコードを書いていることになります。

凝集性の程度は、「強い(高い)・弱い(低い)」という形で表すことができ、「強い(高い)」方が望ましいです(結合性とは逆ですね!)

なぜ、凝集性は強い方がいいの?

「凝集性が強い」とは、ソフトウェア要素間の関連性・共通性が強く、互いに関連する機能や情報が局所化している(閉じている)状態を指します。そのため、コードの内容が理解しやすくなり、コードの拡張・保守がしやすくなります。

「凝集性が弱い」とは、ソフトウェア要素間の関連性・共通性が弱く、関連する機能や情報が分散している状態を指します。そのため、コードの目的を理解できず、コードの拡張・保守が難しくなってしまいます。

身近な例でいうと、「図書館の本棚」が当てはまるかと思います。

図書館の本棚は、「化学」や「日本文学」等というカテゴリで数多くの書籍を分類し、カテゴリ毎に一か所に整理されています。 これは、カテゴリ分けして、ある関連性・共通性を持った形で整理整頓されているため、「凝集性が強い」と言えるのではないかと思います。 この状態だと、どの分野の書籍がどこにあるのかさえ知っていれば、短時間で、目的の書籍を探すことができます。

反対に、「凝集性が弱い」状態にすると、どうなるでしょうか? カテゴリ分けせずに、あらゆる分野の書籍が混ざったカオスな状態となりますので、おそらく、ある一冊を探すのに、全く見当も付かず、図書館全体を探すことになるかと思います。

だからこそ、「凝集性は強い」方が望ましいわけです。

結合性と凝集性の関係

結合性と凝集性には、適応性のあるコードを書く上で、関係し合っています。

前述しましたが、結合性も凝集性も、どちらも意識することで、コード内容が理解しやすくなり、コードの拡張・保守がしやすくなります。

また、例えば、凝集性が強いと、関連機能や情報が局所化して閉じた状態となるため、各要素が独立した状態に近づくので、結合性も弱くなる傾向があります。そのため、凝集性を意識すれば、ある程度、結合性も改善されることになります。

結合性と凝集性は以下のようなマトリクスで表すことができます。

f:id:kiyomitsu0726:20201011130344p:plain
強い凝集性と弱い結合性を目指そう!

まとめ

結合性と凝集性は、適応性のあるコードを書く上で、重要な考え方であるということを共有しました。

ただ、結合性・凝集性とはどういうものなのか?、で終わりましたので、近いうちに、自分なりの実践方法というものを共有できたらと考えています。

参考図書・サイト

ToDo

  • コード例を追加
  • 結合性が強い・弱いときの身近な例を追加。図を盛り込む。
  • 凝集性が強い・弱い時の身近な例を追加。図を盛り込む。