「ソフトウェアエンジニアリング入門、第6版」-ZhangHaifanとMouYongminの授業後の回答と詳細な説明第7章実装

質問1

1.以下の擬似コードにエラーがあります。この擬似コードを注意深く読み、擬似コードの文法的特徴を説明し、擬似コードのエラーを見つけて修正します。単語頻度統計プログラムの擬似コードは次のとおりです。

プログラムを初期化する

最初のテキストレコードを読む

テキストレコードにさらに単語がある間は実行してください

テキストレコードにさらに単語がある間は実行してください

次のテキストワードを抽出します

抽出された単語の単語テーブルを検索します

抽出された単語が見つかった場合

単語の出現回数をインクリメントする

そうしないと

抽出した単語をテーブルに挿入します

END IF

単語処理数をインクリメントする

テキストレコードの最後にあるENDDO

次のテキストレコードを読む

すべてのテキストレコードが読み取られたら、ENDDOを実行します

表と要約情報を印刷する

プログラムを終了します
回答:抽出された単語をテーブルに挿入しますこの背後にあります、この単語の出現/カウントを1に割り当てましたか

質問2

2.以下に示す擬似コードプログラムを検討します。要件:
(1)プログラムのフローチャートを作成します。
(2)構造化されているのか、構造化されていないのか、その理由を説明してください。
(3)構造化されていない場合は

(a)3つの制御構造のみを使用して構造化プログラムに変換します。(b)この構造化設計の擬似コードを記述します。
©箱ひげ図を使用してこの構造化プログラムを表します。
(4)プログラムロジックのエラーを見つけて修正します。
コメント:Tの合計エントリを持つ
情報検索
システムのトピックへの最初のN個の参照のプログラム検索トピックの
入力N
入力キーワードI =
O
MATCH = 0
DOWHILEI≤TI
= I + 1
IF WORD = KEYWORD
THEN MATCH = MATCH + 1
STORE IN BUFFER
END
IF MATCH = N
THEN GOTO OUTPUT
END
END
IF N = 0
THEN PRINT” NO MATCH”
出力:バッファ情報を出力するためのELSE CALLサブルーチン
END
回答:
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
(4)プログラムのエラー:ステートメント "IF WORD = KEYWORD"の変数 "WORD"が事前に割り当てられていません。
プログラムに事前入力されたT値はありません。
「N = 0」は「MATCH = 0」である必要があります。

質問3

3.質問2の設計で、NまたはKEYWORDの入力値が不合理である場合、問題が発生します。
(1)これらの変数の不合理な値の例を挙げてください。
(2)これらの不合理な値をプログラムに入力した場合の結果は何ですか?
(3)これらの問題を防ぐためにプログラムにエラー防止対策を追加する方法は?
回答:
(1)N = 1、KEYWOED =#。
(2)情報を印刷することはできません。
(3)ループに参加する

質問4

4.(1)モジュールテストと統合テストとは何ですか?それらの特徴は何ですか?
(2)1000行のFORTRANステートメント(コンパイル後約5000のマシン命令)で構成されるプログラムがあるとすると、テスト中にいくつのエラーが見つかると推定されますか?どうして?
(3)設計以下の疑似コードプログラムステートメントカバレッジパスカバレッジテストケース:
START
INPUT(A、B、C)
IF A> 5
THEN X = 10
ELSE X = 1つの
END IF
IF B> 10
THEN X = 20
ELSE X = 2
END IF
IF C> 15
THEN X = 30
ELSE X = 3
END IF
PRINT(X、Y、Z)
STOP
回答:(1)モジュールテストは、個々のモジュールをそれぞれブラックボックスとホワイトボックスでテストすることです。その機能が正しいかどうかをテストし、モジュール制御構造の特定のパスを確認して、エラーの最大数を見つけます。
その特徴は次のとおりです。ホワイトボックステストテクノロジの主なアプリケーションである、複数のモジュールのテストを同時に実行できます。

