第一章软件工程现状及发展1.描述你所认为的软件工程的现状以及软件工程对软件行业的发展有哪些贡献?软件发展现状:(1)已经存在大量正在运行的软件。金融、电信、航空航天等(2)软件的应用范围不断扩大。横向:商务、交通、家电(UPnP)等,软件无处不在。纵向:科学计算、企业管理、商业事务应用、网间协作等。(3)软件的规模与复杂性持续增加非常大规模系统:从50万行增加到1000万行,扩大了20倍;复杂性:a.子系统数目越来越多;b.计算机应用从数值计算开始发展到几百万条指令的大型企业业务应用,再发展到几千万终端用户直接交互工作的网络应用。(4)出现了大量与软件相关的标准。如:OMG发布的CORBA、UML、XMI、CWM等。(5)软件危机仍然存在(软件脱节)1968-2000:软件效率、质量、进度、预算无法控制。贡献:软件工程是一类求解软件的工程,它应用计算机科学、数学(用于构造模型和算法)和管理科学(用于计划、资源、质量和成本等的管理)等原理,借鉴传统工程(用于制定规范、设计范型、评估成本、权衡结果)的原则和方法,创建软件以达到提高质量、降低成本的目的。软件工程是一门指导计算机软件开发和维护的工程学科。2.写出5个以上的软件开发模型。(1).瀑布模型:软件开发按需求分析、设计、编码、测试、运维的顺序开展,每个阶段都有相应的文档产生,项目质量较高,适合于需求明确的项目开发。缺点:建设周期长、风险大、难以满足用户需求。(2).螺旋模型:以原型为基础沿螺线旋转、每转一圈都经过计划/风险分析/实施/评估等过程且得到相应新版本、经过若干次螺旋上升得到最终版本。适用于需求经常变化的大型复杂系统。缺点:很难让用户确信这种演化方法的结果是可以控制的,且建设周期长。(3).增量模型:采用随时间进展而交错的线性序列、每个序列产生一个可发布的增量、每个增量产生一个可操作的产品、第一个增量是核心产品。适用于需求经常变化的项目。缺点是需要有一个开放的产品架构,可能项目没有整体设计,质量会比较差。(4).快速原型模型:快速构建可运行的软件模型,以便理解和澄清问题,进一步细化需求,在新获取需求基础上进行系统开发。适合于做POC,缺点是产品质量差。(5).迭代模型:每次迭代就会产生一个可发布的产品,也就是把一个大项目拆成若干个小项目,分步实施。适合于分多期实施的项目,第二期的程序代码会完全替换第一期的代码。缺点是项目风险高。(6).喷泉模型:软件开发过程的各个阶段是相互迭代的、无间歇的。软件的某个部分常常被重复工作多次,相关对象在每次迭代中加入渐近的软件成分。适合于面向对象的软件开发,开发效率相对较高。缺点是常规的项目管理方法不适用。(7).V模型:这是一种以测试为中心的软件开发模型,适用于功能很明确的项目,先有测试案例,开发出的程序通过测试案例进行验证。缺点是一般项目不适用。(8).敏捷开发方法:比较典型的是极限编程,这是一种轻量级的、高效的软件开发方法,适合于中小型开发团队,客户需求模糊或多变的情况。缺点是一般项目不适用。(9).RUP:又称为统一过程,这是一种基于构件开发的方法。具有用例驱动、以基本架构为中心、迭代和增量的特点;在时间上分为四个连续的阶段,即初始阶段、细化阶段、构建阶段和交付阶段。适用于特定项目或产品的开发。(10).演化模型:也称变换模型,在原型基础上经过改进形成最终产品。第二章软件开发过程与开发方法1.什么是迭代式开发?迭代开发是UP(统一过程)和大多数其他现代方法中的关键实践。在这种生命周期方法中,开发被组织成一系列固定的短期(如三个星期)小项目,称为迭代(iteration);每次迭代都产生经过测试、集成并可执行的局部系统。每次迭代都具有各自的需求分析、设计、实现和测试活动。2.迭代式开发与增量式开发的异同?(1)增量开发适用于需求比较明确,架构比较稳定的软件开发,每次增量不影响已有的架构,在已有的架构下增加新的功能。每个增量之间相对独立,各个增量可以并行开发;(2)迭代开发适用于需求不甚明确、难度比较大的软件开发。一般是用例驱动的;管理难度大;(3)两种类型开发的相同之处,每个迭代和增量结束后都有产品发布。3.模型关注什么?模型是对某个实体或事物的抽象和简化,是现实世界中某些重要方面的表示。模型忽略了非本质的细节,抽象出了问题本质,使问题更容易理解,有助于对复杂问题进行分层,从而更好地解决问题。模型关注的是问题的本质。第三章几种典型的开发模型实例简介1.简述瀑布模型的优缺点和适用条件。优点:容易理解、管理成本低。文档产生并提供了贯穿生命期的进展过程的充分说明。允许基线和配置早期接受控制。可强迫开发人员采用规范的方法,例如结构化方法。缺点:客户必须能够完整、正确和清晰地表达他们的需要。可能要花费更多的时间来建立一些用处不大的文档。在开始的两个或三个阶段中,很难评估真正的进度状态。在一个项目的早期阶段,过分地强调了基线和里程碑处的文档。开发人员一开始就必须理解其应用。当接近项目结束时,出现了大量的集成和测试工作。直到项目结束之前,都不能演示系统的能力。适用范围:适合于功能和性能明确、完整、无重大变化的软件开发。2.协同过程的特性?用例驱动、以架构为中心、基于风险的增量和迭代开发3.微软过程中持续集成体现在哪里?持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。体现在:微软过程使用迭代+渐进式提交的方式可以保持系统良好的可预见性,也可使客户对项目组实施能力更加信任;迭代周期的选择一定是对一组业务用例的实现而不是其它。即每一个迭代周期都可以交付一个可以完成一定业务功能的系统--迭代是针对业务用例的;尽早实现困难的用例(如对服务水平要求高的用例);不要使一个迭代周期超过5周(1个月);4.MSF团队模型中有哪些角色?(1)产品经理:了解客户特征,尤其是商业特征,明确客户的需求以及需求的期望值。(2)程序经理:负责制定计划,每天找出完成该计划的风险所在,排除风险,每天交付应该完成的内容,确保计划按质、按量实施。(3)用户体验:设计友好的用户界面,对用户进行培训,确保用户能够并且愿意和喜欢使用开发出的产品。(4)开发:开发者在开发前期就参与用户需求分析和项目计划制定,他最清楚具体的开发过程。(5)测试:负责开发出的代码的测试。(6)发布管理:平稳地部署,为日常运营作好准备。5.微软过程的主要特点是什么?使用迭代+渐进式提交的方式可以保持系统良好的可预见性,也可使客户对项目组实施能力更加信任;迭代周期的选择一定是对一组业务用例的实现而不是其它。即每一个迭代周期都可以交付一个可以完成一定业务功能的系统--迭代是针对业务用例的;尽早实现困难的用例(如对服务水平要求高的用例);不要使一个迭代周期超过5周(1个月);不要试图在这个阶段就确定下来整个开发过程的详细进度(尤其是大型项目),比较好的做法是对第一个迭代周期的任务进行比较详细的划分(基于WBS),而对后面迭代周期的适当放宽--计划应是由粗到细的。6.敏捷宣言的内容是什么?注重个体和交互胜过过程和工具注重可用的软件胜过面面俱到的文档注重客户合作胜过合同谈判注重响应变化胜过恪守计划7.简述敏捷开发方法的核心思想?(1)敏捷开发方法是面向人的而非面向过程的。(2)敏捷开发方法是“主动适应的”而不是“预先设定的”。8.敏捷方法的应用情境?项目系统需求非常急迫,要求开发时间尽可能的短。软件项目计划开发时间只有短短的4个月。初步开发出来的产品需要立即拿到用户现场去做演示,而在这时候用户会针对产品提出更多的需求,结果是系统不能满足用户需求,项目不得不做多次的需求变更。频繁的需求变更导致项目开发时间往往较长9.在XP中,(1)什么是结对编程?由两个开发人员在同一台电脑上共同编写解决同一问题的代码,通常一个人负责写编码,而另一个负责保证代码的正确性与可读性(2)什么是重构?指在不改变代码外在行为的前提下对代码做出的修改,以改进代码的内部结构。从本质上说,重构就是在代码写好之后改进它的设计。(3)XP不编写文档吗?团队成员之间如何沟通?团队成员不是通过文档来交流,文档不是必须的。团队成员之间通过日常沟通,简单设计,测试,系统隐喻以及代码本身来沟通产品需求和系统设计。测试是极限编程开发过程中最重要的文档之一,也是最终交付给用户的内容之一(4)XP的价值观是什么?沟通、反馈、简单、勇气(5)简述极限编程的适用情景。XP有一个非常关键的假设就是:开发人员只注重眼前需求,依赖重构来适应需求的变动,这样所带来的风险、开销要小于需求变化使得事先充分设计失效的代价;反之,实施XP就是不明智的。对于执行者的要求是比较高的:要求开发团队必须具备熟练的代码设计技能和严格的测试保障技术;了解面向对象和模式,掌握了重构和OO测试技术;习惯测试先行的开发方式等。10.在Scrum中,(1)有哪些主要活动?Sprint计划会议(SprintPlanningMeeting)每日站会(DailyScrumMeeting)Sprint评审会议(SprintReviewMeeting)Sprint回顾会议(SprintRetrospectiveMeeting)产品Backlog梳理会议(ProductBacklogRefinement)产品待办事项列表梳理(2)主要文档有哪些?ProductBacklog–产品待办事项列表SPRINTBACKLOG燃尽图(BURN-DOWNCHART)(3)“猪”的角色有哪些?产品所有者(ProductOwner):规划产品需求和发布计划;收集相关于产品的所有信息,并将信息转化为优先权项目列表,督促团队开发最具价值的功能。ScrumMaster:确保参与者都遵守Scrum的流程和规则团队(Team):自组织,自管理寻找最优方案实现需求(4)什么是SprintBacklog?是细化了的任务,定义团队在Sprint中的任务清单,这些任务会将当前冲刺选定的产品订单转化为完整的产品功能增量。(5)什么是ProductBacklog?是整个项目的概要文档,它包含已划分优先等级的、项目要开发的系统或产品的需求清单,包括功能和非功能性需求及其他假设和约束条件。第四章调查系统需求1.以下是好的系统改进目标吗?为什么是,或者为什么不是?(1)降低处理订单所需的时间。不是,因为没有规定可度量的期限。(2)新的系统必须使用Oracle数据库存储数据。不是,因为这是一个系统约束,而非系统目标(3)数据输入屏幕必须重新设计以使它们更友好。不是,因为这只是一个要求(而且是一个非常含糊不清的要求),不是目标。(4)联机订单处理的客户满意度必须提高10%。是,因为这是一个准确的、可度量的业绩声明2.系统分析各阶段的目标是什么?范围定义阶段这个项目看起来是否值得考虑?问题分析阶段真的值得构建一个新系统吗?需求分析阶段用户需要什么?想从新系统中得到什么?逻辑设计阶段新系统必须做什么?决策分析阶段最佳方案是哪一个?3.信息收集的主要问题有哪些,技术有哪些?(1)主要问题:业务处理过程是什么样?--你要干什么商业过程应该怎么完成?--如何完成需要哪些信息(2)技术:复查现有报表、表格和过程描述对现存的文档、表格、文档进行抽样从收集到的文档得出:问题症状与原因、组织中谁理解这些问题……主持与用户的面谈和讨论观察并记录商业过程分发和收集调查表主持联合需求计划会议4.目标与约束的区别是什么?目标:项目是否成功的度量准则。即,给定合适的资源下,希望实现的预期结果。如新系统处理订单的时间必须比现在减少50%以上。目标必须是精确的、可度量的。约束:针对实现目标的限制或界限。如最终期限、预算和所需技术,一般来说,约束是不能改变的。5.分析阶段的活动及相应的关键问题有哪些?第五章事件和事物1用于定义系