3.什么是软件危机?其产生的原因是什么?
答:“软件危机”(Software crisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。“软件危机”主要表现在两个方面:
(1)软件产品质量低劣,甚至开发过程就夭折。 (2)软件生产率低,不能满足需要。
4.什么是软件生存周期模型?它有哪些主要模型?
答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。 主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型等。 6.软件生命期各阶段的任务是什么?
答:软件生命期瀑布模型分为六个阶段:
可行性研究与计划(确定系统的目标和规模、分析项目的可行性) 需求分析与规格说明(明确系统的规格和要求)
设计(包括概要设计和详细设计,将系统分解为模块) 编程(用程序语言实现每个模块,简单容易)
测试(发现并改正错误,分为模块测试、集成测试和系统联调三级) 运行维护(扩充功能、纠错等)
二 软件项目管理
2、CMM将软件过程的成熟度分为哪几个级别?
答:初始级、可重复级、已定义级、已管理级和优化级
三 需求分析
2.M公司的软件产品以开发实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并取得了一些成功。若你作为一名管理员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:副总裁不喜欢报告长度超过一页(B5)。
答:应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。根据快速原型法的特点,特别适合于开发探索型、实验型的软件。
四 面向对象的需求分析
1.与传统程序设计模式中的过程调用相比,消息传递机制有何本质区别?
答:1) 消息传递必须给出信道的信息,通常要指出明显的接受方。2) 由于接受方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一接受方发送同样的信息,可因接受方的当前状态不同而得到不同的结果。3) 消息传递可以是异步的,发送方可以不必等待接受方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。
5.面向对象方法与结构化方法比较
答:分析是问题抽象 (做什么),设计是问题求解 (怎么做),实现是问题的解 (结果)。任何方法学对客观世界的抽象和求解过程都是如此。在问题抽象阶段,结构化方法面向过程,按照数据变换的过程寻找问题的结点,对问题进行分解。因此,与面向对象方法强调的对象模型不同,描述数据变换的功能模型是结构化方法的重点。如果问题世界的功能比数据更复杂或者更重要,那么结构化方法仍然应是首选的方法学。如果数据结构复杂且变换并不多,那么如以过程主导分析和设计,一旦有系统变更就会给下游开发带来极大混乱。
由于对过程的理解不同,面向过程的功能细分所分割出的功能模块有时会因人而异。而面向对象的对象细分,从同一问题领域的对象出发,不同人得出相同结论的比率较高。
在设计上,结构化方法学产生自顶向下、结构清晰的系统结构。每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。如果数据结构复杂,模块独立性很难保证。面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。
在软件工程基本原则中有一条“形式化原则”,即对问题世界的抽象结论应该以形式化语言 (图形语言、伪码语言等) 表述出来。结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述;而面向对象方法可以使用对象模型图、数据辞典、动态模型图、功能模型图。其中对象模型图近似系统结构图与实体关系图的结合,动态模型图类似状态迁移图,功能模型图类似数据流图。
五 软件设计
2.照“降低块间联系,提高块内联系”的设计总则对模块进行修改,具体从哪些方面进行改进?
答:1) 尽可能建立功能模块; 2) 消除重复功能;
3)模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间联系;
4)模块的大小适当;
5)模块的扇入扇出数不宜太多。
六 程序设计语言和编码
7.为了有良好的设计风格,应注意哪些方面的问题?
答:1)标识符应按意取名。
标识符即符号名,包括:模块名、常量名、标号名、子程序名、数据区名、缓冲区名等等。这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能够见名知意,有助于对程序功能的理解。
2)程序应加注释,它分为两类:序言性注释和功能性注释。 序言性注释应臵于每个模块的起始部分,主要内容有:a.说明每个模块的用途,功能;b.说明模块的接口即调用格式,参数描述及从属模块的清单;c.数据描述;d.开发历史。
功能性注释是嵌在源程序体中,用于说明其后的程序段或语句的功能以及数据的状态;也就是解释下面要“做什么”,或是执行了下面的语句会怎样;而不是解释下面“怎么做”,因为怎么做常常是与程序重复的,且对读者理解程序没有什么帮助。
七 软件测试
3.等价分类法的基本思想是什么?
答:根据程序的输入特性,将程序的定义域划分为有限个等价区段 —“等价类”,从等价类中选择出的用例具有“代表性”,即测试某个等价类的代表值就等价于对这一类其它值的测试。如果某个等价类的一个输入数据(代表值)测试中查出了错误,也即是该等价类中的其它值也会查出同样的错误。
八 软件维护
3.什么是软件可维护性?可维护性度量的特性是什么?
答:软件的可维护性是指维护人员为纠正软件系统出现的错误或缺陷,以及为满足新的要求而理解、修改和完善软件系统的难易程度。可维护性是所有软件系统都应具备的特点。在软件工程的每一阶段都应该努力提高系统的可维护性,在每个阶段结束前的审查和复审中,应着重得可维护性进行复审。
可维护性度量的特性主要有可理解性、可测试性和可修改性。可理解性被定义为人们通过阅读源代码和文档了解软件系统的结构、接口、功能、内部过程以及如何运行的难易程度;可测试性被定义为诊断和测试系统的难易程度;可修改性被定义为修改软件系统的难易程度;它们是密切相关的。
因篇幅问题不能全部显示,请点此查看更多更全内容