in traceabilitytool/csvreportwriter.cs [67:116]
public static void WriteMissingReqReport(string outputFolderPath)
{
StringBuilder sb = new StringBuilder();
int count = 0;
// Print table header.
sb.AppendLine("Requirement ID,Reason,Found in,Line Number");
// Find all requirements with invalid identfiers in code or tests.
foreach (string key in ReportGenerator.invalidRequirements.Keys)
{
foreach (InvalidReqDictEntry entry in ReportGenerator.invalidRequirements[key])
{
sb.AppendLine(key + "," + entry.reason + "," + entry.filePath + "," + entry.lineNum.ToString());
}
}
// Find all requirements not covered in code.
foreach (string key in ReportGenerator.missingCodeCoverage.Keys)
{
// Check if the requirement is also not covered in tests.
if (ReportGenerator.missingTestCoverage.ContainsKey(key))
{
sb.AppendLine(key + ",Not coded and not tested," + ReportGenerator.missingCodeCoverage[key]);
count++;
}
else
{
sb.AppendLine(key + ",Not coded," + ReportGenerator.missingCodeCoverage[key]);
}
}
// Find all the requirements not covered in tests.
foreach (string key in ReportGenerator.missingTestCoverage.Keys)
{
// Ignore the requirements that we already found missing in code.
if (!ReportGenerator.missingCodeCoverage.ContainsKey(key))
{
sb.AppendLine(key + ",Not tested," + ReportGenerator.missingTestCoverage[key]);
}
}
sb.AppendLine("Total invalid requirements found in code and tests," + ReportGenerator.invalidRequirements.Count.ToString());
sb.AppendLine("Total unimplemented requirements," + ReportGenerator.missingCodeCoverage.Count.ToString());
sb.AppendLine("Total untested requirements," + ReportGenerator.missingTestCoverage.Count.ToString());
sb.AppendLine("Total requirements missing both implementation and tests," + count.ToString());
// Output data to a CSV file.
ReportWriter.writeStringToFile(sb.ToString(), outputFolderPath + @"\missing_requirements.csv");
}