oo第三次博客作业

一、 规格发展历史

软件研究人员往往根据自己的研究对象和研究范围对软件规格说明做了相应的限定和要求。例如, 软件工程的传统观点假定软件需求规格说明在需求分析的基础上产生, 软件设计规格说明在软件设计的基础上产生。然而, 根据程序设计方法学的观点, 则干脆把对程序的要求统称为程序规格说明。
对软件所应满足的要求,以可验证的方式作出完全、精确陈述的文件。“规格说明”一词与其他工业产品的“规格说明书”有相似的含义。不过,在软件领域中,它已成为一个特定的技术用语。软件产品与使用环境之间的关系,软件产品内部各组成部分之间的接口往往十分复杂,并且在发展过程中软件产品要经历多次变换,以各种不同形式出现于不同的阶段。因此,对软件的各组成部分之间、各发展阶段之间的接口关系应当规定得十分准确。软件规格说明须用某种语言书写。自然语言的陈述中常存在歧义性,易引起误解。因而,最好使用人工语言或者人工语言与自然语言的混合形式书写软件的规格说明。这种语言就叫作规格说明语言。大型软件的规格说明往往十分冗长,因而希望这种语言易于用计算机处理,以便能用机器检查软件规格说明中有无遗漏或自相矛盾的地方。软件规格说明的内容可根据不同场合的需要而有所侧重。
在我看来,代码的规格确实非常有必要,我认为,一个人拿到别人的代码的时候,是不会仔细阅读代码的,所以,我们写出相应的规格,就可以帮助别人了解自己的代码,这就是方便了别人,我认为,这样是一种极为优秀的做法,并且,别人看代码尚且可能存在看不懂的情况,但是规格就不一样了啊,人人都可以看得懂,所以规格这种东西在计算机的发展历史上很有必要,我认为计算机软件的急速发展就是有了规格的出现,人们可以很方便的看懂别人的代码,所以就会有了很好的继承与发展。
世界上第一台电子数字式计算机于1946年2月15日在美国宾夕法尼亚大学正式投入运行,它的名称叫ENIAC(埃尼阿克),是电子数值积分计算机(The Electronic Numberical Intergrator and Computer)的缩写。它使用了17468个真空电子管,耗电174千瓦,占地170平方米,重达30吨,每秒钟可进行5000次加法运算。虽然它的功能还比不上今天最普通的一台微型计算机,但在当时它已是运算速度的绝对冠军,并且其运算的精确度和准确度也是史无前例的。以圆周率(π)的计算为例,中国的古代科学家祖冲之利用算筹,耗费15年心血,才把圆周率计算到小数点后7位数。一千多年后,英国人香克斯以毕生精力计算圆周率,才计算到小数点后707位。而使用ENIAC进行计算,仅用了40秒就达到了这个记录,还发现香克斯的计算中,第528位是错误的。 
ENIAC奠定了电子计算机的发展基础,开辟了一个计算机科学技术的新纪元。有人将其称为人类第三次产业革命开始的标志。 
ENIAC诞生后,数学家冯•诺依曼提出了重大的改进理论,主要有两点:其一是电子计算机应该以二进制为运算基础,其二是电子计算机应采用存储程序方式工作,并且进一步明确指出了整个计算机的结构应由五个部分组成:运算器、控制器、存储器、输入装置和输出装置。冯•诺依曼的这些理论的提出,解决了计算机的运算自动化的问题和速度配合问题,对后来计算机的发展起到了决定性的作用。直至今天,绝大部分的计算机还是采用冯•诺依曼方式工作。 
ENIAC诞生后短短的几十年间,计算机的发展突飞猛进。主要电子器件相继使用了真空电子管,晶体管,中、小规模集成电路和大规模、超大规模集成电路,引起计算机的几次更新换代。每一次更新换代都使计算机的体积和耗电量大大减小,功能大大增强,应用领域进一步拓宽。特别是体积小、价格低、功能强的微型计算机的出现,使得计算机迅速普及,进入了办公室和家庭,在办公室自动化和多媒体应用方面发挥了很大的作用。目前,计算机的应用已扩展到社会的各个领域。 

