代码复审结果
发现的问题有如下几点:
- 在程序段前比较复杂的注释,或许用”/*”、”*/”比较好些,也节省开发者自己的时间,如:
AssemblyInfo.cs中的
// 有关程序集的常规信息通过以下
// 特性集控制更改这些特性值可修改
// 与程序集关联的信息
[assembly: AssemblyTitle("parserQA")]
[assembly: AssemblyDescription("")]
2. 有些较长的程序段没有相应注释,如:
PageAnalyze.cs中没有阐述以下这段循环的作用(个人认为循环都是蛮重要的,弄清意义更容易判断其初始状态和终止条件是否正确)
for (int j = 0; j < num; j++)
{
HtmlNodeCollection nodes6 = doc.DocumentNode.SelectNodes("/html/body/div[3]/div[2]/div[2]/div[2]/div[3]/div[2]/div[" + (j + 1) + "]/div[2]/div[1]");
……
answers.Add(tmp);
//break;
}
3. PageAnalyze.cs中的processQAPages函数,如果没理解错,好像success的初始值赋错了,代码如下:
{
bool success = false;
if (url.IndexOf("social.msdn.microsoft.com") != -1) // 这里表明是social msdn里面的内容
success = msdnsocial();
else if (url.IndexOf("q.cnblogs.com") != -1) // 表明是博问的网页
success = cnblogs();
else if (url.IndexOf("stackoverflow.com") != -1) // 表明是stackoverflow的网页
success = stackoverflow();
else if (url.IndexOf("zhidao.baidu.com") != -1) // 变明是百度知道的网页
success = baiduzhidao();
else
success = false; // 如果处理都不成功的话,返回false
return success; // 处理成功的话,返回true,用作后面数据库的判断
}
另外,提醒一下,以上程序注释中有部分错别字(“变明”),其它地方可能也会存在,感觉在软件发布前检查改正一下可能会比较好…
4. QAPair.cs中的:
public DateTime PostTime { get; set; }
public List<Answer> Answers { get; set; }
public List<Tag> Tags { get; set; }
是不是加个注释好些,感觉在类中的注释详细一些,对理解整个程序有很大帮助。
5. 一个.cs中的代码,注释风格不同:
bool success = false;
if (url.IndexOf("social.msdn.microsoft.com") != -1) // 这里表明是social msdn里面的内容
success = msdnsocial();
else if (url.IndexOf("q.cnblogs.com") != -1) // 表明是博问的网页
success = cnblogs();
else if (url.IndexOf("stackoverflow.com") != -1) // 表明是stackoverflow的网页
success = stackoverflow();
else if (url.IndexOf("zhidao.baidu.com") != -1) // 变明是百度知道的网页
success = baiduzhidao();
else
success = false; // 如果处理都不成功的话,返回false
return success; // 处理成功的话,返回true,用作后面数据库的判断
注释详细,到位。
else
{
for (int i = 0,j = 0; i < answerNums;j ++)
{
Answer tmp = new Answer();
temp = null;
string temp2 = null;
HtmlNodeCollection nodes8 = doc.DocumentNode.SelectNodes("/html[1]/body[1]/div[4]/div[2]/div[1]/div[2]/div[2]/div["+ (j + 2)+"]");
foreach (HtmlNode node in nodes8)
{
temp2 += node.InnerHtml.Trim();
}
if (temp2 == "" )
{
//i--;
continue;
}
HtmlNodeCollection nodes6 = doc.DocumentNode.SelectNodes("/html[1]/body[1]/div[4]/div[2]/div[1]/div[2]/div[2]/div[" + (j + 2) + "]/table[1]/tr[1]/td[2]/div[1]");
foreach (HtmlNode node in nodes6)
{
//Console.WriteLine(node.InnerText.Trim());
temp += node.InnerText.Trim();
}
tmp.Id = i;
tmp.Content = temp;
temp = null;
HtmlNodeCollection nodes7 = doc.DocumentNode.SelectNodes("/html[1]/body[1]/div[4]/div[2]/div[1]/div[2]/div[2]/div[" + (j + 2) + "]/table[1]/tr[1]/td[2]/table[1]");
foreach (HtmlNode node in nodes7)
{
temp += node.InnerHtml.Trim();
}
//Console.WriteLine(temp);
Match match = reg.Match(temp);
temp = temp.Substring(match.Index, 19);
//Console.WriteLine(temp);
tmp.PostDateTime = genDateTime(temp);
answers.Add(tmp);
i++;
}
好长一段,都没有注释,非常费解…
catch (Exception e)
{
return false;
}
if (answerNums == 0) // 一个问题的回答数量为0
return false;
同样是return false ,怎么待遇还不同呢...
从代码规范和可读性而言,整个程序,我觉得最好的一点是:没有以注释形式存在的废弃代码,很多人都有一个习惯,就是在修改程序的时候把过去的一段注释掉,以备参考,而这个程序中都没有,显得很干净。至于功能方面,没有测试成功。再细化的审查,鉴于对这个工程缺少了解,无法进行。