Appendix A. Requirements Traceability Matrix

Note: All blank entries in "testing" represent a requirement which must be tested manually and is not covered by automatic testing. All "implemented" entries which show an entry in deferred_frs and deprecated_frs represent requirements which have been deferred to a future release or are deprecated and will not be implemented.

Table A-1. Requirements Traceability Matrix

Functional RequirementImplemented inTested in
   
CAT.FR1

../src/cat.py:23

test_plan.sgm:429

CAT.FR2

../src/cat.py:33

test_plan.sgm:438

CAT.FR3

../src/cat.py:53

test_plan.sgm:448

CGI.CHANGE-HTML-TEMPLATES.FR1

../src/html_substitutor.py:20

test_plan.sgm:753

CGI.CHANGE-HTML-TEMPLATES.FR2

../src/html_substitutor.py:45

test_plan.sgm:753

CGI.CHANGE-HTML-TEMPLATES.FR3

../src/html_substitutor.py:48

test_plan.sgm:754

CGI.CHANGE-HTML-TEMPLATES.FR4

../src/html_substitutor.py:54

test_plan.sgm:754

CGI.EDIT.FR1

../src/cgi_switchboard.py:208

test_plan.sgm:998

CGI.EDIT.FR2

../src/cgi_edit_form.py:27

test_plan.sgm:1012

CGI.EDIT.FR3

../src/cgi_edit_form.py:30
../src/cgi_edit_form.py:34

test_plan.sgm:1005

CGI.EDIT.FR4

../src/cgi_edit_form.py:43

test_plan.sgm:1012

CGI.EDIT.FR5

../src/cgi_edit_results.py:60

test_plan.sgm:1021

CGI.FREEQUERY.FR1

../src/cgi_switchboard.py:201

test_plan.sgm:853

CGI.FREEQUERY.FR3

../src/cgi_free_query_output.py:107

test_plan.sgm:859

CGI.FREEQUERY.FR4

../src/cgi_free_query_output.py:73

test_plan.sgm:859

CGI.FREEQUERY.FR5

../src/cgi_free_query_output.py:77

test_plan.sgm:859

CGI.FREEQUERY.FR6

../src/cgi_free_query_output.py:109

test_plan.sgm:859

CGI.LIST.FR1

../src/cgi_switchboard.py:24

test_plan.sgm:793

CGI.LIST.FR2

../src/cgi_cat_output.py:79

test_plan.sgm:799

CGI.LIST.FR3

../src/issue_to_html_transformer.py:54

test_plan.sgm:799

CGI.LIST.FR4

../src/cgi_cat_output.py:47

test_plan.sgm:818

CGI.QUERY.FR1

../src/cgi_switchboard.py:119

test_plan.sgm:901

CGI.QUERY.FR2

../src/query_form_generator.py:15

test_plan.sgm:901

CGI.QUERY.FR3

../src/query_form_generator.py:36

test_plan.sgm:910

CGI.QUERY.FR4

../src/cgi_query_results.py:19

test_plan.sgm:910

CGI.REGISTER-TEMPLATE.FR1

../src/cgi_switchboard.py:216

test_plan.sgm:1061

CGI.REGISTER-TEMPLATE.FR2

../src/cgi_register_results.py:22

test_plan.sgm:1067

CGI.REGISTER-TEMPLATE.FR3

../src/cgi_register_results.py:34

test_plan.sgm:1067

CGI.SUBMIT.FR1

../src/cgi_switchboard.py:120

test_plan.sgm:946

CGI.SUBMIT.FR2

../src/html_form_generator.py:73

test_plan.sgm:946

CGI.SUBMIT.FR3

../src/html_form_generator.py:103

test_plan.sgm:949

CGI.SUBMIT.FR4

../src/html_form_generator.py:134

test_plan.sgm:952

CGI.SUBMIT.FR5

../src/html_form_generator.py:189

test_plan.sgm:954

CGI.SUBMIT.FR6

../src/html_form_generator.py:253

test_plan.sgm:962

CGI.SUBMIT.FR7

../src/cgi_submission_results.py:62

test_plan.sgm:962

CGI.SUBMIT.FR8

../src/cgi_submission_results.py:69

test_plan.sgm:962

CGI.SWITCHBOARD.FR1

../src/gateway_cgi.py:15

test_plan.sgm:755

CGI.SWITCHBOARD.FR2

../src/cgi_switchboard.py:194

test_plan.sgm:793

CM.ADD.FR1

../src/cm_cvs.py:61

deferred_frs:12

CM.ADD.FR2

../src/cm_cvs.py:70

deferred_frs:13

CM.ADD.FR3

