软件工程第四次作业 作业范围: 第九章至第十四章

第一题: 面向对象设计应该遵循哪些准则? 简述每条准则的内容,并说明遵循这条准则的必要性。
答:良好的面向对象程序设计风格,即包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(例如,继承性)而必须遵循的一些新准则。
提高可重用性:
① 提高方法的内聚;
② 减小方法的规模;
③ 保持方法的一致性;
④ 把策略与实现分开;
⑤ 全面覆盖;
⑥ 尽量不使用全局信息
⑦ 利用继承机制。
提高可扩充性:
① 封装实现策略;
② 不要用一个方法遍历多条关联链;
③ 避免使用多分支语句;
④ 精心确定公有方法。
提高健壮性:
① 预防用户的操作错误;
② 检查参数的合法性;
③ 不要预先确定限制条件;
④ 先测试后优化。

第二题: 下面叙述对一个计算机辅助设计(CAD)软件的需求:该CAD软件接受由工程师提供的二维或三维几何图形数据。工程师通过用户界面与CAD系统交互并控制它,该用户界面应该表现出良好的人机界面设计特征。几何图形数据及其他支持信息都保存在一个CAD数据库中。开发必要的分析、设计模块,以产生所需要的设计结果,这些输出将显示在各种不同的图形设备上。应该适当地设计软件,以便与外部设备交互并控制它们。所用的外部设备包括鼠标、数字化扫描仪和激光打印机。进一步精化上述要求,把CAD软件的功能分解成若干个子功能于下表.;为了用代码行技术估算软件规模,应该针对每个子功能都分别估计出下述3 个值:乐观值(即最小规模a),悲观值(即最大规模b)和可能值(即最可能规模m)。分别算出这3种规模的平均值,然后用下式的加权平均法计算每个子功能规模,结果示于下表。

代码行技术的估算表在这里插入图片描述
未调整的功能点数表
在这里插入图片描述
复杂性因素表
在这里插入图片描述
要求:
(1)根據以上未调整的功能点数表 和复杂性因素表,用功能点技术估算每个子功能的规模;

答: (1)习题中仅对需求做出了粗略描述,每项都都应该进一步扩展,以提供细节需求和定量约束。例如,在开始估算软件规模之前,需要确定“良好的人机界面设计特征”的具体含义,以及对“CAD数据库”的规模和复杂度的具体需求。
经过对需求的进一步精化,分解出软件的下述7 个主要的子功能:
① 用户界面及控制机制;
② 二维几何图形分析;
③ 三维几何图形分析;
④ 数据库管理;
⑤ 计算机图形显示机制;
⑥ 外部设备控制;
⑦ 设计分析模块。

(2)从历史数据得知,开发这类系统的平均生产率是620LOC/PM,如果软件工程师的平均月工资是8000元,请估算开发本系统的工作量和成本。
答:为了用代码行技术估算软件规模,应该针对每个子功能都分别估计出下述3 个值:乐观值(即最小规模a),悲观值(即最大规模b)和可能值(即最可能规模m)。分别算出这3种规模的平均值,然后用下式的加权平均法计算每个子功能规模,结果示于表10.4

表10.4 代码行技术的估算表
在这里插入图片描述

(3)如果从历史数据得知,开发这类系统的平均生产率是6.5FP/PM,请估算开发本系统的工作量和成本。
答:使用功能点技术估算软件规模时,对软件的分解是基于信息域特性而不是基于软件功能。表10.5给出了对5个信息域特征的估计值。为了计算未调整的功能点数,假设每个信息域都是平均级的。
接下来估计14个技术复杂性因素的值,并且计算DI的值,表10.6 列出了得到的结果。

表10.5 估算调整的功能点数
在这里插入图片描述

表10.6 估算复杂性因素
在这里插入图片描述

