软件形式化方法历史

  • 形式化方法的研究高潮始于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. 两个序列求前k大和

    ---恢复内容开始--- 没有题目,没有题意,这是学长提过的一个技巧,给你两个排好序的序列,每次可以各从中取一个,求前k大的和, 一个优先队列,先将a序列中最大的那个和b序列所有元素相加存进队列中,每 ...

  2. git上传到码云

    touch README.md git init git add README.md git add "你的文件" git commit -m "first commit ...

  3. 自学Aruba6.1-基本网络参数配置(web页面配置)

    点击返回:自学Aruba之路 自学Aruba6.1-基本网络参数配置(web页面配置) 1 配置VLAN 1.1  新建VLAN Configuration---VLANs中,VLANID选项卡下的A ...

  4. 有标号的DAG计数(FFT)

    有标号的DAG计数系列 有标号的DAG计数I 题意 给定一正整数\(n\),对\(n\)个点有标号的有向无环图(可以不连通)进行计数,输出答案\(mod \ 10007\)的结果.\(n\le 500 ...

  5. Linux 系统缓存机制学习

    前言:本文为参考他人的文章,是一篇学习记录型博客.理解linux的系统缓存机制有助于理解elasticsearch实时更新的原理. 一.缓存机制 为了提高文件系统性能,内核利用一部分物理内存分配出缓冲 ...

  6. 基于SpringMVC的文件(增删改查)上传、下载、更新、删除

    一.项目背景 摘要:最近一直在忙着项目的事,3个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...

  7. Luogu 1084 NOIP2012 疫情控制 (二分,贪心,倍增)

    Luogu 1084 NOIP2012 疫情控制 (二分,贪心,倍增) Description H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树, 1 号城市是首都, 也是 ...

  8. A1012. The Best Rank

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  9. A1083. List Grades

    Given a list of N student records with name, ID and grade. You are supposed to sort the records with ...

  10. A1101. Quick Sort

    There is a classical process named partition in the famous quick sort algorithm. In this process we ...