软件形式化方法历史

  • 形式化方法的研究高潮始于20世纪60年代后期,针对当时所谓“软件危机”,人们提出种种解决方法,归纳起来有两类:一是采用工程方法来组织、管理软件的开发过程;二是深入探讨程 序和程序开发过程的规律,建立严密的理论,以其用来指导软件开发实践。前者导致“软件工程”的出现和发展,后者则推动了形式化方法的深入研究。经过30多 年的研究和应用,如今人们在形式化方法这一领域取得了大量、重要的成果,从早期最简单的形式化方法一阶谓词演算方法到现在的应用于不同领域、不同阶段的基于逻辑、状态机、网络、进程代数、代数等众多形式化方法。形式化方法的发展趋势逐渐融入软件开发过程的各个阶段,从需求分析、功能描述(规约)、(体系结构/算法)设计、编程、测试直至维护。

规格BUG分析

作业次数 规格bug 名称 雷同bug数量
9 4 Modifies不完整/Effects逻辑错误/不符合JSF规范/Requires逻辑错误 0
10 1 repOK逻辑错误 0
11 0 \ 0

规格BUG产生原因

  • 规格bug各自都有各自的看法,对于规格自己反正也不太理解,所以出现错误也不知道是真的有问题还是这样也行,水平不够,继续提高

不好写法及其改进

public LinkedList<Integer> getDis(int startNode , int endNode){
/**
* @REQUIRES:(\all int startNode; 0<=startNode<=6399);(\all int endNode; 0<=endNode<=6399);
* @MODIFIES:None;
* @EFFECTS:\result == map.Bfs(arrays,endNode);
*
*/
引用了中间变量
public LinkedList<Integer> getDis(int startNode , int endNode){
/**
* @REQUIRES:(\all int startNode; 0<=startNode<=6399);(\all int endNode; 0<=endNode<=6399);
* @MODIFIES:None;
* @EFFECTS:return the shortest distance nodes between startNode and endNode;
*
*/
public synchronized void Set(int startnode, int endnode , int value){
/**
* @REQUIRES:(\all int startnode; 0 <= startnode <= 6399);(\all int endnode; 0 <= endnode <= 6399);(\all int value; 0 <= value <= 6399);
* @MODIFIES:None;
* @THREAD_EFFECTS:lock(this);
* @EFFECTS:set flow of the road between startnode and endnode to value;
*
*/
int roads = startnode*6400 + endnode;
int roads_copy = endnode*6400 + startnode;
roadMap.put(roads,value);
roadMap.put(roads_copy,value);
}
Modifies不完整
public synchronized void Set(int startnode, int endnode , int value){
/**
* @REQUIRES:(\all int startnode; 0 <= startnode <= 6399);(\all int endnode; 0 <= endnode <= 6399);(\all int value; 0 <= value <= 100);
* @MODIFIES:roadMap;
* @THREAD_EFFECTS:\lock(this);
* @EFFECTS:set flow of the road between startnode and endnode to value;
*
*/
int roads = startnode*6400 + endnode;
int roads_copy = endnode*6400 + startnode;
long times = System.currentTimeMillis();
for(int i = 0 ; i < value ; i++){
roadMap.get(roads).add(times);
roadMap.get(roads_copy).add(times);
}
}
public void set(int state , int credit , int PosNode){
/**
* @REQUIRES:(\all int state; 0<=state<=4);(\all int PosNode; 0<=PosNode<=6399);
* @MODIFIES:this.credit;this.posNode;this.state;
* @EFFECTS:this.credit==credit;this.posNode==PosNode;this.state==state+1;
*
*/
this.credit = credit;
this.posNode = PosNode;
this.state = state + 1;
}
逻辑错误
public void set(int state , int credit , int PosNode){
/**
* @REQUIRES:(\all int state; 0<=state<4);(\all int PosNode; 0<=PosNode<=6399);
* @MODIFIES:this.credit;this.posNode;this.state;
* @EFFECTS:this.credit==credit;this.posNode==PosNode;this.state==state+1;
*
*/
this.credit = credit;
this.posNode = PosNode;
this.state = state + 1;
}

功能bug与规格bug在方法上的聚集关系

  • 个人感觉功能bug与规格bug可能并没有太大关系,测试者找bug之时,规格bug大部分不是因为功能bug导致的,而是后写规格容易遗漏规格的要点等内容,或者是写好规格之后修改了相应代码,总之感觉写规格更多考虑是怎么才不会被扣,感觉违背了教学初衷

基本思路与体会

  • 基本都是先写好全部方法然后再动手开始写规格,写之前自己也确实是按照一定思路进行写代码的,但是没有按照规格的方式写下来。水平不够,仍需继续努力

OO第三阶段总结的更多相关文章

  1. OO第三阶段纪实

    $0 写在前面 万里长征已过大半,即将迎来胜利的曙光.一路走来,经历过种种艰难,体会颇深.希望能记录下这篇博文,来总结这一个月来的收获与感悟. $1 规格化设计的发展历史 上世纪50年代,软件伴随着第 ...

  2. OO第三阶段作业总结

    调研:        最早的程序设计是直接采用机器语言来编写的,或者使用二进制码来表示机器能够识别和执行的指令和数据.机器语言的优点在于速度快,缺点在于写起来实在是太困难了,编程效率低,可读性差,并且 ...

  3. 2021S软件工程——结对项目第三阶段

    2021S软件工程--结对项目第三阶段 2021春季软件工程(罗杰 任健) 项目地址 1020 1169 1 实践反思 1.1 问题分析 两人习惯不一致 没有具体制定时间节点 写完代码才开始" ...

  4. OO前三次作业思考(第一次OO——Blog)

    OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...

  5. Bete冲刺第三阶段

    Bete冲刺第三阶段 今日工作: web: 检索了各类资料,今日暂时顺利解决了hibernate懒加载异常的问题,采用的凡是也比较简单就是添加了一个OpenSessionInViewFilter的过滤 ...

  6. [课程设计]Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)

    Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到 ...

  7. Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)

    Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到 ...

  8. 分布式事务 & 两阶段提交 & 三阶段提交

    可以参考这篇文章: http://blog.csdn.net/whycold/article/details/47702133 两阶段提交保证了分布式事务的原子性,这些子事务要么都做,要么都不做. 而 ...

  9. 第一阶段,第二阶段,第三阶段团队github更新项目地址

    第一阶段:https://github.com/yuhancheng/stage-1--last-sprint 第二阶段:https://github.com/yuhancheng/stage-2-- ...

