一.测试与正确性论证的效果差异

测试和正确性论证分别是从理论和实践两个角度去规范程序的正确性的,我认为其主要的区别在于对于程序透明度的需求上,

测试作为一种实践手段,他的实施的要求是比较低的:在完全了解程序的结构下可以进行针对性的覆盖测试,在对程序一无所知的时候依旧可以进行压力测试和黑盒测试,但同样的,作为实践手段的测试无法从逻辑上完全的自洽,哪怕是覆盖性的测试,在论述其测试覆盖性的时候其实也经过了很多正确性论证的过程。简而言之,测试能为任何程序都提供一定限度的保证,但这个保障几乎不可能是完备的。

正确性论证是从理论原理和逻辑上证明程序的正确性和可行性,他相较于测试而言需要获得程序自身的全部信息,只有从逻辑层面到设计层面都通透的人才能对程序写出一份有效的正确性论证。其二,正确性论证往往也需要被测试所辅助,因为正确性论证本身的论证过程和实际实现过程都是可能出现人为的受迫性失误的。如果说测试是对程序现象的直接客观反映,在进行正确性论证的过程中的主观部分是很难以摒除的。概而论之,完成一份完美的正确性论证需要的是程序设计规程中的所有资源和细节,而且完美本身就是不可能达到的,但一旦完成了一份正确性论证,程序的逻辑正确性就被完备的保障了,无论程序以后再做何调整,这个单元是不会受到影响的。

测试的优点:

1.种类多样,开始测试的必要条件很少

2.针对性强,可以验证程序对某一类型的输入的处理能力

3.需求指向,可以模拟操作的实践情景

缺点:

1.缺乏逻辑和理论上的可靠性

2.难以获得完备的保障

3.针对性和覆盖性依旧需要正确性论证的部分内容进行辅助

正确性论证的优点:

1.一旦正确,便是逻辑上完全可靠的

2.通过逻辑耦合可以确保完备性

3.可以对每个独立的论证单元进行程序间迁移,在条件不变的情况下正确性也不变

缺点:

1.需要对程序整体逻辑结构和设计结构的高度理解

2.论证过程中可能出现非受迫性失误,需要测试辅助

3.实践性差,某个单元的论证错误很可能导致程序所有样例的崩溃

二.OCL与JSF的异同

同:

二者都是形式化,声明,约束性语言,本质都是前置条件向后置条件的一个导向,对过程规格的关心程度有限。同时,二者都使用了数理化的逻辑,但是出于自然语言的转化困境,二者也都创立了一部分数理逻辑语言之外的,便于规范的新语法。

异:
OCL语言有JSF语言所没有的监控条件部分,使得作为一种约束语言的约束真值表达性更为强大,同时,OCL的语法结构相较于JSF更为复杂,这使得他更便于规格的书写,但难于对于规格的验证。

JSF语言比较于OCL语言多了Modifies域,更好的能够让书写者完成变量监控,同时JSF语言对布尔表达式的数理逻辑依赖性更强,这对书写者提升了抽象性的难度,但是在验证正确性和进行迁移的时候更为方便。

三、UML

UML类图

UML系统时序图

UML状态图

学期总结

阐述四个单元模块知识点之间的关系

四个单元是一个整体的学习流程,第一单元让我们熟悉面向对象的概念思想,第二单元完成线程协调,第三单元和第四单元则是测试和正确性论证,从整体的规划来说是先实践后理论,倒置了一个实际工程的实现流程让我们明白完成一个面向对象项目的四要素。

其实如果在默认同学们有一定的JAVA设计基础的话从第一单元就开始渗透一部分的规格思想会更好一些?毕竟补充规格的过程和设计规格的过程差异还是较大的,联系补充和调整可能并没能达到预期的教学目标

自己在设计、测试和质量上的进步

在这个学期的学习过程中,个人抽象问题的能力和面向对象设计类和方法的能力肯定是有所提升的,在最后几次对最初几次作业代码调整的过程中,都能够在保证正确性的前提下对代码进行大幅度优化。

这门课程是我第一次真正的接触单元测试,先前进行的都是黑盒和完全覆盖性测试比较多;Junit的功能不算强大,但是让我们初窥单元测试还是足够了。

着重考虑代码上的鲁棒性是这门课程给我最大的收获,现在在写代码之前,的确会比先前在代码的健壮性上考虑的全面更多。

对工程化开发的理解

一个规格,一个标准,工程化开发,流水化生产。易于分工,便与协作。高效,准确,可迁移。

对课程的任何期望或建议

