見出し画像

ソフトウェア開発のきほん

この基本ができてないのに、アジャイルやるぞーって言った次の言葉が「何やればいいですか?」とか言うので、きほんをゆるく書きます。

1. 戦略書

今回は省略。どこかで日記にします。

2. PJ計画書・PJ憲章

今回は省略。どこかで日記にします。

3. 要求仕様書

温度を測定するソフトウェアを例にして記述していきます。

何を作りたいのか?を列挙します。
また、ソフトウェアを作ることで、何が変わるのか?Before/Afterを明記します。
基本的には素人→ITに口頭で依頼されることがあるので、言われたことを取りこぼしなく列挙していきます。

3.1. 要求仕様書の記述例

・目的
 温度を測って、PCのエクセルに記録しているのが、めんどくさいから、機械で記録までして欲しい。
・背景
 利用者がめんどくさい。手間が掛かる。と言っている。
 このソフトウェアによって、利用者の手間が減ることで、コスト削減できる。また、同様の利用者に販売すれば、売上向上できる。
・作業フロー
 Before
 温度計を見る→PCのエクセルに温度を入力
 After
 温度計付きの機械で測る→PCにデータ転送→エクセルに入力
・画面のイメージ
 こんなの作ってー。

画像9

4. 要件定義書

要求仕様書で列挙した内容で、ソフトウェアで実現できるもの(コンピュータにやらせることができるもの)を機能要求として列挙していきます。
ログインが必要か?とか、結構忘れがちなので、ここで、こういう機能がないとソフトウェアができませんよ?と質問していきます。
こういった内容は、全て機能要件です。

非機能要件は、上記ででそろった機能要件から、非機能要件として項目が出ていますので、非機能要件としてまとめていきます。
10秒以内に起動して欲しいとか、セキュリティが必要なので、ウィルス対策ソフト以外に、データを暗号化しておいて欲しいとか、USBメモリにソフトウェアを入れておいて別のPCで動かしたいとか。こんなことを非機能要件として列挙します。

4.1. 要件定義書の例

要件定義書の簡易例
・目的
 機械で測ってエクセルに記録する。
・機能要件
 (1)温度測る
 (2)PCで温度読む
 (3)温度をエクセルに出力
・非機能要件
 (1)拡張性:温度が測れたら、湿度も測りたい。

5. 外部設計書

設計書には、ソフトウェアの中身をどういう配置でプログラムしていくかを記述していきます。
プログラムは、main()から始まって、その後、初期化処理、制御処理、データ読み書きなどを行うので、それぞれクラスという単位に分けて記述します。クラスの中には、メソッドとプロパティを記述します。
細かい人は、メソッドやプロパティの詳細な呼び方までしゃべってきますので、どうぞご自由に。
配置のことを、アーキテクチャなんてカッコいい呼び方をします。
最近のプログラムの流行のアーキテクチャは、MVCというものがあります。
記述する際は、UMLといった世界共通の図形表示がありますので、UMLを活用すると良いでしょう。

5.1. 外部設計書の簡易例

・目的
 機械で測ってエクセルに記録するソフト作る。
・ソフト構成図
 MVCで考える。

画像1

 M:温度情報
 M:エクセル出力
 V:メニュー画面、温度表示、エクセルファイルの出力先情報表示
 C:毎日8時に温度情報を読んで、エクセル出力
・動作手順
 シーケンス図を描く。

画像2

シーケンス図から、やりたいことを矢印を使って書いたら、それぞれがメソッドになります。

画像3

・画面設計
VisualStudioなどで画面がすぐに作れるなら、VisualStudioでパーツ(コントロール)だけ貼り付けた画面を使うと、設計も実装もできて良いでしょう。設計書に貼り付けたら、数字を割り付けて、1番は何のために使うパーツで、何をするのか記載していきましょう。

画像4

6. 内部設計書

詳細設計書の簡易例として、メソッドごとに、中で何の処理を順番に行うのかを、簡単にフローチャートに記述していきます。
書き慣れない人は、プログラムの1行1行を書いてしまったりしますが、そのうち慣れるんじゃない?
フローチャートってJIS規格なんです。UMLじゃなくて、ごめんねー。
UMLだとアクティビティ図が近いかな。

