论证与测试,谁才是真正的不二法门

第十三次作业的时候,我们开始使用Junit对代码进行测试,主要是测试代码的覆盖率,以及分支的覆盖率。(主要是检查JSF写的是否是符合规范,……)。

这里我给出我测试的结果,可以看出测试的结果还不是很理想的,是因为在Override中,测试代码的覆盖率没有达到100%。

这是为什么呢?在我的测试运行之后,我的代码显示的是全部都允许了。问题是,在我们看来确实是每一步都执行了,但是实际上是这样吗?当然不是,否则我的覆盖率为什么回事99%,而不是100%呢?这说明有些部分代码看起来执行了,但是实际上并没有。那么测试代码给我带来了什么呢?对于我的代码来说,当我尽可能的考虑所有情况的时候,还是有一段代码没有执行,这是说明我那一段代码本身就是多余的。可能有设计上的问题,这种问题常会出现在这种情况下,那就是在之前我们以及限制了变量的范围,但是在接下来的代码中,还是习惯性的多写一个else,所以根本不可能出现的情况在else里面出现了,这就导致了代码的多余。

测试的功能远不止这些,对于程序来说,虽然用户是最好的测试,但是不可能将还没有完全完善的程序给用户拿去测试,所以大规模的自测是对程序的保证。那么论证又有什么用呢?

个人感觉其实没多大用,但是结合测试的时候我发现,只有测试的话,我们往往能过发现问题在哪?测试者怎样去发现问题呢?感觉这就与论证有关了,如果一个程序怎么都测不出来bug,那么问题可能有两种,一是程序本身就没有bug,但是也有可能是测试的不完备,导致没有发现bug。如何快速的读懂代码,然后发现问题,最后进行测试呢?论证文档不是写给自己看的,是写给别人看的。所以通过论证文档理解程序的框架,以及发现问题的所在是最快の方法。论证文档给出了编程者自己的思想以及每一个方法的实现,但是又与代码有多区别,代码难以直观的反应出程序的构架以及实现方法。

所以论证与测试都不是不二法门,只有将其结合起来才是王道。

调研OCL

这次真的是自己打脸了。我记得我再上一篇博客里面说到,我可能再也不会写JSF。然后就被报了10个左右的incomplete。所以对JSF简直反感到爆。但是最后一次作业,我还是老老实实的重写了我所有的JSF,≡(▔﹏▔)≡