课程两头松中间紧的情况太严重了,如果可能的话,能否从新平均分摊一下每一周的作业量和作业安排?

这届实施的错误分支树举措给予好评,的确真正有效的限制了乱报bug的情况,但是现在先挂满树再等人申诉坐地还钱的情况依旧是一本万利,希望课程组能够给被申诉的bug一个阈值,如果某一次作业测试者被申诉成功的bug点超过一定数目,要对测试者予以相应的惩罚。

最后,还是规格这里的教学方式问题,现在的课程安排的确很难让大家意识到他的重要性并去自发的好好学习,况且补充规格这件事的确对设计规格起到的帮助作用有限,是否可以从新考虑一下这里的作业和教学方式呢?哪怕是从规格设计起,用3次作业写一个新项目也是可以的啊

OO第十五次作业的更多相关文章

  1. 集美大学网络1413第十五次作业成绩(团队十) -- 项目复审与事后分析(Beta版本)

    题目 团队作业10--项目复审与事后分析(Beta版本) 团队作业10成绩 --团队作业10-1 Beta事后诸葛亮  团队/分值 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色 ...

  2. g第十四周,十五周作业

    1.数组中偶数的和 #include <stdio.h> int main(){ ; ]; ;i<=;i++) { scanf("%d ",&a[i]); ...

  3. OO第十二次作业

    规格设计的发展历史 随着计算机软硬件的发展,代码的复杂程度也在不短增加,随着计算机软件规模日渐庞大,结构化程序设计方法开始无法满足用户的需求,面向对象程序设计产生.面向对象程序设计是一场重大的革命,提 ...

  4. python第八十四天---十五周作业

    后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  5. 软工实践 - 第二十五次作业 Beta 冲刺(3/7)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10116979.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...

  6. 软工实践 - 第十五次作业 Alpha 冲刺 (6/10)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10004469.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...

  7. Java第十五周作业

    Cola公司的雇员分为以下若干类:(知识点:多态) [必做题]• 4.1 ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份.方法:getSalary(int mont ...

  8. C语言——第十四、十五周作业

    题目 题目一:交换最小值和最大值 1.实验代码 #include<stdio.h> int main() { ; int i , n; int a[N]; int x , y; scanf ...

  9. python第三十五天-----作业完成--学校选课系统

    选课系统:角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含, ...

随机推荐

  1. [Ynoi2019模拟赛]Yuno loves sqrt technology III

    题目大意: 给你一个长为n的序列a,m次询问,每次查询一个区间的众数的出现次数,强制在线. 解题思路: 出题人题解 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 首先得离散化. 分块后,预处理Fi, ...

  2. 10. Firewalls (防火墙 2个)

    Netfilter是在标准Linux内核中实现的强大的包过滤器. 用户空间iptables工具用于配置. 它现在支持数据包过滤(无状态或有状态),各种网络地址和端口转换(NAT / NAPT),以及用 ...

  3. django-微信小程序登录

    小程序登录逻辑前端通过调用wx.login()获取code, 将code和用户基本信息发送到后端,后端通过request.get向微信服务器发送get请求获取用户openid和session_key, ...

  4. iptables工作常用操作

    正确的设置iptables命令汇总 iptables -P INPUT ACCEPT iptables -F iptables -X iptables -Z iptables -I INPUT -p ...

  5. Kuberneteser二进制安装与配置(二)

    环境:Centos7 版本:Kubernetes v1.11.4   一.下载Kubernetes   1)下载 wget https://github.com/kubernetes/kubernet ...

  6. PHP swoole实现redis订阅和发布

    前戏:实现用户下单,服务器通知后台接收订单...类似美团外卖 1.首先要实现一个订阅程序 $result = $client->connect('127.0.0.1', 6379, functi ...

  7. maven向本地仓库导入jar包

    如果maven工程的依赖jar包在网上找不到,那么只能自己打包,然后传到本地仓库,可以使用如下命令 mvn install:install-file -DgroupId=com.redis.redis ...

  8. [转][SerialPort]测试用例

    private void Form1_Load(object sender, EventArgs e) { var s = SerialPort.GetPortNames().OrderBy(r =& ...

  9. 激活WINDOWS SERVER 2019

    Windows Server 2019 Datacenter WMDGN-G9PQG-XVVXX-R3X43-63DFGWindows Server 2019 Standard N69G4-B89J2 ...

  10. Butterknife--Android Butterknife使用方法总结(转)

    原文链接:http://blog.csdn.net/donkor_/article/details/77879630 前言: ButterKnife是一个专注于Android系统的View注入框架,以 ...