うまとま君の技術めも

2015年新卒入社した社畜の勉強内容などなど

アジャイル検定Lv.2 勉強メモ - 常時結合

アジャイル検定Lv.2 出題範囲

常時結合

CI/CD

  • アプリケーション開発のステージに自動化を取り入れて、顧客にアプリケーションを提供する頻度を高める手法

継続的インテグレーション(CI)

  • ビルドと単体テストおよび統合テストを自動化
  • 単体テストと統合テストを行い、変更によってアプリケーションが破壊されないことを確認する
  • CIを利用するとコンフリクトやバグをすばやく容易に、高頻度で修復できる

継続的デリバリー(CD)

  • 検証されたコードのリポジトリへのリリースを自動化
  • 開発者によるアプリケーションへの変更をリポジトリにアップロードする
  • 本番環境にデプロイできるコードベースを常に保持しておくことを目的とする
  • プロセスの終了時には、運用チームはアプリケーションを本番環境にすばやく簡単にデプロイできる

継続的デプロイメント(CD)

  • アプリケーションの番環境へのリリースを自動化
  • 開発者による変更をリポジトリから本番環境に自動的にリリースし、顧客が使用できるようにする
  • ユーザーからのフィードバックを継続的に受け取って反映することが簡単になる

参考資料

アジャイル検定Lv.2 勉強メモ - テスト

アジャイル検定Lv.2 出題範囲

テスト

テスト駆動開発(TDD)

  • 「動作するきれいなコード」を書くのが目的
  • TDDサイクル
    • Red → Green → Refactor
    • テストを書く → 動かす → 正しくする

モックを使ったテスト

コードカバレッジ

  • ユニットテストの品質基準
    • C0(命令網羅)
      • プログラム中の全ての命令が1回以上実行を測定
    • C1(分岐網羅)
      • プログラム中の各分岐について1回以上実行を測定
    • C2(条件網羅)
      • プログラム中の判定の組み合わせを測定

テスト技法

  • ホワイトボックステスト
    • 内部ロジックや仕様を考慮してテストケースを設計
    • 内部仕様の細かい粒度で検証するテストで使われる
  • ブラックボックステスト
    • 外部仕様からテストケースを設計
    • 機能単位などの大きな粒度で検証するテストで使われる

アジャイルテストの4象限 f:id:umatomakun:20200117234311p:plain

参考資料

アジャイル検定Lv.2 勉強メモ - 構成管理

アジャイル検定Lv.2 出題範囲

構成管理

ソフトウェア構成管理(SCM)

ブランチ戦略

  • ブランチを利用したバージョン管理ワークフロー
  • git-flow
    • 大規模な構成
    • デスクトップ・モバイルアプリのように「リリース」を必要とするソフトウェアの開発に適している
    • ブランチ一覧
      • メインブランチ
      • サポートブランチ
        • feature:開発作業用
        • release:リリース作業用
        • hotfix:緊急修正用
  • github-flow
    • 小規模な構成
    • 1日に複数回デプロイを行うようなWebアプリケーションの開発に適している
    • ブランチ一覧
git-flow github-flow
f:id:umatomakun:20200116195948j:plain f:id:umatomakun:20200116200113j:plain

コンテナ技術

  • コンテナとは
    • ホストOS上の独立したアプリケーション実行環境
  • 仮想マシンとコンテナ
    • 仮想マシン
      • 仮想的なハードウェア環境
      • OSやアプリケーションをインストールし、独立した実行環境を構築する
      • e.g. VMWare, VirtualBox
    • コンテナ
      • OSリソースを隔離・制限したプロセス
      • OSリソースが隔離・制限された環境でアプリケーションを実行し、独立した実行環境を構築する
      • e.g. Docker
  • メリット
    • コードベースでインフラ定義できる
    • どの環境でも同じ様に動く
    • インフラの構成管理やデプロイが行いやすい

参考資料

アジャイル検定Lv.2 勉強メモ - コーディング

アジャイル検定Lv.2 出題範囲

コーディング

コーディングルール(コーディング規約)

  • プログラムの書き方に関するガイドラインを定めたもの
  • 可読性を高めることができる
    • 可読性を高めることで 保守性・品質 の向上が期待できる

静的解析ツール

  • 機械的にコーディングルールなどをチェックすることが出来る
  • Linter
  • SonorQube
    • OSSの品質管理プラットフォーム
    • 不具合・脆弱性を検出したり、複雑度を確認したりすることが出来る

ペアプログラミング

  • 2人で1つのコンピュータを使って共同作業を行う
  • 品質向上・スキルアップ・素早い情報伝達などが期待できる

リーダビリティ(可読性)

  • 読みにくいコードを書くと?
    • 理解しづらい → 変更に時間がかかる → 変更に柔軟に対応できない
  • 読みやすいコード書くには?

テストコード

ドキュメンテーション

  • プログラムの使い方などをまとめたドキュメント
  • 自動生成ツール

参考資料

アジャイル検定Lv.2 勉強メモ - モデリング

アジャイル検定Lv.2 出題範囲

オブジェクト指向設計

オブジェクト指向設計とは?

  • システムがどのように構築されるかをオブジェクトの集合としてモデル化したもの
    • オブジェクト
      • 何かしらの概念を表現したもの
      • データ構造や処理を実行するメソッドによって構成される

なぜオブジェクト指向設計を用いるのか?

  • 変更に対して柔軟に対応するため
    • 頻繁に変更される部分を抽出することで変更に対応する
      • 変更される部分 → クラス
      • 変更されない部分 → インターフェース