6.1. 内部設計書の例

シーケンス図では、クラス間のやり取りが分かりました。
メソッド毎に、条件文は何にするか?何の値を保持させるか?どういう順番で処理させるか?を記述していきます。

画像5

7. コーディング

VisualStudioでC#で作っていきましょう。(要件定義書の段階で決められると良いですね。)
C#からExcelの書き込みをする場合、Nugetで、これをインストールすれば使えるようになります。

画像6

USBの温度計
例えばこんなのがあります。
USBからデータを取得するためには、HidLibraryっていうのがあります。

USBの線に繋がっている装置をHid(Human Interface Device)っていう人I/F装置として読めるので、これで読みます。
(1)USBの一覧の取得
(2)デバイスマネージャーのUSB一覧のどれが温度計だよ?どれか識別子が一致するものがないか探します。
(3)C#で温度計オブジェクトを特定
(4)温度取得

画像7

タイマーの使い方は簡単なので、こんなところがポイント
コールバックのメソッドで、8時になったら、温度を読んで、エクセル書き込み処理を行えばOK

画像8

プログラムがビルド(成功)できるようにします。
クリーンにして、ビルドを何回やっても成功するようにするんですよ。
1度きりのビルド成功は、ビルドに成功していませんからね。
クリーンして、ビルドしてくださいね。
エラーなら、エラー表示を見て、直しましょう。

8. 単体試験

詳細設計書を書きましたよね。その通りにプログラムが出来ているか確認する試験のことです。
アサーションチェックなんてやり方で確認するか、ホワイトボックステストで、デバッガーで1行1行確認していくかです。

試験を実施するために必要なものは、
(1)試験データ ・・・ 事前に作っておけると良いですね。忘れがちです。
(2)試験仕様書
(3)試験結果報告書 ・・・ 検証物(エビデンス)も添付すると良いでしょう。
です。

単体試験としては、C0、C1、C2なんてパターンがあります。
だいたいはメソッド単位で、試験していきます。
C0は、
データがちゃんと取れたかどうか、
代入文の=のところが、右から左に代入できたかどうかを確認したりします。
C1は、C0を含めて、
条件文の最小値、中間値、最大値をデバッガーで書き換えて、処理を実行させてみる試験のことです。
C2は、C0、C1も含めて、
条件文の中の条件式を真・偽のパターンを全てチェックします。

9. 結合試験

外部設計書に、シーケンス図書きましたよね。
その矢印のところが、ちゃんと動作しているか、1つ1つの矢印について確認するのを結合試験って言うんです。
ホワイトボックステストで、シーケンスが動作しているかに特化して試験を進めていきます。

多分、関数ごとに単体試験しましたね?
自分の作った関数を順番に実行するのは、制御パステストって言います。

試験を実施するために必要なものは、
(1)試験データ ・・・ 事前に作っておけると良いですね。忘れがちです。(2)試験仕様書
(3)試験結果報告書 ・・・ 検証物(エビデンス)も添付すると良いでしょう。です。

10. システム試験

要件定義書に書いた機能要件と非機能要件が動いてるか、確認することを言います。
ここからはブラックボックステストで、画面からの入力で、出力が意図した機能になっているか確認していきます。

試験を実施するために必要なものは、
(1)試験データ ・・・ 事前に作っておけると良いですね。忘れがちです。(2)試験仕様書
(3)試験結果報告書 ・・・ 検証物(エビデンス)も添付すると良いでしょう。

11. アクセプタンス試験

要求仕様書に書いてあるフロー通りに動くかどうか確認することを言います。
実際の作業フローをやってみる試験のことです。
すごい使いにくいソフトウェアになっていませんか?使いやすいですか?
お客様に満足してもらえるソフトウェアになっているか確認します。

12. まとめ

たった温度が測りたいだけでも、やることあるんです。
もっとやりたいことが増えたら、、、。
それなのに、作業をすっとばすとか、ドキュメント作らないとかってやると、どこに不具合、不整合があるのか分からなくなります。

以上です。

この記事が気に入ったらサポートをしてみませんか?