二、 bug统计

  规格BUG 功能BUG 是否有联系
第九次作业 3 0
第十次作业 0 0
第十一次作业 0 0

 

从上面这个表格可以看出来,我的三次作业都没有被报功能性BUG,我认为这村内在两方面原因:一是我写了作业,二是测试者没有测出来我的BUG,在第九次作业中,我被报告了3个规格BUG,在我看来,这三处BUG都是一摸一样的,因为这是我三个判断正则表达式的地方,都是由于前置条件写的有问题,当时我认为不需要条件就要写null,可是并不是,要写成空,所以被报告了三个BUG。

我认为被报告的BUG和代码行数并没有多大联系,这三处代码算上我习惯的空行应该也没有40行,有效代码更是少,但是就会被报告规格BUG,而其他地方写的很长的方法并没有被报告BUG。

所以,我认为我被报告BUG的原因主要是我没有仔细看好那份word,所以才会被报告规格BUG,这也是第一次写规格,所以会出现一些纰漏。

三、 规格举例

1、运用了自然语言

/** @REQUIRES: Req_list类的对象r
*@MODIFIES: this
*@EFFECTS: 给this里的变量赋值
*@THREAD_REQUIRES:
*@THREAD_EFFECTS:
*/

修改后:

/** @REQUIRES: r!=null
*@MODIFIES: this
*@EFFECTS: this!=null
*@THREAD_REQUIRES:
*@THREAD_EFFECTS:
*/

2、打出了null

/** @REQUIRES: null
*@MODIFIES: start_x, start_y, end_x, end_y
*@EFFECTS: 给上面的变量赋值
*@THREAD_REQUIRES:
*@THREAD_EFFECTS:
*/

修改后:

/** @REQUIRES: 
*@MODIFIES: start_x, start_y, end_x, end_y
*@EFFECTS: start_x=a1 && end_x=b1&&start_y=a2&&end_y=b2

 

*/

3、effect写的不清楚

/** *@REQUIRES: null
*@MODIFIES: null
*@EFFECTS: 返回value
*@THREAD_REQUIRES: Vocked(value)
*@THREAD_EFFECTS:
*/

修改后:

/** *@REQUIRES: 
*@MODIFIES: 
*@EFFECTS: \result==>value
*@THREAD_REQUIRES: \locked(value)
*@THREAD_EFFECTS:
*/

4、较为简单的都是用了自然语言

/** @REQUIRES: null
*@MODIFIES: null
*@EFFECTS: 返x1
*@THREAD_REQUIRES: \locked(x1)
*@THREAD_EFFECTS:
*/

修改后:

/** @REQUIRES:
*@MODIFIES: 
*@EFFECTS: \result==>x1
*@THREAD_REQUIRES: \locked(x1)
*@THREAD_EFFECTS:
*/

5、限定范围不明确

/** @REQUIRES: null
*@MODIFIES: value
*@EFFECTS: 修改value为x
*@THREAD_REQUIRES: \locked(value)
*@THREAD_EFFECTS:
*/

修改后:

/** @REQUIRES: x>=0 && x<=300
*@MODIFIES: value
*@EFFECTS:value==>x
*@THREAD_REQUIRES: \locked(value)
*@THREAD_EFFECTS:
*/

四、 聚焦关系

  功能bug 规格BUG
match 0 1
match_op 0 1
match_cl 0 1

可以看出,BUG基本都在规格方面,所以主要是由于没有看清楚word,所以才会出现BUG。

五、写规格的思路

要大量运用布尔表达式,才会逻辑清楚没有二义性。

详细写出前置条件。

六、心得体会

 代码和JSF还是要好好写,分数只是好好学习的附属品,我们不应该为了几分就抛却了重要的学习。开心的学习知识才是我们上大学的目的,不是吗?



 

 

 

posted @ 2018-05-28 15:14  K_ice  阅读(165)  评论(1编辑  收藏  举报