然后用下式计算技术复杂性因子:TCF=0.65+0.01×DI=1.14
最后计算功能点数:
FP=UFP×TCP
=31×1.14
=363
第三题: 面向对象程序设计语言主要有哪些技术特点?
答:一般说来,纯面向对象语言着重支持面向对象方法研究和快速原型的实现,而混合型面向对象语言的目标则是提高运行速度和使传统程序员容易接受面向对象思想。成熟的
面向对象语言通常都提供丰富的类库和强有力的开发环境。在选择面向对象语言时,应该着重考察语言的下述技术特点。
① 支持类与对象概念的机制。
② 实现聚集结构的机制。
③ 实现泛化结构的机制。
④ 实现属性和服务的机制。
⑤ 类型检查机制。
⑥ 类库。
⑦ 效率。
⑧ 持久保存对象的机制。
⑨ 参数化类的机制。
⑩ 开发环境。
第四题: CMM 的基本思想是什么 ? 为什么要把能力成熟度划分成 5 个等级 ?
答:CMM的基本思想是,由于软件危机是因我们对软件过程管理不善而引起的,所以新软件技术的运用并不会自动提高软件的生产率和质量,提高软件生产率和软件质量的关键,是改进对软件过程的管理。能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。
对软件过程的改进不可能一蹴而就,只能是在完成一个又一个小的改进步骤基础上不断进行的渐进过程。因此,CMM把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。这5个成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力,这些等级还能帮助软件机构识别出其现有的软件过程的缺陷,指出应该做哪些改进,并且帮助他们把应做的改进工作排出优先次序。成熟度等级是妥善定义的向成熟软件机构前进途中的平台,每个成熟度等级都为软件过程的继续改进提供了一个台阶。

第五题: 什么是基线?为什么要建立基线?
答:是已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。建立基线的三大原因是:重现性、可追踪性和报告。
重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力。可追踪性建立项目工件之间的前后继承关系。其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。
建立基线后,需要标注所有组成构件和基线,以便能够对其进行识别和重新建立。

第六题:对象和属性之间有何区别 ?
答:对象是对客观世界实体的抽象,它是描述实体静态属性的数据和代表实体动态行为的操作结合在一起所构成的统一体。属性只不过是对象的一种特性,它是组成对象的一种成分。

第七题:为什么应该尽量使用面向对象语言来实现面向对象分析和设计的结果 ?
答:面向对象语言充分支持对象、类、封装、继承、多态、重载等面向对象的概念,编译程序能够自动地在目标程序中实现上述概念,因此,把面向对象的设计结果翻译成面向对象程序比较容易,这就不仅降低了编程工作量而且减少了编程错误。更重要的是,从面向对象分析到面向对象设计再到面向对象程序设计,始终使用统一的概念,既可以保证在软件开发过程的各个阶段之间平滑过渡,又有助于提高软件的可重用性和可维护性。

第八题: 解释以下名词:
1、COCOMO2模型。
COCOMO是构造性成本模型(constructive cost model)的英文缩写。1981年Boehm在《软件工程经济学》中首次提出了COCOMO模型。1997年Boehm等人提出的COCOMO2模型,是原始的COCOMO模型的修订版,它反映了10多年来在成本估计方面所积累的经验。
COCOMO2给出了3个层次的软件开发工作量估算模型:
(1)应用系统组成模型。
这个模型主要用于估算构建原型的工作量,模型名字暗示在构建原型时大量使用已有的构件。
(2)早期设计模型。
这个模型适用于体系结构设计阶段。
(3)后体系结构模型。
这个模型适用于完成体系结构设计之后的软件开发阶段。
COCOMO2使用的5个分级因素:
(1)项目先例性。
(2)开发灵活性。
(3)风险排除度。
(4)项目组凝聚力。
(5)过程成熟度。

2、面向对象的多态性。
答:面向对象的软件开发语言具有三个重要的特点分别为封装性、继承性、多态性。封装性即意味着对象封装其内部的数据,使其对外不可见,以保证数据的安全性。继承性是代码复用的一个很好的解决方案,但是继承关系是编译器在编译阶段就为所有的对象决定的,因而在软件工程过程中,继承性太过死板,存在很大的局限性。而多态性,它是将多种不同的特殊行为进行抽象的一种能力,通过结合继承性,多态性很好地解决了OO遇到的很多麻烦,使得面向对象的编程方式最终得到淋漓尽致的推广。

3、面向对象的方法。
答:面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类。
面向对象的方法学可以用下列方程来概括:
OO=objects+classes+Inheritance+communication with messages,即,既使用对象又使用类和继承等机制,且对象之间仅能通过传递消息实现彼此通信。

4、面向对象的继承性
答:在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。
面向对象软件技术把类组成一个层次结构的系统(类等级):一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的全部描述(数据和操作)。

  • 继承具有传递性,即一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述。

  • 当类等级为树形结构时,类的继承是单继承;当允许一个类有多个父类时,类的继承是多重继承。多重继承的类可以组合多个父类的性质构成所需的性质,使用多重继承时要注意避免二义性。

  • 当需要扩充原有的功能时,派生类的方法可以调用其基类的方法,并在此基础上增加必要的程序代码;当需要完全改变原有操作的算法时,可以在派生类中实现一个与基类方法同名而算法不同的方法;当需要增加新的功能时,可以在派生类中实现一个新的方法。

  • 有了继承性可以用把已有的一般性的解加以具体化的办法,来达到软件重用的目的。