这个脸打的我好痛啊,(;´д`)ゞ

然后我们来调研一下OCL语言吧,OCL语言是约束(Constraint)语言和查询(Query)语言。一个约束就是对一个(或部分)面向对象模型或者系统的一个或者一些值的限制。这一点与JSF类似,JSF中requires必须要有一定的限制才行。UML类图中的所有值都可以被约束,而表达这些约束的方法就是 OCL。在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。在JSF中就是对每个方法中的过程写表达式,然后每个OCL表达式都能指出系统中的一个值或者对象。因为 OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力,也就是说OCL也是一种查询语言。这一点是JSF所不具有的。

OCL的基础是数学中的集合论和谓词逻辑,并且它有一个形式化的数学语义,但是它并没有使用某种数学符号。因为虽然数学符号能够清晰的、无歧义的表达事物,但是只有极少的专家可以看懂。所以数学符号并不适合用于一个广泛应用的标准语言。自然语言是最易懂的,但是它是含混不清晰的。OCL取了自然语言和数学符号的折中方案,使用普通的ASCII字符来表达数学中同样的概念。如果你不喜欢当前的OCL表达方法,OCL规范还允许你定义自己的OCL符号集,这点是可以理解的,因为OCL有一个清晰的数学语义。这与JSF中的表述方法一致。

使用EA画uml

大家都在用什么工具化uml图呢?Staruml,eclipse? 给大家介绍一个工具,Enterprise Architect,是工程化的很好用的工具,给出破解版的链接,(大家要多多支持正版呀,( ఠൠఠ )ノ)。  https://pan.baidu.com/s/1eRElJcm#list/path=%2F

然后我们就用它来画图吧,至于怎么画图,网上教程很多的说:

使用EA自动生成类图:  https://blog.csdn.net/zhouyong0/article/details/8281192/

使用EA画类图: https://blog.csdn.net/cfeibiao/article/details/8545083

使用EA画序列图: https://blog.csdn.net/craftsman1970/article/details/70877530

使用EA画状态图:https://blog.csdn.net/craftsman1970/article/details/78276479

拿走不谢,(●ˇ∀ˇ●)。

然后看一下小编生成的类图吧。

然后是顺序图。看这里,d=====( ̄▽ ̄*)b

然后是状态图,嘿哈。

这门课程让我学到了什么

考完离散,没事的时候接了个活儿。内容就是设计一个简单的电梯,然后需要使用一种设计模式,在这种设计模式下设计该电梯构造的uml图。包括类图,状态图,时序图,还有用例图。一拿到题,没有使用过设计模式的我,花了两三个小时就随便画好了。结果可想而知,被退回来了,原因就是没有使用设计模式。然后在网上看了一些教程之后,使用设计模式中的状态模式完成任务。就简单说一下自己的理解吧。

如果没有这门课的学习,以及对电梯的深入编程,我连这个活儿都不敢接。然后是发现任务要比我们实现的电梯简单很多,那我就说一下设计模式吧。我们平时写的作业程序,并没有考虑到设计模式的问题,也就是说可以自由发挥设计方法。但是这只限于我们自己的程序,如果用于工程开发,用于多人之间合作,用于较大的工程的时候,如果每个人的设计方法不一样,最基础的构架不一样,那么就可能导致工程维护起来十分的困难。很多同学都会吐槽JSF,与方法论证,在使用设计模式之后,我才意识到JSF使用到设计模式的时候,可以让我们更好的理解以及设计程序。如果硬要说四个阶段,11次作业让我学到了什么,那就是写代码,debug,工程化设计,工程化测试。但是学的都很菜, ┭┮﹏┭┮

课程建议,建议下一届整一个大作业,两三周才能完成的那种,hhhhh,~~~///(^v^)\\\~~~

论证与测试 + 用EA画uml的更多相关文章

  1. 如何使用 Enterprise Architect 画 UML

    本文同时发布于http://fantasylion.github.io/tools/How-to-use-EA 重识 EA (Enterprise Architect) 公司使用的 OMS 是从外面买 ...

  2. 用rose画UML图(用例图,活动图)

    用rose画UML图(用例图,活动图) 首先,安装rose2003,电脑从win8升到win10以后,发现win10并不支持rose2003的安装,换了rose2007以后,发现也不可以. 解决途径: ...

  3. 四步轻松实现用Visio画UML类图

    本节和大家一起学习一下用Visio画UML类图的方法,主要有四个步骤,这里和大家分享一下,相信通过本节的学习,你对Visio画UML类图的步骤一定会有所了解. 用Visio画UML类图 对于画类图的工 ...

  4. 用Visio画UML顺序图

    1.顺序图 顺序图又称为时序图,顾名思义,它着重表现的是对象间消息传递的时间顺序.顺序图描述的对象也是一个用例,即一组行为操作,而它表现的是这组行为的先后关系(纵坐标),以及每个行为是属于哪个对象的( ...

  5. 在线画UML图的工具

    工作需要在线画各种UML图,类图.协作图.用例图等等,调查了一些在线画UML图的工具,有的做的很好但要收费,例如:http://www.gliffy.com/,发现现在免费好用的是ProcessOn: ...

  6. Visio画UML类图、序列图 for Java

    参考文档: 1.百度搜索: 怎样用Visio 2007画C++类图 连接 https://jingyan.baidu.com/article/9f7e7ec07286e16f281554f7.html ...

  7. VISO画UML用例图添加Include关系的方法

    VISO画UML用例图添加Include关系的方法 今天用Microsoft Visio 2007画用例图时,发现visio UML用例里面找不到include关系,查到一个可行的解决办法:  1)创 ...

  8. 在Emacs中使用plantuml画UML图

    在Emacs中使用plantuml画UML图 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #83 ...

  9. 如何画UML,几种简单的模型分析

    如何画UML 前言 UML 类 类的关系 1.依赖关系 2.继承关系 3.实现关系 4.关联关系 5.聚合关系 6.组合关系 总结 参考 如何画UML 前言 最近在学习设计模式,其中不免涉及到 UML ...

随机推荐

  1. iOS UI调试神器,插件injection for Xcode使用方法

    项目越来越大,代码编译时间越来越长,你是不是早已经厌倦了改一点点UI布局就要重新编译一次项目的过程,我们一分钟几百万上下的,怎能被编译浪费掉珍贵的时间.使用injectionforxcode这款插件, ...

  2. C# 深拷贝和浅拷贝

    在编码中.经常会遇到赋值操作.值类型就不说了.如果是引用类型赋值.其实是引用传递,即赋值的是一个引用.比如: Person p1 = new Person("张三", " ...

  3. SQLGetConnectAttr

    SQLGetConnectAttr 函数定义: SQLRETURN SQLGetConnectAttr( SQLHDBC     ConnectionHandle, SQLINTEGER     At ...

  4. sublime text3 增加代码片段(snipper)

    有时候编写代码时有些代码片段经常会用到,如果能将这些代码片段整理,再在需要的时候通过某些条件触发,那无疑是非常方便的! 创建方法:工具->插件开发->新建代码片段 默认产生的内容是: &l ...

  5. Yii Listview

  6. mysql的指令

    mysql有一下几方面的特性: 1:多语言支持 2:可以移植性好 3:免费开源 4:高效(支持多线程,充分利用cpu资源,运行速度非常) 5:支持大量数据查询和储存 6:操作简单易于学习 其实数据库就 ...

  7. 创建 .m2 文件夹

    首次使用 Maven 创建 .m2 文件夹 1. cmd2. mvn help:system

  8. redis的数据类型命令

    存储sortedset: 存储:zadd key score menber1 score menber2 ... 升序排列:zrange key start end [withscores] 降序排列 ...

  9. 转:【专题五】TCP编程

    前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来介绍下传输层协议——TCP协议,主要介绍下TCP协议的工作过程和基于TCP协议的一个简单的通信程序,下面就开始本专题的正文了. ...

  10. jenkins2

    创建工程 Eclipse创建工程:注意工程的路径,不是/home/svn,这个是svn的根目录. 是工程上传的路径,Apple直接下面有pom文件. 创建工程,创建一个任务就是创建一个工程. 需要注意 ...