[BUAA OO]第三次博客作业
OO第三次博客作业
1、 规格化设计的发展
我认为,规格化设计主要源自于软件设计的两次危机。第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼与熊掌不可兼得。故而,人们提出了结构化程序设计的编程思想,旨在使程序实现结构化设计的思想。这种设计思想旨在控制各个模块的程序复杂度,从而保证整体工程的正确性。
然而,由于硬件设备的快速迭代,对于软件的要求也越来越高。工程的日益庞大、面向过程程序的可扩展性差、可维护性有限,使得人们提出了面型对象程序编程的思想。而面向对象程序编程之中,模块的对接是必不可少的。为了使自己的程序不至于让他人无法阅读,也不至于让其本身显得过于臃肿。一个良好的规格化设计显然是必须的。
2、 JSF不规范写法
这几次作业我的运气可以说是比较不错,第九次作业JSF写的不是很认真,许多不太好描述的后置条件都是用自然语言写的(当时也不太清楚符合规范的写法是如何,在后面的上机课上看到老师写的才明白),但是互测的同学并没有申报。。。第十次作业在这方面有所改进,但是还是存在着modifies中由于对传进来的对象参数本身进行修改,故而我写的是modifies:该对象参数,被测试者申报书写不规范。在一番争论之后,我也明白了这种看似聪明的写法无疑是偷懒。也就服从了测试者的判断,根据规范修改了代码的规范。第十一次作业由于我的代码相比第十次的,没有大量的更改,而老的问题也已经修复,所以也没有被测试出不规范问题。
3、 JSF写法改进
1改进前:

1改进后:

2改进前

2改进后

3改进前

3改进后

4改进前

4改进后

4、 功能BUG与规格BUG的聚焦分析
我的功能bug与规格bug并无明显联系,我的规格bug主要是因为我第一次不太会写,第二次在有些地方写的不是很清楚导致的。而我的功能bug是由于我没有即使看群聊天和issue导致的(这点真让人很不开心,指导书里面对某一个程序功能并没有要求,而在微信群里面助教解答问题的时候居然要求了,真是让人无法适从),核心功能上三次作业并没有出现问题。
5、 设计规格和撰写规格的基本思路和体会
我认为一个好的规格,首先要求我们对于这段函数的功能设计上就要清晰。比如对于传进来参数合理性的判断,也就是前置条件,我们是应该统一放在调用函数之前,还是该函数体之内,这样细小的设计虽然不会影响我们程序的执行,但是对于一个良好的程序规范,统一的规格显然是必须的。其次,我们的规格要写的尽量清晰。就比如我第十次作业被测试者找出的bug就是一个很好的错误示范。对于对象参数的修改只写该对象的名字,并不能让人很明显的知道这个函数究竟对什么进行了修改。而上机课中老师们所写的规范就非常值得我们学习,我们甚至可以根据老师们所写的规范,反向写出、补全甚至修改不正确的代码,这就体现了规范在程序可维护性上的重要体现。
[BUAA OO]第三次博客作业的更多相关文章
- OO第三次博客作业——规格
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- OO第三次博客作业---透过代码看设计
不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...
- [BUAA OO]第四次博客作业
一. 测试与正确性论证的区别 在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作.这俩者在作业中的体现分别是junit单元测试以及jsf论述语言.这两者在java代码开 ...
- OO第三次博客作业
一.规格化的发展历史 最早的程序设计都是面向机器,从一开始使用的机器语言,到后面的汇编语言,都是面向机器的语言,编写困难也容易出错.随着需求的发展,程序的编写从面向机器走向面向过程,但由于goto语句 ...
- oo第三单元博客作业
JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 ...
- OO第三次博客作业(第三单元总结)
(1)梳理JML语言的理论基础.应用工具链情况 Java 建模语言(JML)将注释添加到 Java 代码中,这样我们就可以确定方法所执行的内容,而不必说明它们如何做到这一点.有了 JML,我们就可以描 ...
- OO第三次博客作业--第三单元总结
一.JML 语言的理论基础及应用工具链 JML 是一种行为接口规格语言,提供了对方法和类型的规格定义手段.通过 JML 和其支持工具,不仅可以基于规格自动构造测试用例,并整合了 SMT Solver ...
- OO第四次博客作业!
oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
随机推荐
- 【绝密】为什么现在的CAN收发器通信距离越来越短?
[绝密]为什么现在的CAN收发器通信距离越来越短? CAN收发器的改良和隔离器件引入,大大提高了通信的可靠性,但同时也引入了额外的延时,导致通信距离变短,或总线错误帧增加,本文以1Mbps波特率下 ...
- struts2框架 转载 精华帖
一.Struts2简介 参考<JavaEE 轻量级框架应用与开发—S2SH> Struts框架是流行广泛的一个MVC开源实现,而Struts2是Struts框架的新一代产品,是将Strut ...
- html5的拖拽事件
原生拖放 一.若要一个元素可以被拖放,首先要为元素添加draggable属性 true 可以被拖放 false 不可以被拖放 auto 除img或url以外都可以被拖放 其他值 都不可以被拖放 注释: ...
- MacOS在Finder中建立快速新建txt的workflow
Mac是不支持右键直接新建txt的,因此有时候需要用到文本文稿的时候会比较麻烦. 因此这里提供一种个人认为比较方便的方法,让Mac也能很简洁的新建txt文件. 工具介绍: Automator ...
- 文字属性和div容器盒的使用基础
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- delphi黑色背景模式
uses Vcl.Styles, vcl.Themes; procedure TForm1.FormCreate(Sender: TObject); begin TStyleManager.LoadF ...
- Json转Scala对象一个问题
今天与第三方对接一个接口,由于我们是用Scala语言,对方的返回体Json需要转换为一个对象,对象里面包含一个数组也可以说是集合,于是乎就用List接收,看似没问题,编译也没报错,自测调用的时候就报了 ...
- SVG动画总结
SVG可以在内部定义CSS动画样式,包括动画,如下面的格式: <svg> <defs> <style> </style> </defs>&l ...
- 使用promis串行化异步操作
该代码可在chrome下运行,对于低版本浏览器可以引入Q库 function async1() { var defer = Promise.defer() setTimeout(function(){ ...
- JavaWeb基础——JSON
一.JSON是什么? JSON(JavaScript Object Notation).轻量级数据交换格式. JSON的后缀名:.json JSON的MINE类型:application/json 二 ...