統合テストは、モジュールを組み立てて完全なソフトウェアパッケージを形成し、組み立てと同時にテストすることです。
特徴は次のとおりです。インターフェースの問題が発生する可能性があります。
(2)1か月あたり25〜100エラー。米国の一部の統計によると、この比率は通常0.005〜0.02であり、テスト前の1,000命令あたり約5〜20エラーがあることを意味します。テスト前の1000命令ごとに10個のエラーがあると仮定すると、テスト中にエラーの数が見つかると推定されます:5000×10/1000 = 50。
(3)ステートメントの対象となるテストケース
各判定式には真または偽の代入ステートメントがあるため、各ステートメントを少なくとも1回実行するには、各判定式を実行するために合計2セットのテストデータが必要です。値は毎回trueまたはfalseです。以下は、ステートメントを実現するための典型的なテストケースです
。①3つの判断式の値をすべてfalseにする
入力:A = 1、B = 1、C = 1
期待される出力:X = 1、Y = 2、 Z =
3②3つの決定式の値をすべて真にします。
入力:A = 20、B = 40、C =
60。期待される出力:X = 10、Y = 20、Z =

30。パスのテストケース
このプログラムには8つの可能性がありますパスカバレッジを実現するには、合計8セットのテストデータが必要です。以下は、パスカバレッジを達成するための典型的なテストケース
です①3つの判断式の値はすべてfalse
入力:A = 1、B = 1、C = 1
期待される出力:X = 1、Y = 2、Z = 3
。②3判定式は、次に偽、偽、及び該当する
入力:A = 1、B = 1、C = 60。
期待される出力:X = 1、Y = 2、Z = 30
3つの判定式が偽であります、true、falseの順に
入力:A = 1、B = 40、C = 1
期待される出力:X = 1、Y = 20、Z =
3④3つの判定式はfalse、true、trueの順になります。
入力:A = 1、B = 40、C = 60
期待される出力:X = 1、Y = 20、Z =
30⑤3つの判定式が順番にtrue、false、falseになります。
入力:A = 20、B = 1、C = 1
期待される出力:X = 10、Y = 2、Z =
3⑥3つの判定式が順番にtrue、false、trueになります
入力:A = 20、B = 1、C = 60
期待される出力: X = 10、Y = 2、Z =
30✓3つの判定式は、順番にtrue、true、falseです。
入力:A = 20、B = 40、C = 1
期待される出力:X = 10、Y = 20、Z =
3⑧3判定式はすべて真
入力:A = 20、B = 40、C = 60
期待される出力:X = 10、Y = 20、Z = 30

質問5

5.ライブラリには、CRT端末を使用した情報検索システムがあります。システムには、次の4つの基本的な検索コマンドがあります。
ここに画像の説明を挿入します
要件:

(1)システムの正常な動作を完全にテストするためのテストデータを設計します。

