南京大学-软件工程-18-代码设计..ppt

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JUnit测试代码 * 为类开发测试用例 在复杂类中,常常有着多变的状态,每次一个方法的执行改变了类状态时,都会给其他方法带来影响,也就是说复杂类的多个方法间是互相依赖的。 所以,除了测试类的每一个方法之外,还要测试类不同方法之间的互相影响情况。 * Sales类的状态图 * 测试用例线索 输入 预期输出状态 方法 当前状态 addMember Start Member Member 非法 LineItem 非法 Payment 非法 End 非法 addSalesLineItem Start LineItem Member LineItem LineItem LineItem Payment LineItem End 非法 [=1 Item] delSalesLineItem …… …… total …… …… getChange …… …… endSale …… …… * 测试用例 ID 输入 预期输出 前置语句 方法 ? 1 s=new Sales(); s.addMember(2); No Exception 2 s=new Sales(); s.addMember(1); MemberLable Invalid Time 3 s=new Sales(); s.addSalesLineItem(1); 4 s=new Sales(); s.addSalesLineItem(1); s.total(); 5 s=new Sales(); s.addSalesLineItem(1); s.total(); s.getChange(100); s.endSale(); Sales dose not Exists …… * 主要内容 设计易读的代码 设计易维护的代码 设计可靠的代码 使用模型辅助设计复杂代码 为代码开发单元测试用例 代码复杂度度量 * 18.6 代码复杂度度量 程序复杂度是造成各种编程困难的主要原因。[Dijkstra1972]很早就指出:“有能力的程序员会充分认识到自己的大脑容量是多么地有限;所以,他会非常谦卑的处理编程任务。” 为了帮助程序员处理程序复杂度,人们提出了很多程序复杂度的度量手段,其中McCabe的圈复杂度[McCabe1976]得到了比较大的关注。 * 圈复杂度 建立程序的流程图G,假设图的节点数为N,边数为E,那么复杂度V(G)=E-N+2。 * 圈复杂度 还有一种简单的算法是直接计数程序中决策点的数量: (1) 从1开始,一直往下通过程序。 (2) 一旦遇到下列关键字,或者同类的词,就加1:if, while, repeat, for。 (3) 给case语句中的每一种情况都加1。 [McConnell2004]认为: 0-5 ?子程序可能还不错; 6-10?得想办法简化子程序了; 10+? 把子程序的某一个部分拆分成另一个子程序并调用它。 * 类的复杂度 [Chidamber1994]基于所拥有方法的代码复杂度定义了类的复杂度: 类的加权方法= Sum(Ci) i = from 1 to n 其中,n为一个类的方法数量,Ci是第i个方法的代码复杂度。 * 总结 高质量的程序代码需要进行仔细设计 易读 易维护 可靠 可以使用技术模型手段帮助进行代码设计 要使用单元测试验证已完成的代码 代码复杂度在一定程度上可以客观反映代码质量 要避免常见的代码错误 * 主要内容 设计易读的代码 设计易维护的代码 设计可靠的代码 使用模型辅助设计复杂代码 为代码开发单元测试用例 代码复杂度度量 * 18.2 设计易维护的代码 1 小型任务 要让程序代码可修改,就要控制代码的复杂度。这首先要求每个函数或方法的代码应该是内聚的,恰好完成一个功能与目标。 如果内聚的代码本身比较简单,复杂性可控,那么它就具有比较好的可维护性。反之,内聚的代码也可以比较复杂,典型表现是完成一个功能需要多个步骤、代码比较长,那么就需要将其进一步分解为多个高内聚、低耦合的小型任务。 封装该任务 * How To Write Unmaintainable Code 5. In the interests of efficiency, avoid encapsulation. Callers of a method need all the external clues they can get to remind them how the method works inside. 6. If, for example, you were writing an airline reservation system, make sure there are at least 25 places in the code that need

文档评论(0)

586334000 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档