一、基于度量的程序结构分析

  首先给出Complexity metrics中参数的含义:

  ev(G):基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于理解。因此,基本复杂度高意味着非结构化程度高,难以模块化和维护。

  Iv(G):模块设计复杂度是用来衡量模块判定结构,即模块和其他模块的调用关系。软件模块设计复杂度高意味模块耦合度高,这将导致模块难于隔离、维护和复用。模块设计复杂度是从模块流程图中移去那些不包含调用子模块的判定和循环结构后得出的圈复杂度,因此模块设计复杂度不能大于圈复杂度,通常是远小于圈复杂度。

  v(G):圈复杂度是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,经验表明,程序的可能错误和高的圈复杂度有着很大关系。

  第一次作业(包含幂函数的简单表达式求导)

  第一次作业对面向对象的了解很浅,故而将读入的字符串全部放到一个DifferPoly类里面处理,包括了判断合法性,提取系数和指数,求导,合并同类项,输出这一系列过程。

  

  由复杂度分析可以看出总体复杂度不高,其中output()和polylist()的模块设计复杂度高,说明耦合度高,在后面的作业中难以复用。

  

  第二次作业(包括三角函数的简单表达式求导)

  第二次作业分出了字符串类,单项式类和读入类,但是没有分三角函数类和多项式类,可以重构改进。

  由复杂度分析可以看出有几个方法的基本复杂度高,应该降低其复杂度,提高结构化程度。output() 方法对求导结果进行了化简输出,可以考虑化简和输出分开进行。

  第三次作业 (包含函数嵌套的复杂表达式求导)

  第三次作业是前两次的升级版,问题复杂,需要比较好的对类的设计。我的程序分为读入类、字符串类、项类、多项式类、单项式类和嵌套项类,其中多项式、单项式和嵌套项都从项类中继承而来,使结构更加清楚。

  递归求导的过程在对象与对象之间的转换过程中得以实现,让复杂问题简单化。缺点是每次求导直接返回结果字符串,没有很好的化简办法;判断合法性在字符串类中进行,应该在重构时考虑将判断这一过程同样交给其他类完成。

 

  由复杂度分析可以看出Wholestr类整体复杂度高,如上文所说,判断合法性全部在Wholestr类中进行,过于冗长,基本复杂度高,重构应重点修改。

二、程序bug分析

  在三次作业中,第二次在强测中被测出bug:输出时为了优化“1*x”,replace“1*”时只考虑了1前面不能为数字,没有考虑“1”前面是“^”的情况。其余两次作业没有在强测和互测中被发现bug。

  规避bug的策略:首先,TDD是非常重要的策略,在动手编程之前,应该认真阅读指导书,了解清楚要求,比如这三次作业的WRONG FORMAT问题,我在互测中发现很多同学出现bug都是因为对指导书中描述的什么是合法格式的输入不是很清楚,这也是很致命的问题;其次,在编程过程中,每写完一个部分都应该进行针对性的测试,这样可以有效避免bug累积,避免debug火葬场;最后,自己写完程序要自己进行测试,从格式问题到功能实现,各个方面检测,不要依赖测评机,自己测试的能力很重要。

三、发现别人bug采用的策略

  主要采用黑盒测试,分类构造比较容易出错的测试样例,如,对于格式问题,构造非法字符,空白字符出现错误,不符合要求的函数格式,正负号数量问题等测试样例,对于合法情况的功能测试也应该由简单到复杂开展测试。其中前两次比较重视格式错误情况,第三次主要注重求导功能的测试。当发现了他人的bug时应对产生bug的原因进行一定的判断,避免构造同质测试样例。

  在测试的时候写了比较简单的批处理脚本,批量产生运行结果,比较方便。 

四、总结

  第一单元主要认识了面向对象的基本思想,并解决了一类具体问题,但是过程中也不可避免地采用过以前面向过程编程的思路。应该多加练习,在实战中对面向对象程序设计加深理解。同时,优化方面的问题也值得继续探索。

  希望继续加油鸭!

转载于:https://www.cnblogs.com/peggyhss/p/10604734.html

