《软件工程》典型习题及答案
第一章典型习题及答案
1、美国一家公司在1982年计划用FORTRAN语言开发一个在VAX750计算机上运行的应用程序,估计这个程序的长度为10000条FORTRAN指令。如果平均每人每天可以开发出10条FORTRAN指令,请问:
(1)开发这个应用程序将用多少日?
(2)假设程序元的月平均工资为4000美元,每月按20个工作日计算,这个软件的成本是多少美元?
(3)1982年VAX750计算机硬件价格约为125000美元,在那一年这个软件的成本在总成本中多大比例?
(4)20年后,一台性能远远优于VAX750的微型计算机的价格约为2000美元,这时软件开发生产率已提高到平均每人每天可以开发40条指令,而程序员的月平均工资也已涨到8000美元。如果在2002年开发上述FORTRAN应用程序,则该软件的成本在总成本中占多大比例?
2、根据历史数据可以作出如下的假设:
对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960)
存储器的价格按下面公式描述的趋势逐年下降:P1=0.38*0.72Y-1974(美元/位)
如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048*0.72Y-1974(美元/字)
在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格.
基于上假设可以比较计算机硬件和软件成本的变化趋势.
(1)在1985年对计算机存储器容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少?
(2)假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元.如果一条指令为一个字长,计算使存储器装满程序所需用的成本.
(3)假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)(2)题所问.
3、假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位.一旦实现并测试完之后,该产品将被抛弃..你打算采用哪种软件生命周期模型?为什么?
答案:
1. 答:(1)10000/10=1000(人日)
开发这个应用程序大约需用1000个人日.需要指出的是,上述工作量包括问题定义\可行性研究\需求分析\总体设计\详细设计\编码和单元测试\综合测试等各个开发阶段的工作量,而不仅仅是编写程序所需的工作量.
(2)每月平均工作20天,故开发这个软件需要用1000/20=50(人月)
每人每月的平均工资为4000美元,因此这个软件的成本大约为50*4000=200000(美元)
(3)软件成本与硬件成本之和为计算机系统的总成本.这个软件的成本在总成本中所占的比例为200000/(00000+125000)=61.5%
(4)在2002年开发这个应用程序所需的工作量约为10000/(40*20)=12.5(人月)
这个软件的成本大约为12.5*8000=100000(美元)
该软件的成本在总成本中所占的比例为100000/100000+2000=98%
2.答:(1)在1985年对计算机存储容量的需求,估计是
M=4080e0.28(1985-1960)=4080e7=4474263(字)
如果字长为16位,则这个存储器的饿价格是P=0.048*0.721985-1974*4474263=5789(美元)
(2)如果一条指令的长度为一个字,则使存储器装满程序共需4474263条指令.
在1985年一名程序员每天可开发出10条指令,如果每月有20个工作日,则每人每月开发出10*20=200条指令.
为了开发出4474263条指令以装满存储器,需要的工作量是4474263/200≈22371(人月)
程序员的月平均工资是4000美元,开发出4474263条指令的成本为22371*4000=89484000(美元)
(3)在1995年对存储容量的需求,估计为M=4080e0.28(1995-1960)=4080e9.8=73577679(字)
如果字长为32位,则这个存储器的价格是
P=0.003*32*0.721995-1974*73577679=7127(美元)
如果一条指令为一个字长,则为使存储器装满程序共需73577679条指令.
在1995年一名程序员每天可开发出30条指令,每月可开发出600条指令,为了开发出装满整个存储器的程序,需要的工作量为73577679/600=122629(人月)
开发上述程序的成本为122629*6000=735776790(美元)
3.答:对这个软件的需求很明确,实现开平方功能的算法也很成熟,因此,既无须通过原型模型来分析需求也无须用原型来验证设计方案.此外,一旦实现并测试完成之后,该产品将被抛弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件.
总上所述,为了开发这个简单的软件,使用大多数人所熟悉的瀑布模型就可以了.
第二章典型习题及答案
1.请为某仓库的管理设计一个ER模型。该仓库主要管理管理零件的订购和供应等事项。仓库向工程项目供应零件,并且根据需要向供应商订购零件。
2.目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。某医院打算开发一个一计算机为中心的患者监护系统,请分层次地画出描述本系统的功能的数据流图。
医院对患者监护系统的基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等)、定时记录病人情况以形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信息,此外,护士在需要时还可以要求系统输出某个指定病人的病情报告。
3.某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,如果是本地电话再接着拨8位电话号码(第1位不是0),如果是外地电话则先拨3位区码,再拨8位电话号码(第1位不是0)。
请用定义上述的电话号码。
答案:
1.答:建立ER图的大致过程如下所述:
(1) 确定实体类型。本题中共有三类实体,分别是“零件”、“工程项目”和“供应商”。
(2) 确定联系类型。
一种零件可供应多个工程项目,一个工程项目需要使用多种零件,因此,零件与工程项目之间的联系“供应”、是多对多(M:N)联系;类似地,零件与供应商之间的联系“订购”,也是多对多(M:N)联系。
(3) 确定实体类型和联系类型的属性。
实体类型“零件”的主要属性是:零件编号、零件名称、颜色、重量。实体类型“工程项目”的属性主要是:项目编号,项目名称、开工日期。实体类型“供应商”的属性主要有:供应商编号,供应商名称,地址。
联系类型“供应”的属性是,向某工程项目供应的某种零件的数量。联系类型“订购”的属性是,向某供应商订购的某种零件的数量。
(4) 把实体类型、联系类型及属性组合成ER图
仓库管理的ER图如下图所示
M
M
N
N
2..答:从问题陈述可知,本系统的数据源点是“病人”和“护士”,他们分别提供生理信号和要求病情报告的信息。进一步分析问题陈述,从系统应该“定时记录病人情况以形成患者日志”这项要求可以想到,还应该有一个提供日期和时间信息的“时钟”作为数据源点。
从问题陈述容易看出,本系统的数据终点是接收警告信息和病情报告的护士。
系统对病人生理信号的处理功能主要是“接收信号”、“分析信号”和“产生警告信息”。此外,系统还应该具有“定时取样生理信号”、“更新日志”和“产生病情报告”的功能。
为了分析病人生理信号所形成的“患者日志”,显然也是一个数据存储。
本系统的基本系统模型如图所示。
患者监护系统的功能及数据流图
3.答案:电话号码=[校内电话号码|校外电话号码]
校内电话号码=非零数字+3位数字
校外电话号码=[本市号码|外地号码]
本市号码=数字零+8位数字
外地号码=数字零+3位数字+8位数字
非零数字=[1|2|3|4|5|6|7|8|9]
数字零=0
3位数字=3{数字}3
8位数字=非零数字+7位数字
7位数字=7{数字}7
数字=[0|1|2|3|4|5|6|7|8|9]
第三章典型习题及答案
1.欲开发一个银行的活期存取款业务的处理系统:储户将填好的存/取款单和存折交给银行工作人员,然后由系统作以下处理;
(1)业务分类处理:系统首先根据储户所填的存/取款单,确定本次业务的性质,并将存/取款单和存折交下一步处理;
(2)存款处理:系统将存款单上的存款金额分别记录在存折和帐目文件中,并将现金存入现金库;最后将存折还给储户;
(3)取款处理:系统将取款单上的取款金额分别记录在存折和帐目文件中,并从现金库提取现金;最后将现金和存折还给储户。
绘制该系统的数据流图。
顶层
一层
二层
第四章典型习题及答案
1、按照形式化的程度 , 可以把软件工程使用的方法划分成那三类:
答:非形式化、半形式化和形式化
2、所谓形式化方法指:
答:描述系统性质的基于教学的技术,也就是说,入伙一种方法有坚实的数学基础,那么它就是形式化的。
3、典型的形式化的系统的需求分析的规格说明的描述工具有哪三种:
答:有穷状态机、Petri网,Z语言
4、应用形式化方法的准则有:
答:(1).应该选用适当的表示方法。
(2).应该形式化,但不要过分形式化。
(3).应该估算成本。
(4).应该有形式化方法顾问随时提供咨询。
(5).不应该放弃传统的开发方法。
(6).应该建立详细的文档。
(7).不应该放弃质量标准。
(8).不应该盲目依赖形式化方法。
(9).应该测试、测试再测试。
(10).应该重用。
5、 Petri
网包含哪四种元素 :
答:一组位置 P 、一组转换 T 、输入函数 I 以及输出函数 O
6、Z 语言描述的最简单的形式化规格说明含有那 4 个部分:
答:(1)给定的集合、数据类型及常数。
(2)状态定义。
(3)初始状态。
(4)操作。
第五章典型习题及答案
1.软件设计的基本原理包括哪些内容?
答:软件设计的基本原理:
(1)模块化(四个属性:接口、功能、逻辑、状态)
(2)抽象
(3)信息隐蔽
(4)模块独立性(两个定性的度量标准:耦合性与内聚性)
2.衡量模块独立性的两个标准是什么?它们各表示什么含义?
答:两个定性的度量标准:耦合与内聚性
耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
内聚性:也称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。模块内元素联系越紧密,内聚性越高。
3.什么是模块的影响范围?什么是模块的控制范围?它们之间应该建立什么关系?
答:模块的影响范围:受该模块内的一个判定影响的所有模块的集合。
模块的控制范围:模块本身及其所有下属模块(直接或间接从属于它的模块)的集合。
一个模块的影响范围应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽量靠近。
4.试述"变换分析","事务分析"的设计步骤。
答:变换分析:
a.确定DFD中的变换中心。
b.设计软件结构的顶层和第一层-------变换结构。
c.设计中下层模块。(输入模块下属模块的设计,输出模块下属模块的设计,变换模块下属模块的设计,设计的优化)
事务分析:
a.确定DFD中的事务中心和加工路径。
b.设计软件结构的顶层和第一层------事务结构。(接收、发送给支)
c.事务结构中、下层模块的设计、优化工作同变换结构。
5.高考录取统分子系统有如下功能:
(1) 计算标准分:根据考生原始分计算,得到标准分,存入考生分数文件;
(2) 计算录取线分:根据标准分、招生计划文件中的招生人数,计算录取线,存入录取线文件。
试根据要求画出该系统的数据流程图,并将其转换为软件结构图。
答:
(1) 数据流图:
(2) 软件结构图:
① 原始分 ② 标准分 ③ 招生计划 ④ 录取线
6.欲开发一个银行的活期存取款业务的处理系统:储户将填好的存/取款单和存折交给银行工作人员,然后由系统作以下处理;
(1)业务分类处理:系统首先根据储户所填的存/取款单,确定本次业务的性质,并将存/取款单和存折交下一步处理;
(2)存款处理:系统将存款单上的存款金额分别记录在存折和帐目文件中,并将现金存入现金库;最后将存折还给储户;
(3)取款处理:系统将取款单上的取款金额分别记录在存折和帐目文件中,并从现金库提取现金;最后将现金和存折还给储户。
绘制该系统的数据流图和软件结构图。
顶层
一层
二层
软件结构图
1.结构化程序设计基本要求要点是什么?
答:a.采用自顶向下、逐步求精的程序设计方法
b.使用三种基本程序控制结构构造程序
1).用顺序方式对过程分解,确定各部分的执行顺序。
2).用选择方式对过程分解,确定某个部分的执行条件。
3).用循环方式对过程分解,确定某个部分重复的开始和结束的条件。
c.主程序员组的组织形式。
3.简述Jackson 方法的设计步骤。
答:Jsp 方法一般通过以下5个步骤来完成设计:
a.分析并确定输入/出数据的逻辑结构,并用Jackson 结构图表示这些数据结构。
b.找出输入数据结构和输出数据结构中有对应关系的数据单元。
c.按一定的规则由输入、输出的数据结构导出程序结构。
d.列出基本操作与条件,并把它们分配到程序结构图的适当位置。
e.用伪码写出程序。
4.给出一组数从小到大的排序算法,分别用下列工具描述其详细过程:
(1) (1) 流程图;(2)N—S图;(3)PAD图;(4)PDL语言。
PDL语言略
5.有一过程,其流程如下图所示。
其中b1 、b2、 b3为判定的逻辑条件,s1、 s2为加工处理。试用判定表给予描述。
答:
6.某交易所规定给经纪人的手续费计算方法如下:总手续费等于基本手续费加上与交易中的每股价格和股数有关的附加手续费。如果交易总金额少于1000元,则基本手续费为交易金额的8.4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额的5%,再加34元;如果交易总金额超过10,000元,则基本手续费为交易金额的4%加上134元,当每股售价低于14元时,附加手续费为基本手续费的5%,除非买进,卖出的股数不足100的倍数,在这种情况下附加手续费为基本手续费的9%,当每股含售价在14元到25元之间时,附加手续费为基本手续费的2%,除非交易的股数不是100的倍数,在这种情况下附加手续费股为基本手续费的6%。当每股售价超过25元时,如果交易的股数零散(即,不是100的倍数),则附加手续费为基本手续费的4%。
要求:a.用判定表表示手续费的计算方法。
b.用判定树表示手续费的计算方法。
第七章典型习题及答案
1、软件测试的目的是?测试中要注意那些原则?
答:软件测试的目的是的发现软件中存在错误的活动。好的测试用例可以发现至今没有发现的错误、好的测试用例可以发现至今没有发现的错误测试。要提供输入数据还要提供输出数据、保留测试用例、检查它是否做了应该做的还要检查它是否做了不该做的、避免自己测试自己的程序、多错误多的地方要更严格的测试。
2、什么是白盒法?有那些覆盖标准?比较他们的检错能力。
答:将程序看成是白盒子,认真的分析程序的结构和功能制定测试用例来测试。有逻辑覆盖(语句覆盖、判断覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖、路径覆盖)
3、什么是黑盒法?有那些测试方法?特点?
答:将程序当成是黑盒子以设计中的功能为标准在程序的接口出进行测试看它能否达到功能要求。等价类划分、边界值分析、因果图、错误推测。
4.软件测试要经过那些步骤?这些步骤和开发那些阶段对应?
答:单元测试对应详细设计和编码、集成测试对应概要设计、确认测试对应需求分析。
5.单元测试有那些内容?
答:测试模块的接口、数据结构、重要的执行路径、错误处理、边界条件。
6.什么是确认测试?该阶段有那些工作?
答:按照需求规格说明书中的确定指标对系统进行功能与性能的测试。进行确认测试(对照需求规格说明书用黑盒法进行测试)、软件配置检查。(文档的完整性、正确性,发现遗漏和错误及时补充和修改)
7.对以下程序进行测试:
PROCEDURE EX(A,B:REAL;VAR X:REAL);
BEGIN
IF(A=3)OR(B> 1)THEN
X:=A×B
IF(A>2)AND(B=0)THEN
X:=A-3
END
先画出程序流程图。 再按不同逻辑覆盖法设计一种(写出名称)测试数据。
答:
语句覆盖 A=3 B=0
8. 如图显示某程序的逻辑结构。
试为它设计足够的测试用例,分别实现对程序的判定覆概、条件覆概和条件组合覆概。
设计测试方案
覆盖种类 |
需满足的条件 |
测试数据 |
期望结果 |
|
判定覆盖 |
A>1,B=0 |
A=2,B=0 |
执行S1 |
|
A>1,B¹0或 A£1,B=0或 A£1,B¹0 |
A=2,B=1或 A=1,B=0或 A=1,B=1 |
执行S2 |
||
条件覆盖 |
以下四种情况各出现一次 |
|
|
|
A>1 |
B=0 |
A=2,B=0 |
执行S1 |
|
A£1 |
B¹0 |
A=1,B=1 |
执行S2 |
|
条件组合 覆盖 |
A>1,B=0 |
A=2,B=0 |
执行S1 |
|
A>1,B¹0 |
A=2,B=1 |
执行S2 |
||
A£1,B=0 |
A=1,B=0 |
执行S2 |
||
A£1,B¹0 |
A=1,B=1 |
执行S2 |
1、软件维护有哪些内容?
答:a、校正性维护b、适应性维护c、完善性维护d、预防性维护
2.软件维护的特点是什么?
答:a、非结构化维护和结构化维护
b、维护的困难性
c、软件强维护的费用
3.软件维护的流程是什么?
答:a、制定申请维护报告b、审查申请报告并批准c、进行维护并作详细记录d、覆审
4.什么是软件的可维护性?可维护性的度量的特性是什么?
答:软件的可维护性:软件能够被理解、校正、适应及增强功能的容易程度。
可维护性的度量的特性是:可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。
5.软件维护有哪四类?
答:预防性维护,纠错性维护,完善性维护,适应性维护
6.软件可维护性的度量
答:可以从以下四个方面来度是软件的可维护性:
a.可理解性
b.可测试性
c.可修改性
d.可移植性
1、 渐增模型有那几种?特点?
答:增量构造和演化提交。增量构造是瀑布模型的基础上在一些的阶段中采用增量开发一些阶段整体开发。演化提交是在瀑布模型的基础上所有阶段都使用增量开发也就是不紧使用增量开发也使用增量提交。
2、 快速原形有那几种?特点?
答:探索型、试验型、演化型。探索型:在需求阶段帮助明确理解需求用完抛弃。试验型:在设计阶段考核现行方案是否合适用完抛弃。演化型:及早的向用户展示一个系统的原形包含主要的功能得到用户的认可后将原形不断的扩充直到系统完成。
3、 快速原形开发的步骤?
答:快速开发、需求、构造原形、原形、运行原形、评价原形、修改意见。
4、 评价快速原形的优缺点?
答:可以更清楚的理解用户的需求、开发阶段可以用原形解决局部的困难,通过原形的开发可以让用户看见系统的初步功能的实现有利与用户的开发人员更好的交流,及早的解决存在的问题减少开发的风险。
缺乏好的管理工具和开发环境、缺乏管理机制、对开发人员的技术要求高、更新文档比较困难。
5、 对比瀑布模型和增量模型,指出增量模型的新思路。
答:瀑布模型是一种整体的开发模型,开发的每一阶段必须按线性的顺序来进行,前一阶段的工作没有完成后一阶段的工作就不能开始。由于需求分析的易变性使的软件开发工作不顺利,同时瀑布模型的每个阶段有不可避免的错误出现,那么延伸到以下的各个阶段错误就会放大。增量模型是非整体开发的模型它采用渐增模型和原形模型,软件的开发是用增量开发和增量提交。
6、填空题
1.面向对象方法认为系统是由应用域的______组成。
2.对象具有状态,描述对象的状态用它的______。
3.对象的抽象是______。
4.类之间有两种结构关系,它们是分类关系和______关系。
5.面向对象程序设计语言与其他程序设计语言的最主要差别是它具有______。
6.动态模型描述了系统的______。
二、选择题
1.火车是一种陆上交通工具,火车和陆上交通工具之间的关系是( )关系。
A.组装
B.整体成员 C.has
a D.一般具体
2.面向对象分析阶段建立的三个模型中,核心的模型是( )模型。
A.功能
B.动态
C.对象 D.分析
3.对象模型的描述工具是(
)。
A.状态图
B.数据流图 C.对象图
D.结构图
4.在有多重继承的类层次结构中,它的类层次结构是(
)层次结构。
A.树型
B.网状型 C.环型
D.星型
5.描述类中对象的行为,反映了状态与事件关系的是(
)。
A.对象图
B.状态图 C.流程图
D.结构图
6.在确定属性时,所有( )是候选的属性。
A.动词
B.名词 C.修饰性名词词组
D.词组
答案 :
一、填空题
1.对象 2.属性值
3.类
4.组装
5.继承性 6.动态行为
二、选择题
1.D 2.C 3.C 4.B
5.B 6.C
第十章典型习题及答案
1、 说明对象、类、类结构、消息的基本概念?
答:对象:是客观实体在问题域中的抽象。
类:具有相似或相同性质的对象的抽象就是类。
类结构:类的结构通常有一般----具体(分类结构)整体---抽象(组装结构)
消息:对象之间通信的构造。
2、 面向对象的特征和要素?
答:特征:一致性、多态性、分类性、继承性。要素:共享、封装、抽象。
3、 说明对象模型的特征?
答:对象模型表示了静态的、结构化的、系统数据性质,描述了系统的静态结构,表现了对象间的相互关系,模型主要关心系统中对象的结构、属性和操作使用对象图来描述。
4、 说明动态模型的特征。
答:动态模型描述了与时间和变化有关的系统性质,描述的是系统的控制结构,表示了瞬间的系统控制性质,它关心系统的控制,操作顺序,从对象的状态角度出发表现对象的相互行为。
5、 功能模型的特征。
答:功能模型描述了系统的所有计算。
6、 三种模型的关系?
答:功能模型描述发生了什么,动态模型确定什么时候发生,对象模型确定发生的客体。
7、 三种模型的建立过程?
答:对象模型:确定类、准备数据字典、确定联系、确定属性、完善对象模型。
动态模型:准备脚本、准备事件跟踪、构造状态图。
功能模型:确定输入输出值、建立DFD。
8、一本书有一个封面、一个目录、一个前言、若干章、每章有若干节、每节有若干段每段有若干句子、每节有0个或多个插图,还有0个或多个表格,最后有一个附录。试建立该书的对象模型。
答:
9.CASE的含义是什么?
CASE是计算机辅助软件工程的简称。简单的说,可以将CASE理解为: CASE=软件工程+自动化工具.从狭义角度解释它是一组工具和方法的结合;从广义角度解释它是辅助软件开发的任何计算机技术;从学术研究角度解释:它是软件开发方法、软件开发管理和软件工具等方面多年研究和发展的产物;从软件产业角度解释它是种类繁多的软件开发和系统集成的产品和软件工具的集合。
10.CASE工具一般分为几类?有什么区别?
CASE工具可以理解为除OS外的所有软件工具的总称。按对软件过程的支持范围CASE工具分为三类:一是工具: 支持单个任务;二是工作台:支持某一软件过程或一个过程中的某些活动;三是环境:支持某些软件过程及相关的大部分活动。
11.工作台实现软件工具集成的方式?
工作台实现软件工具集成的方式是通过共享文件、共享仓库或共享数据结构来集成。
第十一章典型习题及答案
1.
为什么应该尽量使用面向对象语言来实现面向对象分析和设计的结果。
答:面向对象语言充分支持对象、类、封装、继承、多态、重载等面向对象的概念,编译程序能够自动地在目标程序中实现上述概念,因此,把面向对象的设计结果翻译成面向对象程序比较容易,这就不仅降低了编程工作量而且减少了编程错误。更重要的是,从面向对象分析到面向对象设计在到面向对象程序设计,始终使用统一的概念,既可以保证在软件开发过程的各个阶段之间平滑过度,又有助于提高程序的可靠性和运行性。
2.
使用C++语言编程实现下述简单图形程序的类继承结构。
在显示器屏幕上圆心为(250,100)的位置,画一个半径为25的小圆,圆内显示字符串“you”;在圆心坐标为(250,150)的位置,画一个半径为100的中圆,圆内显示字符串“world”;再在圆心坐标为(250,250)的位置,画一个半径为225的大圆,圆内显示字符串“Universe”.
Enum Boolean{false,true};
Class Location{
Protected:
Int X,Y;
Public:
Location(int InitX,int InitY);
Int GetX();
Int GetY();
};
class point:public Location{
protected:
Boolean Visible;
Public:
Point(int InitX,int InitY);
Void show();
Void hide();
Boolean IsVisible();
};
class Cirle:public point{
protected:
int Radius;
public:
Circle(int InitX,int InitY,int
InitRadius);
Void show();
Void hide();
Int Getradius();
};
class Gmessage:public Location{
char*msg:
int font;
int field;
public:
Gmessage(int MsgX int MsgY,int
MsgFont,int Fieldsize,char*Text);
Void show();
};
class Mcircle:public Circle,public
Gmessage{
public:
Mcircle(int McX,int McY,int McRadius,int
font,char*Msg);
Void show();
};
1、 下面叙述对一个计算机辅助设计(CAD)软件的需求:
该CAD软件接受由工程师提供的二维或三维几何图形数据。工程师通过用户界面与CAD系统交互并控制它,该用户界面应该表现出良好的人机界面特征。几何图形数据及其他支持信息都保存在一个CAD数据库中。开发必要的分析、设计模块、以产生所需要的输出,这些输出将显示在各种不同的图形设备上。应该适当地设计软件,以便与外部设备交互并控制它们。所用的外部设备包括鼠标、数字化扫描仪和激光打印机。
要求:
(1)进一步精华上述要求,把CAD软件的功能分解成若干个子功能;
(2)用代码行技术估算每个子功能的规模;
(3)用功能点技术估算每个子功能的规模;
(4)从历史数据得知,开发这类系统的平均生产率是620LOC/pm,如果软件工程师的平均工资是8000元,请估算开发本系统的工作量和成本。
(5)如果从历史数据得知,开发这类系统的平均生产率是6.5FP/pm,请估算开发本系统的工作量和成本。
答:(1)习题中仅对需求作了粗略描述,每项需求都应该进一步扩展,以提供细节需求和定量约束。例如,在开始估算软件规模之前,需确定“良好的人机界面设计特征”的具体含义,以及对“CAD数据库”的规模和复杂度的具体要求。
经过对需求的进一步精华,分解出软件的下述7个主要的子功能:
用户界面及控制机制;
二维几何图形分析;
三维几何图形分析;
数据库管理;
计算机图形显示机制;
外部设备控制;
设计分析模块。
(1)
为了用代码行技术估算软件规模,应该针对每个子功能都分别估计出下述3个值:乐观值(即最小规模值),悲观值(即最大规模)和可能值(即最可能规模)。然后用加权平均法计算每个子功能的规模,结果示于下表。
功能
乐观值 可能值
悲观值 估计值
用户界面及控制机制
1500
2200 3500 2300
二维几何图形分析
3800
5400
6400
5300
三维几何图形分析
4600
6900
8600
6800
数据库管理
1850 3200
5450
3350
计算机图形显示机制
3100
4900
7000
4950
外部设备控制
1400
2150
2600
2100
设计分析模块
6200 8500
10200
8400
估算出的总代码行数
33200
代码行技术的估算表
(1)
使用功能点技术估算软件规模时,对软件的分解是基于信息域特性而不是基于软件功能。下表给出了对5个信息域特性的估算值。为了计算未调整的功能点数,假设每个信息域特性的复杂度都是平均级别的。
信息域值 乐观值
可能值 悲观值 估计值 特性系数 UFP数
输入数
20
24 30
24
4 96
输出数
12
15
22
16
5
80
查询数
16
22
28
22
4
88
文件数
4
4
5
4
10
40
外部借口数 2
2
3
2
7 14
总计数值
318
估算未调整的功能点数
接下来估计14个技术复杂性因素的值,并且计算DI的值,下表列出了得到的结果。
因素
估计值 因素
估计值
数据通信
2
复杂度的计算
5
分布式数据处理
0
可重用性
4
性能标准
4
安装方便
3
高负荷硬件
2
操作方便
4
高处理率
4
可移植性
5
连机数据输入
4
可维护性
5
终端用户率
4
DI
49
联机更新
3
估算技术复杂性因素
然后用下式计算技术复杂性因子:TCF=0.65+0.01*DI=1.14
最后计算功能点数:FP=UFP*TCF=318*1.14=263
(1)
用代码行技术估算,开发本系统的工作量为
E=33200/620≈56(人月)
开发本系统的成本为:8000*56=448000(元)
2.假设你被指定为项目负责人,你的任务是开发一个应用系统,该系统类似于你的小组以前做过的那些系统,但是规模更大的且更复杂一些.可户已经写出了完整的需求文档.你将选用哪种项目组结构?为什么?你打算采用那种软件过程模型?为什么?
答:由于待开发的应用系统类似于以前做过的系统,开发人员已经积累了较丰富的经验,没有多少技术难题需要攻克.为了减少通信开销,充分发挥技术骨干的作用,统一意志统一行动,提高生产率,加快开发进度,项目组的组织结构以基于主程序员组的形式为宜.
针对待开发的系统,客户已经写出了完整的需求文档,项目组又有开发类似系统的经验,因此,可以采用广大软件工程师熟悉的瀑布模型来开发系统.