(2)設計・テスト・データをシステムのテスト異常動作の
A:試験システムの正常な動作のために(1)試験データ①Execute
シーケンスにおける次の3つのコマンド:
B(キーワード)
S(L)
D(N)
中でも、 KEYWORDは正しいキーワードです。Lはコマンドbの実行後に画面に表示される約20行番号の1つです(少なくともLはそれぞれ最初、最後、中央の行番号である必要があります)。Nはコマンドsの実行後の列です。出力されるインデックス番号(少なくともNは、それぞれ最初、最後、および中央のインデックス番号である必要があります)。
いくつかの異なるキーワードに対して上記のコマンドシーケンスを繰り返します。
②次の2つのコマンドを順番に実行します
。f(NAME)
d(N)
ここで、NAMEは既知の作成者の名前、Nはコマンドfの実行後にリストされるインデックス番号の1つです(少なくともNは最初、最後である必要があります) 1つと中央の1つのインデックス番号)。
いくつかの異なるNAMEに対して、上記のコマンドシーケンスを繰り返します。
(2)テストシステムの異常動作のテストデータ
①コマンドbのパラメータとして長すぎるキーワードを使用する:たとえば、b(信頼性ソフトウェアとハ​​ードウェアの組み合わせ)
期待される出力:システムは、たとえば、リスト内のキーワードの可能性コマンドは信頼性ソフトウェアに切り捨てられます
②コマンドのパラメータとして誤ったキーワードを使用しますb:たとえばb(AARDV ARK)
期待される出力:たとえば実行時に
1が表示される可能性があります。コマンドがリストされています。AARON、JULES(本)
③コマンドbを実行した後、記載されている最大行番号より1大きい番号をコマンドsのパラメータとして使用してください。
期待される出力:「コマンドsのパラメータが行番号一覧にありません」
④コマンドb、コマンドfのパラメータに数字と句読点を使用してください。
期待される出力:「パラメータの種類が間違っています」
⑤コマンドsのパラメータに英字を使用してください。およびコマンドd
期待される出力:「パラメータタイプが間違っています」
⑥コマンドsおよびコマンドdのパラメータとして0と負の数を使用してください。
期待される出力:「パラメータ値が間違っています」
∥コマンドシーケンスが間違っています:たとえば、コマンドsが実行されずに実行されます。コマンドb、または未実行コマンドsはコマンドdの
期待される出力を実行します:「コマンドシーケンスが間違っています」
⑧コマンド構文エラー:たとえば、コマンド名b、s、d、またはfが省略されているか、コマンドパラメータが実行されていません括弧で囲まれています。
期待される出力:「コマンド構文エラー」
⑨nullコマンドパラメータ:例:b()、s() 、d 、またはf()
期待される出力:システムはデフォルトのパラメータを提供するか、エラーメッセージを表示します
⑩パラメータfのスペルミスのある名前は
、予想される出力です。「これらの作成者の作品が見つかりません」

質問6

6.航空会社Aは、飛行ルートを計画するプログラムをソフトウェア会社Bにサブスクライブします。あなたがソフトウェア会社Cのソフトウェアエンジニアであり、会社Aが上記のプログラムの受け入れテストを実行するためにあなたの会社を雇ったとします。課題は、以下の事実に基づいて検収試験の入力データを設計し、これらのデータを選択する理由を説明することです。
ナビゲーターは、出発地と目的地、および天候と航空機モデルに従って決定された予備飛行高度をプログラムに入力します。プログラムは、途中の風向と風のデータを読み取り、3セットの飛行計画(高度、速度、方向、および途中の5つの位置チェックポイント)を作成します。飛行計画は、燃料消費量と飛行時間を最小限に抑えるように作成する必要があります。
回答:
通常の入力データをテストデータとして使用します
①ルーチンの出発点、目的地、航空機モデル、5つの位置チェックポイント、高度、速度をプログラムに入力します。
②出発地と目的地のグループを3〜5つ
入力し、手順1を繰り返します。③固定出発地、目的地、航空機モデル、5つの位置チェックポイントと高度を入力し、3〜5の異なる速度を入力して、手順1を繰り返します
。④固定出発地、目的地を入力します。 、航空機モデル、5つの位置チェックポイントと速度をそれぞれ3〜5の異なる高度を入力し、手順1を繰り返します
。⑤固定出発点、目的地、航空機モデル、速度と高度を入力し、それぞれ3〜5の異なる位置チェックポイントのグループを入力します。手順1を繰り返します
❖固定出発地、目的地、5つの位置チェックポイントと高度をそれぞれ入力し、3〜5つの異なる航空機モデルを入力します。手順1を繰り返します
。0045固定目的地、5つの位置チェックポイントと高度をそれぞれ入力し、それぞれ3〜5つの異なる航空機モデルを入力します。 、手順1を繰り返します
⑧固定出発点、5つの位置チェックポイント、高度をそれぞれ入力し、3〜5の異なる目的地を入力し、手順1を繰り返します
(2)テストデータとして特別なデータ値を使用します
①非常に高いデータと非常に低いデータの組み合わせテストをそれぞれ入力します
②負の数値で
テスト③テストする数値0を入力します
④テスト
ayとsizeにそれぞれ非常に遠い、非常に近い出発点と目的地を入力します。サイズは配列のサイズよりも小さく、検索する値が指定されます。値はsomearrayにあります。
期待される出力: return -1;
最初に与える配列somearrayとsizeを取得し、サイズが配列のサイズよりも大きい、検索する必要のある値を与える、値がs​​omearrayにない;
期待される出力:return-1;
法律最初に与える配列somearrayとサイズ、サイズは配列よりも大きいサイズであり、検索する必要のある値を指定します。値はsomearrayにあります。
期待される出力:return -1;

