软件形式化方法历史

  • 形式化方法的研究高潮始于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. Linux 编译命令参数

    基本格式:gcc [options] file1 file2... //若不加入参数,则按默认参数依次执行编译.汇编和链接操作,生成的可执行文件名为 a.out 常用参数:-E //只执行预处理操作 ...

  2. [USACO 2010 Open Silver 3.Time Travel]——链表

    Description 约翰得到了一台时光机,他可以用这台机器回到过去(但不能到未来),改变他家的牛群.约翰 打算依次进行 N 步操作,每步操作分为三种: • 买入操作以 a 表示,后接一个参数 i, ...

  3. vs2017 C4996 错误

    严重性    代码    说明    项目    文件    行    禁止显示状态错误    C4996    'strcpy': This function or variable may be ...

  4. [转]GDB

    gdb调试coredump文件 gcc -g main.c //在目标文件加入源代码的信息 gdb a.out (gdb) start //开始调试 (gdb) n //一条一条执行 (gdb) st ...

  5. Nginx反代至Tomcat基于memcached的session保持

    实现功能:基于前面tomcat基础简介与示例文章 (1) tomcat cluster将会话保存至memcached中:实现模型: 这里写图片描述 配置B,C主机安装openjdk与tomcat[本次 ...

  6. 【转】cJSON 源码分析

    cJSON源码分析 简介 由于C语言汇总,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json. JSON是一种轻量级的数据交换格式.JSON采用完全独立与语言的文本格式,易于人阅 ...

  7. HDU 1176 免费馅饼 (动态规划)

    HDU 1176 免费馅饼 (动态规划) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼 ...

  8. A1022. Digital Library

    A Digital Library contains millions of books, stored according to their titles, authors, key words o ...

  9. A1097. Deduplication on a Linked List

    Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated ...

  10. Quartz入门例子简介 从入门到菜鸟(一)

    转: Quartz入门例子简介 从入门到菜鸟(一) 2016年11月19日 22:58:24 爱种鱼的猫 阅读数:4039   刚接触quartz这个词并不是在学习过程中...而是WOW里面的界面插件 ...