‘壹’ 软件工程有哪些原则
1、量两次,切一次(Measure twice and cut once)
如果你只能从这篇文章中学到一个原则且最重要的一个,那么就是这个。 开发人员,架构师和经理人经常因为个人情绪、以及其他问题而难以集中注意力。
就工程师来说,这个原则意味着选择正确的解决方案,选择正确的方法来解决问题,选择正确的工具来解决问题,对建立的解决方案必须充满信心。
选择这里意味着投入一些思考,找到必要的资源,组建合适的团队,思考设计,思考方法,设定任务,控制结果,并为此承担责任。 这就是“活在当下”。 我认为我自己还没有准备好用正确的词汇来描述它。
2、不要重复自己(Don't Repeat Yourself)
这是一个相当简单但非常有用的原则,它说在不同的地方重复同样的事情是非常糟糕的。 首先,它涉及到进一步支持和修改代码的必要性。 如果某个代码片段在程序中的几个地方被复制,那么很有可能出现两种灾难性的情况:
当对源代码进行哪怕是很小的改动时,您需要在几个地方更改相同的代码。 这需要额外的时间、精力和注意力,而这件事件通常也非常不容易。
第一项紧随第二项。 团队中的其他开发人员可能会意外地错过其中一个更改(只合并了控制系统中的分支) ,并将面对应用程序中随后出现的一系列错误。 这些 bug 可能会让您感到沮丧,因为您已经听说这样的 bug 似乎已经被修复了。
在这方面,有一个建议ーー如果在清单中发现任何代码超过两次,则应以单独的方式来处置。 这是通用做法。 事实上,即使再次遇到重复的bug,您也应该考虑创建一个单独的方法。
3、奥卡姆剃刀(Occam’s Razor)
这是一个非常普遍的想法,它来自于哲学编程。 这个原则得名于奥克姆的英国修道士威廉。 这一原则表明: ”没有必要,不得增加实体”。
在工程学中,这一原则被解释为: 没有必要创建不必要的实体。 因此,首先考虑添加另一个方法 / 类 / 工具 / 流程等的好处不见得总是一个好主意。 毕竟,如果您添加了另一个方法 / 类 / 工具 / 流程等等,除了增加复杂性之外,您没有得到任何其他好处,那还有什么意义呢?
4、保持足够简单(Keep It Simple Stupid )
这是一个与上面非常类似的原则,但它的含义略有不同。 这个原则要求代码必须尽可能简单,不能有复杂的结构,否则会使代码的调试和维护复杂化。
此外,对于另一个程序员来说,理解代码的逻辑将会更加困难,这反过来也将需要额外的时间和精力。 这就是为什么您应该始终尝试使用简单的构造来尽可能多地解决问题,而不需要使用大量的分支、深层嵌套和过度重载的类结构。
通过这样做,你将使自己和同事的生活更加轻松,因为复杂性会产生错误。 记住 Peter Hintiens 说过的话: “简单永远比功能好”。
5、你不会需要它(You Aren’t Gonna Need It )
这是许多程序员都会遇到的问题。 从项目一开始就希望立即实现所有必要的(有时甚至是不必要的)功能。 也就是说,当开发人员从一开始就将所有可能的方法添加到类中并实现它们时,甚至可能在未来永远不会使用它们。
因此,根据这个建议,首先,只实现您需要的东西,然后,如果必要的话,再扩展相应功能。 这样,您就可以节省调试代码的工作量、时间以及精力,而实际上这些代码却并不需要。
‘贰’ 成教〈软件工程〉复习题答案,高分求救,谢谢大家(三)
软件工程复习题
四、简答题 1、可行性研究的任务是什么? 首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把他们清楚地列举出来。然后,分析员进行简要的需求分析,抽象出该项目的逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的主要解决方法,对每种解决方法都要研究它的可行性,可从以下三个方面分析研究每种解决方法的可行性。一技术可行性:对要开发项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现。二经济可行性:进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发。三社会可行性:要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。 2、什么是模块的影响范围?什么是模块的控制范围?他们之间应该建立什么关系? 一个模块的作用范围(或称影响范围)指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。一个模块的作用范围应在其控制范围之内,且判定所在的模块应在其影响的模块在层次上尽量靠近。如果再设计过程中,发现模块作用范围不在其控制范围之内,可以用“上移判点”或“下移受判断影响的模块,将它下移到判断所在模块的控制范围内”的方法加以改进。 3、需求分析阶段的基本任务是什么?需求分析阶段的基本任务是要准确的定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。本阶段要进行以下几方面的工作:一问题识别。双方确定对问题的综合需求,这些需求包括:功能需求、性能需求、环境需求、用户界面需求,另外还有可靠性、安全性、保密性、可移植性、可维护性等方面的需求。二分析与综合,导出软件的逻辑模型。分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。这里也包括对数据域进行分解,并分配到各个子功能上,以确定系统的构成及主要成份,并用图文结合的形式,建立起新系统的逻辑模型。三编写文档。编写“需求规格说明书”、编写初步用户使用手册、编写确认测试计划、修改完善软件开发计划。 4、采用黑盒技术设计测试用例有哪几种方法?这些方法各有什么特点? 一等价类划分。 等价类划分是将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其它值的测试。 二边界值分析。 该方法是将测试边界情况作为重点目标,选取正好等于,刚刚大于或刚刚小于边界值的情况,根据这些情况选择测试用例。 三错误推测。 错误推测法没有确定的步骤,凭检验进行。它的基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。 四因果图。 因果图能有效的检测输入条件的各种组合可能会引起的错误。因果图的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。 5、什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?数据流图简称DFD,是SA方法中用于表示系统逻辑模型的一种工具。它以图形的方式描述数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。数据流图有四种基本图形符号:“→”箭头表示数据流;“○”圆或椭圆表述加工;“=”双杠表示数据存储;“”方框表示数据的源点或终点。 6、说明动态建模的过程。一准备脚本。动态分析从寻找事件开始,然后确定各对象的可能事件的顺序。在分析阶段不考虑算法的执行,算法是实现模型的一部分。二确定事件。确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作。三准备事件跟踪表。把脚本表示成一个事件跟踪表,对象为表中的列,给每一个对象分配一个独立的列。四构造状态图。对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对应于状态图中一条路径。 7、软件维护的特点是什么?主要体现在三个方面:<1>非结构化维护和结构化维护。软件的开发过程对软件的维护有很大的影响。若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是一种结构化的维护。<2>维护的困难性。软件维护的困难性是由于软件需求分析和开发方法的缺陷。软件生存周期中的开发阶段没有严格而有科学的管理和规划,就会引起软件运行时的维护困难。<3>软件维护的费用。软件维护的费用在总费用中的比重是在不断增加的,这是软件维护有形的代价。另外还有无形的代价,即要占用更多的资源。软件维护费用增加的主要原因是软件维护的生产率非常低。 8、请说明软件文档的作用?软件开发项目生存期各阶段都包含哪些文档?软件文档的作用是:提高软件开发过程的能见度;提高开发效率;作为开发人员阶段工作成果和结束标志;记录开发过程的有关信息便于使用与维护;提供软件运行、维护和培训有关资料;便于用户了解软件功能、性能。软件开发项目生存期各阶段应包括得文档以及与各类人员的关系如下:可行性研究报告、项目开发计划、软件需求说明书、数据要求说明书、测试计划、概要设计说明书、详细设计说明书、用户手册、操作手册、测试分析报告、开发进度月报、项目开发总结、程序维护手册(维护修改建议)。 9、什么是确认测试?该阶段有哪些工作?确认测试又称有效性测试。它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。确认测试阶段有两项工作,进行确认测试与软件配置审查。<1>确认测试一般是在模拟环境中运用黑盒测试方法,由专门测试人员和用户参加的测试。<2>软件配置审查的任务是检查软件的所有文档资料的完整性、正确性。如果发现遗漏和错误,应补充和改正,同时要编排好目录,为以后的软件维护工作奠定基础。 10、在划分软件生存周期阶段时,应遵循的基本原则是什么? 软件生存周期的各个阶段有不同的划分。软件规模、种类、开发方式、开发环境以及开发使用方法都影响软件生存周期的划分。在划分软件生存周期阶段时,应遵循的一条基本原则是各阶段的任务应尽可能相对独立,同一阶段各项目任务的性质尽可能相同,从而降低每个阶段任软件工程复习题
四、简答题 1、可行性研究的任务是什么? 首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把他们清楚地列举出来。然后,分析员进行简要的需求分析,抽象出该项目的逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的主要解决方法,对每种解决方法都要研究它的可行性,可从以下三个方面分析研究每种解决方法的可行性。一技术可行性:对要开发项目的功能、性能、限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现。二经济可行性:进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发。三社会可行性:要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。 2、什么是模块的影响范围?什么是模块的控制范围?他们之间应该建立什么关系? 一个模块的作用范围(或称影响范围)指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块(直接或间接从属于它的模块)的集合。一个模块的作用范围应在其控制范围之内,且判定所在的模块应在其影响的模块在层次上尽量靠近。如果再设计过程中,发现模块作用范围不在其控制范围之内,可以用“上移判点”或“下移受判断影响的模块,将它下移到判断所在模块的控制范围内”的方法加以改进。 3、需求分析阶段的基本任务是什么?需求分析阶段的基本任务是要准确的定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。本阶段要进行以下几方面的工作:一问题识别。双方确定对问题的综合需求,这些需求包括:功能需求、性能需求、环境需求、用户界面需求,另外还有可靠性、安全性、保密性、可移植性、可维护性等方面的需求。二分析与综合,导出软件的逻辑模型。分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。这里也包括对数据域进行分解,并分配到各个子功能上,以确定系统的构成及主要成份,并用图文结合的形式,建立起新系统的逻辑模型。三编写文档。编写“需求规格说明书”、编写初步用户使用手册、编写确认测试计划、修改完善软件开发计划。 4、采用黑盒技术设计测试用例有哪几种方法?这些方法各有什么特点? 一等价类划分。 等价类划分是将输入数据域按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其它值的测试。 二边界值分析。 该方法是将测试边界情况作为重点目标,选取正好等于,刚刚大于或刚刚小于边界值的情况,根据这些情况选择测试用例。 三错误推测。 错误推测法没有确定的步骤,凭检验进行。它的基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。 四因果图。 因果图能有效的检测输入条件的各种组合可能会引起的错误。因果图的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。 5、什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?数据流图简称DFD,是SA方法中用于表示系统逻辑模型的一种工具。它以图形的方式描述数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。数据流图有四种基本图形符号:“→”箭头表示数据流;“○”圆或椭圆表述加工;“=”双杠表示数据存储;“”方框表示数据的源点或终点。 6、说明动态建模的过程。一准备脚本。动态分析从寻找事件开始,然后确定各对象的可能事件的顺序。在分析阶段不考虑算法的执行,算法是实现模型的一部分。二确定事件。确定所有外部事件。事件包括所有来自或发往用户的信息、外部设备的信号、输入、转换和动作。三准备事件跟踪表。把脚本表示成一个事件跟踪表,对象为表中的列,给每一个对象分配一个独立的列。四构造状态图。对各对象类建立状态图,反映对象接收和发送的事件,每个事件跟踪都对应于状态图中一条路径。 7、软件维护的特点是什么?主要体现在三个方面:<1>非结构化维护和结构化维护。软件的开发过程对软件的维护有很大的影响。若不采用软件工程的方法开发软件,则软件只有程序而无文档,维护工作非常困难,这是一种非结构化的维护。若采用软件工程的方法开发软件,则各阶段都有相应的文档,容易进行维护工作,这是一种结构化的维护。<2>维护的困难性。软件维护的困难性是由于软件需求分析和开发方法的缺陷。软件生存周期中的开发阶段没有严格而有科学的管理和规划,就会引起软件运行时的维护困难。<3>软件维护的费用。软件维护的费用在总费用中的比重是在不断增加的,这是软件维护有形的代价。另外还有无形的代价,即要占用更多的资源。软件维护费用增加的主要原因是软件维护的生产率非常低。 8、请说明软件文档的作用?软件开发项目生存期各阶段都包含哪些文档?软件文档的作用是:提高软件开发过程的能见度;提高开发效率;作为开发人员阶段工作成果和结束标志;记录开发过程的有关信息便于使用与维护;提供软件运行、维护和培训有关资料;便于用户了解软件功能、性能。软件开发项目生存期各阶段应包括得文档以及与各类人员的关系如下:可行性研究报告、项目开发计划、软件需求说明书、数据要求说明书、测试计划、概要设计说明书、详细设计说明书、用户手册、操作手册、测试分析报告、开发进度月报、项目开发总结、程序维护手册(维护修改建议)。 9、什么是确认测试?该阶段有哪些工作?确认测试又称有效性测试。它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。确认测试阶段有两项工作,进行确认测试与软件配置审查。<1>确认测试一般是在模拟环境中运用黑盒测试方法,由专门测试人员和用户参加的测试。<2>软件配置审查的任务是检查软件的所有文档资料的完整性、正确性。如果发现遗漏和错误,应补充和改正,同时要编排好目录,为以后的软件维护工作奠定基础。 10、在划分软件生存周期阶段时,应遵循的基本原则是什么? 软件生存周期的各个阶段有不同的划分。软件规模、种类、开发方式、开发环境以及开发使用方法都影响软件生存周期的划分。在划分软件生存周期阶段时,应遵循的一条基本原则是各阶段的任务应尽可能相对独立,同一阶段各项目任务的性质尽可能相同,从而降低每个阶务的复杂程度,简化不同阶段之间的联系,有利于软件项目开发的组织管理。
‘叁’ 软件工程
自己的学到的 自己做啊!
不要总是依赖别人!不然你以后会后悔的!
‘肆’ Therac-25案例的情况简介
二、事故情况简介
Therac 25一共售出了11台,5台配置在美国,6台在加拿大,1985年至1987年共发生了6次放射剂量大规模超标的严重事故,全部设备于1987年召回。对原设计方案作了重大修改,其中包括安装防止软件错误发生的硬件保护装置。下面是这6次事件中的4个事件:
1、1985年6月,一名61岁的妇女,到Marietta 的Kennestone 肿瘤中心接受锁骨部位的10兆电子伏特电子射线照射,治疗中病人感到炙热和疼痛,大声喊叫,医生Tim Still无法解释,怀疑与过量辐射有关,并与AECL电话联系。AECL工程师答复称设备没有发生超剂量的可能。随后病人提出诉讼,病人由于遭受严重的烧伤,肩部和手臂被切除,但是诉讼也因为证据不足不能立案。
2、1985年7月,一个40岁女性子宫颈癌患者,在加拿大安大略 Hamilton接受Therac 25治疗,治疗剂量为200拉德,治疗过程中机器停机,显示出现出现‘HTILT’错误。同时控制台显示‘No dose’(无剂量)和治疗暂停,于是操作人员按键盘恢复继续运行,同样错误再次发生,在发生5次之后,机器进入悬挂状态,进行了重启动的操作。病人当时反应有强烈烧灼感和电击麻刺感。该病人在5个月后死亡。据以后的分析,该病人在治疗过程中实际受到15000拉德的辐射,对人体而言,辐射剂量达到1000拉德就已经是致命的了。
3、1986年3月,一个男性背部肿瘤患者,在美国东得克萨斯ETCC泰勒医院接受Therac 25治疗,治疗模式为电子射线,剂量为180拉德,面积为10厘米×17厘米,操作人员对设备操作十分熟悉,迅速敲击键盘,输入相关数据,发现模式显示为X(X射线),于是更改为E(电子射线),启动机器,机器很快停机,显示‘Malfunction 54’,这个信息的含义在说明书中没有明确定义,其解释是能量已发射,可能过低或过高。控制台显示为剂量过低,操作人员于是进行了恢复和重启动的操作,这时治疗舱内的病人已无法忍受,跳下床敲门,治疗被迫终止。5个月后该病人死亡,据分析该病人接受了16000至25000 拉德的辐射。
4、1986年4月在上述事件发生三周之后,美国东得克萨斯ETCC为一个男性面部皮肤癌患者作Therac 25电子射线治疗,剂量为180拉德,仍然由相同的操作人员操作,事件发生过程几乎与上例完全相同,病人剧痛大声叫喊。由于脑部受损,20天后死亡,据分析该病人接受了25000拉德的辐射。
三、故障诊断
放射治疗议在美国从20世纪60年代开始使用以来,一直没有发生过重大的事故,所以无论是患者、医院或制造商,对于可能发生超剂量辐射事故毫无思想准备。1985年第一件事故发生并由患者提出诉讼后,设备制造方AECL完全否认故障出现的可能,由于厂方和医院都缺乏必要的记录,FDA完全无从着手调查。
1985年7月, Hamilton事故发生后,FDA督促AECL进行调查,AECL虽无法重现事故场景,他们已经开始怀疑事故可能是旋转台固定位置微开关的瞬时故障引发,微开关的瞬时故障又追溯至软件输入数据错误。AECL为此作出了相应的改进,并通知医院和FDA,声称:“分析表明新方案的风险率比旧方案降低了5个数量级”。
1986年美国东得克萨斯泰勒医院连续两次发生事故后,在操作人员和医生的共同努力下,终于发现Therac 25的控制系统可能存在重大隐患。
1、Therac 25的软件控制系统
从Therac 6开始,设备已经使用了计算机软件控制,但是其主要控制功能由硬件电路承担,软件只起辅助作用。在设计Therac20和Therac25时,开发商声称,计算机控制系统是独立设计的。实际上由于对Therac 6控制软件的信任,这两台设备都重用了Therac 6的主要控制软件。
Therac 25的软件控制系统的特征是:
1)按定制的任务优先次序,循环运行。即“任务”按关键度顺序执行,关键度高的任务,先于关键度低的任务执行。除了test & set (测试和设置)外,没有其他同步运行的任务。
2)软件由四个部件构成,分别是:
数据存储:机器设置和病人治疗数据;
中断处理;
关键任务:检测数据输入、读入编码数据,查找运行参数,调用子程序,设置激励机器弯曲的磁铁(有8秒钟的延迟),循环或延迟直至磁铁设置完成,在设置治疗时,执行治疗;
非关键任务:由键盘处理,包括文字输入,2数位共享数据变量编码,在数据输入完毕后树立旗标。
2、泰勒医院1986年4月Therac 25 事故场景的重现
ETCC泰勒医院1986年4月Therac 25 事故发生后,ETCC立即停止Therac 25工作,并通知AECL。ETCC的医生立即对事故进行了仔细的调查。由于机器的女操作员能够确切记忆事故发生时设备实际操作过程,经过一段时间的努力,终于使错误信息‘Malfunction 54 ’信息得以重现。他们发现,在机器的编辑阶段,数据的输入速度是该错误出现的关键因素,也就是说,对于一个熟练的操作人员,在重复同样的操作千百次之后,编辑速度越来越快,最终将使‘Malfunction 54 ’信息出现,即超剂量辐射事故发生。参加实验的医生是在经过了相当长的实践后达到了临界的编辑速度。次日对结果感到迷惑的AECL工程师来到现场,直到他在医生和操作人员的训练下使‘Malfunction 54 ’信息再次出现时,才接受了医院的看法,并测量这时的辐射剂量已经达到饱和的25000拉德。
得到这个消息的美国芝加哥大学联合辐射中心的医生在他们的教学设备Therac 20上进行了实验,两个月后医生们观察到在学生实验中经常出现保险丝烧毁和继电器断路的事件,经分析其实质与Therac 25故障完全相同,但是由于有硬件电路的保护,没有造成任何严重的影响。
有了这一系列的实验结果,Therac 25故障的原因最终得到确认。故障并不仅是由于一般的软件错误造成,故障的根本原因是系统总体安全设计的问题。
四、教训
事故原因确定后,所有的Therac 25停止使用,召回,重新修改设计,安装硬件保护装置。此后管理层、工程界、学术界进行了长时间的讨论,对事故的教训进行了探讨,这个过程一直持续到90年代中期,各界人士观点见仁见智。其中美国着名的安全性工程专家Leveson对事故的总结和认识最具系统性和代表性,本文的下述部分引用了她得出的一些主要结论。
1、任何事故的发生,很少是单纯的,通常包含在诸多相互关联事件构成的一个复杂网络中,涉及诸如技术、人文、组织等因素。这次导致Therac 25多次事故发生的重要原因在于没有非常明确的证据的条件下,就确信事故的原因已经查明,例如将Hamilton事故中的微型开关作为事故的主要原因,并且忽略了对其他各种可能的相关因素的分析。另外一个错误的假定是认为,改正了一个软件错误,就会预防事故今后发生,实际上软件故障总是一个接一个地不断暴露。
事故原因也经常被简单地归结为人为错误,其实,事故涉及的任何因素都可以贴上人为错误的标签,甚至硬件的损耗失效也可以归结为设计人员没有提供必要的冗余以及操作人员疏于维护和置换,将一个事故仅仅归结为人为错误是没有帮助的和无意义的
同样无意义的是将事故的原因归结为计算机错误和软件错误。Therac 25 事故中的软件确实存在问题,但它只是其中的一个因素,如果我们认为软件是Therac 25事故的根本原因,那么我们不得不得出结论,在今后为了预防类似的事故,必须构造出完美无缺的软件,在任何环境中它不会出现非预期的工作方式,这显然是不可能实现的。除此之外只好在所有系统中都不使用软件。很明显所有上述论点都过分悲观。
我们必须用系统工程的观点,从复杂系统事故的角度来分析面对的问题。对于Therac 25事故,涉及的因素包括:
管理缺位,缺乏确定的程序跟踪所有报告的事故;
对软件过分信任,已至删除了所有的硬件互锁装置,使软件成为可引发事故的单点失效;
低水平的软件工程实践;
不实际的风险评估和过分信赖评估的结果。
完全同样的事故,今后不大可能重复发生,如果我们研究和改善与事故有关的各种因素,那么就有可能预防类似的错误发生。
2、必须强调系统工程。在本案例中和其他工程发生的事故中,一个共同的错误在于对软件过分信任。非软件的专业人士似乎认为软件是不会失效的,从而过分依赖计算机控制功能。其实软件虽然不会发生如同硬件一样的损耗失效,但是软件的设计错误更难于发现和消除。硬件的失效模式一般是有限的,所以构建保护机构比较容易,从Therac 25得到的教训是在实施计算机控制时不要删除标准的硬件互锁装置。
硬件备份、互锁和其他的安全保护器件,在许多不同的系统中现在已经被软件置换,其中包括商用飞机、核电站和武器系统。在硬件互锁装置存在的地方,他们也常被软件控制。在设计危险系统时,如果认为一个故障就足以导致严重事故,那就违反了系统工程的基本原理。软件需要作为一个单独的元件来处理,软件不应该单独承担安全的职能,在系统设计中,必须避免单个软件错误或软件工程错误就足以造成灾难性后果。
当前工程界的另外一个趋势是忽略软件,Therac 25的第一次安全分析,没有包括软件(虽然软件几乎承担了全部的安全性责任),当问题出现后,分析者又将注意力完全集中在硬件上。调查软件可能的影响不应成为事故分析的最后一个环节,事实上软件错误可以导致硬件的瞬时故障,因为软件给被控制的硬件发布指令。
在Therac 25 中,病人的反应成为衡量辐射程度的唯一实际指示。Therac 25完全依赖操作人员,没有独立的机构检查操作是否正确,而机器本身也不能检测大剂量辐射是否发生。Therac 25的离子室不能掌握高密度的电子束,在它们饱和的时候,显示的是低辐射剂量。
任何一家公司在建造安全关键系统的时,应该进行核查实验,一旦发现问题的任何线索,应该有既定的事故分析程序,医生Tim Still 的第一个电话就应该促使Kennestone和AECL进行广泛调查,第一件诉讼就应该立即启动应急反应程序。每一个使用危险设备的企业都应该有危险记录和跟踪,同时使事故的报告和分析成为其质量控制过程的一部分,这不仅有助于事故的预防,而且可以降低保险费率,并在诉讼发生后提供背景资料。
最后,过分依赖安全性分析的数字结果是不明智的,在Hamilton事故发生、微开关故障改进后宣称安全性提高了5个数量级是无法验证的。
3、软件工程不容忽视。Therac 25中包括了软件编码错误,这个问题在其他与计算机相关的一般事故中是少见的。一般计算机错误主要涉及需求、环境条件和系统状态等。虽然实施软件工程不能完全消除软件中的错误,但是可以极大地减少错误。许多公司在他们的系统中使用软件,但是并不象软件工程师那样严肃对待,下述软件工程的基本原则在Therac 25中受到明显的破坏:
·编制软件文档不应是一种事后行为;
·应该建立软件质量保证体系和标准;
·应保持设计简单性;
·如何得到错误信息,例如软件核查试验,应该从软件设计开始时就制订出方案;
·软件应该在模块级和软件级进行广泛的测试和分析,仅进行系统测试是不正确的;
·安全性必须构造入软件系统,任何安全关键软件项目必须包括特殊的安全性分析和设计程序,此外不管软件错误是否存在,系统级安全性必须得到确切的保证。Therac 20 包含有导致泰勒事件的同样软件错误,但是硬件的互锁消除了故障的后果。
在这里,我们还能够获得有关软件重用的重要教训。一般倾向认为重用软件或使用商用现成软件可以增加安全性,原因是该软件已经广泛使用过。其实重用软件模块并不能保证新系统的安全性,有时甚至会成为危险设计。安全性是系统的一个质量属性,不完全等同于软件质量,重新编写新的软件使其更加清楚、更加简单,在许多情况下才能更加安全。
一个人学习了一门编程课程,在微机上编写过程序,并不表明他已经具有开发安全关键软件的能力。从事安全关键软件开发需要进行专门的培训。任何一个工程师都不能自动具备软件工程师的能力。
用户界面在Therac 25事件中受到了某种程度的关注,实际上它在这次事件中只有部分影响,虽然软件的界面和这个软件的其他部分一样,存在改进的余地。软件工程师需要接受更多的界面设计培训,从人-机工程的角度需要更多的数据输入。必须着重指出在用户友好界面和安全性方面存在着潜在冲突。用户界面设计的一个目的是尽可能方便操作者使用,但是在Therac 25软件中,操作的简单性是以牺牲系统安全性为代价的。最后不仅在初始设计中必须考虑软件和软件界面的安全性,而且需要记录决策理由,使得以后的变更有依据可查。
‘伍’ 软件工程题
这个谁给你做啊~~~~~~~~
‘陆’ 软件工程详细设计实例
1.0概述 这部分提供对整个设计文档的概述。描述了所有数据,结构,接口和软件构件级别的设计。 1.1 目标和对象 描述软件对象的所有目标。 1.2 陈述范围 软件描述。主要输入,过程功能,输出的描述,不考虑详细细节。 1.3 软件内容 软件被置于商业或者产品线中,讨论相关的战略问题。目的是让读者能够对“宏图”有所了解。 1.4 主要系统参数 任何商务软件或者产品线都包含软件规定、设计、实现和测试的说明和规范。 2.0 数据设计 描述所有数据结构包括内部变量,全局变量和临时数据结构。 2.1 内部软件数据结构 描述软件内部的构件之间的数据传输的结构。 2.2 全局数据结构 描述主要部分的数据结构。 2.3 临时数据结构 为临时应用而生成的文件的描述。 2.4 数据库描述 作为应用程序的一部分,描述数据库结构。 3.0 结构化和构件级别设计 描述程序结构。 3.1 程序结构 详细描述应用程序所选定的程序结构。 3.1.1 结构图 图形化描述结构。 3.1.2 选择性 讨论其它可供考虑的结构。选定3.1.1中结构类型的原因。 3.2 构件描述 详细描述结构中的每个软件构件。 3.2.1 构件过程叙述(PSPEC) 描述构件的过程。 3.2.2 构件接口描述 详细描述构件的输入和输出。 3.2.3 构件执行细节 每个构件的详细演算描述。 3.2.3.1 接口描述 3.2.3.2 演算模型(e.g., PDL) 3.2.3.3 规范/限制 ]3.2.3.4 本地数据结构 3.2.3.5 在3.2.3.6设计中包含的执行结果 3.3 软件接口描述 软件对外界的接口描述 3.3.1机器对外接口 与其他机器或者设备的接口描述。 3.3.2系统对外接口 对其它系统、产品和网络的接口描述。 3.3.3与人的接口 概述软件与任何人的界面。 4.0 用户界面设计 描述软件的用户界面设计。 4.1 描述用户界面 详细描述用户界面,包括屏幕显示图标、图片或者类型。 4.1.1 屏幕图片 从用户角度描述界面。 4.1.2 对象和操作 所有屏幕对象和操作的定义。 4.2 界面设计规范 用户界面的设计和实现的规范和标准。 4.3 可见构件 实现的GUI可见构件说明。 4.4 UIDS描述 用户界面开发系统描述。 5.0约束、限制和系统参数 会影响软件的规格说明、设计和实现的特殊事件。 6.0测试标准 测试策略和预备测试用例描述。 6.1 测试的类别 规定实施测试的类别,包括尽量详细的描述。这里是针对黑盒测试现象的描述。 6.2期待软件反馈 测试期待的结果描述。 6.3执行界线 特殊执行需要的说明。 6.4 重要构件确认 决定性构件或者需要特殊注意的构件的测试确认。 7.0附录 设计说明的补充信息。 7.1系统可跟踪矩阵 一个定期回归系统规格跟踪软件需求的矩阵。 7.2 产品战略 如果规格说明书是为一个产品设计的,描述相关的产品战略。 7.3 使用分析算法 描述所有分析活动所使用到的分析算法。 7.4 补充信息 (如果有需要特别说明的)
‘柒’ 关于"银行储蓄管理系统"的软件设计,请高手帮帮忙吧
【设计题目】:储户的存款单或取款单由业务员输入系统,密码由储户输入。如果是存款,系统记录帐号,存款人姓名,地址,存款类型,存款日期,利息等信息;如果是取款,计算利息,并打印利息清单给储户。
【设计目的】:通过对银行储蓄管理系统的分析,进一步理解和掌握面向对象方法论,尤其是面向对象的三个模型:对象模型、动态模型、功能模型。
【设计条件、软件工具】:专业的数据库管理系统,采用面向对象的方法。
【设计思想、算法】:用面向对象方法分析上述系统,建立它的对象模型、动态模型、功能模型。
【设计过程,操作步骤说明】:
(一)建立对象模型
1. 确定类—&—对象
经分析本系统问题域及功能需求,得出主要的类—&—对象:总行、分行、营业厅(储蓄所)终端、储户、帐户、业务员、事务。
2. 确定关联
(1) 总行由若干个分行组成;分行拥有一个营业厅、若干个储蓄所;
(2) 分行雇用业务员;
(3) 储户拥有一个或多个帐户;
(4) 分行处理针对帐户的事务;分行维护帐户;
(5) 业务员输入针对帐户的事务;
(6) 终端与用户交互;
(7) 终端打印帐单;
3. 对象模型
(二)建立动态模型
1. 正常情况脚本(取款)
业务员将储户所填写资料输入储蓄所终端;
终端要求储户输入密码;储户输入对应帐号的正确密码;
终端要求总行验证密码;总行要求分行核对储户密码,然后通知终端密码正确;
终端确认取款额在预先规定的限额内,然后要求决行处理这个事务;
总行把请求转给分行;分行成功地处理完这项事务并返回该帐户的新余额;
终端打印存折和帐单;
业务员与储户交接现金、存折和帐单。
异常情况脚本(取款)
业务员将储户所填写资料输入储蓄所终端;
终端要求储户输入密码;储户不小心输入错误密码;
终端要求总行验证密码;总行在向有关分行咨询后通知终端密码有错;
终端显示“密码错”,并请储户重新输入密码;终端请总行验证后知这次输入的密码正确;
储户改变主意不想取款了,业务员敲“取消”键;
业务员把存折、取款单退回给储户。
正常情况脚本的事件跟踪图
储户终端总行分行
业务员输入储户填写资料
要求密码
输入密码
请求验证密码
请求分行验证密码
密码正确
业务员交接现金存折帐单
储户取走现金存折帐单
结束
(三)建立功能模型
1. 基本系统模型
2. 功能级数据流图
【设计心得体会】:通过本实验,使我更清晰地理解了面向对象方法论的分析和设计过程,对三种模型之间的关系更加清楚。通过对系统的对象模型的分析,理解到对象模型确实是三种模型中最重要、最关键的,只有对对象模型进行了较透彻的分析,才能清楚地得出其它两个模型。
‘捌’ 软件工程12
这个你可以去搜索吗,来这里找,会有人跟你画不,分出得又少
‘玖’ 软件工程事件表是什么
又是你,知识是别人的,还是要装在自己脑子里才是自己的哈 软件工程5、什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?数据流图