in traceabilitytool/csvreportwriter.cs [15:64]
public static void WriteTraceabilityReport(string outputFolderPath)
{
StringBuilder sb = new StringBuilder();
// Print table header.
sb.AppendLine("Requirement ID,,File Name,Line Number");
// Check every requiremend ID extracted from requirement documents.
foreach (string key in ReportGenerator.reqDocLookup.Keys)
{
// Print requirement ID and the path of the document defining it.
sb.AppendLine(key + ",Defined in," + ReportGenerator.reqDocLookup[key]);
// Print source code file paths
if (ReportGenerator.reqCodeMatrix.ContainsKey(key))
{
foreach (FilePathLineNum reqData in ReportGenerator.reqCodeMatrix[key])
{
sb.AppendLine(key + ",Coded in," + reqData.filePath + "," + reqData.lineNum.ToString());
}
}
else
{
sb.AppendLine(key + ",Not coded," + Path.GetFileName(ReportGenerator.reqDocLookup[key]));
}
// Print test code file paths
if (ReportGenerator.reqTestMatrix.ContainsKey(key))
{
foreach (FilePathLineNum reqData in ReportGenerator.reqTestMatrix[key])
{
sb.AppendLine(key + ",Tested in," + reqData.filePath + "," + reqData.lineNum.ToString());
}
}
else
{
sb.AppendLine(key + ",Not tested," + Path.GetFileName(ReportGenerator.reqDocLookup[key]));
}
}
// Print totals
sb.AppendLine("Total unique requirements," + ReportGenerator.reqDocLookup.Count.ToString());
sb.AppendLine("Total implemented requirements," + ReportGenerator.reqCodeMatrix.Count.ToString());
sb.AppendLine("Total tested requirements," + ReportGenerator.reqTestMatrix.Count.ToString());
sb.AppendLine("Total unimplemented requirements," + ReportGenerator.missingCodeCoverage.Count.ToString());
sb.AppendLine("Total untested requirements," + ReportGenerator.missingTestCoverage.Count.ToString());
// Output data to a CSV file.
ReportWriter.writeStringToFile(sb.ToString(), outputFolderPath + @"\traceability_matrix.csv");
}