第一题:名词解释
3、软件生命周期(Software Life Cycle,SLC)。
4、问题域(Problem Domain)。
5、PAD图。
6、实体-关联图(Entity Relationship Diagram)。
7、软件危机(Software Crisis)。
8、软件质量保证(Software Quality)。
9、IPO图。
10、面向对象的高内聚低耦合。
11、数据流图 (DFD) 。
12、功能点技术(Function Point) 。
13、功能模型。
14、数据规范化。
15、软件工程方法学。
16、软件质量。
17、敏捷过程。
18、工程网络图。
19、动态联编。
20、系统流程图。
21、HIPO图。
22、软件重用。
23、数字字典(Digital Dictionary)。
24、判定树。
25、过程设计语言(PDL)
26、代码的健壮性(Robust)。
答:
1.极限编程 (Extreme programming):
把好的开发实践运用到极致,是一种典型的开发方式。
2.状态转换图:
状态转换图(简称为状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。此外,状态图还指明了作为特定事件的结果系统将做哪些动作。
3.软件生命周期(Software Life Cycle,SLC):
由软件定义,软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。
4.问题域(Problem Domain):
面向对象方法学的要点面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。
5.PAD图:
PAD是问题分析图(problem analysis diagram)的英文缩写,用二维树形结构的图来表示程序的控制流。
6.实体-关联图(Entity Relationship Diagram):
为了把用户的数据要求清楚,准确地描述出来,系统分析员通常建立一个概念性的数据模型(也称为信习模型。
7.软件危机(Software Crisis):
软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。
8.软件质量保证(Software Quality):
软件质量保证(software quality assurance, SQA)的措施主要有:基于非执行的测试(也称为复审或评审),基于执行的测试(即以前讲过的软件测试)和程序正确性证明。
9.IPO图:
IPO图是输入、处理、输出图的简称,它是由美国IBM公司发展完善起来的一种图形工具,能够方便地描绘输入数据、对数据的处理和输出数据之间的关系。
10.面向对象的高内聚低耦合:
低耦合:
• 耦合:一个软件结构内不同模块之间互连的紧密程度
• 弱耦合:系统中某一部分的变化对其他部分的影响降到最低程度
• 对象之间的耦合:交互耦合&继承耦合
高内聚:
• 内聚衡量一个模块内各个元素彼此结合的紧密程度
• 在设计时应该力求做到高内聚
• 面向对象设计的3种内聚:
服务内聚、类内聚、一般\特殊内聚
11.数据流图 (DFD):
DFD是一种图形化技术, 它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
12.功能点技术(Function Point):
依据对软件信息域特性和软件复杂性的评估结果,估算软件规模。这种方法用功能点(FP)为单位度量软件规模。
13.功能模型:
功能模型表示变化的系统的“功能”性质,它指明系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。
14.数据规范化:
软件系统经常使用各种长期保存的信息,这些信息通常以一定的方式组织并存储在数据库或文件中,为减少数据冗余,避免出现插入异常或删除异常,简化数据修改的过程, 通常需要把数据结构规范化。
15.软件工程方法学:
软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型。软件过程是软件工程方法学的3个重要组成部分之一。
16.软件质量:
概括地说,软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
17.敏捷过程:
为了使软件开发团队具有高效工作和快速响应变化的能力。
18.工程网络图:
工程网络是制定进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及每项作业的开始时间和结束时间,此外,它还显式地描绘各个作业彼此间的依赖关系。因此,工程网络是系统分析和系统设计的强有力的工具。
19.动态联编:
编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。
20.系统流程图:
系统流程图是概括地描绘物理系统的传统工具。用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据库、人工过程等)。系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。
21.HIPO图:
HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。为了能使HIPO图具有可追踪性,在H图(层次图)里除了最顶层的方框之外,每个方框都加了编号。
22.软件重用:
重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用。
广义地说,软件重用可分为以下3个层次:
• 知识重用
• 方法和标准的重用
• 软件成分的重用
23.数字字典(Digital Dictionary):
是关于数据的信息的集合, 也就是对数据流图中包含的所有元素的定义的集合。
24.判定树:
判定树是判定表的变种,它也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。
25.过程设计语言(PDL):
过程设计语言(PDL)也称为伪码。是用正文形式表示数据和处理过程的设计工具。
26.代码的健壮性(Robust):
健壮性又称鲁棒性,是指软件对知于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输道入不符合规范要求,并能有合理的处理方式。另外健壮性有时也和容错性,可移植性,正确性有交叉的地方。
第二题: 说明典型的可重用软件成分,主要有哪十种?
答:
(1)项目计划
(2)成本估计
(3)体系结构
(4)需求模型和规格说明
(5)设计
(6)源代码
(7)用户文档和技术文档
(8)用户界面
(9)数据
(10)测试用例
第三题: 说明软件维护的定义?以及通过描述软件交付使用后可能进行的4项活动?
答:
• 改正性维护
• 适应性维护
• 完善性维护
• 预防性维护
第四题:功能需求是对软件系统的一项基本需求,试问通常对软件系统有哪几方面的综合要求?
答:
• 功能需求
• 性能需求
• 可靠性和可用性需求
• 出错处理需求接口需求
• 约束
• 逆向需求
• 将来可能提出的要求
第五题: 试问试述面向对象的封装(encapsulation)、继承(inheritance)、多态性(polymorphism)和重载(overloading)?
答:
(1)封装:
在面向对象的程序中,封装是指把数据和实现操作的代码集中起来放在对象内部。
(2)继承:
在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。
(3)多态性:
在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。即,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。
多态性机制不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。
(4)重载:
有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。
重载进一步提高了面向对象系统的灵活性和可读性。
第六题: 试绘出自动售货机系统的用例图并说明。
答:
上图是自动售货机系统的用例图。图中的方框代表系统,椭圆代表用例(售货、供货和取货款是自动售货机系统的典型用例),线条人代表行为者,它们之间的连线表示关系。
第七题: 说明在面向对象分析中的3个模型与5个层次?
答:
三个模型:
• 对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
• 对象模型为建立动态模型和功能模型,提供了实质性的框架。
• 建立对象模型,需要用适当的建模语言来表达模型,建模语言由记号(即模型中使用的符号)和使用记号的规则(语法、语义和语用)组成。
• 通常,使用UML提供的类图来建立对象模型。
动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。
所有对象都具有自己的生命周期(或称为运行周期)。生命周期中的阶段就是对象的状态。状态是对对象属性值的一种抽象。各对象之间相互触发(即作用)就形成了一系列的状态变化。人们把一个触发行为称作一个事件。对象对事件的响应,取决于接受该触发的对象当时所处的状态,响应包括改变自己的状态或者又形成一个新的触发行为。
状态有持续性,它占用一段时间间隔。状态与事件密不可分,一个事件分开两个状态,一个状态隔开两个事件。事件表示时刻,状态代表时间间隔。
通常,用UML提供的状态图来描绘对象的状态、触发状态转换的事件以及对象的行为(对事件的响应)。
每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。也就是说,动态模型是基于事件共享而互相关联的一组状态图的集合。
• 功能模型表示变化的系统的“功能”性质,它指明系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。
• 功能模型由一组数据流图组成。建立功能模型有助于软件开发人员更深入地理解问题域,改进和完善自己的设计。
• UML提供的用例图是进行需求分析和建立功能模型的强有力工具。在UML中把用用例图建立起来的系统模型称为用例模型。
• 使用用例模型代替传统的功能说明,往往能够更好地获取用户需求,它所回答的问题是“系统应该为每个(或每类)用户做什么”。
• 用例模型描述的是外部行为者(actor)所理解的系统功能。用例模型的建立是系统开发者和用户反复讨论的结果,它描述了开发者和用户对需求规格所达成的共识。
(4)5个层次:
• 主体层
• 类与对象层
• 结构层
• 属性层
• 服务层
第八题: 使用Z语言描述的、最简单的形式化规格说明含有哪4个部分?
答:
• 给定的集合、数据类型及常数。
• 状态定义。
• 初始状态。
• 操作。
第九题: 请说明模块独立性得重要性?
答:
(1)有效的模块化(即具有独立的模块)的软件比较容易开发出来。
(2)独立的模块比较容易测试和维护。
模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。
第十题: 验证软件需求的方法,至少必须哪4个不同角度验证软件需求的正确性?
答:
1.一致性:
所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
2.完整性:
需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。
3.现实性:
指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。
4.有效性:
必须证明需求是正确有效的,确实能解决用户面对的问题。
第十一题: 请试描绘一家计算机公司全部产品的数据结构,用层次方框图和Warnier图表示。
答:
2.Warnier图:
第十二题: 请说明设计人机界面设计必须重视那些方面?
答:
(1)系统响应时间。
(2)用户帮助设施。
(3)出错信息处理。
(4)命令交互。
第十三题: 请说明面向对象语言的优点有哪些?
答:
(1)面向对象语言的优点:
1、一致的表示方法;
2、可重用性;
3、可维护性;
(2)面向对象设计的结果既可以用面向对象语言、也可以用非面向对象语言实现:
1、使用面向对象语言时,由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念映射到目标程序中。
2、使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中。
第十四题: 预防性维护实质上是软件再工程。请簡述典型的软件再工程过程模型定义了哪六类活动?
答:
第十五题: 请简述面向对象方法具有哪4个要点? 以及面向对象的方法学可以用概括的方程式?
答:
面向对象方法具有下述4个要点:
(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。
(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。
(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。
(4)对象彼此之间仅能通过传递消息互相联系。
面向对象的方法学可以用下列方程来概括:
OO=objects+classes+Inheritance+communication with messages,即,既使用对象又使用类和继承等机制,且对象之间仅能通过传递消息实现彼此通信。
第十六题: 源程序代码的逻辑简明清晰、易读易懂是好程序的一个重要标准,为了做到这一点,请简述应该遵循那些编码风格规则?
答:
1.程序内部的文档
所谓程序内部的文档包括恰当的标识符、适当的注解和程序的视觉组织等。
• 标识符:含义鲜明的名字、缩写规则一致、为名字加注解;
• 注解:正确性,简要描述模块的功能、主要算法、接口特点、重要数据以及开发简史或解释包含这段代码的必要性;
• 视觉组织:适当的阶梯形式使程序的层次结构清晰明显。
2.数据说明
数据说明的原则:
• 数据说明的次序应该标准化;
• 当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量;
• 如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结构的方法和特点。
3.语句构造
下述语句构造的原则有助于使语句简单明了:
• 不要为了节省空间而把多个语句写在同一行;
• 尽量避免复杂的条件测试;
• 尽量减少对“非”条件的测试;
• 避免大量使用循环嵌套和条件嵌套;
• 利用括号使逻辑表达式或算术表达式的运算次序清晰直观。
4.输入输出
在设计和编写程序时需考虑有关输入输出风格的规则:
• 对所有输入数据都进行检验;
• 检查输入项重要组合的合法性;
• 保持输入格式简单;
• 使用数据结束标记,不要要求用户指定数据的数目;
• 明确提示交互式输入的请求,详细说明可用的选择或边界数值;
• 程序设计语言对格式有严格要求时,应保持输入格式一致;
• 设计良好的输出报表;
• 给所有输出数据加标志。
5.效率
效率主要指处理机时间和存储器容量两个方面。
• 效率是性能要求,因此应该在需求分析阶段确定效率方面的要求;
• 效率是靠好设计来提高的;
• 程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率。
第十七题: 请简易说明何谓单元测试、集成测试、确认测试、白盒测试技术和黑盒测试技术?
答:
1.单元测试:
• 单元测试集中检测软件设计的最小单元——模块。
• 单元测试和编码属于软件过程的同一个阶段。
• 在源程序代码通过编译程序的语法检查后,可以用详细设计描述作指南,对重• 要的执行通路进行测试,以便发现模块内部的错误。
• 可以应用人工测试和计算机测试这样两种不同类型的测试方法,完成单元测试工作。
• 单元测试主要使用白盒测试技术,而且对多个模块的测试可以并行地进行。
2.集成测试:
集成测试是测试和组装软件的系统化技术。
由模块组装成程序时有两种方法。一种方法是先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,这种方法称为非渐增式测试方法;另一种方法是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试,这种方法实际上同时完成单元测试和集成测试。
3.确认测试:
• 确认测试也称为验收测试,它的目标是验证软件的有效性。
• 通常,验证指的是保证软件正确地实现了某个特定要求的一系列活动;确认指的是为了保证软件确实满足了用户需求而进行的一系列活动。
• 软件有效性的一个简单定义是:如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的。
• 需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此是软件有效性的标准,也是进行确认测试的基础。
4.白盒测试技术:
白盒测试(又称结构测试)是把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
5.黑盒测试技术:
黑盒测试(又称功能测试)把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。黑盒测试是在程序接口进行的测试,只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如数据库或文件)的完整性。
第十八题: 请问类与类之间通常有哪四种关系?分别简述之。
答:
1.关联关系:
表示两个类的对象之间存在某种语义上的联系。
2.泛化(继承)关系:
通用元素和具体元素之间的一种分类关系。
3.依赖关系:
描述两个模型元素(类、用例等)之间的语义连接关系。
4.细化关系:
对同一个事物在不同抽象层次上描述。
第十九题: 请说明设计黑盒测试方案的技术主要有等价划分、边界值分析和错误推测是什么?
答:
1.等价划分:
将程序的输入域划分成若干个数据类,据此导出测试用例。
2.边界值分析:
设计使程序运行在边界情况附近的测试方案,更大可能地暴露出程序错误。
3.错误推测:
在很大程度上靠直觉和经验进行。其基本思想是,列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。
第二十题: 请简述怎样满足用户对老程序的维护要求?
答:
(1)反复多次地做修改程序的尝试,与不可见的设计及源代码“顽强战斗”,以实现所要求的修改。
(2)通过仔细分析程序尽可能多地掌握程序的内部工作细节,以便更有效地修改它。
(3)在深入理解原有设计的基础上,用软件工程方法重新设计、重新编码和测试那些需要变更的软件部分。
(4)以软件工程方法学为指导,对程序全部重新设计、重新编码和测试,为此可以使用CASE工具(逆向工程和再工程工具)来帮助理解原有的设计
第二十一题: 请简述说明面向对象方法学的优点有哪些?
答:
• 与人类习惯的思维方法一致;
• 稳定性好;
• 可重用性好;
• 较易开发大型软件产品;
• 可维护性好。
第二十二题: 说明软件可靠性和软件可用性之间的主要差别?
答:
可靠性和可用性之间的主要差别是:可靠性意味着在0到τ这段时间间隔内系统没有失效,而可用性只意味着在这段时间内系统是正常运行的。
第二十三题: 请说明在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
答:
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
应该从以下三方面研究目标系统的可行性:
1.技术可行性
2.经济可行性
3.操作可行性
第二十四题: 请简述说明面向对象分析的基本过程中,在概念上可以认为面向对象分析大体上按照的顺序进行是那些?
答:
寻找类与对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模型,定义服务。
第二十五题: 试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的使用范围。
答:
模型 |
使用范围 |
优点 |
缺点 |
瀑布模型 |
(3)用户的使用环境非常稳定;(4)开发工作对用户参与的要求很低。 |
有利于大型软件开发过程中人员的组织、管理,有利于软件开发方法和工具的研究,从而提高了大型软件项目开发的质量和效率。 |
(4)软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。 |
快速还原模型 |
(3)进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是非常适合的。 |
(1)可以得到比较良好的需求定义,容易适应需求的变化; (2)有利于开发与培训的同步;(3)开发费用低、开发周期短且对用户更友好。 |
(1)客户与开发者对原型理解不同; (2)准确的原型设计比较困难; (3)不利于开发人员的创新。 |
增量模型 |
(3)对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。 |
(3)可先发布部分功能给客户,对客户起到镇静剂的作用。 |
(1)并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构; (2)增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。 |
螺旋模型 |
螺旋模型只适合于大规模的软件项目。 |
(4) 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。 |
(1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失; (2)过多的迭代次数会增加开发成本,延迟提交时间。 |
第二十六题: 说明什么是软件质量?试叙述它与软件可靠性的关系。
答:
概括地说,软件质量,即“软件与明确地和隐含地定义的需求相一致的程度”。
更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。
第二十七题: 请问何谓Petri网和有穷状态机的概念?并个别举例和评价。
答:
1.Petri网:
• 是用于确定系统中隐含的定时问题的一种技术。
• Petri网包含4种元素:一组位置P、一组转换T、输入函数I、输出函数O,是一个四元组C=(P,T,I,O)。
P:{P1,,..,Pn}是一个有穷位置集
T:{t1,..,tm}是一个有穷转换集(T和P不相交)
I:输入函数,由转换到位置无序单位组的映射。
O:输出函数,由转换到位置无序单位组的映射。
例子:
一组位置P为{P1,P2,P3,P4},在图中用圆圈代表位置。
一组转换T为{t1,t2},在图中用短直线表示转换。两个用于转换的输入函数,用由位置指向转换的箭头表示,是:
I(t1)={P2,P4}
I(t2)={P2}
两个用于转换的输出函数,用由转换指向位置的箭头表示,是:
O(t1)={P1}
O(t2)={P3,P3}
2.有穷状态机:
一个有穷状态机包括下述5个部分:状态集J、输入集K、由当前状态和当前输入确定下一个状态(次态)的转换函数T、初始态S和终态集F。
如果使用更形式化的术语,一个有穷状态机可以表示为一个5元组(J,K,T,S,F),其中:
• J是一个有穷的非空状态集;
• K是一个有穷的非空输入集;
• T是一个从(J-F)×K到J的转换函数;
• S∈J,是一个初始状态;
• FJ,是终态集。
例子:
根据转换图,可以写出该有穷状态机:
3.评价:
有穷状态机:
有穷状态机方法采用了一种简单的格式来描述规格说明:
当前状态+事件+谓词=>下个状态
这种形式的规格说明易于书写、易于验证,而且可以比较容易地把它转变成设计或程序代码。事实上,可以开发一个CASE工具把一个有穷状态机规格说明直接转变为源代码。
Petri网:
适用于确定系统中隐含的定时问题。在性能评价、操作系统和软件工程等领域,Petri网应用得都比较广泛。
第二十八题: 请问典型的总体设计步骤有哪些?
答:
1. 设想供选择的方案
2. 选取合理的方案
3. 推荐最佳方案
4. 功能分解
5. 设计软件结构
6. 设计数据库
7. 制定测试计划
8. 书写文档
9. 审查和复审
第二十九题: 用面向对象方法开发软件,通常需要建立3种形式的模型,分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。试问以上模型需要产生出那些图?
答:
1、建立对象模型,产生UML类图;
2、建立动态模型,产生UML状态图;
3、建立功能模型,产生数据流图与UML用例图。
第三十题: 请说明在什么情况下应该使用形式化说明技术?说明使用形式化说明技术应遵守哪些规则?
答:
在用非形式化的方式描述时,存在矛盾,二义性,含糊性,不完整性级抽象层次混乱等问题时用形式化说明技术。
应用形式化方法的准则:
• 应该选用适当的表示方法;
• 应该形式化,但不要过分形式化;
• 应该估算成本;
• 应该有形式化的方法顾问随时提供咨询;
• 不应该放弃传统的开发方式;
• 应该建立详尽的文档;
• 不应该放弃质量标准;
• 不应该盲目依赖形式化方法;
• 应该测试,测试再测试;
• 应该重用。
第三十一题: 请简述决定软件可维护性的因素主要有哪五个?
答:
• 可理解性
• 可测试性
• 可修改性
• 可移植性
• 可重用性
第三十二题: 请简述说明面向对象设计(OOD)的启发原则有哪些?
答:
• 设计结果应该清晰易懂;
• 一般-特殊结构的深度应适当;
• 设计简单的类;
• 使用简单的协议;
• 使用简单的服务;
• 把设计变动减至最小。
第三十三题: 根据历史数据可以做出如下的假设 :
对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960)
存储器的价格按下面公式描述的趋势逐年下降:P1=0.3×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)题。
答:
(1)
1985年对计算机存储容量的需求估计:M=4080e0.28(1985-1960)=4474263(字)
当字长为16位,存储器价格:P=0.048*0.72(1985-1974)*4474263=5789美元
(2)
需要工作量=4474263/200=22371(人/月)
指令成本=22371*4000=89484000美元
(3)
需求估计M=4080e0.28(1995-1960)=73577679(字)
存储器价格P=0.003*32*0.72(1995-1974)*73577679=7127(美元)
工作量=73577679/600=122629(人/月)
成本=122629*6000=735776790(美元)
第三十四题: 请简述说明软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护?
答:
(1)软件的可维护性与以下因素有关:
• 可理解性
• 可预测性
• 可修改性
• 可移植性
• 可重用性
(2)提高软件产品可维护性的措施:
• 文档是影响软件可维护性的决定因素。在软件再次交付使用之前,对软件配置进行严格的复审,则可大大减少文档的问题。
• 代码复审
• 在设计和编码过程中应该尽量使用可重用的软件构件,如果需要开发新的构件,也应该注意提高构件的可重用性。
• 在测试结束时进行最正式的可维护性复审,这个复审称为配置复审。
第三十五题: 请说明在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
答:
(1)
开发一个软件时,需要判断原定的系统模型和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度,否则花费在这些工程上的任何时间、人力、软硬件资源和经费,都是无谓的浪费。
可行性研究实质是在较高层次上以较抽象的方式进行系统分析和设计的过程。因此需要在软件开发的早期阶段进行可行性研究用最小的代价确定问题是否能够解决,从而以避免无谓的浪费。
(2)一般说来,至少应该从以下三个方面研究每种解法的可行性:
• 技术可行性。对要开发项目的功能、 性能和限制条件进行分析, 确定在现有的资源条件下,技术风险有多大,项目是否能实现。这里的“资源”包括已有的或可以搞到的硬件、软件资源,现有技术人员的技术水平和已有的工作基础。
• 经济可行性。进行开发成本的估算以及了解取得效益的评估, 确定要开发的项目是否值得投资开发,对于大多数系统,一般衡量经济上是否合算,包括成本—效益分析、长期公司经营策略、开发所需的成本和资源和潜在的市场前景。
• 操作可行性。有时还要研究社会可行性问题,研究要开发的项目是否存在任何侵犯、妨碍等责任问题。社会可行性所涉及的范围也比较广,它包括合同、责任、 侵权和其他一些技术人员常常不了解的陷阱等。
• 必要时还应该从法律、社会效益等更广泛的方面研究每种解法的可行性。
第三十六题: 请简述说明模块耦合和模块内聚的类型和关系。
答:
1.模块耦合:
模块耦合分为数据耦合、控制耦合、特征耦合、公共环境耦合、内容耦合、非直接耦合和外部耦合。
2.模块内聚:
内聚分为三大类低内聚、中内聚和高内聚:
低内聚:
• 偶然内聚
• 逻辑内聚
• 时间内聚
中内聚:
• 过程内聚
• 通讯内聚
高内聚:
• 顺序内聚
• 功能内聚
3.内聚之间的关系:
4.耦合之间的关系:
耦合度由高到低依次为:
非直接耦合>数据耦合>特征耦合>控制耦合>外部耦合>公共环境耦合>内容耦合
第三十七题: 请说明未来毕业设计论文的内容若依照面向对向(OO)范式开发软件需要呈现哪些具体内容以及对应的图有哪些种类?
答:
(1)若根据面向对象范式开发软件,需要呈现的具体内容:
• 问题定义
• 可行性研究
• OOA
• OOD
• OOP
• 编码和单元测试
• 人机界面
• 数据库设计
• 类图
• 事件追踪图
• 人机界面图
• 状态图
• 基本系统模型图
• 数据流图
第三十八题: 请说明未来毕业设计论文的内容若依照结构化范式开发软件需要呈现哪些具体内容以及对应的图有哪些种类?
答:
1.需要呈现的内容:
• 可行性分析
• 数据字典
• 需求分析
• 总体设计
• 结构程序设计
• 人机界面设计
• 数据结构设计
• 编码、实现和测试
2.图的种类:
• 系统流程图
• 盒图
• 数据流图
• ER图
• 状态转换图
• 结构图
• HIPO图
• 用例图(UML)