软件工程.docx
《软件工程.docx》由会员分享,可在线阅读,更多相关《软件工程.docx(13页珍藏版)》请在冰豆网上搜索。
软件工程
答:
(1) 10000/10=1000(人日)
开发这个应用程序大约需用1000个人日。
需要指出的是,上述工作量包括问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试等各个开发阶段的工作量,而不仅仅是编写程序所需的工作量。
(2)每月平均工作20天,故开发这个软件需要用
1000/20=50(人月)
每人每月的平均工资为4000美元,因此这个软件的成本大约为
50*4000=200000(美元)
(3)软件成本与硬件成本之和为计算机系统的总成本。
这个软件的成本在总成本中所占的比例为
200000/(200000+125000)=61.5%
(4)在2002年开发这个应用程序所需的工作量约为
10000/(40*20)=12.5(人月)
这个软件的成本大约为
12.5*8000=100000(美元)
该软件的成本在总成本中所占的比例为
100000/(100000+2000)=98%
13.
(1)为什么鲍曼拆下存储器就能摆脱计算机的干扰而独自控制宇宙飞船?
我们现在
答:
(1)计算机通过运行程序来控制宇宙飞船,而程序指令存放在存储器中。
拆下存储器之后,计算机因取不来指令而无法运行程序,因此也就无法控制宇宙飞船了。
我们现在遇到的软件问题没有这么严重,还没有出现计算机不服从人的命令的情况。
(2)除非鲍曼能亲自分析有故障的部件,或者在计算机上还安装有另外一套故障检测系统,否则不依靠飞行指挥中心他很难知道HAL的故障预报有问题。
(3)应该把HAL设计成具有若干个储存的问题,供周期性测试之用。
通过把应有的测试结果和HAL实际测试结果加以比较的方法,有可能发现HAL的故障预报问题。
此外,不论怎样具体设计HAL系统,都应该设置一种人工操作模式,并把人工操作模式设置为最高等级的控制模式,在任何情况下计算机控制都不能取消人工操作命令。
1.在软件开发的早期阶段为什么要进行可行性研究?
应该从哪些方面研究目标系统的可行性?
答:
(1)开发一个软件时,需要判断原定的系统模型和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度,如果做不到这些,那么花费在这些工程上的任何时间、人力、软硬件资源和经费,都是无谓的浪费。
可行性研究的实质是要进行一次大大压缩简化了的系统分析和设计过程,就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
(2)一般说来,至少应该从以下三个方面研究每种解法的可行性:
a.技术可行性。
对要开发项目的功能、性能和限制条件进行分析,确定在现有的资源条件下,技术风险有多大,项目是否能实现,这些即为技术可行性研究的内容。
这里的资源包括已有的或可以搞到的硬件、软件资源,现有技术人员的技术水平和已有的工作基础。
b.经济可行性。
进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发,这些即为经济可行性研究的内容对于大多数系统,一般衡量经济上是否合算,应考虑一个“底线”,经济可行性研究范围较广,包括成本—效益分析,长期公司经营策略,开发所需的成本和资源,潜在的市场前景。
c.操作可行性。
有时还要研究社会可行性问题,研究要开发的项目是否存在任何侵犯、妨碍等责任问题。
社会可行性所涉及的范围也比较广,它包括合同、责任、侵权和其他一些技术人员常常不了解的陷阱等。
必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。
5.北京某高校可用的电话号码有以下几类:
校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。
用2.5.2小节讲述的定义数据的方法,定义上述的电话号码。
答:
电话号码=[校内电话号码│校外电话号码]
校内电话号码=非零数字+3位数字
校外电话号码=[本市号码│外地号码]
本市号码=数字零+8位数字
外地号码=数字零+3位数字+8位数字
非零数字=[1│2│3│4│5│6│7│8│9]
数字零=0
3位数字=3{数字}3
8位数字=非零数字+7位数字
1.为什么要进行需求分析?
通常对软件系统有哪些需求?
答:
“需求分析”确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、具体的要求。
为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求,只有深入理解了用户的需求,我们的工作才会有意义。
对软件通常有以下需求:
功能需求:
指定系统必须提供的服务;
性能需求:
指定系统必须满足的定时约束或容量约束,通常包括速度、信息量速率、主存容量、磁盘容量、安全性等方面的需求;
可靠性和可用性需求:
指定系统的可靠性,可用性量化了用户可以使用系统的程度;
出错处理需求:
说明系统对环境错误应该怎么响应;
接口需求:
描述应用系统与它的环境通信的格式;
逆向需求:
说明软件系统不应该做什么;
将来可能提出的要求:
应该明确列出那些虽然不属于当前系统开发范畴,但是据分析将来很可能会提出来的要求。
2.怎样与用户有效地沟通以获取用户的真实需求?
答:
(1)访谈
访谈是最早开始使用的获取用户需求的技术,也是迄今为止仍然广泛使用的需求分析技术;访谈有两种基本形式,分别是正式的和非正式的访谈。
当需要调查大量人员的意见时,请被调查人填写调查表是十分有效的做法。
在访问用户的过程中使用情景分析技术往往非常有效。
所谓情景分析,就是对用户将来使用目标系统解决某个具体问题的方法和结果进行分析。
系统分析员利用情景分析技术,往往能够获知用户的具体需求。
(2)面向数据流自顶向下求精
结构化分析方法实质上就是面向数据流自顶向下逐步求精进行需求分析的方法。
通过可行性研究已经得出了目标系统的高层数据流图,需求分析的一个主要目标就是把数据流和数据存储定义到元素级。
为了达到这个目标,通常从数据流图的输出端着手分析。
(3)简易的应用规格说明技术
简易的应用规格说明技术是一种面向团队的需求收集技术。
这种方法提倡用户与开发者密切合作,共同标识问题,提出解决方案要素,商讨不同的方案并指定基本需求。
目前,这种技术已经成为信息系统领域使用的主流技术。
(4)快速建立软件原型
快速建立软件原型,是最准确,最有效,最强大的需求分析技术。
所谓软件原型,就是快速建立起来的旨在演示目标系统主要功能的可运行的程序。
构建软件原型的要点是,它应该实现用户看得见的功能,省略目标系统的“隐含”功能。
软件原型应该具有的第一个特性是“快速”,第二个特性是“容易修改”。
3.银行计算机储蓄系统的工作过程大致如下:
储户填写的存款单或取款单由业务员输入系
答:
描绘本系统功能的数据流图如图所示。
计算机储蓄系统数据流图
本问题中共有两类实体,分别是“储户”和“储蓄所”,在它们之间存在“存取款”关系。
因为一位储户可以在多家储蓄所存取款,一家储蓄所拥有多位储户,所以“存取款”是多对多(M:
N)关系。
储户的属性主要有姓名、住址、电话号码和身份证号码,储蓄所的属性主要是名称、住址和电话号码,而数额、类型、到期日期、利率和密码则是联系类型存取款的属性。
图是描述计算机储蓄系统中数据对象的实体-联系图。
计算机储蓄系统的实体-联系图
3.一个浮点二进制数的构成是:
一个可选的符号(+或-),后跟一个或多个二进制位,再跟
答:
该有穷状态机的初态是“等待字符串输入”。
在初态若接收到字符+、或字符-、或二进制位,则进入“输入尾数”状态;在初态若接收到其他字符,则进入终态“非浮点二进制数”。
在“输入尾数”状态若接收到二进制位,则保持该状态不变;若接收到字符E,则进入“等待输入指数”状态;若接收到其他字符,则进入终态“非浮点二进制数”。
在“等待输入指数”状态若接收到字符+、或字符-、或二进制位,则进入“输入指数”状态;若接收到其他字符,则进入终态“非浮点二进制数”。
在“输入指数”状态若接收到二进制位,则保持该状态不变,若输入其他字符,则进入终态“非浮点二进制数”;若输入结束,则进入终态“浮点二进制数”。
综上所述,判断输入的字符串是否是浮点二进制数的有穷状态机如图2.10所示。
图2.10 判断浮点二进制数的有穷状态机
仔细研究图2.10所示的有穷状态机可以发现,它还有不够严格的地方。
有兴趣的读者请进一步改进它,画出更严格的、与浮点二进制数定义完全一致的有穷状态机。
3.LMN公司曾经完成过5个软件开发项目,有关这些项目的数据记录在表1
表10.2历史数据
项目序号规模(KLOC)工作量(PM)
150120
280192
34096
41024
52048
答:
静态单变量模型假定在软件规模和开发软件所需的工作量之间存在如下的函数关系:
E=A+B×(KLOC)C
根据表10.2中给出的历史数据,可以画出软件规模与工作量之间的实际函数关系曲线,如图10畅1所示。
图10.1
软件规模与工作量的关系从图10.1可以看出,在LMN公司软件规模与工作量之间存在线性关系,直线的斜率是2.4。
因此,静态单变量模型中的3个参数的值如下:
A=0, B=2.4, C=1
根据适用于LMN公司的这个静态单变量模型,可以估算出完成一个30KLOC的项目需用的工作量为
E=2.4KLOC
=72(PM)
4.为什么成本估算模型中的参数应该根据软件开发公司的历史数据来确定?
答:
每个公司开发的软件类型都不完全相同,此外,每个公司都有不同的经验、习惯、标准和策略,也就是说,不同公司的能力成熟度并不相同。
因此,不同公司开发软件的生产率也不相同,显然不能用同样的成本估算参数来估算工作量,而应该根据该公司开发软件的历史数据确定成本估算模型中的参数。
5.为什么推迟关键路径上的任务会延迟整个项目?
答:
关键路径定义为一组任务(称为关键任务),这组任务决定了完成项目所需要的最短时间。
如果位于关键路径上的一个关键任务的完成时间被推迟了,则关键路径上的下一个任务的开始时间和结束时间也要相应地延迟。
这样依次传递,会波及关键路径上的最后一个任务,从而延迟整个项目。
6.机动时间有何重要性?
答:
虽然不在关键路径上的任务并不决定完成项目所需要的最短时间,可以适当延迟一些时间,但是,如果这些任务延迟过久,则整个项目的完成时间也会被推迟。
机动时间给出了完成这类任务的时间范围。
此外,在制定进度计划时仔细研究并充分利用工程网络中的机动时间,往往能够安排出既节省资源又不影响最终竣工时间的进度表。
7.假设有一项工程任务被分解成了a,b,⋯,i等9个子任务,表10.
表10.3子任务完成时间及依赖关系
子任务标识完成任务时间依赖关系
a8
b10
c8a、b
d9a
e5b
f3c、d
g2d
h4f、g
i3e、f
答:
根据表10.3中给出的信息,可以画出如图10.2所示的工程网络。
由于子任务a和b都不依赖于其他子任务,所以都可以从时刻零开始。
根据最早时刻和最迟时刻的算法,可以算出每个事件的最早时刻和最迟时刻,算出的值已经标在工程网络中。
为了便于对照图10.2和表10.3,在图中标注的完成任务时间后面的括弧中写出了该任务的标识。
图10.2 工程网络
8.分析第7题所述的各个子任务之间的关系,找出关键路径和关键任务。
答:
从图10.2可以看出,事件2、5、4、7、10、9和12的最早时刻和最迟时刻相同,这些事件定义了关键路径。
在图10.2中用粗线箭头代表关键路径。
组成关键路径的子任务b、c、f和h是关键任务。
9.假设你被指定为项目负责人,你的任务是开发一个应用系统,该系统类似答:
由于待开发的应用系统类似于以前做过的系统,开发人员已经积累了较丰富的经验,没有多少技术难题需要攻克。
为了减少通信开销,充分发挥技术骨干的作用,统一意志统一行动,提高生产率,加快开发进度,项目组的组织结构以基于主程序员组的形式为宜。
针对待开发的系统,客户已经写出了完整的需求文档,项目组又有开发类似系统的经验,因此,可以采用广大软件工程师熟悉的瀑布模型来开发本系统。
10.一个程序能既正确又不可靠吗?
请解释你的答案。
答:
所谓软件可靠性,是程序在给定的时间间隔内按照规格说明书的规定成功地运行的概率。
通常认为,软件可靠性既包含正确性又包含健壮性,也就是说,不仅在预定环境下程序应该能正确地完成预期功能,而且在硬件发生故障、输入的数据无效或用户操作错误等意外环境下,程序也应该能做出适当的响应。
如果一个程序在预定环境下能够正确地完成预期的功能,但是在意外环境下不能做出适当的响应,则该程序就是既正确又不可靠。
11.为什么在开发软件的过程中变化既是必要的又是不可避免的?
为什么必答:
在开发软件的过程中,下述原因会导致软件配置项发生变化:
●新的市场条件导致产品需求或业务规则发生变化。
●客户提出了新需求,要求修改信息系统产生的数据或产品提供的功能。
●企业改组或业务缩减,引起项目优先级或软件工程队伍结构变化。
●预算或进度限制,导致对目标系统的重新定义。
12.CMM的基本思想是什么?
为什么要把能力成熟度划分成5个等级?
答:
CMM的基本思想是,由于软件危机是因我们对软件过程管理不善而引起的,所以新软件技术的运用并不会自动提高软件的生产率和质量,提高软件生产率和软件质量的关键,是改进对软件过程的管理。
能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。
对软件过程的改进不可能一蹴而就,只能是在完成一个又一个小的改进步骤基础上不断进行的渐进过程。
因此,CMM把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。
这5个成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力,这些等级还能帮助软件机构识别出其现有的软件过程的缺陷,指出应该做哪些改进,并且帮助他们把应做的改进
工作排出优先次序。
成熟度等级是妥善定义的向成熟软件机构前进途中的平台,每个成熟度等级都为软件过程的继续改进提供了一个台阶。