第一章1.1软件工程(SE)的定义、方向、作用:SE:在将有关软件开发与应用的概念科学体系化的基础上,研究如何有计划、有效率、经济的开发和利用能在就算机上正确运行的软件的理论和技术的工程方法学,一些开发和维护软件的方法、过程、原则。是一个系统工程,既有对技术问题的分析与综合,也有对开发过程和参与者的管理。SE的方向:面向对象模式,结构化模式,基于过程的模式等SE的作用:付出较低的开发成本,达到要求的软件功能,取得较好的软件性能,开发的软件易于移植,需要较低的维护费用,能按时完成开发工作,及时交付使用。1.2开发模式:软件开发的全部过程,活动和任务的结构框架,它能直观的表达的表达软件开发全过程,明确要完成的主要活动,任务和开发策略。1.3说明错误、故障和失效的含义及联系(并举例):错误:是在软件生产过程中人为产生的错误(需求说明中的错误,代码中的错误)故障:是在功能实现过程中产生的问题;是错误导致的结果,是在软件中一个错误的表现(一个错误可能产生多个缺陷,静态存在的)失效:是相对于系统指定行为的偏离,系统违背了它应有的行为(动态存在的)联系:当一个开发者编写程序时,会在代码中出现错误。当这个程序被编译或集成到一个系统中时,系统就存在故障。当你运行这个系统时,可能会导致失效,即人们产生错误,故障是错误的结果(内部观角:从开发者的角度看待问题),当故障执行时出现失效(外部视角:从用户角度看到的问题)。并不是所有的错误会导致故障,并非每个缺陷都对应相应的失败。1.4软件质量应从哪几个方面衡量,论述之:(1产品的质量)(2过程的质量)(3商业环境背景下的质量)(1)产品的质量:用户从失败的数目和类型等外部特征进行评价,如果软件具有足够的功能并且易于学习和使用,用户就断定软件是高质量的;开发者从缺陷的数目和类型等内部特征来作为产品质量的依据。(2)过程的质量:有很多过程都会影响到最终的产品质量,只要有活动出了差错,产品的质量就会受到影响;开发和维护过程的质量与产品的质量是同等重要的。(3)商业环境背景下的软件质量:将技术价值和商业价值统一起来。1.5软件系统的系统组成(系统的要素有哪些):对象(实体)+活动+关系+系统边界活动:活动是发生在系统中的某些事情,通常描述为由某个触发器引发的事件,活动通过改变属性把一个事物变成另一个事物。对象:活动中涉及的元素称为对象。关系:是指活动与对象之间的关系。系统边界:即系统包含的功能与系统不包含的功能之间的界限。1.6现代软件工程大致包含几个阶段及各个阶段的文档:(1)需求分析:主要包括问题定义、可行性分析、需求分析《需求规格说明书》(2)系统设计:主要包括用户界面和软件结构图(3)程序设计:包括模块功能算法与数据描述(4)程序实现:主要包括编程的代码和注释(5)单元测试:模块测试与性能测试(6)集成测试:按照结构图进行测试产生测试报告(7)系统测试:按SRS对系统总体功能进行测试(8)系统提交:交付产品(9)系统维修:修改软件的过程,为满足改错或新需求1.7使现代软件工程实践发生变化的关键因素是什么?(1)商用产品投入市场时间的紧迫性(2)计算技术在经济中的转变:更低的硬件成本,更高的开发、维护成本(3)功能强大的桌面计算的可用性(4)广泛的局域网和广域网(5)面向对象技术的采用及其有效性(6)使用窗口、图标、菜单和指示器的图形用户界面(7)软件开发瀑布模型的不可预测性1.8什么是抽象?抽象是在某种概括层次上对问题的描述,使得我们能够集中于问题的关键方面而不陷入细节,也就是对细节的隐藏。1.9什么是重(复)用?重(复)用采用以前开发的软件系统中具有共性的部件,用到新的开发项目中去。(这里的重用不仅仅是代码的重用。)1.10什么是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。典型表现:(1)对软件开发成本和进度的估计常常很不准确。(2)用户对“已完成”软件系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。(4)软件常常是不可维护的。(5)软件通常没有适当的文档资料。(6)软件成本在计算机系统总成本中所占的比例逐年上升。(7)软件开发生产率提高的速度,远跟不上计算机应用迅速普及深入的趋势出现的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。(1)软件缺乏“可见性”,管理和控制软件开发过程相当困难(2)软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升(3)开发时期引入错误,导致软件维护通常意味着改正或修改原来的设计,客观上使得软件较难维护(4)软件专业人员对软件开发和维护中或多或少地采用了错误的方法和技术1.11开发队伍的组成角色有哪些?需求分析人员、设计人员、程序员、测试人员、培训人员、维护人员、资料员、配置管理人员CMM是指“能力成熟度模型”,其英文全称为CapabilityMaturityModelforSoftware,英文缩写为SW-CMM,简称CMM。它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM的核心是把软件开发视为一个过程。SRS(SoftwareRequirementsSpecification),软件需求说明书的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解,使之成为整个开发工作的基础。包含硬件、功能、性能、输入输出、接口界面、警示信息、保密安全、数据与数据库、文档和法规的要求。第二章2.1什么叫过程(生命周期)?过程是一组有序的任务,它涉及活动、约束和资源使用的一系列步骤,用于产生某种想要的输出。我们有时也把涉及产品构建的这种过程称为生命周期。因此,有时把软件开发过程称为软件生命周期。2.2什么是软件过程,软件过程的重要性是什么?软件过程:将软件开发中的一组有序的任务称为软件过程,它涉及活动、约束和资源使用的一系列步骤,用于产生某种想要的输出。重要性:(1)它强制活动具有一致性和一定的结构,使程序的集合组合起来以产生满足目标和标准的产品,(2)过程结构允许我们分析、理解、控制和改进组成过程的活动,并以此来指导我们的行动(3)它能使我们获取经验并把它创收给他人。2.3什么是软件生命周期模型?软件生命周期模型,是从一个特定角度提出的对软件过程的简化描述,是对软件开发实际过程的抽象,它包括构成软件过程的各种活动、软件工件以及参与角色等。2.4瀑布模型及其优缺点瀑布模型:瀑布模型将开发阶段描述为从一个开发阶段瀑布般地转换到另外一个阶段,一个开发阶段必须在另一个开发阶段开始之前完成。瀑布模从一种非常高层的角度描述了开发过程中进行的活动,并且提出了要求开发人员经过的时间序列。优点:(1)瀑布模型一直用来规范软件开发活动,每一个过程活动都有与其相关联的里程碑和可交付产品,以便于项目经理能够用模型判断在某一时刻项目里最后完成还有多远。(2)它的简单性使得开发人员很容易向不熟悉软件开发用户作出解释。(3)很多更复杂的模型实际上是在瀑布模型的基础上的润色,如加入反馈循环以及额外的活动。缺点:(1)它并不能反映实际的代码开发方式。除了一些理解非常充分的问题之外,实际上软件是通过大量的迭代进行开发的。(2)它没有揭示每一个活动如何把一种制品转化为另外一种制品(3)没有把软件看做一个问题求解的过程,而是从制造业的角度来看待软件开发的,软件开发应该是一个创造的过程,而不是制造的过程。2.5什么是原型?原型是一个部分开发的产品,它使客户和开发人员能够对计划开发的系统的相关方面进行检查,以决定它对最终产品是否合适或恰当。2.6V模型及其特点V模型是瀑布模型的变种,它说明测试活动是如何与分析和设计相联系的,编码处于V形符号的顶点,分析和设计在左边,测试和维护在右边。特点:V模型使得隐藏在瀑布模型中的迭代和重做活动更加明确。瀑布模型关注的通常是文档和制品,而V模型关注的则是活动和正确性。2.7原型模型不仅仅是附属于瀑布模型的,同时也是一种有效的过程模型的基础。原型模型允许开发人员快速构造整个系统或系统的一部分以理解或澄清问题。依据原型化的目标,可以取消原型化需求、设计或系统中的一个或多个循环,但是总体目标保持不变,即减少开发中的风险和不确定性。2.8可转换模型可转换模型通过去除某些主要开发步骤来设法减少出错的机会。2.9阶段化开发模型的含义、分类和特点(运行系统和开发系统的概念)阶段化开发模型的含义:系统被设计为一部分一部分地交付,从而在系统其余部分正在开发的同时,用户已经获得了一部分的功能。分类:(1)增量开发:系统按照功能划分为子系统,定义发布时首先定义一个小的功能子系统,然后在每一个新的发布中增加新功能。(2)迭代开发:一开始就提交一个完整的系统,然后在每一个新的发布中改变每个子系统的功能。特点:(1)即使还缺少某些功能,但在早期的发布中就可以开始培训。(2)可以及早为那些以前从未提供的功能开拓市场。(3)当运行系统出现未预料到的问题时,经常性的发布可以使开发人员能全面、快速地修复这些问题(4)针对不同的发布版本,开发团队将重点放在不同的专业领域技术上。2.10螺旋模型的含义、目的、四个象限的任务及四重迭代的含义含义:螺旋模型将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。目的:把开发活动和风险管理结合起来,以将风险减到最小并控制风险。四个象限的任务依次是:评估可选方案及风险;确定目标、可选方案及约束;计划;开发与测试四重迭代的含义:(1)操作概念是第一次迭代的产品;(2)需求是第二次迭代的主要产品;(3)第三次迭代产中,系统开发产生设计;(4)第四次迭代能够进行测试。(5)螺旋模型的每一次迭代都根据需求和约束进行风险分析,以权衡不同的选择,并且在确定某一特定选择之前,通过原型化验证可行性或期望度。当风险确认之后,项目经理必须决定如何消除或最小化风险。2.11敏捷方法的含义、特点和目标:含义:以人为核心、迭代、循序渐进。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。特点:(1)规则游戏(2)小的发布(3)隐喻(4)简单设计(5)首先编写测试(6)重构(7)对编程(8)集体所有权(9)持续集成(10)可以忍受的步伐(11)在现场的客户(12)代码标准目标:通过尽可能早地、持续地交付有价值的软件使客户满意。2.12在所有的软件开发模型中,你认为哪些过程给予你最大的灵活性以应对需求的变更?阶段开发模型和螺旋模型补充:统一过程(UP)可以用三句话来表达:它是用例驱动的、以基本架构为中心的、迭代式和增量性的软件开发过程框架,它使用对象管理组织(OMG(ObjectManagementGroup))的UML并与对象管理组织(OMG)的软件过程工程原模型(SPEM(SoftwareProcessEngineeringMeta-Model)软件过程工程元模型)等相兼容。第三章3.1什么是项目进度?项目进度通过列举项目的各个阶段,把每个阶段分解成离散的任务或活动,来描述特定项目的软件开发周期。进度还描绘这些活动之间的交互,并估算每项任务或活动将或花费时间。3.2什么是活动?什么是里程碑?活动:活动是项目的一部分,它在一段时间内发生。里程碑:里程碑是活动的完成---某一特定时刻。3.3软件人员应该具备的能力是什么?(1)完成工作的能力(2)对工作的兴趣(3)开发类似应用的经验(4)使用类似工具或语言的经验(5)使用类似开发环境的经验(6)使用类似技术的经验(7)培训(8)与其他人交流的能力(9)与其他人共同承担责任的能力(10)管理技能3.4软件项目组织的基本结构3.5专家估测法的大致含义:很多工作量估算方法依赖于专家的判断。使用专家的知识和经验,对软件项目的工作量进行评估,预测的精确性基于估算者的能力、经验、客观性和洞察力。是对构建整个系统或其子系统所需的工作量做出经验性的猜测。主要有类