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]第三次博客作业的更多相关文章

  1. OO第三次博客作业——规格

    OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  2. OO第三次博客作业---透过代码看设计

    不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...

  3. [BUAA OO]第四次博客作业

      一.      测试与正确性论证的区别 在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作.这俩者在作业中的体现分别是junit单元测试以及jsf论述语言.这两者在java代码开 ...

  4. OO第三次博客作业

    一.规格化的发展历史 最早的程序设计都是面向机器,从一开始使用的机器语言,到后面的汇编语言,都是面向机器的语言,编写困难也容易出错.随着需求的发展,程序的编写从面向机器走向面向过程,但由于goto语句 ...

  5. oo第三单元博客作业

    JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 ...

  6. OO第三次博客作业(第三单元总结)

    (1)梳理JML语言的理论基础.应用工具链情况 Java 建模语言(JML)将注释添加到 Java 代码中,这样我们就可以确定方法所执行的内容,而不必说明它们如何做到这一点.有了 JML,我们就可以描 ...

  7. OO第三次博客作业--第三单元总结

    一.JML 语言的理论基础及应用工具链 JML 是一种行为接口规格语言,提供了对方法和类型的规格定义手段.通过 JML 和其支持工具,不仅可以基于规格自动构造测试用例,并整合了 SMT Solver ...

  8. OO第四次博客作业!

    oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...

  9. OO第4次博客作业

    OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...

随机推荐

  1. android创建目录和文件和安装其它apk

    一.android下创建目录 File sd=Environment.getExternalStorageDirectory(); String path=sd.getPath()+"/no ...

  2. php数组 组合排列 笛卡尔积

    function Descartes() { $t = func_get_args(); if (func_num_args() == 1) { return call_user_func_array ...

  3. 嵌入式C语言自我修养 02:Linux 内核驱动中的指定初始化

    2.1 什么是指定初始化 在标准 C 中,当我们定义并初始化一个数组时,常用方法如下: ] = {,,,,,,,,}; 按照这种固定的顺序,我们可以依次给 a[0] 和 a[8] 赋值.因为没有对 a ...

  4. HTTP性能测试工具wrk安装及使用

    wrk 是一个很简单的 http 性能测试工具,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于HTTP性能测试工具,但是比 ab 功能更加强大,并且可以支持l ...

  5. linux下使用shell脚本获取终端宽度

    获取终端大小时候的学习 学习日期:2018/11/3 问题来源: 在写shell脚本时想输出一行占满整个终端屏幕宽度的 横杠 发现for循环会导致执行缓慢 解决方法: 使用yes 命令 sed '50 ...

  6. 大数据入门第九天——MapReduce详解(五)mapJoin、GroupingComparator与更多MR实例

    一.数据倾斜分析——mapJoin 1.背景 接上一个day的Join算法,我们的解决join的方式是:在reduce端通过pid进行串接,这样的话: --order ,,P0001, ,,P0001 ...

  7. SpringMVC拓展——利用maven构建springMVC项目

    一.构建项目结构 首先需要构建一个符合目录结构的maven项目 file->new->maven project,勾选 create a simple project->next / ...

  8. JavaWeb基础—MySQL入门小结

    一.数据库概述 RDBMS:关系型数据库管理系统 == 管理员(manager)+仓库(database) 常见数据库:  Oracle(神喻):甲骨文 MySQL: 归于甲骨文旗下(高版本系统已经开 ...

  9. ARM汇编关键知识点总结(转)

    1.LDR R1, =COUNT 意思是将 COUNT 变量的地址放到 R1中LDR R1, COUNT 意思是将 COUNT 变量地址里面的内容赋给 R1 2. Load-Store 结构——这个应 ...

  10. REST API 开发

    本文我们将使用Spring MVC 4实现 CRUD Restful WebService , 通过RestTemplate写一个 REST 客户端,定义这些服务. 我们也可以通过外部的一些客户端来测 ...