東京理科大学 infoserv[更新日]2001.4.20


問5

 プログラム設計に関する次の記述を読んで,設問 1 〜 4 に答えよ。

日付を与えて曜日を求める副プログラムを作成する。 現在,この副プログラムのテストを行っている。

〔副プログラムの説明〕

日付(西暦年月日)を与えて,曜日を求める副プログラムである。 与えられた日付に誤りがある場合は,その内容に対応した誤りコードを返す。

(1) 日付は,“yyyy, mm, dd”(yyyy:西暦年 4 けた,mm:月 2 けた,dd:日 2 けた)の形式で与える。

(2) 正しい日付のときは,日,月,火,水,木,金,土のいずれかを,戻り値として返す。

(3) 誤った日付のときは,表 1 に示す 3 種類に分けて検査した結果の誤りコードを,戻り値として返す。

表1 日付の検査と誤りコード

誤りコード

検査の内容

E1

範囲内(年は 1900 〜 2299,月は 01 〜 12,日は 01 〜 31 )であることを検査する。

E2

日が 31 日のとき,月が 2 月,4 月,6 月,9 月,11 月でないこと,及び日が 30 日のとき,月が 2 月でないことを検査する。

E3

2 月 29 日のとき,年がうるう年であることを検査する。

〔副プログラムのテスト〕

副プログラムの説明から,テスト項目を設定し,境界値を考慮したテストデータを作成した。 表 2 に,テストデータと期待される正しい結果を示す。

表2 テストデータと期待される正しい結果

テスト項目

テストデータと結果{(テストデータ;結果)として表記}

年の値

(1899,12,31;E1),(1900,01,01;月), (2299,12,31;日),(2300,01,01;E1)

月の値

(2001,00,01;E1), ,(2001,12,01;水),(2001,13,01;E1)

日の値

(2001,01,00;E1),(2001,01,01;月), (2001,01,31;水),(2001,01,32;E1)

うるう年では
ない年の月と
日の組合せ

(2001,02,28;水),(2001,02,30;E2), (2001,02,31;E2),(2001,03,31;土),

(2001,04,30;月),(2001,04,31;E2),(2001,05,31;木),(2001,06,30;土),

(2001,06,31;E2),(2001,07,31;火),(2001,08,31;金),(2001,09,30;日),

(2001,09,31;E2),(2001,10,31;水),(2001,11,30;金),(2001,11,31;E2),

(2001,12,31;月)

2 月 29 日

(1996,02,29;木),(2000,02,29;火), (2001,02,29;E3),(2100,02,29;E3)

注)西暦 1996 年と 2000 年はうるう年であり, 西暦 2001 年と 2100 年はうるう年ではない。


設問1  表 2 のテストデータによるテストが該当するテストの種別として, 正しい答えを解答群の中から選べ。

解答群

ア 結合テスト    イ 性能テスト

ウ 耐久テスト    エ ブラックボックステスト

オ ホワイトボックステスト


設問2  表 2 の に入れる正しい答えを, 解答群の中から選べ。

解答群

ア (2001,01,01;月)    イ (2001,01,33;E1)    ウ (2001,06,01;金)

エ (2001,00,99;E1)    オ (2002,02,29;E3)    カ (2010,13,14;E1)


設問3  表 2 に示すテストデータでこの副プログラムを実行したところ, テスト項目“2 月 29 日”のデータのうち, 2100 年のときに“(2100,02,29;月)”となり, 下線で示す正しい結果が得られなかった。 このことから得られる結論として適切な記述を,解答群の中から選べ。

解答群

ア 2 月 29 日の存在が問題となるのは,4 年間に 1 日だけであり,影響は小さい。 一方,プログラムの修正に手間がかかること,及び修正によって新たな誤りを 生じる可能性もあることから,この副プログラムを修正することは不適切である。

イ うるう年以外では正しい値が得られるようなので,下線のテストデータを うるう年以外のものに替えて,テストデータの件数を減らさずに すべて正しいテスト結果にするのがよい。

ウ うるう年の計算処理に誤りがあると考えられる。 したがって,副プログラムの修正には,まず,うるう年の処理に対応する部分を調べる。

エ 月末日は月によって異なるが,月は 1 月から 12 月までであることは 明らかであるので,月の値に対する範囲テストは行う必要がなかった。

オ 現時点では,西暦 2100 年まで約 100 年あるので, この副プログラムの修正は必要ないと判断できる。


設問4  図は,バグ修正後の副プログラムを使って, 与えられた年(西暦 2000 年以降とする)の体育の日(10 月の第 2 月曜日)の 日付を求める流れ図である。 に入れる正しい答えを, 解答群の中から選べ。

図 体育の日の日付を求める流れ図

解答群

ア 日 > 31

イ 日 ≦ 31

ウ 戻り値が,誤りコードである

エ 戻り値が,“月”である

オ 戻り値が,“日”,“火”,“水”,“木”,“金”,“土”のいずれかである

カ 戻り値が,“日”,“月”,“火”,“水”,“木”,“金”,“土”のいずれかである


東京理科大学 infoserv 戻る 次頁:問06