《《软件工程》作业及答案(共5页).doc》由会员分享,可在线阅读,更多相关《《软件工程》作业及答案(共5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上软件工程作业及答案1-1 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?答: 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。产生软件危
2、机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。管理和控制软件开发过程相当困难。软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。目前相当多的软件专业人员对软件开发和维护还有不省糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因。1-2 假设你是一家软件公司的总工程师,当你把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意你的观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误
3、造成的,那么,一个人怎么能在设计阶段清除它呢?”你怎么反驳他?1-3 什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?答: 软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。软件工程本质特性:1、软件工程关注于大型程序的构造;2、软件工程的中心课题是控制复杂性;3、软件经常变化;4、开发软件的效率非常重要;5、和谐地合作是开发软件的关键;6、软件必须有效地支持它的用户;7、在软件工程领域中是由具有一种文化背景的人替具
4、有另一种文化背景的人创造产品。消除软件危机的途径:为了消除软件危机,首先应该对计算机软件有一个正确的认识。必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。应该开发和使用更好的软件工具。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。1-6 什么是软件过程?它与软件工程方法学有何关系?答: 软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它
5、规定了完成各项任务的工作步骤。软件工程方法学包含软件过程。1-7 什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。答: 生命周期模型简洁地描述软件过程,规定了把生命周期划分成哪些阶段及各个阶段执行顺序。瀑布模型历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终开发出的软件产品可能并不是用户真正需要的。快速原型模型正是为了克服瀑布模型的缺点而提出来的。它通过快速构建起一个可在计算机上运行的原型系统,让用户试用原型并收集用户反馈意见的办法,获取用户的真实需求。增量模型具有可在软件开发的早期阶段使投资获得明显回
6、报和较易维护的优点,但是,要求软件具有开放的结构是使用这种模型时固有的困难。风险驱动的螺旋模型适用于内部开发的大型软件项目,但是,只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会获得成功。 快速原型模型:适合小型软件;螺旋模型:适合内部开发的大规模软件项目。2-1 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?答: 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。至少应该从下述三方面研究每种解法的可行性:(1)技术可行性;(2)经济可行性;(3)操作可行性。2-5 北京某高校可用的电话号码有以下几类:校内电话号
7、码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,若是本市电话则再接着拨8位数字(第1位不是0),若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。请用2.5.2小节讲述的定义数据的方法,定义上述的电话号码。答: 电话号码校内电话|本市电话|外地电话 非零数字字符=1|2|3|4|5|6|7|8|9 校内电话=非零数字字符+3数字3本市电话=0+非零数字字符+7数字7外地电话=0+区码+非零数字字符+7数字73-1 为什么要进行需求分析?通常对软件系统有哪些需求?答: 为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的
8、深入理解是软件开发工作获得成功的前提条件,不论我们把设计和编码工作做得如何出色,不能真正满足用户需求的程序只会令用户失望,给开发者带来烦恼。确定对系统的综合要求:1、功能需求;2、性能需求;3、可靠性和可用性需求;4、出错处理需求;5、接口需求;6、约束;7、逆向需求;8、将来可以提出的要求,分析系统的数据要求。3-2 怎样与用户有效地沟通以获取用户的真实需求?答: 与用户沟通获取需求的方法:访谈;面向数据流自顶向下求精;简易的应用规格说明技术;快速建立软件原型4-2 在什么情况下应该使用形式化说明技术?使用形式化说明技术时应遵守哪些准则?答: 在开发大型软件系统的过程中应该使用形式化说明技术
9、。应用形式化方法的准则:(1)应该选用适当的表示方法。(2)应该形式化,但不要过分形式化。(3)应该估算成本。(4)应该有形式化方法顾问随时提供咨询。(5)不应该放弃传统的开发方法。(6)应该建立详尽的文档。(7)不应该放弃质量标准。(8)不应该盲目依赖形式化方法。(9)应该测试、测试再测试。(10)应该重用7-8 对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h。要求:(1) 根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间的关系曲
10、线。在画这条曲线时做了什么假设?(2) 为做到MTTF=100h,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?答:(1) 所做假设:1)单位长度里的错误数近似为常数;2)失效率正比于软件中剩余的错误数,而平均无故障时间与剩余的错误数成反比. 3)发现的每一个错误都立即正确地改正了.(2)由Shooman公式:MTTF=IT/(K*(ET-EC(T) 其中,IT=104,MTTF1=10,n1=15,MTTF2=15,n2=25。得:MTTF1=IT/(K*(ET-EC(T1)10=10000/(K*(ET-15)MTTF2=IT/(K*(ET-
11、EC(T2)15=10000/(K*(ET-25) (1) 解得程序中固有的错误总数ET=45,此外K=100/3。(2)设MTTF=100,有100=10000/((100/3)*(45-x)解得x=42。 所以,当集成测试结束时,改正了42个错误,还剩3个错误。7-9 如对一个长度为条指令的程序进行集成测试期间记录下下面的数据:(a) 7月1日:集成测试开始,没有发现错误。(b) 8月2日:总共改正100个错误,此时MTTF=0.4h(c) 9月1日:总共改正300个错误,此时,MTTF=2h根据上列数据完成下列各题:(1) 估计程序中的错误总数;(2) 为使MTTF达到10h,必须测试和
12、调试这个程序多长时间?(3) 画出MTTF和测试时间之间的函数关系线。答: 由Shooman公式:MTTF=IT/(K*(ET-EC(T) 其中,IT=105,MTTF1=0.4,T1=160,n1=100,MTTF2=2,T2=320,n2=300。得:MTTF1=IT/(K*(ET-EC(T1)0.4=/(K*(ET-100)MTTF2=IT/(K*(ET-EC(T2)2=/(K*(ET-300) (1)解得程序中固有的错误总数ET=350,此外K=1000。(2)设MTTF=10,有10=/(1000*(350-x)解得x=340。由可靠性积累曲线EC(t)=ET(1-exp(-K1t)
13、)得:100=350*(1-exp(-160K1))300=350*(1-exp(-320K1))解得:K=0.01。 代入 340=350*(1-exp(-K1t))= 350*(1-exp(-0.01t),得:t=(ln(35)/0.01=356h因此求得为使 MTTF=10,测试和调试该程序需要花费365h。8-1 软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施才能提高软件产品的可维护性?答: 1、决定软件可维护性的因素主要有下述5个:1、可理解性;2、可测试性;3、可修改性;4、可移植性;5、可重用性。在软件工程过程的每一个阶段都应该考虑并努力提高软件的可维护性,在每个
14、阶段结束前的技术审查和管理复审中,应该着重对可维护性进行复审。在需求分析阶段的复审过程中,应该对将来要改进的部分和可能会修改的部分加以注意并指明;应该讨论软件的可移植性问题,并且考虑可能影响软件维护的系统界面。在正式的和非正式的设计复审期,应该从容易修改、模块化和功能独立的目标出发,评价软件的结构和过程;设计中应该对将来可能修改的部分预作准备。代码复审应该强调编码风格和内部说明文档这两个影响可维护性的因素。在设计和编码过程中应该尽量使用可重用的软件构件,如果需要开发新的构件,也应该注意提高构件的可重用性。每个测试步骤都可以暗示在软件正式交付使用前,程序中可能需要做预防性维护的部分。在测试结束时
15、进行最正式的可维护性复审.在完成了每项维护工作之后,都应该对软件维护本身进行仔细认真的复审。维护应该针对整个软件配置,不应该只修改源程序代码。每当对数据、软件结构、模块过程或任何其他有关的软件特点做了改动时,必须立即修改相应的技术文档。9-1 什么是面向对象方法学?它有哪些优点?答: OO=objects+classes+inheritance+communication with messages也就是说,面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。面向对象方法学的优点:1、与人类习惯的思维方法一致;2、稳定性好;3、可重用性好;4、较易开发大型软件
16、产品;5、可维护性好。9-5 什么是模型?开发软件为何要建模?答: 所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。模型是一种思考工具,利用这种工具可以把知识规范地表示出来。为了开发复杂的软件系统,系统分析员应该从不同角度抽象出目标系统的特性,使用精确的表示方法构造系统的模型,验证模型是否满足用户对目标系统的需求,并在设计过程中逐渐把和实现有关的细节加进模型中,直至最终用程序实现模型。对于那些因过分复杂而不能直接理解的系统,特别需要建立模型,建模的目的主要是为了减少复杂性。应该依据什么准则来评价用例图、脚本和状态图?11-1 面向对象设计应该遵循哪些准则?简述
17、每条准则的内容,并说明遵循这条准则的必要性。答: 面向对象设计准则:1、模块化;2、抽象;3、信息隐藏;4、弱耦合;5、强内聚;6、可重用。11-2 简述有助于提高面向对象设计质量的每条主要启发规则的内容和必要性。答: 1、设计结果应该清晰易懂,使设计结果清晰、易读、易懂,是提高软件可维护性和可重用性的重要措施;2、一般、特殊结构的深度应适当,应该使类等级中包含的层次数适当;3、设计简单的类,应该尽量设计小而简单的类,以便于开发和管理;4、使用简单的协议,一般说来,消息中的参数不要超过3个;5、使用简单的服务,一般只有35行源程序语句,可以用仅含一个动词和一个宾语的简单句子描述它的功能;6、把
18、设计变动减至最小,即使出现必须修改设计的情况,也应该使修改的范围尽可能小。12-1 面向对象实现应该选用哪种程序设计语言?为什么?答: 开发人员在选择面向对象语言时,还应该着重考虑以下一些实际因素。1、将来能否占主导地位,为了使自己的产品在若干年后仍然具有很强的生命力;2、可重用性,采用面向对象方法开发软件的基本目的和主要优点,是通过重用提高软件生产率;3、类库和开发环境,决定可重用性的因素,不仅仅是面向对象程序语言本身,开发环境和类库也是非常重要的因素;4、其他因素,对用户学习面向对象分析、设计和编码技术所能提供的培训服务;在使用这个面向对象语言期间能提供的技术支持;能提供给开发人员使用的开
19、发工具、开发平台、发行平台;对机器性能和内存的需求;集成已有软件的容易程度等。12-4 良好的面向对象程序设计风格主要有哪些准则?答: 良好的面向对象程序设计风格,即包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(例如,继承性)而必须遵循的一些新准则。提高可重用性:1、提高方法的内聚;2、减小方法的规模;3、保持方法的一致性;4、把策略与实现分开;5、全面覆盖;6、尽量不使用全局信息;7、利用继承机制。提高可扩充性:1、封装实现策略;2、不要用一个方法遍历多条关联链;3、避免使用多分支语句;4、精心确定公有方法。提高健壮性:1、预防用户的操作错误;2、检查参数的合法性;3、不
20、要预先确定限制条件;4、先测试后优化。12-5 测试面向对象软件时,单元测试、集成测试和确认测试各有哪专心-专注-专业些新特点?答: 面向对象的单元测试,最小的可测试单元是封装起来的类和对象。测试面向对象软件时,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。面向对象的集成测试,主要有下述两种不同的策略:1、基于线程的测试。这种策略把响应系统的一个输入或一个事件所需要的那些类集成起来。2、基于使用的测试。面向对象的确认测试,面向对象软件的确认测试也集中检查用户可见的动作和用户可识别的输出。13-7 什么是软件质量?请叙述它与软件可靠性的关系。答: 概括地说,软件质量就是“软件与明确
21、地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。13-8 一个程序能既正确又不可靠吗?请解释你的答案。答:13-11 配置审计和技术复审有何不同?可否把它们的功能放在一次复审中完成?答: 正式的技术复审关注被修改后的配置对象的技术正确性。复审者审查该对象以确定它与其他软件配置项的一致性,并检查是否有遗漏或副作用。软件配置审计通过评估配置对象的那些通常不在复审过程中考虑的特征,而成为对正式技术复审的补充。13-12 CMM的基本思想是什么?为什么要把能力成熟度划分成5个
22、等级?答:CMM的基本思想是,由于问题是由我们管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高软件的生产率和质量. 把能力成熟度划分成5个等级的原因是:对软件的改进不可能一蹴而就.3-3 银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。请用数据流图描绘本系统的功能,并用实体-联系图描绘系统中的数
23、据对象。答:储户存款处理取款处理核对密码现金库数据流图: 存折、存款单 存折(无密码)、取款单 帐目 存折(无密码)、取款单 储蓄所储户存款、取款存款日期取款日期姓名利率存款类型住址利率身份证号利率名称利率地址 实体-联系图: M N 5-4 美国某大学共有200名教师,校方与教师工会刚刚签订一项协议。按照协议,所有年工资超过26 000(含26 000)的教师工资将保持不变,年工资少于26 000的教师将增加工资,所增加的工资数按下述方法计算:给每个由此教师所赡养的人(包括教师本人)每年补助100,此外,教师有一年工龄每年再多补助50,但是,增加后的年工资总额不能多于26 000。教师的工资
24、档案储存在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇用日期等信息。需要写一个程序计算并印出每名教师的原有工资和调整后的新工资。要求:(1) 画出此系统的数据流图;(2) 写出需求说明;(3) 设计上述的工资调整程序(要求用HIPO图描绘设计结果),设计时请分别采用下述两种算法,并比较这两种算法的优缺点:(a) 搜索工资档案数据,找出年工资少于26 000的人,计算新工资,校核是否超过26 000,储存新工资,印出新旧工资对照表;(b) 把工资档案数据按工资从最低到最高的次序排序,当工资数额超过26 000时即停止排序,计算新工资,校核是否超过限额,储存新工资,印出结果。答: (1
25、) 数据流图:计算应涨工资S1读赡养人数读雇佣日期计算新工资计算工龄计算应涨工资S2赡养人口 人数 S1 新工资 S2雇佣日期 日期 工龄(2) 需求说明1 任务概述:对于年工资未超过2600的教师涨工资:每赡养1人补助$100,每有一年工龄补助$50,涨工资上限为2600;2 数据描述:数据库描述:工资表、功能需求:对于年工资未超过2600的教师涨工资:每赡养1人补助$100,每有一年工龄补助$50,涨工资上限为2600;涨工资系统检索1.0修改2.0校核3.0打印4.0(3) HIPO图:(a) 打印4.0校核3.0修改2.0排序1.0涨工资系统 (b) (4)所画的流程图适合(a)种算法
26、.6-8 画出下列伪码程序的流图,计算它的环形复杂度。你觉得这个程序的逻辑有什么问题吗? C EXAMPLE LOOP:DO WHILE Z0A=B+1IF A10 THEN X=A ELSE Y=ZEND IFIF Y0 THEN PRINT C ELSE PRINT KENDIFSTOP12,34581097611121413答: 对应的流图: 环形复杂度:V(G)=E-N+2=17-13+2=6存在的逻辑问题:1)当Z0时易形成死循环. 2) 条件 Y5 包含条件 Y=26-9 把统计空格程序的Jackson图(下图)改画为等价的程序流程图和盒图。统计空格程序体印总数处理字符串印字符串分析字符串印空格数分析字符处理非空格处理空格 I I S 开始结束文件尾?读一个字符串换行,输出字符串, 换行统计空格数并输出取下一个字符串换行,输出空格总数答: 程序流程图: 盒图(N-S 图) 文件不是文件尾?读一个字符串换行,输出字符串, 换行统计空格数并输出取下一个字符串换行,输出空格总数Y N