継承・ポリモーフィズムカプセル化

  • オブジェクト指向設計を行う上で重要となってくる3つの要素
    • 継承
      • 交換可能なパーツの規格を抽象概念として定義し、規格を元に様々な種類のパーツを作成すること
        • インターフェースから派生したクラスを作成する
    • ポリモーフィズム
      • 抽象概念に対してプログラミングすること
      • e.g. Animal animal = new Dog(); animal.bark();
    • カプセル化
      • 外から見てシンプルで使いやすいものを作ること
        • 役割を1つにする・分かりやすい命名 が重要となってくる

疎結合

  • 抽象に依存することで、依存先への影響を受けにくくする
    • インターフェースに依存する

Dependency Injection

  • インスタンス生成時にクラスに依存してしまう問題を解決する事ができる

参考資料

アジャイル検定 Lv.1 - 試験レポート

アジャイル検定 Lv.1 を受験してきたので、結果を含めて簡単なレポートを残しておきたいと思います。

アジャイル検定

アジャイル検定とは

アジャイル開発のスキルを客観的な尺度で分析・判定するのが、アジャイルソフトウエア開発技術者検定試験です。

試験システムとして、CBT(Computer Based Testing)を採用しています。
いつでも、どこでも受験することができます。4肢択一スタイルの問題、平均で70%の正解率を得られるよう、難易度を調整しています。
合格基準は80%以上の正解率です。

agilecert.org

アジャイル検定の構成

  • Lv.1試験
    • アジャイル開発に参加するのに必須となる知識が出題される
  • Lv.2試験
    • アジャイル開発のチームメンバーとして必須となる知識が出題される

アジャイル検定 Lv1.試験

試験範囲

Lv1.試験結果

  • 合否:合格
  • スコア:95
    • 基礎知識:100%
    • プロジェクト管理:96%
    • 開発チームの運営:100%
    • 開発技能:84%

f:id:umatomakun:20200109205221p:plain

試験勉強

試験勉強に使ったのはアジャイル検定公式テキスト」の1冊のみです。
時間的には 数時間*3日 程度でしょうか。

感想

  • CBT形式で気軽に受験できて良い
  • アジャイル開発に関する基礎知識を客観的に評価できるのが良い
  • 合格=実践できるにはならない、あくまで知識として理解してますよレベル
  • 3問ほど不正解だったが、どこが間違っていたのかとても気になる...
  • 続いてLv.2試験も1ヶ月以内を目処に受けてみようと思う

アジャイル検定公式テキスト - 読書メモ

アジャイル開発の概要

従来手法との違い

  • イテレーティブ開発 → 短期間で全ての工程を繰り返す
  • スコープ調整 → 固定:リソース・納期・品質、調整:スコープ
  • 常にリリース可能 → 自動化
  • 変化に対応 → 状況に応じてやり方を変える

求められるスキルセット

アジャイル開発に対する基礎知識

アジャイルソフトウェア開発宣言

  • プロセスやツール → 個人との対話
  • 包括的なドキュメント → 動くソフトウェア
  • 契約交渉 → 顧客との強調
  • 計画に従う → 変化への対応

アジャイルソフトウェア開発の原則

  • 顧客満足と価値あるソフトウェアの提供
  • ビジネスの変化に応じた要求の変更
  • 動くソフトウェアを短い時間間隔でリリース
  • 顧客と開発者がプロジェクトを通して一緒に働く
  • 最も効率的なコミュニケーションは直接対話
  • 動くソフトウェアが進捗を図る上で重要
  • 開発ペースを維持することが開発を効率化する
  • わかりやすい設計がソフトウェアの柔軟性を高める
  • シンプルさが本質
  • 最良の成果を生む自己組織的なチーム
  • チームの効率化を定期的に振り返り改善する

アジャイル開発におけるプロジェクト管理

アジャイルチーム

  • メンバー
    • プロダクトオーナー → 製品の責任者、製品の価値を最大化
    • チームリーダー → チームを支援
    • 開発チーム → ソフトウェアを開発
  • 特徴
    • 機能横断的
    • 5 ~ 9人が最適
    • 同一拠点で働く

プロジェクト開始時

  • ビジョン共有
  • プロジェクト方針共有

イテレーション開発

会議

ストーリー

  • 機能ではなく顧客目線で実現したいことや価値
  • 優先順位がついている
  • 見積もりがついている

品質

  • 従来手法:上位工程の不具合を検出する → 上位工程で不具合を出さないように務める
  • アジャイル:不具合を素早く検出し、素早く修正する

開発チームの運営

アジャイルチーム

  • 自律 → チームで考え・チームの目標を達成する
  • 責任 → 顧客を意識する、必要な作業は誰でも行う

良いアジャイルチーム

  • 人間性を尊重する → お互いの思いや考えを理解する
  • 単なる情報伝達ではなく、アナログ情報も含めてコミュニケーションを行う
  • ひとりひとりが自ら考え行動し、チームとして協力しあい目標を目指す
  • チーム位のルールは全員で考え、全員で遵守しようと務める
  • 定期的に振り返りチームの効率を高める

アジャイル開発の各種手法

ペアプログラミング

  • メリット
    • ミス減少
    • 作業の質向上
    • 多角的な問題解決
    • 属人化防止
    • スキル向上
    • 素早い情報伝達

リファクタリング

  • メリット
    • ソフトウェア設計の向上
    • コードの読みやすさ向上
    • バグの検出
    • 開発効率向上

常時結合(CI)

  • メリット
    • 不具合の早期発見
    • 不具合修正コスト低下

テスト駆動開発

  • メリット
    • ソフトウェア設計の向上
    • テストの網羅性向上
    • CIを導入しやすい

感想

  • アジャイル開発全般の知識が分かりやすく網羅されていてとても良い
  • 専門的な表現を極力省き、初心者にも分かりやすくしようと努めている点が良い
  • 検定試験の勉強だけでなく、アジャイル開発の入門書としてもオススメできる内容