5、面向对象的高内聚低耦合。

答:是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低。目的是使程序模块的可重用性、移植性大大增强。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。

6、Gantt(甘特)图。
答:Gantt(甘特)图是历史悠久、应用广泛的制定进度计划的工具,它用水平横线代表任务,线的长度代表任务持续时间。

7、信息隐藏。(Data Hiding) 。
答:信息隐藏原理指出,在设计软件模块时应该使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节。
“隐藏”意味着可以通过定义一组独立的模块来实现有效的模块化,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。
使用信息隐藏原理设计软件模块,有助于减少修改软件时所犯的错误。

8、面向对象的属性。
答:封装性、继承性、多态性。

第九题:王大夫在小镇上开了一家牙科诊所 。 他有一个牙科助手、一个牙科保健员和一个接 待员 。 王大夫需要一个软件系统来管理预约 。 当病人打电话预约时 ,接待员将查阅预约登记表 ,如果病人申请的就诊时间与已定下的预约时间冲突 ,则接待员建议一个就诊时间以安排病人尽早得到诊治。 如果病人同意 建议的就诊时间 ,接待员将输入约定时间和病人的名字 。 系统将核实病人的名字并提供 记录的病人数据 ,数据包括病人的病历号等 。 在每次治疗或清洗后 ,助手或保健员将标记 相应的预约诊治已经完成 ,如果必要的话会安排病人下一次再来 。 系统能够按病人姓名和按日期进行查询 ,能够显示记录的病人数据和预约信息。 接 待员可以取消预约 ,可以打印出前两天预约尚未接诊的病人清单。 系统可以从病人记录 中获知病人的电话号码 。 接待员还可以打印出关于所有病人的每天和每周的工作安排 。
(1). 建立下述牙科诊所管理系统的对象模型。
(2). 建立述牙科诊所管理系统的用例模型。
(3). 用数据流图建立所述牙科诊所管理系统的功能模型 。
(4). 画出所述牙科诊所管理系统的状态图。

答:从对牙科诊所问题的陈述中,可以找出下列名词作为对象的候选者:
王大夫,小镇,牙科诊所,牙科助手,牙科保健员,接待员,软件系统,预约,病人,预约登记表,就诊时间,预约时间,约定时间,系统,名字,记录的病人数据,病历号,姓名,日期,预约信息,病人清单,病人记录,电话号码,每天工作安排,每周工作安排。

通常,通过词法分析找到的候选对象中有许多并不是问题域中真正有意义的对象,因此,必须对这些候选对象进行严格的筛选,从中删去不正确的或不必要的,只保留确实应该记录其信息或需要其提供服务的那些对象。

具体说到牙科诊所问题,“王大夫”只不过是牙医的一个实例,实际上,本软件系统的主要功能是管理病人的预约,并不关心诊所内每名工作人员的分工,因此,牙医、牙科助手、牙科保健员和接待员都不是问题域中的对象;“小镇”是牙科诊所的地址属性,不是独立的对象;“软件系统”和“系统”是同义词,指的是将要开发的软件产品,不是问题域中的对象;“就诊时间”、“预约时间”和“约定时间”在本问题陈述中的含义相同,指的都是预约的就诊时间,实际上,预约的就诊时间既包括日期又包括时间,但是,它们是预约登记表包含的属性,不是问题域中独立的对象;“名字”和“姓名”是同义词,应该作为病人和预约登记表的属性;“记录的病人数据”实际上就是“病人记录”,可以统一使用“病人记录”作为对象名;“病历号”和“电话号码”是病人记录的属性,不是独立的对象;从问题陈述可知,“病人清单”是已预约但尚未就诊的病人名单,应该包含病人姓名、预约的就诊时间等内容,它和“预约信息”包含的内容基本相同,可以只保留“病人清单”作为问题域中的对象。接下来分析确定问题域中对象彼此之间的关系。“每天工作安排”和“每周工作安排”有许多共同点,可以从它们泛化出一个父类“工作安排”。此外,问题域的对象之间还有下述关联关系:牙科诊所诊治多名病人;一位病人有一份病人记录;一位病人可能预约多次也可能一次也没预约;牙科诊所在一段时间内将打印出多份病人清单;牙科诊所开业以来已经建立了多份预约登记表;预约登记表中记录了多位病人的预约;根据预约登记表在不同时间可以制定出不同的工作安排。
综上所述,可以画出下图所示的牙科诊所管理系统的对象模型。

