概要
2023 年 1 月〜3 月の振り返りです。 今年から四半期の振り返りも OKR で行います。
1 月〜3 月の振り返り記事
2023 年 1 月〜3 月の振り返りを欠かさず実施しました。
1 月の振り返り記事
2 月の振り返り記事
3 月の振り返り記事
勉強関連
勉強時間
3 ヵ月間で合計勉強時間は約 482 時間でした。 平均 120 時間 ~ 150 時間を目指していたので目標よりも上振れました。 理由としては休みが多かったので注力できる時間が多かったからです。 来月以降も無理せずに継続します。
1 月 | 2 月 | 3 月 |
---|---|---|
約 175 時間 | 約 146 時間 | 約 161 時間 |
3 ヵ月間の OKR
OKR の振り返りをします。 1 月時点で立てた OKR は下記でした。
注力分野 | Objective(3 月時点での目標) | Key Result(必要だと考えていること) |
---|---|---|
CI/CD | CI/CD の実践や構築に対して恐れがない状態 | CI/CD の概念とツール、シェルスクリプトの知識 |
テスト | 品質観点のテスト知識を持ち、テスト計画が立てられる状態。 | ソフトウェアテストの基礎知識、テスト技法、品質、ツールの知識 |
1 月時点で計画した OKR は下表でした。
注力分野 | 月 | Objective(1 ヵ月ごとに再設定した目標) | Key Result(具体的な行動予定) |
---|---|---|---|
CI/CD | 1 月 | CI/CD の理論を学ぶ。シェルスクリプトの勉強をする。 | 「継続的デリバリーのソフトウェア工学」「シェル・ワンライナー 160 本ノック」を読む。 |
2 月 | 練習用リポジトリで CI/CD の実践する。シェルスクリプトの勉強をする。 | 「継続的デリバリー」「シェルスクリプト基本リファレンス」を読む。個人と業務のリポジトリに新しい CI を組み込む | |
3 月 | ドキュメントを読み実務で使われている CI/CD についてまとめる | GitHub Actions といったドキュメントを読む。 | |
テスト | 1 月 | 品質観点のテストの基礎知識を獲得する | 「ソフトウェアテストの教科書」「ソフトウェア品質を高める開発者テスト」を読む。テストドキュメントの見直しをする |
2 月 | ソフトウェアテスト技法を学ぶ | 「ソフトウェアテスト技法練習帳」を読む。「ソフトウェアテスト技法」に挑戦する。 | |
3 月 | 規格としてのソフトウェアテストを学んでみる | 「ISO/IEC/IEEE 29119 ソフトウェアテスト規格の教科書」または「SQuBOK」を読む |
それに対して、1 ヵ月毎に実践した OKR を振り返ると下表になります。Objective は毎月の振り返りで修正しています。たとえば、2 月の Objective は 1 月末の振り返りで更新しました。
注力分野 | 月 | 達成度(100 点満点) | Objective(1 ヵ月ごとに再設定した目標) | Key Result(行動結果) |
---|---|---|---|---|
CI/CD | 1 月 | 60 点 | CI/CD の理論を学ぶ。シェルスクリプトの勉強をする。 | 「継続的デリバリーのソフトウェア工学」を読んだ。「シェル・ワンライナー 160 本ノック」を読むのをやめた。シェルスクリプトへの理解を後回しにして、会社の CI/CD のドキュメントのインプットをしていた。 |
2 月 | 80 点 | 業務のリポジトリに新しい CI を組込み業務効率向上に貢献する。シェルスクリプトの勉強をする。 | 「継続的デリバリ」「マスタリング Linux シェルスクリプト 第 2 版」を読んだ。業務のリポジトリに新しい CI を組み込んだ。 | |
3 月 | 65 点 | 実務で使われている CI/CD についてまとめる | 業務の CI/CD について設計書やドキュメントについてまとめられなかった。業務のリポジトリに新しい CI を組み込めなかった。シェルスクリプトについて学び、業務で活かせる機会はあったが、CI/CD にまで活用できていない | |
テスト | 1 月 | 80 点 | 品質観点のテストの基礎知識を獲得する | 「ソフトウェアテストの教科書」「ソフトウェア品質を高める開発者テスト」を読むことで品質観点のソフトウェアテストの知識が深められた。チームで品質について考えるワークショップを開催し、「誰のためのソフトウェア」を考えることで業務理解が深まり、チームの共通認識が合わせられた |
2 月 | 70 点 | ソフトウェアテスト技法を学ぶ | 「ソフトウェアテスト技法練習帳」を読んだ。「単体テストの考え方/使い方」の勉強会を開催した。テストドキュメントの管理方法を改善した。 | |
3 月 | 80 点 | 規格としてのソフトウェアテストを学ぶ | JaSST'23 Tokyo に参加した。「単体テストの考え方/使い方」の勉強会を終えた。業務において設計時点でテスト設計について考えたり、案件ごとにインセプションデッキを作成したりと、シフトレフトを実践できた |
3 ヵ月を総括した振り返りは下記になります。
注力分野 | 達成度(100 点満点) | Objective | Key Result |
---|---|---|---|
CI/CD | 68.3 点 | CI/CD の実践や構築に対して恐れがない状態 | CI/CD の基本的な部分は学んだ。シェルスクリプトについても優先して学んだ。CI/CD の知識について満足いく状態ではない。業務内でコミットする難しさを実感した |
テスト | 76.7 点 | 品質観点のテスト知識を持ち、テスト計画が立てられる状態 | 品質観点でソフトウェアテストの知見を得られた。業務において品質のためにシフトレフトを実践し、開発プロセスやチームの目標に組み込んだ。 |
それぞれの振り返りをしていきます。
注力分野の振り返り
CI/CD
CI/CD の達成度は 68.3 点でした。 理由は、インプットできた部分や業務で活用できた部分はあったが、目標の「CI/CD の実践や構築に対して恐れがない状態」からは遠い状態だからです。 それぞれ詳細に説明していきます。
CI/CD については、シェルスクリプトと業務のリポジトリの CI/CD の改善が主でした。
1 月と 3 月にシェルスクリプトの勉強をして、2 月にリポジトリの CI/CD の改善をしました。
「CI/CD の概念を学ぶ」という意味では、「継続的デリバリーのソフトウェア工学」「継続的デリバリ」でインプットし、なんとなくですが概念について学べました。
しかし、まだまだ知識の上澄みの部分だけだと実感しています。
特に「継続的デリバリ」については抽象的過ぎたり具体的すぎたりした部分をうまく理解できませんでした。CI/CD の聖書的な立ち位置ですので、定期的に読み直します。
シェルスクリプトに関しては、「シェル・ワンライナー 160 本ノック」を読むのをやめてしまいましたが、「マスタリング Linux シェルスクリプト第 2 版」で初歩的な部分を知れました。
特に sed と awk について初心者向けに解説していたため、それらを学ぶハードルを下げられたのが良かったです。
継続的にシェルスクリプトの使い方を学び直すことで、3 ヵ月前よりも理解度深められた実感があります。
シェルスクリプトを学んで、より深く学ばないといけないと考えたため、今年学ぶ言語はシェルスクリプトにします。
CI/CD の構築に関しては、業務で課題になっていた部分を新しい CI を組み込むことによって解決できました。
業務効率の向上に寄与できただけでなく、実践するために業務で使う CI ツールのドキュメントを読み込み共通概念的な物を理解できたと考えています。
もっと業務において CI/CD を実践したかったのですが、下記の観点で学習に課題を実感しました。 特に 3 つ目を解決しなければ、CI/CD について理解できておらず、そのメリットを教授できていない実感があります。
- 一度 CI/CD を組み込むと修正する機会が少ないので属人化する
- 業務の CI/CD を何度も修正するわけにはいかないので、業務から学べる範囲が限られている
- CI/CD の前後に実施すべきこと、存在するもの、解決したいことを認識できていない
3 つ目の課題に関して考えた結果、その答えは DevOps にあるのではないかと思いました。 そのため、CI/CD は 4 月以降も OKR の目標として継続し、これらの問題を解決するために以下の 2 つを実践します。
- CI/CD に加えて DevOps について学ぶ
- CI/CD の学習に関しては業務へのコミットにこだわらず、個人リポジトリでも学ぶ
- 更にオブザーバビリティ、モニタリングといった方向性に知識の裾野を広げる
テスト
テストの達成度は76.7 点でした。 理由は、下記の 2 つです。
- 品質観点のソフトウェアテストについて継続的に学べた
- チームにおいて品質について考えるワークショップを実践でき、目標に加えられた
この 3 ヵ月間で「ソフトウェアテストの教科書」と「単体テストの考え方/使い方」の勉強会を実施しました。
前者は品質観点におけるソフトウェアテストを学ぶのに十分すぎる内容でした。
「ソフトウェアテストの教科書」の序盤を元に品質について考えることができるようになりました。
後者は単体テストの内容でした。
持続的に成長可能なソフトウェアを作れるようになるための単体テストの書き方を言語化できました。
設計観点からも以前から考えてきたことを言語化できました。
個人で開いた勉強会以外にも JSTQB Foundation Level の勉強をしています。
RFC のように仕様が定められたものであるため、学ぶことが多いです。
4 月の 1 週目に受験します。
イベントには、JaSST'23 Tokyo と JaSST nano に参加しました。
JaSST'23 では開発プロセスの改善事例や課題などを学べて良い経験になりました。
JaSST nano はさらに身近な内容となっており、月 1 で開催されているのがありがたいです。
3 ヵ月を総合して良かったと思えたのは、品質についてチームで考える機会を用意し実践できたことです。 以前まで、マイクロサービス化が進んでいるため、自担当分が何をしているのか明確でないという課題がありました。 そこで、誰のためのシステムなのか明確にするためするため、以下の取り組みを行いました。
- 「ユーザーの要求を満たし、ユーザーに価値を提供するソフトウェア」(ソフトウェアテストの教科書 [増補改訂 第2版])を元に、ユーザー・要求・価値を再定義した
- ISO/IEC 250101(製品品質モデル)を元に 8 つの特性を定義した
- 狩野モデルに現状のサービスがどこに位置しており、何を目指すべきなのか
- Error, Defect, Fault, Failure の定義と解釈を参考に定義した
取り組んだ結果、以前よりもソフトウェア開発で品質ファーストになり、メンバーからも好感の声が上がりました。
似たような取り組みとして、開発サイクルに品質観点を取り入れ、シフトレフトを実践しようとしています。
こちらはまだ、完全に組み込めているわけではありませんが、必要性について合意をとりながら導入できそうです。
4 月以降もソフトウェアテストの勉強を継続し、6 月までに形にしていきます。 内容がプロダクトマネジメントになってきた実感があります。 そのため、4 月以降は具体的には以下の取り組みをします。
- ソフトウェアテストだけでなくプロダクトマネジメントにも視野を広げる
- JSTQB Foundation Level に合格する
- ソフトウェアテストの書籍を元にテスト技法やテスト活動についてを知識を拡充する
読書
OKR を元に関連する書籍を読みました。 ほかにも読んだ方がありますが、感想文を書いたのは 7 冊です。 プロダクトオーナーやチームビルディングの書籍にも興味があるので、読んでいました。
継続的デリバリーのソフトウェア工学
ソフトウェア品質を高める開発者テスト
【この 1 冊でよくわかる】 ソフトウェアテストの教科書 [増補改訂 第2版]
継続的デリバリー
マスタリング Linux シェルスクリプト第 2 版
単体テストの考え方/使い方
プロダクトマネジメントのすべて
4 月 ~ 6 月の OKR 目標について
4 月は、ソフトウェアテスト・プロダクトマネジメントと CI/CD・DevOps を OKR 目標にします。 1 月~ 3 月の OKR 目標の「テスト」から「ソフトウェアテスト・プロダクトマネジメント」に「CI/CD」から「CI/CD・DevOps」になりました。 3 ヵ月間で学んだ内容が、より具体化されました。それぞれ理由を記述していきます。
「テスト」から「ソフトウェアテスト・プロダクトマネジメント」になった理由は、品質観点からテストについて深堀するときにプロダクトライフサイクルを意識するようになったからです。 誰のためのシステムについて常に考え、コードは資産ではなく債務であることを意識に置くことで、プロダクト開発に取り組みたいという気持ちがあります。 そのため、ソフトウェアテスト技法と開発プロセスを両立させながら、実践できるように注力していきます。 まだ抽象的ですが、ソフトウェアテスト・プロダクトマネジメントは下記のように目標を立てます。
- JSTQB に合格しソフトウェアテストの知識を別の方法で拡充する
- ソフトウェアテストの名著を読む
- 品質面を意識した開発プロセスをチームで議論し合意を取った上で実践する
- プロダクトマネジメント、アジャイルに関連する書籍を読む
- チームで「単体テストの考え方/使い方」勉強会の計画を立てる
「CI/CD」から「CI/CD・DevOps」になった理由は、もともと解決したかった課題が DevOps と重複していたことに気がついたからです。 より開発プロセスを改善するために、DevOps の考え方から組織やプロセスの文化にフォーカスする必要がでてきました。 CI/CD ツールによる自動化のフィードバックよりもさらにもう一段階上の目標を目指していきたいです。 こちらもまだ抽象的ですが、CI/CD・DevOps の勉強法は下記で行います。
- 業務へのコミットこだわらずに個人開発で CI/CD を開発する
- 業務において月一で CI によって解決できる課題を探し、新しい CI を組み込むことを目標にする
- モニタリング・オブザーバビリティについて学ぶ
- DevOps について学ぶ
まとめ
3 ヵ月であまり馴染みのなかった CI/CD とソフトウェアテストについて学びました。
結果、CI/CD は入門的な部分のみ学び、ソフトウェアテストについては幅広く学びつつ実務で一部導入できたという結果でした。
とりあえずは 3 ヵ月で知識が皆無だった分野に対してそれなりに学べて良かったです。
しかし、3 ヵ月だけだと方向性は見えてきつつも、より深い部分まで学ぶのは難しいことを実感しました。
特に、CI/CD は勉強に苦戦しました。
理由は、ロールモデルとなる人物が周囲にいなかったり、インターネットの情報を収集してもあまり納得感のある方向性を見つけられなかったからです。
そのため、対策として CI/CD を勉強中の知り合いに連絡をとり勉強方法について質問することで、改善を試みています。
それぞれの勉強方法があるため、すぐに改善できるとは言えませんが、自分からみて実力向上している方を参考にすることで、自分も同じやり方で実力向上を図ります。
ソフトウェアテストについては、学んだことを開発プロセスに組み込めてきているという意味では順調です。
品質のことを考えると開発プロセスについて包括的に考えるようになり、チームとしてコントローラブルな部分が増えてきました。
チームビルディングの一環として受け入れてくれた職場環境も成功要因として挙げられます。
ただし、ソフトウェアテストの理論や DevOps の側面(モニタリング、オブザーバビリティ)について知識が不十分です。
それらの知識を拡充していくため、引き続き勉強を継続します。
個人で OKR 目標を設定した最初の 3 ヵ月でした。
目的は去年のときに実感した 3 ヵ月ごとの目標があいまいになりがちな問題を解決することでした。
導入してみた結果、1 ヵ月時点の進捗を振り返る際に根本的な目標があるので目標を振り返る非常に役立ちました。
導入前と比較して効果が明らかなので今後も継続していきます。
同様に、個人的に OKR を設定する際の問題点が 2 点あると実感しました。
1 つ目は、相談相手がいないため、結果を評価する方法や改善案が思いつかないことです。
目標や振り返りに一般的に言えることです、チームにおいて議論することで効果があります。
しかし、相談相手がいないのでうまくいっている感覚もうまくいっていない感覚も主観に頼る部分が多かったです。
2 つ目は、個人でやると複数の目標を並行して実践しにくい点です。
対策も 2 点考えています。
1 つ目は、知人や職場の人に振り返りを見てもらうことでフィードバックを得ることです。
第三者的な視点をもらうために、フィードバック相手は分野の専門家にこだわりません。
2 つ目は、複数の目標のさらに上の目標を設定することです。
さらに根本目標を設定することで、ネガティブな要素が、取り組めなかったことなのか、得るものがなかったのか明確にします。
余談ですが、zenn にハンズオンで学ぶサーバーサイド Kotlinという書籍を公開しました。 zenn のトップページの Books にも掲載され、SNS でも好感の声をいただいています。 自分はサーバーサイド Kotlin が最も好きな言語ですので、こういった形で貢献できてうれしいです。 いったんは完成しましたが、まだまだ推敲していきます。 より満足のいく形になったら紙の本にして技術書典に参加したいです。 そのため、この本についてフィードバックをいただけると幸いです。
最後にですが今年も 3 ヵ月経過しました。 3 ヵ月前の目標に対してコミットできたり、逆にそうでもなかったりもしています。 しかし、3 ヵ月あるとそれ以前の自分とは別の考え方を持つことができたため、良かったと思えています。 3 ヵ月後も良い意味と悪い意味の両方で継続して良かったと思えるようにします。