質問7

7.厳密に言えば、2つの異なるパスカバレッジテスト、つまりプログラムパスカバレッジとプログラムグラフパスカバレッジがあります。これらの2種類のテストは、それぞれプログラムの自然実行と強制実行と呼ぶことができます。いわゆる自然実行とは、テスター(人間またはコンピューター)がプログラム内の条件式を読み取り、プログラム変数の現在の値に従って条件式の値(trueまたはfalse)を計算し、それに応じて分岐することを意味します。強制実行は、プログラム図をプログラムの抽象モデルとして使用するときに生成される人工的な概念であり、テストの問題を単純化できます。強制実行の意味は、条件式が検出されると、テスターは2つのケースでプログラムを強制的に実行することです(条件式の値はtrueとfalseです)。明らかに、強制実行はプログラムグラフ内のすべてのパスを通過しますが、さまざまな条件式間の相互依存性のため、これらのパスの一部は自然実行中に決して入力されない場合があります。
強制実行の概念が実際の作業で役立つためには、テストツールを簡素化することの利点が、達成不可能な追加のテストケースを使用することの欠点を上回る必要があります。ほとんどの場合、強制実行テストの数は、自然に実行されるテストの数よりもそれほど多くありません。さらに、強制実行の定義には、ループを含むプログラムをテストするときに必要な実行を短縮できる手法が含まれています。
プログラムの実行時間のほとんどは、通常、プログラム内のDOループ、特にネストされたループを繰り返し実行するために使用されます。したがって、各DOループが1回だけ実行されるように技術を発明する必要があります。経験上、ループが最初または最後に実行されたときにエラーが発生する可能性が最も高いことが示されているため、これを行ってもテストの有効性が低下することはありません。
Laemmel教授が提案した各パスを自動的にテストする手法は次のとおりです。
プログラムを作成する場合、各DOループはテスト変数Tとモード変数Mを含む特殊な形式で作成する必要があるため、
DO I = 1 TO38

DOI = 1 TOM×38 +(1-M)×TIt
になります。 M = 0の場合はテストモードであり、M = 1の場合は通常動作モードであることがわかります。テストモードの場合、T = 0の場合、ループは1回実行されず、T = 1の場合、ループは1回だけ実行されます。
同様に、IFステートメントは、たとえばパターン変数とテスト変数を使用して書き直す必要があります。
IF X + Y> 0 THEN Z = X
ELSE Z = Y
IFM
×(X + Y)+ T> 0 THEN Z = X
ELSE Z = Yになります。
通常の操作では、M = 1およびT = 0、 test M = 0とし、THEN部分をテストし(T = + 1)、ELSE部分をテストします(
T = -1)。
要件:
(1)ループとIFステートメントを含むプログラムを選択し、Laemmelテクノロジを使用してプログラムを変更し、コンピュータでプログラムをテストして、得られた結果を説明します。
(2)Laemmelテクノロジに従ってテストするプログラムを自動的に変更するプログラムを設計します。このテストツールを使用して、前の質問で手動で変更したプログラムを変更します.2つの変更から得られた結果は一貫していますか?
(3)LaemmelテクノロジをWHILEDOおよびREPEATUNTILステートメントを含むプログラムに拡張する方法
(4)分析してみてくださいLaemmelテクノロジーの長所と短所、および改善のための提案を提案します。
回答:(1)if(x + y)> 2
A = x
Else
A = y
を次のように変更します:ifM×(x + y)+ T> 2
A = x
Else
A = y
結果は一貫しています。
(2)2つの結果は同じです。
(3)WHILEDOとIFELSEの変更手法は類似しています。
(4)利点は、結果がより正確になる可能性があることです。欠点は、すべてのプログラムが適用できるわけではなく、プログラムの操作が複雑になる場合があることです。

質問8

