软件构造复习——7.1健壮性与正确性

一、健壮性和正确性的简单介绍

1.1Robustness  健壮性

1.1.1 定义:健壮性又称鲁棒性,是指软件对于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。

简单来说就是系统在正常输入或不正常外部环境下仍能够表现正常的程度。

1.1.2面向健壮性编程的做法

  • 处理未期望的行为和错误终止
  • 即使终止执行,也要准确/无歧义的向用户展示全面的错误信息
  • 错误信息有助于进行debug

1.1.3面向健壮性编程的原则

  • 总是假定用户恶意,假定自己的代码可能会失败
  • 把用户想象成白痴,可能会输入任何东西
  • 返回给用户的错误提示信息要准确、详细、无歧义
  • 封闭实现细节,限定用户的恶意行为
  • 考虑极端情况,没有“不可能”

1.2Correctness正确性

含义:程序按照spec加以执行的能力,是最重要的质量指标!

二、两者之间的对比

  • 正确性:永不给用户错误的结果; 让开发者变得更容易:用户输入错误,直接结束(不满足precondition调用)。
  • 健壮性:尽可能保持软件运行而不是总是退出; 让用户变得更容易:出错也可以容忍,程序内部已有容错机制。
  • 正确性倾向于直接报错(error),健壮性则倾向于容错(fault-tolerance);
  • 对外的接口,倾向于健壮性;对内的实现,倾向于正确性。
  • Reliability(可靠性) = Robustness(健壮性) + correctness(正确性)

三、如何测量健壮性和正确性

1.Mean time between failures (MTBF,平均失效间隔时间):描述了可修复系统的两次故障之间的预期时间,而平均故障时间(MTTF)表示不可修复系统的预期故障时间。

2.残余缺陷率:每千行代码中遗留的bug的数量

原文地址:https://www.cnblogs.com/hit1160300317/p/9210700.html

时间: 2024-11-02 20:07:22

软件构造复习——7.1健壮性与正确性的相关文章

【软件构造】第七章第一节 健壮性和正确性的区别

第七章第一节  健壮性和正确性的区别 第七章:进入软件构造最关键的质量特性 --健壮性和正确性. 本节在1-2节的基础上,重申了Robustness and Correctness的重要性,澄清了二者之 间的差异,并指明了在软件构造中处理二 者的典型技术(防御式编程.异常处理. 测试.调试等) Outline 健壮性(Robustness)和正确性(correctness) 如何测量健壮性和正确性 Notes ## 健壮性(Robustness)和正确性(correctness) [健壮性] 定

软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结

健壮性与正确性 健壮性与正确性是不同的——一个倾向于使程序尽可能保持运行,即使遇到错误,一个倾向于使程序尽可能正确,不在意保持运行 异常 异常分为两种——checked exception与unchecked exception 二者的区别在于: checked exception需要显式的处理,说白了就是编程者必须要么用catch抓住它,然后在try中想办法处理掉,要么显式的将这个异常扔到调用的上一级方法,也就是甩锅.总而言之,你永远不能无视checked exception unchecke

软件构造复习--git的基本使用

众所周知,github是程序员的乐园,第三方库可以说数以万计.那么,github到底为什么这么强大呢?这就是我今天想要讨论的. Git简介:  git是一种分布式的版本控制语言,作为第一次接触的人可以说是很懵x的了,那么到底是什么呢?就我个人看来,git就是可以把本地的代码和github上的建立的地方连接起来并且进行一些操作的语言.把它理解成通勤车毫不为过.(可能我自己用的并不多,所以理解比较浅显) git主要是有三个区域,分为代码库,工作区和暂存区,他们的大致关系就是工作区->暂存区->代码

软件构造复习——关于Git的一点复习

Something About Git 一.架构图 (该图取自CSDN) 二.工作流程 1.在工作目录中修改某些文件. 2.对修改后的文保存到暂存区域. 3.提交更新,将保存在暂存区域的文件永久转储到 Git 目录中. 我认为需要注意的是在提交代码到GitHub仓库时,先add,到临时储存区域,再commit,将代码传到仓库. 三.简单指令 指令有很多,我认为日常使用可以主要记下面的几种:(Git指令太多,起码上百) init.clone.config.add.rm.vm.commit.bran

软件构造 7-1 健壮性与安全性

健壮性与安全性 什么是健壮性与安全性? 如何衡量健壮性与安全性? 健壮性:系统或组件在存在无效输入或压力环境时一颗正确运行的程度. 健壮性编程关注异常终止和异常活动的处理. 健壮性原则:严于律己(满足specification),宽以待人(接受各种输入) 健壮性编程原则(把用户当做小孩) 1.用户会修改代码,而且自己写的还不对 2.用户不会看specification(所以我们应该在他操作错误时返回明确的错误信息帮助其改正) 3.危险行为,我们不应当将信息暴露给用户,以至于产生漏洞,使用户专注于

软件构造正确性和健壮性

面向健壮性的编程有以下几点要求或优点:处理未期望的行为和错误终止即使终止执行,也要准确/无歧义的向用户展示全面的错误信息错误信息有助于进行debug 健壮性原则:总是假定用户为恶意用户,假定自己的代码会失败把用户想象成一个小孩,可能输出任何东西注意,因为用户很小孩,最好要返回给用户错误提示信息,而且要详细准确无歧义!对自己的代码要保守,对用户的行为要开放. 关于这一点,体现在代码方面,就需要做出策略,是写多个分支进行检查或者是检测错误报错. 原文地址:https://www.cnblogs.co

软件构造期末复习考点总结

[考点 Equals] ==是引用等价性 :而equals()是对象等价性. == 比较的是索引.更准确的说,它测试的是指向相等(referential equality).如果两个索引指向同一块存储区域,那它们就是==的.对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象. equals()操作比较的是对象的内容,换句话说,它测试的是对象值相等(object equality).e在每一个ADT中,quals操作必须合理定义. 基本数据类型,也称原始数据类型.byte,sho

哈工大 软件构造课程 考点复习总结(第三章)

数据类型 Primitive types 基本数据类型(8种) Object types 对象数据类型(reference types 引用数据类型) Short.int .long.float.double.boolean.char.byte 如:String.BigInteger 只有值,没有ID(无法与其他值区分),不能赋值为null: immutable 有值,也有ID: 部分mutable,部分immutable 在栈中分配内存,代价低 在堆中分配内存,代价高 静态类型检查&动态类型检

哈工大 软件构造课程 复习考点总结(第六、七章)

可维护性的常见度量指标 Cyclomatic complexity 圈复杂度 Lines of Code LoC 代码行数 Maintainability Index (MI) 可维护性指数 Depth of Inheritance 继承的层次数 Class Coupling 类之间的耦合度 Unit test coverage 测试代码覆盖率 Coupling 耦合度 and Cohesion 聚合度 Coupling 耦合度: 模块之间的依赖性. Conhesion 聚合度 功能专一性.高聚