../src/cm_cvs.py:76

deferred_frs:14

CM.COMMIT.FR1

../src/cm_cvs.py:104

deferred_frs:15

CM.COMMIT.FR2

../src/cm_cvs.py:23

deferred_frs:16

CM.COMMIT.FR3

../src/cm_cvs.py:105
../src/cm_none.py:61

deferred_frs:17

CM.COMMIT.FR4

../src/cm_cvs.py:115

deferred_frs:18

CM.DELETE.FR1

deferred_frs:1

deferred_frs:1

CM.DELETE.FR2

deferred_frs:2

deferred_frs:2

CM.DELETE.FR3

deferred_frs:3

deferred_frs:3

CM.IDENTIFY.FR1

../src/cm_cvs.py:12
../src/cm_none.py:12

deferred_frs:19

CM.UPDATE.FR1

../src/cm_cvs.py:144
../src/cm_none.py:81

deferred_frs:20

CONFIGURE.FR1

../src/repository.py:31
../src/yaktrack.py:33

test_plan.sgm:543

CONFIGURE.FR2

../src/yaktrack.py:80

test_plan.sgm:536

CONFIGURE.FR3

deferred_frs:4

deferred_frs:4

CONFIGURE.FR4

deferred_frs:5

deferred_frs:5

CONFIGURE.FR5

deferred_frs:6

deferred_frs:6

CONFIGURE.FR6

deferred_frs:7

deferred_frs:7

CREATE-REPOSITORY.FR1

../src/create_repository.py:48

../src/create_repository_test.py:25

CREATE-REPOSITORY.FR2

../src/create_repository.py:83

../src/create_repository_test.py:36

CREATE-REPOSITORY.FR3

../src/create_repository.py:61

test_plan.sgm:83

CREATE-REPOSITORY.FR4

../src/create_repository.py:131

test_plan.sgm:84

CREATE-REPOSITORY.FR5

../src/create_repository.py:139

test_plan.sgm:85

CREATE-REPOSITORY.FR6

../src/create_repository.py:111

test_plan.sgm:86

CREATE-REPOSITORY.FR7

../src/create_repository.py:114

test_plan.sgm:87

CREATE-REPOSITORY.FR8

../src/create_repository.py:42

test_plan.sgm:88

DEFINE.IS-VALID-TEMPLATE.FR1

../src/dtd_validator.py:116

../src/template_test.py:151

DEFINE.IS-VALID-TEMPLATE.FR2

../src/is_valid_template.py:19

test_plan.sgm:157

DEFINE.IS-VALID-TEMPLATE.FR3

../src/dtd_validator.py:58
../src/template.py:282

../src/dtd_validator_test.py:32
../src/template_test.py:69

DEFINE.IS-VALID-TEMPLATE.FR4

../src/dtd_validator.py:50

../src/dtd_validator_test.py:45
../src/template_test.py:91

DEFINE.IS-VALID-TEMPLATE.FR5

../src/dtd_validator.py:59

../src/dtd_validator_test.py:33
../src/template_test.py:70

DEFINE.IS-VALID-TEMPLATE.FR6

../src/dtd_validator.py:69

../src/dtd_validator_test.py:101
../src/template_test.py:54

DEFINE.IS-VALID-TEMPLATE.FR6A

../src/is_valid_template.py:52

test_plan.sgm:158

DEFINE.IS-VALID-TEMPLATE.FR7

../src/dtd_validator.py:73

../src/dtd_validator_test.py:72
../src/template_test.py:110

DEFINE.IS-VALID-TEMPLATE.FR8

../src/dtd_validator.py:65
../src/template.py:208

../src/dtd_validator_test.py:57
../src/template_test.py:34

DEFINE.REGISTER-TEMPLATE.FR1

../src/register_template.py:21

test_plan.sgm:168

DEFINE.REGISTER-TEMPLATE.FR2

../src/repository.py:62

test_plan.sgm:169

DEFINE.REGISTER-TEMPLATE.FR3

../src/repository.py:74

test_plan.sgm:184

DEFINE.REGISTER-TEMPLATE.FR4

../src/register_template.py:58

test_plan.sgm:185

EDIT.FR1

../src/edit.py:27

test_plan.sgm:369

EDIT.FR2

../src/edit.py:280

test_plan.sgm:370

EDIT.FR3

../src/edit.py:250

test_plan.sgm:392

EDIT.FR4

../src/edit.py:290
../src/edit.py:294

test_plan.sgm:379

EMAIL-GATEWAY.FR1

../src/yaktrack-email-gateway.py:135

test_plan.sgm:683

EMAIL-GATEWAY.FR2