8. 10,000個のマシン命令を含むプログラムの統合テストを1か月行った後、合計15個のエラーが修正されました。この時点でMTTF = 10hです。2か月のテストの後、合計25個のエラーが修正されました(2か月目に修正されました)。 10エラー)、MTTF = 15h。
要件:
(1)上記のデータに基づいて、MTTFとテスト時間の関数関係を決定し、MTTFとテスト時間τの関係曲線を描きます。この曲線を変換する際にどのような仮定がなされますか?
(2)MTTF = 100hを達成するために、統合テストはどのくらいの期間実施する必要がありますか?統合テストが終了したとき、合計でいくつのエラーが修正され、プログラムにはまだいくつのエラーが潜んでいましたか?
回答:(1)MTTFとテスト時間τの関係曲線は次のとおりです
ここに画像の説明を挿入します
。デバッグプロセス中に新しいエラーが発生しないことを前提としています。
(2)平均故障間隔の推定式によれば、次のようになります
。1/ K(Et / 10000-100 / 10000)= 10
1 / K(Et / 10000-300 / 10000)= 15、次のようになり
ます。 get:K = 333、Et = 45
MTTF = 100hの場合、1
/333(45 / 10000-Ec / 10000)= 100の計算があり、次のようになります。Ec = 42。
テストと修正の進行状況に応じて推定最初の2か月で、統合テストに3か月かかります。
テストが終了すると、42個のエラーが修正され、3個のエラーがプログラムに潜んでいました。

質問9

たとえば、100,000命令の長さのプログラムの統合テスト中に、次のデータを記録します。
(a)7月1日:統合テストが開始され、エラーは見つかりませんでした。
(B)8月2日:合計100個のエラーが修正されました。この時点でMTTF = 0.4h
(c)9月1日:合計300個のエラーが修正されました。この時点でMTTF = 2h
上記のデータに基づいて次の質問に答えてください。 。
(1)プログラム内のエラーの総数を見積もります。
(2)MTTFが10時間に達するには、プログラムをどのくらいの期間テストおよびデバッグする必要がありますか?
(3)MTTFとテスト時間τの間の関数曲線を描きます。
回答:(1)平均故障間隔の推定式によると:
1 / K(Et / 100000-100 / 100000)= 0.4
1 / K(Et / 100000-300 / 100000)= 2
計算は次のとおりです:K = 1000、Et = 350、プログラムのエラーの総数は350です。
(2)MTTF = 10hの場合、
1 / K(350 / 100000- Ec / 100000)= 10
を計算できます:Ec = 340。最初の2か月、および2か月のエラーのテストと修正の進捗状況に基づいて推定されます。統合テスト。
(3)MTTFとテスト時間τの間の関数曲線は次のとおりです。

ここに画像の説明を挿入します

質問10

10. 24,000命令の長さのプログラムをテストする場合、2人のテスターAとBが最初の月に独立してプログラムをテストします。1か月のテストの後、Aは20個のエラーを見つけて修正したため、MTTFは10時間に達しました。同時に、Bは24個のエラーを検出し、そのうち6個はAによっても検出されました。これから、人はプログラムをテストし続けます。質問:
(1)テストが最初に開始されたとき、プログラムにはいくつの隠れたエラーがありましたか?
(2)MTTFが60時間に達するには、いくつのエラーを修正する必要がありますか?テスト時間はどのくらいかかりますか?
(3)MTTFと統合テスト時間τの間の関数曲線を描きます。
回答:(1)式B0 = B2B1 / bcによると、次のようになります。B0
= 20×24/6 = 80、つまり、テストの開始時にプログラムに合計80のエラーがあります。
(2)平均故障間隔の推定式によれば、次のようになります
。1/ K(80 / 24000-20 / 24000)= 10
1 / K(80 / 24000- Ec / 24000)= 60、次のようになり
ます。 get:K = 40、Ec = 70
は、50個のエラーを修正する必要があることを意味します。Aの修正進捗状況によると、さらに3か月かかると推定されています。
(3)MTTFと統合テスト時間τの間の関数曲線は次のとおりです。

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/hypertext123/article/details/109623969