OO_2019_第一单元总结——表达式求导相关推荐

  1. 【面向对象】第一单元总结——表达式求导

    基于度量的程序结构分析 第一次作业 类图 代码规模 代码度量 " ev(G)基本复杂度是用来衡量程序非结构化程度的,非结构成分降低了程序的质量,增加了代码的维护难度,使程序难于理解.因此,基 ...

  2. OO第一单元总结——多项式求导

    一.基于度量来分析自己的程序结构 1.第一次作业 UML类图 OO度量 这次作业我写了3个类,其中class Struct是Polynomial的内部类,这个类有2个属性:coe.index,分别代表 ...

  3. java求导数_OO_JAVA_表达式求导

    OO_JAVA_表达式求导_第一弹 ---------------------------------------------------表达式提取部分 词法分析 ​ 首先,每一个表达式内部都存在不可 ...

  4. oo第一次博客-三次表达式求导的总结与反思

    一.问题回顾与基本设计思路 三次作业依次是多项式表达式求导,多项式.三角函数混合求导,基于三角函数和多项式的嵌套表达式求导. 第一次作业想法很简单,根据指导书,我们可以发现表达式是由各个项与项之间的运 ...

  5. Mathematica对函数表达式求导并设置为新的自定义函数

    自定义函数 自定义函数需要注意亮点 1.最好使用 := 而非 = 2.定义时等式左端函数变量有下划线,被称为"空白" Wolfram 系统变换规则最强有力的方面或许是它们不仅能用于 ...

  6. BUAA_OO第一单元总结性博客作业——表达式求导

    一.程序设计思路 在我的三次作业中都采用了类的分层结构,采用逐项匹配,分层求导的思路. (一). 第一次作业中构建了Polynimial(多项式)类,在类的构造器中就完成了对非法空格的判断并对合法表达 ...

  7. java求导数_JAVA实现表达式求导运算的分析总结

    1第一次作业 1.1题目描述 对形如4*x+x^2+x的多项式求导. 1.2类图 1.3度量分析 在完成第一次作业时,我的写法没有特别的"面向对象".唯一封装起来的是Node,代表 ...

  8. 「BUAA OO Unit 1 HW4」第一单元总结 —— 递归下降思想处理表达式

    「BUAA OO Unit 1 HW4」第一单元总结 目录 Part0 前言 0.1 文章简介 0.2 阅读本文后将有的收获 0.3 阅读本文需要的前置知识 Part1 第一次作业 1.1 程序框架 ...

  9. 求表达式偏导(输出的是表达式)(Perl实现)

    这是学校perl课程结束时的大作业. 开始思考前,我上网搜寻了下,发现网上相应资料几乎没有,大多数都是求表达式某个点的导数值.而作业要求是求一个表达式的偏导式子,即输出也要是式子. 没办法,只能自己思 ...

最新文章

  1. 钱学森在30年前对虚拟现实和元宇宙的思考
  2. SQL获取所有数据库名、表名、储存过程以及参数列表
  3. (11.06)Java小知识
  4. react hooks_如何破坏React Hooks的基础
  5. mybatisplus高效批量更新_重磅!易赚更新超强功能,助力企业精准推送,提升转化率!...
  6. 实战中总结出来的CSS常见问题及解决办法
  7. Mysq 隔离级别操作
  8. NodeJs和ReactJs单元测试工具——Jest
  9. Exchange 2007 474 问题解决方法
  10. cxf 本地wsdl_CXF wsdl2java 详解及常见问题
  11. CRT 之LISENCE
  12. AVI格式视频文件编码格式缺少编码解释器且该项目的编码格式不受支持(0xc00d5212错误)
  13. 一个由“2020年1月7日 京东出现的重大 Bug 漏洞“引起的思考......
  14. 一些好用的链接(持续更新)——视频相关
  15. 中文分词与关键词提取概述
  16. dw网页设计与制作html,终于发现网页设计与制作问题
  17. div框阴影外发光效果
  18. couldnotfindartifactcom.orcale:ojdbc6:pom:11.2.0.1.0innexus-aliyun
  19. 刚开始做 飞鸽传书2007 很兴奋
  20. Cocos Creator 3.3中的NodePool(节点池)

热门文章

  1. 什么叫做形态学图像处理_图像形态学处理中的膨胀与腐蚀介绍
  2. vue 一个页面多个router-view如何配置子路由_浅谈vue前端开发架构
  3. iphone7p配置参数详情_华为mate40标准版参数配置-参数详情
  4. 若想学 HTML,应从何入手?
  5. 学会这6个强大的CSS选择器,将真正帮你写出干净的CSS代码!
  6. LeetCode 496. 下一个更大元素 I
  7. java ftp 损坏_java ftp上传时断网,文件损坏
  8. python创建实例属性_Python学习笔记__6.5章 实例属性和类属性
  9. mysql 导出所有表_Mysql导出(多张表)表结构及表数据 mysqldump用法
  10. 后端根据百度地图真实路径距离_百度地图开放平台介绍--路线规划