随机推荐

  1. Lodop代码设置打印机等信息后 设置预览可重选

    Lodop打印控件默认在代码里指定了打印.纸张.纸张方向.份数等信息,在预览的界面的设置里是无法重新选择的,默认是禁止重选的,如果重选会提示,例如:“打印方向”已由程序控制,无法改变!“纸张大小”已由 ...

  2. codeforces445A

    DZY Loves Chessboard CodeForces - 445A DZY 喜欢棋盘,他很享受棋盘上的游戏. 他有一个 n 行和 m 列的棋盘.棋盘上的某些单元格是坏的位置,其他的是好的位置 ...

  3. BZOJ1163&BZOJ1339[Baltic2008]Mafia——最小割

    题目描述 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警 方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标 ...

  4. Js 百分比进度条

    [构想] CSS3 + JS CSS3控制进度 利用CSS3中的 @keyframes JS实现百分比 根据CSS来调整,时间 [页面代码] 第一种: 默认直接进入就是下载 CSS代码 body { ...

  5. Mvc 前台 匿名对象

    View无法使用 dynamic 报错: object 未包含....的属性 这里需要区别一下:如果dynamic只是简单模型,那么还是可以使用的.例如 dynamic v = new Expando ...

  6. 架构师成长之路6.4 DNS服务器搭建(部署主从DNS)

    点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署主从DNS)  部署主DNS : 点击 部署从DNS : 如下步骤 1.与主DNS一样,安装bind yum -y install ...

  7. emWin 之 WM_SetCallback 创建回调函数

    @2018-7-11 [小记] emWin 通过函数 WM_SetCallback ( )  自定义回调函数 > 下段代码就是通过 MESSAGEBOX 控件的 OK 按键实现删除信息框的对话框 ...

  8. JSP总结(二)—Cookie(汇总)

    注:后缀为汇总的基本上是整理一些网上的. 1.   什么是Cookie     Cookie是Web服务器保存在用户硬盘上的一段文本.Cookie允许一个Web站点在用户电脑上保存信息并且随后再取回它 ...

  9. csp20151203画图 解题报告和易错地方

    Solution: dfs 对于dfs: //遇到map[u][v]==c,则不用再搜    //因为通过(u,v)到达的其它点(p,q),    //之前从(u,v)开始肯定能到达(p,q),(p, ...

  10. java.lang.OutOfMemoryError及解决方案

    主要有3种比较常见的OutOfMemory Error: java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: ...