软件质量:可维护性、可靠性、健壮性、可用性。

9.3 可维护性
系统维护(maintaining)是指根据需求的变化更新现有系统的过程

9.3.1    封装的重要性
连锁反应:对系统某一部分的改变可能会对系统的其余部分产生影响,导致系统错误。
面向对象的封装原则保证了面向蝗程序易于维护,因为封装原则减弱了连锁反应的影响:
每个对象都应该在对象内部包含工作的全部细节;所有的数据都应该隐藏在对象内部;保证对象的任何改变都不会影响到系统的其余部分。

9.3.2    文档
在开发面向对象程序的时候,设计文档应该包含以下内容:
*    完整的类图
*    清晰的方法定义(参数和返回类型,必要时包含伪代码)

代码内文档应当包含以下信息:
*    用以描述代码含义的注释信息
*    有意义的数据名称
*    用常量替换固定的数字
*    一致清晰的缩排格式

9.3.3    JavaDoc
常用标签:@author, @version, @param, @return

9.4        可靠性
编译时错误(compile-time error):没有按照语法规则编写合法的程序。
运行时错误(run-time error):程序没有完成指定的工作。可能是需求不符,可能是逻辑错误,或者两者兼而有之。
测试错误:从单元测试开始,然后进行集成测试。

9.4.1    单元测试(unit testing,测试独立的类)
不要在原始类中添加main方法进行测试,而是单独构造一个包含main方法的类称为原始类的驱动器(driver),
这个驱动器类只是完成对特定类的操作,不会干扰的类。
如果要进行单元测试的类依赖于其他的类,而被依赖的类当前无法获得,那么可以开发一个哑元类(dummy class)用于替换无法获得的类。
哑元类是为了完成测试而开发的模拟真实类的类。

9.4.2    集成测试(integrating testing,测试组成应用的所有的类)
在完成程序中每个类的独立测试后,需要将它们组合,进行综合测试,目的是保证类之间的接口可以正常地工作。
为了进行接口测试需要对所有类进行重编译。防止类间的接口不一致。

9.4.3    黑盒测试(black box testing)
把测试组件看作不透明的盒子,即忽略组件的代码细节,构造测试的输入数据时可以分成多个等价组。

9.4.4    白盒测试(white box testing)
把测试组件看作透明的盒子,构造测试集,尽可能覆盖组件所有可能的执行路径。

9.4.5    测试日志
测试日志是记录系统开发过程中进行测试的文档。

9.5        健壮性
一个程序意外地终止运行被称为崩溃(crash)。
将组件推向极限的测试方法称为压力测试(stress testing)。
当违反规则时程序会报告异常(exception),报告异常的过程称为抛出异常(throwing exception)。

9.6        可用性(usability)
程序的可用性是指应用程序的使用者与程序交互过程的容易度。

9.6.1    文本格式化
转义符:\n, \t, \", \', \\

9.6.2    图形用户界面
是 友好的,易于用户操作的。

自测题:
1。解释什么是继承?
继承是指在类之间共享属性和方法。继承关系是一种层次关系,也被称为a-kind-of关系。

2。在UML类图中如何描述继承关系?
用空心的三角形表示继承关系,三角形的尖指的是基类。

3。在Java中,使用哪个关键字声明一个类是另一个类的子类?
class 子类 extends 基类,用extends关键字代表继承关系。

4。区分方法重写和方法重载的不同。
多态性的实现:方法重载和方法重写。
方法重载指同一类中可以存在具有相同名称的不同方法,通过它们的参数列表加以区分。
方法重写指超类中的方法,可以在子类中重写。
不同的方法的相互区分:在方法重载中通过不同的参数列表相互区分,在方法重写中通过隶属的对象的不同相互区分。

5。解释什么是类型转换,并描述Java中类型转换是如何实现的。
强制类型转换(typecast):强制一个数据从一种数据类型转换为另一种数据类型。
通过在待转换的数据前加一对含有新类型名称的括号实现。

6。解释abstract和final修饰符分别应用于类和方法时的作用。
abstract class表示这个类为抽象类,不能创建对象,只能作为其他类的基类。
abstract method表示这个方法是抽象方法,没有实现,子类如果要实例化,必须重写这个方法。
final class表示这个类为最终类,不能被继承。
final method表示这个方法是最终的方法,子类不能重写。

编程练习:代码附件
1.    QualityQ2.java
2.    Reactor.java
3.    EscapeSequence.java
4.    FindCost3.java
b)    说实话,这么简单的输出,真不知道还需要怎样改善信息的布局。