第十题:面向对象软件的哪些特点使得测试和维护变得比较容易 ? 哪些特点使得测试和维护变得比较困难 ?
答:封装性使得对象成为独立性很强的模块,理解一个对象所需要了解的元素,大部分都在该对象内部,因此,测试和维护比较容易。对象彼此之间仅能通过发送消息相互作用,不能从外界直接修改对象的私有数据,进一步使得测试和维护变得更容易。信息隐藏确保了对对象本身的修改不会在该对象以外产生影响,从而大大减少了回归错误的数量,因此,这个特点也使得测试和维护变得比较容易。
与封装性和信息隐藏相反,继承性和多态性加大了测试(含调试)和维护的难度:

  • 由于派生类继承了它的全部基类的属性和方法,为了理解和修改派生类,必须研究整个继承结构;

  • 如果继承结构的上层结点(即基类)发生了某种变化,则这种变化将传递给下层结点(即派生类);

  • 由于多态性和动态联编的存在,如果程序中有调用多态操作的语句,调试人员或维护人员将不得不研究运行时可能发生的各种绑定,并且对代码运行情况进行跟踪,才能判断出大量方法中的哪一个方法会在代码的这一点被调用。

第十一题: 为什么说参数化类有助于提高可重用性?
答:在实际的应用程序中,往往有这样一些软件元素(即函数、类等软件成分),从它们的逻辑功能看,彼此是相同的,所不同的主要是处理的对象类型不同。
所谓参数化类,就是使用一个或多个类型去参数化一个类的机制,有了这种机制,程序员就可以先定义一个参数化的类模板(即在类定义中包含以参数形式出现的一个或多个类型),然后在使用时把数据类型作为参数传递进来,从而把这个类模板在不同的应用程序中重复使用,或在同一程序的不同部分重复使用。

第十二题: 为什么推迟关键路径上的任务会延迟整个项目?
答:关键路径定义为一组任务(称为关键任务),这组任务决定了完成项目所需要的最短时间。如果位于关键路径上的一个关键任务的完成时间被推迟了,则关键路径上的下一个任务的开始时间和结束时间也要相应地延迟。这样依次传递,会波及关键路径上的最后一个任务,从而延迟整个项目。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
引言 1.1编写目的 图书管理系统详细设计是设计的第二个阶段,这个阶段的主要任务是在图书管理系统概要设计书基础上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,为编写源代码提供必要的说明。 概要设计解决了软件系统总体结构设计的问题,包括整个软件系统的结构、模块划分、模块功能和模块间的联系等。详细设计则要解决如何实现各个模块的内部功能,即模块设计。具体的说,模块设计就是要为已经产生的图书管理各子系统设计详细的算法。但这并不等同于系统实现阶段用具体的语言编码,它只是对实现细节作精确的描述,这样编码阶段就可以将详细设计中对功能实现的描述, 直接翻译、转化为用某种程序设计语言书写的程序。 1.2 参考资料 《实用软件工程》 《Oracle数据库》 《数据结构》 《软件工程概述》 2.软件结构 3.模块描述 3.1 模块名称 登陆模块 3.1.1功能描述 (1)功能类型:查询数据 (2)功能描述: 提高系统的安全性 (3)前提业务: 无 (4)后继业务: 02管理模块 (5)功能约束:权限约束 3.1.2类属性和类方法 3.1.3 重要的算法 进行对索要登陆人员进行信息注册,给予所登陆的账号进行登陆,并且进行验证。 3.2 模块名称 管理模块 3.2.1功能描述 (1) 功能类型:其他 (2)功能概述: 总体归纳图书馆管理功能 (3) 前提业务:登陆模块(01) (4) 后续业务: 021, 022, 023, 024, 03(5)功能约束: 权限约束 (6) 约束描述: (7) 操作权限:图书馆管理人员 3.2.2类属性和类方法 3.2.3 重要的算法 1).图书编号生成(自动生成)录入时自动生成,对于新书的编号,显示添加图书完成后的页面中 2).图书信息修改(即对该类图书总量能修改,包含图书的编号 数据库操作,根据数据库显示修改之前,后的页面 3).注销(破损图书) 数据库操作,注销页面 唯一编号--检索出先关书籍信息--删除 4).查询 3.3 模块名称 (031)图书信息查询模块 3.3.1功能描述 (1) 功能类型:查询数据 (2)功能概述: 显示查询结果 (3)前提业务: 无 (4) 后继业务: (5) 功能约束:没有约束; (6)约束描述: (7)操作权限: 面向所有用户 3.3.2类属性和类方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony带水!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值