代码评审三步走

发表于:2012-7-23 10:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:夏江平    来源:tester

  序言

  在工作中参加过不同产品的多次代码检视活动,但在过程中观察到的一些现象引起了我的注意:不管是被检视者还是检视者,似乎都没有什么思路,只是对着代码发呆。即便能够发现一些问题,多数也是影响甚微的小问题。少数专家虽然能够发现有价值的问题,但也是凭经验+直觉。要问他们怎么做才能发现这些问题,却又没有答案。

  为什么会有这样的现象呢?这种情况有没有办法加以改善呢?

  我个人感觉,这是缺乏“套路”所致。研发活动,无论是架构设计,还是代码编写,或者测试活动,都有各自的方法或“套路”。这些“套路”能够指导相关人员有序地开展活动,并保证活动的有效性。那么代码检视是不是也应该有这样的“套路”可循呢?

  经过一段时间的反复思考,我将自己的一些想法整理成此文,希望能够对代码检视活动提供一些帮助。

  正文

  下面将结合示例代码进行代码检视三步走的实战演示。

bool EnemyChecker::isValidMonster(
NPCManagement::HordeIdType hrdId,
const NPCManagement::MonsterInfoSeq& mnsInfos,
NPCManagement::MonsterInfoSeq& vmnsInfos,
NPCManagement::FailedMonsterInfoSeq& ivmnsInfos)
{
bool bRet = true;
ivmnsInfos.length(mnsInfos.length());
vmnsInfos.length(mnsInfos.length());
unsigned int iip = 0; // index of invalid horde
unsigned int ivp = 0; // index of valid horde
//检查怪物是否属于部落群
for (CORBA::ULong i = 0; i < mnsInfos.length(); ++i)
{
const NPCManagement::MonsterStatusInfoSeq& mnsStatusSeq
= mnsInfos[i].monsterInfos;
for (CORBA::ULong i = 0; i < mnsInfos.length(); ++i)
{
const NPCManagement::MonsterStatusInfoSeq& mnsStatusSeq
= mnsInfos[i].monsterInfos;
IntSet monsterIds;
for (CORBA::ULong j = 0; j < mnsStatusSeq.length(); ++j)
{
monsterIds.insert((int)mnsStatusSeq[j].monsterId);
}
if (monsterIds.empty())
{
vmnsInfos[ivp].horde = mnsInfos[i].horde;
vmnsInfos[ivp].monsterInfos.length(0);
++ivp;
continue;
}

std::map<int, short> mnsTypes;
NPCManagement::MonsterLoader::getMonsterType(hrdId, -1, monsterIds, mnsTypes);

MonsterVec invalidMnsIds;
getInvalidMnsIds(mnsStatusSeq, mnsTypes, invalidMnsIds);
//存在部落群和怪物不一致或者怪物类型错误的情况
if ((monsterIds.size() != mnsTypes.size())
|| !invalidMnsIds.empty())
{
if (mnsTypes.empty())//一个有效怪物都没有时,记录无效怪物
{
ivmnsInfos[iip].horde = mnsInfos[i].horde;
ivmnsInfos[iip].monsters.length(mnsStatusSeq.length());
for (CORBA::ULong pos = 0; pos < mnsStatusSeq.length(); pos++)
{
ivmnsInfos[iip].monsters[pos].monsterId = mnsStatusSeq[pos].monsterId;
ivmnsInfos[iip].monsters[pos].monsterName
= mnsStatusSeq[pos].monsterName;
ivmnsInfos[iip].monsters[pos].reason =
NPC_STR2WSTR(WORLD::Message(getCvt(), "import_invalid_monster"));
}
iip++;
}

61/6123456>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号