《Java大学教程》—第9章 软件质量的更多相关文章

  1. 正在学习的Java大学教程

    推荐本书<Java大学教程> 看的人比较少,我也是多年不看书了,基于教程一般选国外的方法,从图书馆选了本书. 看了一半,感觉书的内容比较认真,对于基本的Java知识都算介绍全了,而且全书是 ...

  2. 《Java大学教程》—第24章 Java的背景

    本章主要介绍的是Java的背景知识,通过了解历史知道Java与其他语言的区别,以便更好选择在什么场景下使用Java. 24.2    语言的尺寸Java语言短小.紧凑,以C++为基础,放弃了一些特定的 ...

  3. 《Java大学教程》—第23章 Java网络编程

    本章主要关注的是Java的几个应用网络编程的场景,对于网络编程没有太多深入介绍,而Java本来也没有多少针对网络编程的特性.虽然Java有个Applet的概念,但是真用这个的开发的场景其实不多. 23 ...

  4. 《Java大学教程》—第19章 改进用户界面

    用户与程序交互的媒介称为用户界面(user interface)或人机界面(human-computer interface). 19.2    Border接口8个实现Border接口的标准边框类: ...

  5. 《Java大学教程》—第14章 抽象、继承和接口

    自测题:1.    解释抽象和抽象数据类型的概念.P333抽象的概念是仅仅关注对象可以完成什么工作,而不必担心如何完成工作的细节.类模板通常被称为抽象数据类型.因为这类数据暴露给用户的所有信息仅仅是方 ...

  6. 《Java大学教程》—第12章 案例研究--第2部分

    本章就是上一章的延续,主要是用GUI实现了控制界面. 编程练习:代码附件Hostel.java1.    正确运行2.    Runhostel.java3.    searchButton

  7. 《Java大学教程》—第11章 案例研究--第1部分

    自测题:1.    图11-1的UML设计中各个类之间的关系.Hostel与TenantList是关联关系:TenantList和PaymentList与ObjectList是泛化关系.TenantL ...

  8. 《Java大学教程》—第22章 多线程程序

    22.2 进程(process):P551时间切片(time-slicing):处理器只是完成了一个任务的一部分工作,然后完成下一个任务的一部分工作,因为处理吕每次完成工作的时间都非常短,因此看起来这 ...

  9. 《Java大学教程》—第20章 文件处理

    记录():一个单独的数据实例.域():一个属性. 20.3    输入和输出设备:P484输入过程和输出过程.操作系统负责建立三个流(stream):标准输入流(System.in).标准输出流(Sy ...

随机推荐

  1. 将ASP.NET网站部署到服务器IIS上

    ASP.NET编写的网站程序,在网站编写完成所有流程都测试通过后,需要将网站发布到IIS的Web服务器上,此文将介绍发布的流程以及IIS相关设置过程,帮助读者了解网站发布的流程. 一.首先在Visua ...

  2. Tesseract 引擎翻译

    Tesseract 引擎翻译 Category: 图像识别 Last Edited: Sep 17, 2018 10:29 AM Tags: tesseract,字符识别,翻译 1.英文原文(中文翻译 ...

  3. Java 内部类及其原理

    Java中实现内部类 内部类相信大家都用过很多次了,就不说它是怎么用的了. 内部类 1.成员内部类 需要注意的是, 当成员内部类拥有和外部类同名的成员变量或这方法时, 默认情况下访问的是内部类的成员, ...

  4. BOM的使用

    window 对象 BOM 的核心对象是window,它表示浏览器的一个实例.在浏览器中,window 对象有双重角色,它既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScrip ...

  5. K8S RBAC

    API Server 内部通过用户认证后,然后进入授权流程.对合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理的重要环节. 在 kubernetes 集群中,各种操作权限是赋予角色(Role ...

  6. cf24D. Broken robot(高斯消元)

    题意 题目链接 Sol 今天上午的A题.想出来怎么做了但是没时间写了qwq 思路很简单,首先把转移方程列一下,发现每一个位置只会从下一行/左右转移过来,而且第N行都是0,那么往下转移的都可以回带. 剩 ...

  7. 2018-12-16 VS Code英汉词典进化效果演示: 翻译文件所有命名

    续VS Code英汉词典插件v0.0.7-尝试词性搭配, 下一个功能打算实现文件的批量命名翻译: 批量代码汉化工具 · Issue #86 · program-in-chinese/overview ...

  8. 在Arcmap中加载互联网地图资源的4种方法

    前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误,希望大家多多指教.4种方法如下: a)    ...

  9. 直接插入排序算法的C++实现

    直接插入算法:每趟将一个待排序的关键字按照其值的大小插入到已经排好的部分有序序列的适当位置上,直到所有待排序的关键字都被插入到有序序列中为止. 理论上,在直接插入排序中第二层循环是可以提前结束的,即某 ...

  10. 从头开始:详解MVVM、MVVMLight

    究竟为什么要学习MVVM? 相信大部分同学在刚开始接触MVVM的时候(包括我自己),心里默默在想这究竟是什么玩意?一个简单的功能要写一大段代码才能完成,在看到MVVM的核心目标: 1.让UI界面与逻辑 ...