../src/yaktrack-email-gateway.py:67

test_plan.sgm:688

EMAIL-GATEWAY.FR3

../src/yaktrack-email-gateway.py:73

test_plan.sgm:694

EMAIL-GATEWAY.FR4

../src/yaktrack-email-gateway.py:79

test_plan.sgm:700

EMAIL-GATEWAY.FR5

../src/yaktrack-email-gateway.py:83

test_plan.sgm:700

EMAIL-GATEWAY.FR6

../src/yaktrack-email-gateway.py:100

test_plan.sgm:706

EMAIL-GATEWAY.FR7

../src/yaktrack-email-gateway.py:107

test_plan.sgm:706

FEEDBACK.FR1

../src/composite_command.py:117

test_plan.sgm:631

FEEDBACK.FR2

../src/composite_command.py:122

test_plan.sgm:631

FEEDBACK.FR3

../src/composite_command.py:97

test_plan.sgm:599
test_plan.sgm:639

FILE.FR1

../src/file.py:115

../src/file_test.py:97

FILE.FR10

deferred_frs:8

deferred_frs:8

FILE.FR2

../src/file.py:19

../src/file_test.py:103
../src/file_test.py:108

FILE.FR3

../src/file.py:147

../src/file_test.py:113
../src/file_test.py:118
../src/file_test.py:123

FILE.FR4

../src/file.py:66

../src/file_test.py:128
../src/file_test.py:133

FILE.FR5

../src/repository.py:187

../src/file_test.py:138
../src/file_test.py:143

FILE.FR6

../src/repository.py:215

test_plan.sgm:238

FILE.FR7

deferred_frs:11

deferred_frs:11

FILE.FR8

../src/repository.py:104

../src/file_test.py:148
../src/file_test.py:153
../src/file_test.py:158

FILE.FR9

deferred_frs:9

deferred_frs:9

PROGRESSIVE-HELP.FR1

../src/composite_command.py:12
../src/composite_command.py:34

test_plan.sgm:587

PROGRESSIVE-HELP.FR2

../src/composite_command.py:17

test_plan.sgm:574

PROGRESSIVE-HELP.FR3

../src/composite_command.py:101

test_plan.sgm:593

PROGRESSIVE-HELP.FR4

deferred_frs:10

deferred_frs:10

PROGRESSIVE-HELP.FR5

../src/composite_command.py:39

test_plan.sgm:575

PROGRESSIVE-HELP.FR6

../src/composite_command.py:83

test_plan.sgm:576

PROGRESSIVE-HELP.FR7

../src/composite_command.py:48

test_plan.sgm:577

PROGRESSIVE-HELP.FR8

../src/composite_command.py:29

test_plan.sgm:587

QUERY.FR1

../src/query.py:291

test_plan.sgm:485

QUERY.FR10

../src/query.py:107

deprecated_frs:3

QUERY.FR2

../src/query.py:160

test_plan.sgm:485

QUERY.FR3

../src/query.py:274

test_plan.sgm:490

QUERY.FR4

deprecated_frs:1

deprecated_frs:1

QUERY.FR5

deprecated_frs:2

deprecated_frs:2

QUERY.FR6

../src/query.py:92

test_plan.sgm:495

QUERY.FR7

../src/query.py:93

test_plan.sgm:500

QUERY.FR8

../src/query.py:326

test_plan.sgm:485

QUERY.FR9

../src/query.py:106

test_plan.sgm:505

SUBMIT.FR1

../src/edit.py:26

test_plan.sgm:233

SUBMIT.FR10

../src/edit.py:114

test_plan.sgm:310

SUBMIT.FR11

../src/edit.py:123

test_plan.sgm:311

SUBMIT.FR12

../src/edit.py:91

test_plan.sgm:312

SUBMIT.FR13

../src/edit.py:116

test_plan.sgm:313

SUBMIT.FR14

../src/create_blank_issue.py:59

test_plan.sgm:314

SUBMIT.FR2

../src/utils.py:69

test_plan.sgm:234

SUBMIT.FR3

../src/submit.py:40

test_plan.sgm:235

SUBMIT.FR4

../src/submit.py:48

test_plan.sgm:236

SUBMIT.FR5

../src/submit.py:69

test_plan.sgm:260

SUBMIT.FR6

../src/submit.py:72

test_plan.sgm:249

SUBMIT.FR7

../src/submit.py:79

test_plan.sgm:268

SUBMIT.FR8

../src/utils.py:78

test_plan.sgm:237
test_plan.sgm:250
test_plan.sgm:269

SUBMIT.FR9

../src/edit.py:58

test_plan.sgm:309