金山卫士源码达不到工业标准.docVIP

  • 4
  • 0
  • 约11.12万字
  • 约 25页
  • 2016-12-08 发布于河南
  • 举报
金山卫士源码达不到工业标准

金山卫士源代码达不到工业标准 金山卫士开源代码显然达不到工业级的标准 - 秋窗会 - Autumn Window Net [A.W.N]分享到... 当前位置:新闻 → 业界动态 → 新闻内容 金山卫士开源代码显然达不到工业级的标准 金山卫士开源代码显然达不到工业级的标准更新时间:2010-12-21 12:51:21 作者:佚名 来源:本站整理 这几天忙着看有关C的书籍,无意中看见某牛人写的对金山开源代码的批评,汗,大家一起看看吧, -------------------------------------------------------------------------------------------------------------------------------------------------------- 金山卫士开源了,参见金山卫士开源计划。 抱着学习研究的目的下了一份看看。看了一些代码,觉得被忽悠了。中国知名通用软件厂商,民族软件业的一面旗帜就这代码水平?代码显然达不到工业级的标准,只能算是实习生练手的水准。为了给有意拿这份代码当学习资料的初学者提个醒,不被误导,做出了一个艰难的决定,写博文来评论金山安全卫士的代码。 先说说代码中的几个突出问题 C++的应用不过关。该用const和static的时候不用 代码封装做的不好,调用者知道被调用者很多细节,且对被调用者做了过多假设。 文件和函数命名不规划。不能表达内容,且容易引起误解 测试靠打印而不是assert,很难自动化验证。且测试代码未与工程代码分离。 太多的if-else而不会用表驱动 函数逻辑不严格,有明显漏洞。 一点一点的看 1 C++的应用不过关。该用const和static的时候不用 ppro\PrivacyProtection\rule\IRule.h class IRule { public: // MichaelPeng: Name函数可以设置为const virtual LPCTSTR Name(void) = 0; virtual void Enable(BOOL bEnable){} // MichaelPeng: Match从语义上也应为const,且参数pData也应为const virtual BOOL Match(KAccessData* pData) = 0; // MichaelPeng: DbgPrint从语义上也应为const virtual void DbgPrint(void) = 0; }; 2 代码封装做的不好,调用者知道被调用者很多细节,且对被调用者做了过多假设。 ppro\PrivacyProtection\rule\KDirRelateRule.cpp BOOL KDirRelateRule::Match(KAccessData* pData) { BOOL bRetCode = FALSE; std::mapCString, std::vectorCString::iterator iter; for (iter = m_mapDirRelates.begin(); iter != m_mapDirRelates.end(); iter++) { const CString strDir = iter-first; // MicahelPeng: 在向m_mapDirRelated中插入数据时都调用MakeLower转化成了小写,但在比较时却不转化,假定调用者作了转化?? if (strDir.GetLength() = pData-nFileDirLen memcmp((LPCTSTR)strDir, pData-szFilePath, strDir.GetLength() * sizeof(TCHAR)) == 0) { std::vectorCString::iterator iterRelate; std::vectorCString vecStr = iter-second; for (iterRelate = vecStr.begin(); iterRelate != vecStr.end(); ++iterRelate) { int nMemSize = pData-nProcPathLen * sizeof(TCHAR);

文档评论(0)

1亿VIP精品文档

相关文档