嘛。。不知不觉这门课程要结束了,那么就再说点啥以示庆祝呗。html
说到这个,相比不少人对此其实颇有疑惑,请让我慢慢分析。安全
首先咱们来看看两种方式各自的作法和流程是什么样的:多线程
在测试中,咱们是这样的一个流程
并发
此外,为了保证测试能覆盖到工程代码的每个区域,须要保证测试的覆盖率。框架
在证实中,咱们是这样的一个流程
性能
在这一过程当中单元测试
repOk
永真性证实依赖于JSF中的modifies
项effects
和requires
项基于以上的逻辑,咱们不难发现一个细节:学习
或者更具体地说,这里多出了一个名为假定的字眼。测试
这是什么缘由的?其实说来也很是简单——由于测试,只能证实程序有错,而不能证实程序是对的。ui
虽然有大数定律的理论支撑(即只要测试集数量无限大,则一定能够覆盖一切状况),但是实际上并不存在无限大的测试集,故测试上的死角总仍是会存在的。
设一个有限集 $ T $ ,为测试集(单元测试中的测试集不可能作到无穷),而 $ S $为全集。然而,在实际状况下,可能遇到的状况经常是无穷多的,故 $ S $ 是一个无穷集。
故,$ \complement^{S}{T} $ 即为测试集没有覆盖到的地方。又 $ T $ 有穷, $ S $ 无穷,故 $ T \subset S $ 恒成立,$ \complement^{S}{T} \neq \emptyset $
故永远有覆盖不到的数据,且对于这部分没法覆盖到的区域,是没法仅依靠测试来证实正确性的。
故基于测试的正确性验证的严谨性问题是不可避免的。若要严格意义上地论证正确性,基于程序逻辑的正确性证实是惟一的选择。
在上面的分析中,咱们论证了单元测试方法存在的硬伤。
然而,咱们为啥还要保留这样的方法呢?
由于,实际问题与应用大都不是一元线性的,而是时间、经济、人力等多方面成本以及多方面效益指标所构成的高维量。
其实,在工业界各种应用中,经常有如下两种模式能够长久而稳定的存在:
实际上,不只在计算机行业,在其余工业界乃至于商业中,也经常会造成这样两种模式并存的局面。
而反映在软件质量保证领域,则分别是基于程序设计逻辑的正确性证实(正确性从原理层面上就有绝对的保障,但是成本嘛,各位都写过一次论证,体验过其成本之高昂)和面向数据指望的单元测试(操做很是简便,方便大范围部署,且能覆盖绝大部分实际状况)。
因此,在实际应用中
说到底,这二者其实很难去严格区分一个优劣。不少问题,根本上仍是一句话——具体问题具体分析,适合的就是对的。
OCL,英文全称object constraint language
,翻译过来就是对象约束语言。
顾名思义,其做用在于对设计的对象进行约束,且保证不存在二义性。且实际上,OCL和UML(统一建模语言,Unified Modeling Language
)捆绑使用。
从以上的一些基本概述中,咱们不难发现OCL实际上和JSF有着类似之处:
然而进一步研究与分析,其区别也是很大的:
而至于具体应用呢,则仍是老规矩——适合的就是最好的。在不一样的工程项目,不一样的场合下,天然会有不一样的选择。
首先,咱们来回顾下咱们这学期四章的各个标题:
其实这很明显,是一个按部就班的过程,体如今两个不一样的层面上:
实际上,笔者在多年前,就已经接触并使用了面向对象程序设计语言。
因此,实际上在这个学期,笔者的主要收获以下:
关于工程化呢,其实说难也难,说简单也简单得很。
一些具体的好处呢,笔者在前三次博客做业中均有不一样程度的论述(此处再也不赘述):
不过说到底呢,其实就几件事:
关于这个问题,笔者在两三个月前,就已经开始思考了。
众所周知,面向对象课程的槽点仍是不算少的。
不过,据笔者看,这些问题看似庞杂,可是只要仔细去理一理背后的逻辑关系,其实也很简单。
笔者根据自身了解的一些事实,和大半个学期以来的观察与分析,粗略的获得了下面的这张逻辑图:
不过这样一来,看似错综复杂的事情也就清楚了。
稍加观察,即可以发现问题的根源——没有一个相对公平合理的横向比较机制。(稍微了解拓扑排序的概念,即可以得出这样的结论,找到节点的上游)
其实,不少同窗(包括16级的和之前的学长学姐们)以前所吐槽过的问题,根源都在这边。
假如,咱们有一个很靠谱的自动化横向比较机制
实际上,想作出改变,也并不难,好比:
Special Judge
和提交答案题里面的部分分机制相结合,让程序只要不违背基本法(例如电梯不许瞬移不许分身)就能有分数,且各个水准的程序得分有梯度。codeforces
那样的多对多大混战hack模式(也能够考虑待测程序不匿名,今后再也不有无效做业的坑),保证互测的运气成分降到最低。固然以上只是一些初步构想,笔者对于这个(自认为)靠谱的新制度,已经有了更深层次的计划和构想,更具体的计划等细节将在另外一篇文章中详细阐述。
笔者写到这里以前,看过以前很多同窗的一些思考与建tu议cao。
不得不说,虽然大部分的所谓分析彻底流于表面,透过现象看本质的几乎没有(截至2018.6.25 6点整),可是,你们反映的问题,也很真实,或者说很真实地描绘了大众水平同窗眼中的面向对象课程。
说这个,其实不是想吐槽各位(实际上,笔者更但愿你们能继续描述心里的真实体验)。
引用笔者以前说过不止一遍的一句话
无法带来丝毫改变,甚至只会让事情更坏的怒火,是毫无心义的。
因此呢,但愿接下来看到笔者文章的各位,能在吐槽的基础上和自身能力所及的状况下,进行更深刻的思考,能够的话也多想一想到底如何才能让事情变得更好,而不是一味地抱怨与泄私愤。
抱怨没有用,实干才能解决问题。