OMSCS 2025 Spring (春学期) では Software Development Process (SDP) を受講したので、講義概要に関してまとめた。
Overall
以下の記事でまとめたように、卒業に際して Specialization を満たすためにいくつか決められた授業を受講する必要がある。現在、Computing Systems での卒業を考えているが、SDP は数少ないオンラインで受講できる Core Courses に含まれる授業であるため今回選択した。
内容に関しては文字通り一連のソフトウェアの開発プロセスを学ぶことができる授業であり、しっかりとしたソフトウェア開発の経験がないことから、少しでも経験することができればと期待して受講した。 この授業ではグループワークがあり、受講者同士で4名程度のグループを作成し、プロジェクトを進めていった。言語も文化も異なるメンバーの中で上手く存在感をアピールできるか不安であり、受講レビューにはグループプロジェクトに対してネガティブな意見も見かけられたが、せっかくの機会のため挑戦することにした。
CS 6300: Software Development Process
Content
成績に関しては、個人で行う課題 6 つ、グループプロジェクト、個人プロジェクトでほとんど評価される。 期末試験はないコースとなっており、レビューでは負荷はそこまで高くないとされていた。コースで扱う言語は Java であり、グループプロジェクトでは Android アプリを作成した。授業は過去の講義のビデオを毎週視聴していき、課題を適宜進めるスタイルである。全体的に課題の難易度は高くないが、ほぼ毎週課題があったため、常に締め切りは意識する必要があった。
講義の内容としては、ソフトウェア開発の歴史や一連のプロセス、バージョンコントロール、要求工学 (Requirement Engineering)、UML、ブラックボックス / ホワイトボックステスト、アジャイル開発などを学ぶことができた。現実ではこのように綺麗に開発が進められていくことは困難と思うが、理論を知ることができたのは今後ソフトウェア開発を考える上で参考になる内容ではあった。すべての課題に関しては講義の内容に基づくものであり、input したものを output する機会が提供されていたと思う。
個人課題
Assignment 1
グループワークのグループ分けは TA によって割り振られるが、それの基になるアンケートが課題であり、ほとんど時間がかからなかった。このアンケートでは、開発経験、普段の業務内容、課題に費やせる時間・時間帯などに関して回答した。このコースは OMSCS の中でも歴史のある部類のようなので、長年の経験を基にこのような質問事項でグループ分けをしているとのことだった。
Assignment 2
git の使い方を学ぶもので、慣れていれば物足りないレベルであると思う。個人的には GitHub をなんとなくで利用していたことから、この機会に課題を通して操作を学べたのは、地味に嬉しいポイントであった。学生時代に CS を学んでいないと、このような基礎的なことが曖昧になっていることがあり、基礎を改めてしっかりやることが OMSCS の目的の一つである。
Assignment 3
課題 3 に関しては、与えられた要件に沿って Java でコーディングしていき、簡単なロジックを実装した。複雑な内容ではなかったため、比較的容易に完了できた。
Assignment 4
課題 4 ではシンプルな Andriod アプリを個人で作成した。Android Studio を利用して簡単な UI を設計し、ロジック部分には課題 3 のものを利用した。課題の難易度的には難しくないものの、Android Studio の環境構築に手こずった覚えがある。
Assignment 5
課題 5 に関しては、与えられた要件から UML のクラス図を作成した。この課題で作成したクラス図を基にグループプロジェクトの初回の課題では議論を行った。
Assignment 6
課題 6 では、ホワイトボックステストのカバレッジに関する課題であった。事前の情報で前学期に開催されたこのコースで課題 6 の平均点が最も低かったことから、少々身構えていた。実際には、この講義の中で一番悩んだ課題であった。特に、課題文の言い回しもすんなり理解できるものではないように感じ、最終結果は 7 割程度の正解となった。
グループプロジェクト
4 人のチームであったが、自分以外はアメリカ在住であった。しかし、3 人もタイムゾーンは異なり、それぞれの勤務時間を考慮すると、会議の時間を揃えることは困難であった。提供された仕様に対して、各自課題 5 で作成したクラス図を紹介し合い、チームの回答を作成した。その後、それに関するユースケース図などのドキュメントを整備し、テストケースを定義した上で実装を行った。4 週間ほどのプロジェクトであったが、毎週チェックポイントが儲けられていた。プロジェクトマネージャーを務めてくれたメンバーが積極的に進行してくれ、スムーズに進めることができた。また、開発の経験のあるメンバーがテクニカル面でリードしてくれたこともあり、無事に期限前にプロジェクトを完成することができた。
個人プロジェクト
アジャイル開発を意識した内容のプロジェクトであり、4 週間ほどの内容であった。仕様が公開されそれに沿った実装を行うが、チェックポイントとして毎週課題が課される。1 週目、2 週目はテストケースを作成するものであり、ブラックボックステスト手法の一種である Category-partition method を利用してテストケースを作成した。3 週目は、テストケースを基に実装を進めていき、テスト駆動開発を体感することができた。4 週目に関しては、3 週目の実装を基に Refactoring を行う内容であった。
Reflection
開発経験がなかったことから、ソフトウェア開発の概要を実際の課題を通して経験できたことは多くの学びになった。 また、グループプロジェクトはメンバーが親切であったことから、プロジェクトワークは何とかこなすことができたと思う。しかし、異なる文化、言語のグループの中でどう存在感を示していくかは改めて難しいことを痛感した。 今回の経験を活かし、簡単なアプリケーションの開発に今後挑戦していきたいと思う。