$0 写在前面


善始善终,临近期末,为一学期的收获和努力画一个圆满的句号。


$1 测试与正确性论证的比较



$1-0 什么是测试?


测试是使用人工操作或者程序自动运行的方式来检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。

它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。

Glenford J.Myers曾对测试的目的提出过以下观点:

(1)测试是为了发现程序中的错误而执行程序的过程。

(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。

(3)成功的测试是发现了至今为止尚未发现的错误的测试。

(4)测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进。

(5)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性。

(6)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。

(7)另外,根据测试目的的不同,还有回归测试、压力测试、性能测试等,分别为了检验修改或优化过程是否引发新的问题、软件所能达到处理能力和是否达到预期的处理能力等。

测试目标包括以下几点

(1) 发现一些可以通过测试避免的开发风险。

(2) 实施测试来降低所发现的风险。

(3) 确定测试何时可以结束。

(4) 在开发项目的过程中将测试看作是一个标准项目。


$1-1 什么是正确性论证?


程序正确性论证是程序设计理论的一个重要组成部分,研究如何使用程序设计语言编制程序,以正确实现预定的目标。

程序正确性论证提出编制正确程序的两种途径一种称为程序验证,研究如何使用数学推理来严格论证程序是否符合其目标。

另一种称为程序综合,研究如何由给定目标出发,逐步构造一个在计算机系统上可运行的程序,而且要求构造过程的每一步都是严格保持正确无误的。

在保证正确性的前提下,为提高程序运算效率而实现的程序之间的转换,称为程序变形,也是程序正确性论证的一个重要内容。

程序综合和程序变形是自动程序设计的理论基础。


$1-2 测试与正确性论证的效果差异


测试是使用测试样例对程序进行检测而正确性论证则是根据代码的逻辑进行验证。

测试想要完全覆盖的难度较大,需要大量的样例才能达到近似的完全覆盖,而正确性论证则不需要花费那么大的精力,只需要根据代码的逻辑和规格进行一系列验证即可。

二者相互补充,相辅相成。正确性论证可能由于一开始设计的错误导致程序运行的错误,而测试则难以覆盖全面,二者相互补充之后便可以对程序进行充分的测试。

总体而言,二者都是用于工程化测试的好方法,但是面向对象本身就是一种极为具体化的简单设计思路,大多数情况使用单元测试就能很好的应对测试需求。


$2 OCL语言调研



$2-0 关于OCL


对象约束语言是一种用于施加在指定的模型元素上约束的语言。

对象约束语言简称OCL(Object Constraint Language)。

对象约束语言(Object Constraint Language, OCL)作为图形符号的补充,说明建模元素的有关细节,例如:约束,前置条件,后置条件等。

OCL(object constraint language) 对象约束语言。用来进行约束定义的,形式化的无二义的语言。

OCL语言有如下特征

(1) 声明性语言,不会改变模型中的内容。

(2) 形式化语言语言。

(3) 无二义规范语言。

(4) 类型性语言,每一个表达式都有类型;

(5) 易学好用。


$2-1 OCL与JSF的异同


与JSF相比的相似点:二者都是形式语言,声明式的语言,都没有二义性,都有前置条件和后置条件以及不变式;

与JSF相比的不同点:OCL每个表达式都是具有类型的,且具有许多的基本数据类型等,不像JSF一样完全使用逻辑表达式。


$3 关于第14次作业的单电梯系统


根据第十四次作业的单电梯系统,针对调度器、电梯、请求队列和请求,整理出如下的UML类图以及时序图,采用图(graph)来演示成如下模型:


$3-0 类图


【图1】 单电梯系统的类图

类图中表示了不同类之间的继承依赖关系,在各个类中呈现了类全部的属性和方法。


$3-1 时序图


【图2】时序图

该时序图呈现了程序的执行过程,以及状态转换逻辑。


$4 学期小结



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


 (1) 单元一主要介绍了JAVA面向对象语言的思想等,主要注重对语言基础知识的训练以及对面向对象思想的初步了解;

 (2) 单元二开始变涉及多线程的编程训练,介绍了多线程的机制、冲突,对面向对象的继承、封装、多态的特征也有了更进一步的深入介绍;

 (3) 单元三开始进行规格化设计,通过JSF语言的书写来实现程序的规格化设计;

 (4) 单元四则是队代码的验证与测试,编写JUnit测试单元对程序开展自动化测试、编写正确性论证文档对程序类和方法实现的正确性进行论证等。

 这四个单元循序渐进,相辅相成,一步步引导我们逐步深入的对面向对象的编程思想进行了解。


$4-1 梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步


本学期我一共实现了两个独立作业和两个系列作业。

最开始的多项式处理作业,让我对JAVA语言的基本运用有了初步的了解;

到后来电梯、出租车系列作业让我接触到了面向对象编程思想以及多线程编程的模式;

编写单元测试JUnit,让我掌握了自动化测试方法;

从头至尾认真梳理下来,当我再次打开前几次的代码作业的时候,

令我欣慰的是,我能够从中看到自己的进步:

(1) 编码风格的进步:变量名、方法名的命名规范;方法的代码行数明显缩短;类的功能层次明显。

(2) 符合规格规范:通过对JSF的编写,能够按照规格,来编写符合规格约束的方法代码。

(3) 对SOLID设计原则的更深刻体会:代码不再是“灵机一动”的产物,而是经过思考和设计所编写的、符合设计原则的代码。


$4-2 阐述自己对工程化开发的理解


工程化开发和作业由着本质的不同。作业更注重的是结果的正确性,而工程化开发则要求设计人员有着良好的代码素养,和工程化开发规范。

“工程”和“过程”的不同,工程化开发要求将系统化的、规范的、可度量的方法应用于程序的开发、运行和维护的过程,即将工程化应用于软件过程。

工程着重应用,工程项目一定是软件过程的一个“产出”,一个个性化的实例!换句话来讲,工程也是由过程组成的。

工程化开发遵从一定的规格设计进行程序的开发,十分有利于于团队协作,提高工作效率和降低成本。

良好的工程化,能降低沟通成本,实现更好的协同,节省开发和测试人员的重复劳动,降低发布的常见问题的复现率等等。


$4-3 对课程的任何期望或建议


衷心的希望课程越办越好,让更多的人从中受益。

OO期末总结的更多相关文章

  1. OO课程学期末总结

    OO课程学期末总结 测试VS正确性论证 OCL vs JSF 对象约束语言(Object Constraint Language), 简称OCL, 是一种指示用户建模系统中的限制方式. 他是UML可选 ...

  2. OO第四单元总结暨期末总结

    OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...

  3. OO第四次博客作业(第四单元作业及期末总结)

    (注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1  我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...

  4. oo第四单元及期末总结

    一.第四单元作业架构总结 第一次UML作业: 在分析各指令所需要的信息后建立了类(class),操作(operation),属性(Attribute)这几个类用来存储分析后的结果,而接口在本次作业中与 ...

  5. python 有class外壳不一定是oop,到底怎么oo?

    1.继承 封装 多态是面向对象的三大特点,当年在考c++期末考试时候这三个特点还是作为填空题出现的. 而且老师也反复唠叨继承封装 多态,这三个词语是背得滚瓜烂熟了,但因为不是特别专业的计算机科班,学得 ...

  6. [buaa-SE-2017]个人作业-期末总结

    个人作业-期末总结 Part1: 阅读作业 在这一部分,首先我将说说我对这次阅读作业中每篇文章的理解,最后结合这次团队项目的经理谈谈自己对软件开发的看法. 1. No Silver Bullet 文章 ...

  7. 北航oo作业第四单元小结

    1.总结本单元两次作业的架构设计 在我动手开始总结我的设计之前,我看了其他同学已经提交在班级群里的博客,不禁汗颜,我是真的偷懒.其他同学大多使用了新建一个类,用以储存每一个UMLelemet元素的具体 ...

  8. 【BZOJ4868】期末考试(整数三分)

    题意: 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...

  9. UML期末绘图及细节总结

    往届期末绘图的题目例如以下所看到的: Read the providing materials carefully, and then do tasks. 2.1: Use Case Diagram ...

随机推荐

  1. axios与ajax区别

    1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...

  2. 免费试用MongoDB云数据库 (MongoDB Atlas)教程

    众所周知,MongoDB包括社区版和企业版,但不止如此,MongoDB公司还有MongoDB Atlas:Database as a Service. MongoDB Atlas delivers t ...

  3. spring学习总结——高级装配学习四(运行时:值注入、spring表达式)

    前言: 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或构造器参数中.bean装配的另外一个方面指的是将一个值注入到bean的属性或者构造器参数中.在没有学习使用 ...

  4. centos简单的后台运行

    # 忽略输出文件 nohup java FileTest > /dev/null 2>&1 &

  5. 如何设置非管理员用户配置特定的IIS站点

    如何设置非管理员用     户配置特定的IIS站点 一.           添加IIS管理服务 二.           启动管理服务 勾选启用远程连接后.点右边的应用 三.           设 ...

  6. window.open模拟表单POST提交

    解决地址栏长度限制,隐藏参数,不在地址栏显示 项目 excel 导出中用到 将form的target设置成和open的name参数一样的值,通过浏览器自动识别实现了将内容post到新窗口中 var u ...

  7. CSS---内外边距

    1.内外边距含义 内边距是div边框内的距离.背景色会覆盖内边距,内边距会使宽高变大. 外边距是div边框外的距离.背景色不会覆盖外边距 内外边距都会撑高父元素,外边距会提高div与div之间的距离 ...

  8. 第二节 pandas 基础知识

    pandas 两种数据结构 Series和DataFrame 一  Series 一种类似与一维数组的对象 values:一组数据(ndarray类型) index:相关的数据索引标签 1.1  se ...

  9. How-to: Do Real-Time Log Analytics with Apache Kafka, Cloudera Search, and Hue

    Cloudera recently announced formal support for Apache Kafka. This simple use case illustrates how to ...

  10. react组件之间的通信

    通过props传递 共同的数据放在父组件上, 特有的数据放在自己组件内部(state),通过props可以传递一般数据和函数数据, 只能一层一层传递 一般数据-->父组件传递数据给子组件--&g ...