第一章1.软件的特点是什么?①软件是逻辑实体;具有抽象性;软件的形态不可见②软件的生产过程和生产方式与硬件不同。③软件与硬件的维护方式不同。④软件是复杂的。⑤软件成本越来越高。2.2006年发布的国家分类标准是什么?1)按功能:系统软件、支撑软件、应用软件2)按规模:微型软件、小型软件、大型软件、甚大型软件、极大型软件3)按工作方式:实时处理软件、分时软件、交互式软件、批处理软件4)按服务对象:项目软件、产品软件5)按使用频度:使用频度低、使用频度高6)按失效影响:不良影响、严重影响3.软件危机的表现有哪些?①进度难以预测②成本难以控制③功能难以满足用户④质量无法保证⑤产品难以维护⑥缺少适当的文档4.产生软件危机的原因是什么?①用户需求不明确②缺乏正确的理论指导③软件开发规模越来越大④软件开发复杂度越来越高注:(1和2是主观:开发方法不正确;3和4客观:逻辑部件规模庞大)5.什么是软件工程三要素?方法、工具、过程6.软件工程的基本目标是什么?①付出较低的开发成本②达到要求的软件功能③取得较好的软件性能④开发的软件易于移植⑤需要较低的维护费用⑥能按时完成开发工作,及时交付使用7.软件工程的基本原则是什么?①抽象:采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。②信息隐蔽:将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问。这就是信息封装,使用与实现分离的原则。③模块化:如C语言程序中的函数过程,C++语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。④局部化:要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于控制解的复杂性。⑤确定性:软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。⑥一致性:整个软件系统的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致。⑦完备性:软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。⑧可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。8.软件工程的基本原理是什么?①用分阶段的生命周期严格管理;②坚持进行阶段评审;③实行严格的产品控制;④采用现代程序设计技术;⑤结果应能清楚地审查;⑥开发小组人员应少而精;⑦承认不断改进软件工程实践的必要性。9.瀑布模型有什么特点?1)其核心思想是按工序将问题简单化2)采用结构化的分析与设计方法将逻辑实现以物理实现分开。3)瀑布型将软件生命周期划分为软件计划、需求分析和定义(前两者为定义阶段)、软件设计、软件编码、软件测试(前面为开发阶段)、软件运行维护(最后一个为维护阶段)6个阶段。9.瀑布模型有什么特点?1)最早出现的软件开发模型,它提供了软件开发的基本框架。2)瀑布模型的本质是一次通过,即每个活动只执行一次,最后得到软件产品。3)瀑布模型有利于大型软件开发过程中人员的组织及管理,有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。4)里程碑或基线驱动,或者说文档驱动;瀑布模型的缺陷:①由于开发模型呈线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。这样软件与用户见面的时间间隔较长,也增加了一定的风险。②在软件开发前期末发现的错误传到后面的开发活动中时,可能会扩散,进而可能会造成整个软件项目开发失败。③在软件需求分析阶段,完全确定用户的所有需求是比较困难的,甚至可以说是不太可能的。瀑布模型即生存周期模型,其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。瀑布模型将软件生命周期划分为软件计划、需求分析和定义、软件设计、软件编码、软件测试、软件运行维护6个阶段,规定了他们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。10.说明生命周期的划分?瀑布型将软件生命周期划分为软件计划、需求分析和定义(前两者为定义阶段)、软件设计、软件编码、软件测试(前面为开发阶段)、软件运行维护(最后一个为维护阶段)6个阶段。10.说明生命周期的划分?一个软件从定义、开发、使用和维护,直到最终被废弃,所经历的生存过程称为软件生存期或叫生命期。包括计划、需求分析、软件计划、程序编码、软件测试和运行维护6各阶段。11.列出软件生存期的几个主要模型?瀑布模型原型模型螺旋模型增量模型构件组装模型统一过程模型第四代技术12.瀑布模型软件开发方法的基本过程?定义阶段:计划、需求分析开发阶段:设计、编码、测试维护阶段:运行维护13.增量模型有什么特点?任务或功能模块驱动,可以分阶段提交产品;有多个任务单,这些多个任务单的集合,构成项目的一个总任务书(总用户需求报告)。13.增量模型有什么特点?1)融合了线性顺序模型的基本成份和原型实现模型的迭代特征。2)增量模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的“增量”。3)增量模型强调每一个增量均发布一个可操作产品。早期的增量是最终产品的“可拆卸”版本,但他们确实提供了给用户服务的功能,并且提供了给用户评估的平台。将软件产品看作一组增量构件,每次设计、实现、集成、测试和交付一块构件,直到所有构件全部实现为止。特点:1)任务或功能模块驱动,可以分阶段提交产品;2)有多个任务单,这些多个任务单的集合,构成项目的一个总任务书(总用户需求报告)。14.几种主要的软件开发方法?①结构化开发方法②面向对象的方法15.软件工程中的“五个面向”?面向流程分析、面向数据设计、面向对象实现、面向功能测试、面向过程管理。第二章1.可行性分析的目的?1)用最小的代价在尽可能短的时间内确定问题是否能够解决。2)确定问题是否能够解决和值得解决。3)分析可能的利弊关系。2.可行性分析最为敏感的方面是什么?⑴经济可行性:经济效益能否超过开发成本?⑵技术可行性:现有技术能否实现?技术风险的各种因素?⑶操作可行性:用户的接受程度如何?⑷法律可行性:是否合法,是否侵犯他人的利益。3.可行性研究的步骤有哪些?①系统调研(复查系统规模和目标)②现行系统分析(研究目前正在使用的系统)③建议新系统(导出新系统的高层逻辑模型)④模型评审(重新定义问题)⑤导出和评价可供选择的解决方案⑥推荐一个方案并说明理由⑦推荐行动方针⑧书写文档提交审查(可行性分析报告)4.软件计划的步骤有哪些?①估计软件的规模及所需的资源;②制定时间表;③鉴别和评估风险;④约定与限制条件。5.软件计划书的内容有哪些?①软件范围②环境资源③进度安排④成本/效益分析⑤其它要考虑的因素6.甘特图有哪些优点和缺点?甘特图:是一种对各项活动进行计划调度与控制的图表。横向表示时间,纵向列出任务。优点:它具有简单、醒目和便于编制等特点。能够动态反映软件项目开发进展的情况。缺点:难以反映多个任务之间存在的复杂的逻辑关系。7.什么是网络计划法的关键事件与关键路径?关键事件:最早完成时间与最迟完成时间相等的事件。关键路径:关键事件联结的各个活动所组成的路线。8.常用的成本估算方法有哪些?(1)基于代码行的成本估算方法(2)任务分解成本估算(3)经验统计估算模型①参数方程②动态多变量参数模型③COCOMO模型(constructiveCostModel)⑷自动估算工具9.软件成本估算包括哪些内容?⑴工作产品规模估计⑵工作量及成本估计⑶关键资源的量化估计10.项目活动和项目约定计划指的是什么?活动指开发活动和管理活动;约定指各种规范、标准、规则;规范:是对过程和行为的约束;标准:是对产品的约束;规则或规程:是对操作的约束。第三章1.为什么说需求获取难?①用户需求具有动态性(不稳定性)。②用户需求具有模糊性(不准确性)。③对需求达成一致的艰难性。④管理体制、机构设置处在变革中。⑤软件书籍没有将需求分析讲清楚。2.需求分析的重点是哪些?①业务模型、②功能模型、③性能模型、④接口模型。3.需求分析的9大任务是什么?①画出系统的组织结构图、列出各部门的岗位角色(机构模型)。②画出系统业务操作流程图。③画出系统的数据流图,掌握业务规则,获得初步数据模型。④列出系统的功能点,即功能模型。⑤列出系统的性能点,即性能模型。⑥列出系统的接口,即接口模型。⑦确定系统的运行环境,即环境模型。⑧确定系统的界面约定,即界面模型。⑨对开发工期、费用、开发进度、系统风险等分析与评估。4.简述需求分析的过程?问题识别分析与综合编制需求分析阶段文档需求分析评审5.获取需求的常用方法有哪些?①访谈/个别访问:正式的和非正式的访谈②问卷调查/书面调查:发电子邮件、问卷调查即把需要调查的内容制成表格交给用户填写。该方法对需要调查大量人员的意见时,十分有效。③情景分析/电话和电视会议:对目标系统解决某个具体问题的方法和结果,给出可能的情景描述,以获知用户的具体需求。④实地考察/收集资料:开调查会参加业务实践⑤构造原型6.需求分析的原则是什么?①解决逻辑问题:需求分析是对问题的识别和说明,要回答“做什么”,而不是“怎么做”。②以运行环境为基础:需求分析工作应以具体的运行环境为基础,实事求是。③用户参与的原则:需求分析工作是系统分析人员同用户不断交互的过程。④构造高质量的需求规格说明:需求规格说明是需求分析工作重要的完成标志。7.需求分析的基本要求是什么?①理解问题的数据域和功能域②自顶向下、逐层分解③给出系统的逻辑视图和物理视图8.常见的需求分析方法有哪些?需求获取、分析建模、文档编写、需求验证;8.常见的需求分析方法有哪些?①面向数据流的分析方法②面向功能的分析方法③面向数据的Jackson方法④面向对象的分析方法9.需求分析方法有哪些共性?1.支持数据域的分析机制2.功能表示方法3.接口的定义4.问题的分解及抽象化5.逻辑视图和物理视图6.系统抽象模型4.1思考题1.软件设计的具体任务包括哪些内容?(1)制定规范(2)结构设计(3)处理方式设计(4)数据结构及数据库设计(5)可靠性设计(质量设计)(6)编写软件设计文档(7)设计审查和复审(8)详细设计2.什么是数据的保护性设计?1)防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能2)一致性设计:在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏3)冗余性设计:3.软件设计的目标是什么?软件设计的最终目标:取得最佳方案①节省开发费用、②降低资源消耗、③缩短开发时间、④能够赢得较高的生产效率、⑤较高的可靠性、⑥可维护性的方案。4.模块具有哪些基本属性?“模块”,又称“组件”。一般有四个基本属性功能:描述该模块做什么?逻辑:描述模块内部怎么做?状态:模块使用时的环境和条件。接口:指模块的输入与输出。5.什么是耦合?什么是内聚?如何增强模块的独立性?耦合:各模块之间的互相连接的紧密程度。模块之间的连接越紧密,联系越多,耦合性就越高,而其独立性就越弱。内聚:模块内各功能元素彼此结合的紧密程度。一个模块内部各个元素之间的联系越紧密,则它的内聚性就越高,相对地,它与其它模块之间的耦合性就会减低,而模块独立性就越强。增强模块独立性的方法是尽量做到高内聚、低耦合。6.模块化的特征有哪些?抽象:用层次的方式构造和分析复杂系统。逐步求精:帮助开发人员把精力集中在与当前开发阶段最相关的那些问题上。信息隐蔽:如果一个模块内包含的信息(过程和数据)不允许外部的模块访问的话,其它模块不能对其访问。局部化:把一些关系密切的软件元素物理地放得彼此靠近。7.影响耦合度的因素有哪些?①连接方式的类型。②接口的复杂性。③传送的信息流类型。④耦合的时间。8.降低耦合度的方法有哪些?耦合度是评价程序质量的重要指标,耦合度越小,则每个模块越容易独立地被理解、编写和修改,同时每个模块的错误越