软件工程学第二次作业答案中山大学本科Word文档格式.docx
《软件工程学第二次作业答案中山大学本科Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程学第二次作业答案中山大学本科Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
①需求不确定性高的②需求确定的
③管理信息④决策支持
B:
①用户界面使用手册②用户界面需求分析说明书
③系统界面原则④完善的用户界面
C:
①改进用户界面的设计②阅读文档资料
③模拟用户界面的运行④运行用户界面原型
D:
①同意什么和不同意什么②使用和不使用哪一种编程语言
③程序的结构④执行速度是否满足要求
E:
①自外向内②自顶向下
③自内向外④自底向上
A.①
B.
③;
C.
④;
D.
①;
E.
①
2、从下面关于程序编制的叙述中,选出3条正确的叙述。
①在编制程序之前,首先必须仔细阅读给定的程序说明书。
然后,必须如实地依照说明书编写程序。
说明书中常会有含糊不清或难以理解的地方。
程序员在作业时应该对这些地方做出适当的解释。
②在着手编制程序时,重要的是采用既能使程序正确地按设计说明书进行处理,又易于找出错误的编写方法。
③在编制程序时,重要的是采用既能使程序正确地按设计说明书进行处理,又易于出错的编写方法。
④考虑到以后的程序变化,为程序编写完整的说明书是一项很重要的工作。
只要有了完整的程序说明书,既使程序的编写形式难以让人看懂也没有什么关系。
⑤编制程序时不可缺少的条件是,程序的输入和输出数据的格式都应确定。
其他各项规定都是附带的。
无足轻重。
⑥作为一个好的程序,不仅处理速度要快,而且易读易修改等也都是重要的条件。
为了能得到这样的程序,不仅要熟悉程序设计语言的语法,还要注意采用适当的规格和单纯的表现方法,注意使整个程序的结构简洁。
①、④、⑥。
编制程序的过程实际上是根据设计的结果,用某种机器能够识别的程序设计语言,将设计翻译成机器代码的过程。
因此,必须如实地按照设计说明书编写程序,至于设计说明书中含糊不清的地方,应在编程时分析人员或设人员协商,对这些地方做出适当的解释。
另外,考虑到将来的程序的修改,必须为程序编写完整的说明书,同时程序必须编写得容易让别人看懂,这样程序才容易修改,修改时不容易出错,而且容易验证修改后的结果。
还有,编写程序的人不需重新考虑程序要完成什么功能,这些已经在软件分析与设计过程中充分考虑过了。
3、测试过程需要3类输入:
(A)、(B)和(C)。
请选择正确的答案填入图5.21中以完成测试信息处理的全过程。
供选择答案:
A~C:
①接口选择②软件配置③硬件配置
④测试配置⑤测试环境⑥测试工具
D~F:
①排错②可靠性分析
③结果分析④数据分类
A.②,
B.④,
C.⑥,
D.③,
E.①
F.②。
4、软件维护是软件生存期的最后一个阶段。
软件工程学针对维护工作的主要目标是提高(A),降低(B)。
软件的(C)、(D)、(E)是决定软件可维护性的基本因素。
软件生存期(F)的工作与软件可维护性有密切的关系。
A、B:
①软件的生产率②文档③软件的可靠性
④软件的可维护性⑤维护的代价⑥维护的效率
C、D、E:
①可测试性②互操作性③可理解性
④可修改性⑤可复用性⑥可管理性
F:
①编码阶段②设计阶段③测试阶段
④每个阶段
A.④,
B.⑤,
C.①,
E.④,
F.④。
其中,C、D、E的答案顺序可互换。
原因说明:
软件维护是软件生存期的最后一个阶段,也是持续时间最长、代价最大的一个阶段。
软件工程学针对维护工作的主要目标就是提高软件的可维护性,降低维护的代价。
软件维护通常包括4类维护活动:
改正性维护、适应性维护、完善性维护和预访性维护。
软件的可理解性、
可修改性和可测试性是决定软件可维护性的基本因素。
软件生存期各个阶段的工作都与软件可维护性有密切的关系。
5、下面有关软件维护的叙述有些是不正确的,请将它们列举出来。
①要维护一个软件,必须先理解这个软件。
②阅读别人写的程序并不困难。
③如果文档不齐全也可以维护一个软件。
④谁编写软件就应由谁来维护这个软件。
⑤设计软件时就就考虑到将来的可修改性。
⑥维护软件是一件很吸引人的创造性工作。
⑦维护软件就是改正软件中的错误。
⑧维护好一个软件是一件很难的事件。
软件维护人员通常不是该软件的开发人员,这给软件维护带来很大的困难。
特别是有些软件在开发时没有遵循软件开发的准则,没有开发方法的支持,维护这样的软件就更困难。
下面列举一些与软件维护有关的问题。
(1)要维护一个软件,首先必须要理解它。
而理解一个别人编写的软件通常是困难的,尤
其是对软件配置(指各种相关的文档)不齐全的软件,理解起来就更加困难。
(2)需要维护的软件往往缺少合格的文档,或者文档资料不齐全,甚至根本没有文档。
在软件维护中,合格的文档十分重要,它有助于理解被维护的软件。
合格的文档不仅要完整正确地反映开发过程各个阶段的工作成果,而且应当容易理解并应与程序源代码一致。
而错误的文档对软件的理解引入歧途。
(3)在软件维护时,不要指望得到原来开发该软件的人员的帮助。
开发人员开发完一个软件后,往往会从事另一软件的开发,甚至已离开原开发单位。
即使原来的开发人员还在,也可能时间太久而忘却了实现的细节。
(4)多数软件在设计时没有考虑到将来的修改,这给软件的修改造成了困难。
而且在修改软件时很可能引入新的差错。
(5)软件维护通常不是一件吸引人的工作。
从事维护工作常使维护人员缺乏成就感,这也严重影响维护工作,从而影响了维护质量的提高。
三、论述题
1.面向对象软件开发方法与传统的面向数据流的结构化软件开发方法有什么不同?
使用面向对象开发方法的优点是什么?
1)、结构化方法是面向过程的开发方法,以产生过程的抽象作为系统开发的起点,这些抽象把软件看作是处理流,定义构成一系列步骤的算法,每一步骤都是带有输入和输出的一个过程,将这些步骤结合在一起便可产生合理的、稳定的、贯穿于整个程序的控制流。
最终可导出一个简单的具有静态结构的软件体系结构。
结构化开发方法中,数据结构是为算法步骤的要求而开发的,数据结构贯穿于过程,提供过程需要传送给它的操作的信息。
2)、面向对象开发方法以标识和模型化问题论域中的实体作为系统开发的起点,系统中标识出的对象是数据抽象与过程抽象的一个混合体。
控制流被分成块,并被包括在各个数据抽象上的操作里面。
控制流从一个数据抽象被传送到另一个数据抽象。
在块中分离的控制流允许把复杂的动作视为局部的相互影响,因此,软件系统的体系结构更为复杂但也更为灵活。
3)、使用面向对象开发方法的优点可概括为:
A)、与人类习惯的思维方法一致。
归纳思维
------对象分类(特殊到一般)演绎思维
------类等级的属性继承(一般到特殊);
B)、稳定性好。
软件系统的结构不依赖于系统功能需求的变化;
C)、可重用性好。
创建对象类的实例,获得重用该对象类;
从某对象类派生一个新类,继承性机制使子类可重用父类的数据结构和程序代码,并可进行扩充和修改而不影响父类的使用;
D)、可维护性好、稳定性好、容易修改、容易理解、容易测试和调试。
2.改错性维护与“排错”是否是一回事?
为什么?
改错性维护与“排错(调试)”不是一个概念。
调试是作为测试的后继工作而出现
的,是当测试发现软件中的错误后,进一步诊断和改正程序中潜在的错误的活动。
而改正性维护是指在软件交付使用后,由于开发时测试得不彻底。
不完全,必然会有一部分隐藏的错误被带到运行阶段来,这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。
为了识别和纠正软件错误改正软件性能上的缺陷、排除实施中的错误使用所进行的诊断和改正错误的过程。
调试在程序编码阶段、测试阶段、运行和维护阶段之后,用户实际充当了测试员的角色,一旦发现软件运行中的错误或缺陷,就会将问题报告通报软件销售商,申请软件维护。
其后软件维护人员可以利用调试手段来诊断和改正软件中存在错误。
这时呆能涉及的范围不只包括程序,还有文档和数据,不仅可能修改设计,甚至需求。
所以改正性维护是在更大范围中做工作。
3.简述结构化方法中软件工程的分析模型和设计模型,描述从分析模型到设计模型的信息流。
4.软件配置管理的任务是什么?
描述作为基线的软件配置项(SCI)的修改过程模型。
软件配置管理的任务:
标识、版本控制、变化控制、配置审计及报告。
作为基线的软件配置项(SCI)的修改过程模型:
四、考务处理系统有如下功能:
①对考生送来的报名表进行检查。
②对合格的报名表编好准考证号码后将准考证送给考生,并将汇总后的考生名单送给阅卷站。
③对阅卷站送来的成绩表进行检查,并根据考试中心指定的合格标准审定合格者。
④填写考生通知单(内容包含考试成绩和合格/不合格标志),送给考生。
⑤按地区、年龄、文化程度、职业、考试级别等进行成绩分类统计和试题难度分析,产生统计分析表。
问题:
按上述功能需求设计系统的数据流程图。
五、给出下面结构化程序流程图,请画出对应的N-S图。
六、下面是选择排序的程序,其中datalist是数据表。
它有两个数据成员。
一是元素类型成Element的数组V,另一个是数组大小n。
算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey(),一是交换两数组元素内容的操作Swap():
voidSelectSort(datalist&
list){
//对表list.V[0]到list[n-1]进行排序,n是表当前长度
for(inti=0;
i<
list.n-1;
i++){
intK=i
//在list.V[i].key到list.V[n-1].key中找具有最小键码的对象
for(intj=i+1;
j<
list.n;
j++)
if(list.V[j].getKey()<
list.V[K].getKey()K=j;
//当前具最小关键码的对象
if(k=!
=i)Swap(list.V[i],list.V[K]);
//交换
}
}
(1)试计算此程序段的McCabe环路复杂性。
(2)用基本路径覆盖法给出测试路径。
(3)为各测试路径设计测试用例。
解答:
(1)
(2)
独立路径有5条:
Path1:
1→2→14
Path2:
1→2→3→5→10→11→12→13→2→14
Path3:
1→2→3→5→10→12→13→2→14
Path4:
1→2→3→5→6→7→8→9→5→10→11→12→13→2→14
Path5:
1→2→3→5→6→8→9→5→10→11→12→13→2→14
①③
①②⑤⑧……
①②⑤⑨……
①②④⑥……
①②④⑦……
(3)
为各测试路径设计测试用例:
取n
=
1
路径①②⑤⑧……:
2,
预期结果:
路径⑤⑧③不可达
路径①②⑤⑨……:
路径⑤⑨③不可达
路径①②④⑥⑤⑧③:
V[0]
V[1]
1,
k
2
路径①②④⑥⑤⑨③:
路径⑨③不可达
路径①②④⑦⑤⑧③:
0,
路径⑧③不可达
路径①②④⑦⑤⑨③:
2