表6-1列出了软件实践教学敏捷重构效果的评价指标,分别从实践教学任务的软件质量、实施规范和团队协作等方面进行评价,这些指标既包括定量指标,如代码行数、问题跟踪设计数、实施交付时间、结对发现缺陷数量等指标,又包括定性指标,如代码移植性,注释编写规范性,变量、类、方法的命名规范性。
一、实践教学任务的软件质量评价指标
1.代码行数
代码行数体现了软件项目规模和代码冗余度。一般情况下,代码行数越多,意味着该软件项目规模越大,功能模块越多;而对于同一个软件项目,代码行数越多,意味着该软件项目代码冗余程度越高,代码耦合性越高,软件质量相对较低。因此,统计代码行数已经成为衡量软件质量最简单的方法之一。考虑到代码重构和设计框架等因素,代码行数这一指标不适宜单独用于衡量某个软件项目质量,而应当与其他指标综合衡量。
代码行数的统计应当去除代码中的空白行、单个括号行以及注释行(虽然软件实践教学模式用敏捷理论框架重构,应当遵循“注释行也是有效代码的一部分”的敏捷价值观,但作为精准统计软件项目功能模块代码量的指标,最好不要把注释行包括在内),以获得更加准确的统计信息。
软件实践教学任务最直接的交付成果就是软件项目代码,因此,将代码行数指标用于衡量实践教学的敏捷实施效果时,该指标可以借助代码行数统计工具进行,如Metrics工具。
2.问题跟踪设计数
问题跟踪是评价软件项目可测试性和可维护性的关键指标。在关键代码、调用与被调用代码、重要方法和接口等地方设置跟踪,一旦软件项目BUG需要定位与排查,那么调试工作将会比较容易开展。或是统计某个时间段、某些方法或某些模块数据,都可以充分利用问题跟踪尽快得到统计结果,以便问题被及早发现并妥善处理。问题跟踪设计还应当设置不同的BUG级别,可以分为低、中、高三个级别,也可以分为ERROR、WARNING、INFO、DEBUG和VERVOSE五个级别,通过过滤,可以筛选出某个或某几个级别的问题进行快速定位和分析。
敏捷实践教学强调结对编程和持续迭代教学子任务,为了快速、高效地排查可能出现的问题,在适当的代码位置设置问题跟踪显得尤为重要。一个高质量的软件项目,一定是可以通过设置的问题跟踪快速排查问题并最终节约交付时间,这也意味着在保证软件质量的前提下应尽可能降低软件开发成本。
3.代码测试覆盖率
代码测试覆盖率反映了测试用例对被测试软件的覆盖程度,是衡量软件项目测试工作进展情况的重要指标,也是评价软件质量的重要指标之一。根据覆盖对象不同,代码覆盖可以分为语句覆盖、判定覆盖、条件覆盖、路径覆盖以及循环覆盖,其中语句覆盖是最简单,也是最常用、最有效的覆盖率指标。
敏捷实践教学过程强调代码测试覆盖率指标。对教学任务实施团队而言,代码测试覆盖率是每个教学子任务迭代所必须完成的硬性质量标准之一,覆盖率高低因项目的不同而不同,75%,80%甚至100%都是有可能的。
4.代码圈复杂度
代码圈复杂度可以用来衡量一个模块判定结构的代码复杂程度,数量上表现为独立线性路径条数,也可理解为覆盖所有的可能情况使用的最少测试用例数。一般而言,代码圈复杂度越大,表明软件代码的判断逻辑越复杂,软件项目的可测试性和可维护性越差。
代码圈复杂度手动计算公式1:V(G)=E-N+2
计算公式2:V(G)=区域数=判定节点数+1
其中,V(G):圈复杂度,或用M,CC表示。
E:代表控制流图的路径数量。
N:代表节点数量。(www.xing528.com)
区域数:需修改控制流图,每一个结束点都增加一个到起始点的边,找出在控制流图中回路的个数。
判定节点数:控制流图中判定节点的个数,如if,case的个数。
代码圈复杂度检测可以借助自动化工具,如PMD,Checkstyle都可以检测到高复杂度的代码块。在敏捷实践教学任务的实施过程中,有选择性地借助代码圈复杂度检测插件,将高复杂度的代码进行适当拆分和优化,从而提高软件的整体质量。
二、实践教学任务的实施规范
1.注释编写的规范性
注释编写的规范性体现了良好的编码习惯,该评价指标隐含了两层意思,一是在软件项目的逻辑处理代码处应当加上注释,《代码大全》推荐的有效注释量为20%以上;二是注释的编写应当符合规范,坚决杜绝个性化注释的编写。注释通常在有处理逻辑或其他不易理解的位置编写,原则是有助于其他程序员对源代码的阅读和理解。注释编写的规范性,既要做到风格统一、要素齐全,又要做到言简意赅。
2.变量、类、方法命名的规范性
变量、类、方法命名的规范性,要求命名风格统一,“见其名知其义”,并严格按照编程语言所要求的规范或者约定俗成的规约实施,一是可以提高代码阅读和交流效率,二是可以避免因命名不一致导致返工的情况出现。
3.变量、类、方法名的设计长度
变量、类、方法名的设计长度也是教学任务实施规范不得不考虑的因素,既要使得变量、类、方法的命名“见其名知其义”,又要确保设计长度位于合理的长度区间,这需要一定的技巧,比如在满足命名规范性的前提下,采用缩略写法确保变量、类、方法名的长度不超限。
三、实践教学任务的团队协作
1.实施交付时间
实施交付时间是实践教学任务团队协作的重要评价指标之一。敏捷教学过程强调的“结对编程”有助于缩短软件项目交付时间,结对协作越紧密,意味着教学任务实施推进速度越快,实施效率越高。
2.结对实施时间占比
结对实施时间占比,是指结对实施时间在总的实施时间中所占的比重,体现了结对编程的协作程度。例如,在Android通讯录APP教学任务的实施过程中,总的实施时间为140人课,结对实施时间为70人课,那么结对实施时间占比为50%。实践教学任务的敏捷实施过程的理想状态是,结对协作实施应当占据整个实施过程的大部分时间。结合多年的实践教学经验来看,50%~70%的结对实施时间占比是相对较优的区间。
3.结对编码发现的缺陷数量
在结对编码过程中发现的缺陷数量,体现了团队协作的优势,是衡量团队协作水平的指标之一。结对编程和结对走查代码时,结对的各方一般都带有怀疑的态度。相较于单独实施而言,结对实施可以将更多的问题和缺陷挖掘出来以便修改和完善。一般而言,对于同样的软件项目,结对编码和审查要比单独编码和审查发现的缺陷更多,更有助于提升软件项目质量。
4.团队例会制度(立会、评审会议、总结会议等)
敏捷实践教学过程通常以例会的形式对将要做的任务、正在做的任务和已经完成的任务进行汇报、评审、总结和分享,每次例会都是思维火花迸发的绝佳时机。因此,团队例会制度也是评价团队协作的指标之一。有了这些例会制度,团队的总体技能和水平将会得到较大提升。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。