著者:
(1)ジョセフ・ラテッサ、ウェイン州立大学コンピュータサイエンス学部、デトロイトミシガン州、米国((email protected))
(2)アディ・フリア、セイラム高等学校3年生、ミシガン州カントン、米国((email protected))
(3)ディーパック・ラジュ、セイラム高校3年生、ミシガン州カントン、米国((email protected))。
リンク一覧
概要と序論
関連作業
プロジェクトの前提条件
プロジェクトの実施
洞察と考察
結論、謝辞および参考文献
5 洞察と考察
このセクションでは、私たちが学んだこと、うまくいったこと、直面した課題、そしてこのようなプロジェクトを将来どのように適応させ、拡張できるかについて振り返ります。学生のコンピューター サイエンス教育の早い段階でバージョン管理と自動ソフトウェア テストに触れることで、エラーに対処し、バグを見つけて解決し、よりクリーンなコードを書く能力が強化されるという私たちの見通しを共有します。
5.1 適応、将来の作業、スケーラビリティ
このプロジェクトと私たちが開発した自動テストは、私たちの研究室に関連して開発された科学計算アプリケーションに特化しています。私たちは、ボランティアの学生に実践的な経験を積み、これらの科学計算アプリケーションに有意義に貢献する機会を与えると同時に、新しい概念を紹介し、新しいスキルを習得する機会も提供したいと考えました。プロジェクトの Web サイトは、物理学 (JETSCAPE (1)) や化学工学 (GOMC (2)) の前提となるドメイン科学の知識を必要とせずに、学生が関連するソフトウェア エンジニアリングの概念をすぐに学習し始めることができるため、出発点として最適でした。
私たちは、このコンテンツを一般化し、他の学生のその他の用途に役立つように拡張することに価値があると考えています。リポジトリ管理と自動テストの概念は、地元の中小企業から将来の雇用主に仕事を紹介する学生自身のプロモーション Web サイトまで、あらゆる情報 Web サイトに幅広く適用できます。
このプロジェクトの開発に関して私たちが直面した課題は、これらの科学計算アプリケーションや、私たちの研究室で実施されている他の研究プロジェクトには、前提となるドメイン科学の知識、アルゴリズムとデータ構造の知識、または並列プログラミングと高性能コンピューティングの知識が必要であるということでした。これらの自動テストを開発するプロジェクトは、過大な背景要件なしに達成できるものでした。XML リーダーは、ドメイン科学の知識がなくても理解できるアプリケーションの一部であったため、ユニット テストに選択されました。ただし、サンプル入力ファイルを検証するためにユニット テストを実装することは、私たちの見解では、ユニット テストの最も教育的な使用例ではありません。将来の取り組みでは、入力ファイルの有効性ではなく、関数自体の正確性を検証するためにユニット テストを導入する方が適切かもしれません。
追加の課題として、当初はプロジェクトの概要を提供できなかったという点が挙げられます。このプロジェクトの開発の多くは実験的なものであり、各タスクを完了するのにどれくらいの時間がかかるかわかりませんでした。また、GitHub Actions Marketplace で利用可能なユーティリティのどれが自分たちに適しているかについて事前に知ることができませんでした。そのため、プロジェクトでは利用可能なツールを調査し、作業を進めるにつれて試行錯誤を繰り返しました。これにより、実験室の実験環境に触れることができましたが、プロジェクトの範囲、スケジュール、ツールのより包括的な概要が最初に提供されていれば、学生はより準備ができていると感じたかもしれません。コマンドと概念の紹介資料があれば、学生に、より実用的なロードマップ、学習ガイド、プロジェクト全体の進捗状況の測定方法を提供できたでしょう。
5.2 早期学習の利点
バージョン管理、ユニットテスト、継続的インテグレーションなどのソフトウェアエンジニアリングの概念は、学部生が数学期にわたって勉強し、複数のプログラミングコースを受講するまで紹介されないことがよくあります。学部レベルで多くの学生と仕事をしてきた私たちの観察では、学生は多くの場合、異なるファイル名で複数のバージョンのコードを保存することに頼っており、バージョン管理について簡単に紹介することで改善できる混乱した作業環境を作り出しています。プログラミング学習の早い段階でバージョン管理を実践することで、学生は卒業やインターンシップのかなり前にこの重要なスキルを習得できるようになります (9)。ソフトウェアテスト、特にユニットテストの知識があれば、初心者のプログラマーはプログラム設計についてより明確に考えることができます。また、ユニットテストを書く必要があると、初心者の学生は、初心者のコードによく見られる長くて広がりのある関数とは対照的に、より簡潔でモジュール化された関数を書くことができます。