第一章——软件工程介绍
1.一个包含过程(process)、一系列方法(methods)和工具(tools)的框架,我们称之为软件工程(software engineering)。
2.软件开发人员面临的问题: ①软件开发时间长
②软件开发成本居高不下
③在软件交付给用户之前,我们无法找到所有的错误。 ④维护已有的程序花费高昂的时间和人力代价 ⑤软件开发和维护的过程难以度量。
3.软件的定义:
①程序(program):通过执行包含在程序中的指令可以满足预期的特征、功能和性能需求 ②数据结构(data structure):使得程序充分利用信息。 ③文档(ducoment):描述程序操作和使用。
4.What is the difference between software and hardware? ①软件是开发设计的,而不是生产制造的。
②软件不会磨损(wear out),但是会退化(deteriorate)。不断的变更是软件退化的根本原因。硬件会磨损,磨损的部分可以用备用的构件替换,而软件缺不存在备用构件。
③虽然整个工业向着基于构件的构造模型发展,然而大多数的软件还是主要采用用户定制(custom buildt)的方式(Because off-the-shell software components are unavailable in many
application domains)。在硬件设计中,构件复用是工程进程中通用的方法。而在软件设计中,大规模的复用还刚刚开始尝试。
5.软件的确定性(determinate)是指系统的输入、处理和输出的顺序及时间是可以预测的;软件的不确定性是指系统的输入、处理和输出的顺序及时间是无法提前预测的。
6.遗留软件(legacy software)——旧的软件
①生命周期长(longevity) ②业务关键性(business criticality) ③质量差(poor quality)
遗留软件发生系统演化的原因:
①软件需要修改其适应性,从而可以满足新的计算环境或者技术的需求。 ②软件必须根据新的业务需求进行升级。
③软件必须扩展以具有与更多现代系统和数据库协作的能力。 ④软件构架必须进行改建以适应多样化的网络环境。
7.软件演化(evolution)
变更(change)(通常称为软件维护)推动了软件演化,它通常是由以下情况引发的:程序纠错,调整软件以适应新的环境,满足用户新特性和功能的需求,以及对软件实施再工程以便在现代应用中发挥作用。
8.软件危机
软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题,如软件费用、软件可靠性、软件维护、软件生产、软件重用等。
1
第二章——过程综述
1.软件过程定义为一个建造高质量软件所需要完成的任务的框架(framework)。 软件生命周期:软件产品或软件系统从设计、投入使用到被淘汰的全过程。
2.**软件工程的定义:
①将系统化(systematic)、规范化(disciplined)、可量化(quantifiable)的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。 ②对①中所述方法的研究。
3.软件工程是一种层次化的技术,软件工程层次图如下:
工具tools 方法 methods 过程 process 质量关注点 a quality focus ①软件工程的根基(bedrock)在于质量关注点。
②软件工程的基础(foundation)是过程层。软件过程将各个层次的技术结合在一起,并实施合理地、及时地开发计算机软件。并且过程定义一个框架。
③软件工程方法为建造软件提供技术上的解决方法,包括沟通、需求分析、设计建模、编程、测试和支持。
④软件工程工具:为过程和方法提供自动化或半自动化的支持。
4.过程框架定义了若干小的框架活动,为完整的软件开发建立了基础。 五个通用过程框架活动(generic process framework activity): ①communication沟通 ②planning策划
③modeling建模:包括分析(analysis)和设计(design)两个动作 ④construction构建 ⑤deployment部署
5.stakeholder(共利益者)就是可在项目成功中分享利益的人,包括业务经理、最终用户、软件工程师、支持人员等。
6.不同的项目需要不同的任务集(task set),软件开发根据问题和项目的特点选择任务集。
7.软件工程的通用框架由很多普适性活动(umbrella activity)来实现,普适性活动贯穿于整个软件过程。(across/throughout the entire software process)
2
尽管有很多种不同的软件工程过程模型,但它们都定义了:一组框架活动,完成每个活动所包含的任务集,任务完成所形成的工作产品,以及一组可以用于整个过程的普适性活动。
8.不同模型之间的区别:
①活动和任务的总体流程,以及相互之间的关系 ②在框架中的每一个活动中任务细化的程度 ③对所需要提交的工作产品的定义 ④质量保证活动应用的方式
⑤过程跟踪和控制活动应用的方式 ⑥过程描述的详细和严谨程度
⑦客户和共享利益者对项目参与的深度 ⑧软件项目队伍所赋予的自主权 ⑨队伍组织和角色明确程度
9.能力成熟度模型(CMMI)能力成熟度模型集成,是一个过程元模型,定义了如何建立完整的软件过程,软件组织所应该具备的过程特征。分为不完全级、已执行级、已管理级、已定义级、已定量管理级、优化级。每个过程域的capability levels: ①第0级:incomplete(不完全级) ②第1级:performed(已执行级) ③第2级:managed(已管理级) ④第3级:defined(已定义级)
⑤第4级:quantitatively managed(已定量管理级) ⑥第5级:optimized(优化级)
10.软件过程可以定义为一系列模式(pattern)的组合,这些模式定义了一系列的软件开发中所需的活动、动作、工作任务、工作产品及相关的行为。
Pattern template provides a consistent means for describing a pattern。
11. formal techniques are available for assessing the software process: SCAMPI、CBI IPI、SPICE、ISO 9001
SCAMPI提供了五步的过程评估模型:启动(initiating)、诊断(diagnosing)、建立(establishing)、执行(acting)、学习(learning)
SPICE和其他的标准定义了指导软件过程评估的要求,ISO对过程中的质量管理进行检查
3
12. ISO 9001:2000采用“计划-实施-检查-行动”(plan-do-check-act)循环,将其应用于软件项目的质量管理环节。
A. 计划(plan)是为实现高质量的软件产品并最终提高用户满意度,建立必须的过程目标、活动和任务。
B. 实施是执行软件过程,包括框架活动和普适性活动。
C. 检查监督并测量过程,以保证所有为质量管理所建立的需求均已实现。 D. 行动启动软件过程改进活动,并持续地改进进程。
13.个人过程模型PSP定义的五个框架活动: ①策划(planning)
②高层设计(high-level design)
③高层设计评审(high-level design review) ④开发(development) ⑤后验(postmortem)
PSP强调对所犯的错误类型进行记录和分析,以便于制定避免错误的策略。
14.团队软件过程TSP定义的框架活动: ①项目启动(launch)
②高层设计(high-level design) ③实现(implementation) ④集成(integration) ⑤测试(test)
⑥后验(postmortem)
个人和团队模型都强调了成功软件过程的关键因素:测量、计划、自我管理
第三章——过程模型
1.惯例过程模型:惯例模型规定了一套过程元素——框架活动、软件工程动作、任务、工作产品、质量保证以及每个项目的变更控制机制。每个过程还定义了工作流
2. **瀑布模型waterfall model(经典生命周期classical life circle)、
是一种基于软件生存周期的线性(linear)开发模型。它提出了一个系统的、顺序
(sequential)的软件开发方法,从用户需求规格说明开始,通过策划、建模、构件和部署的过程,最终提供一个完整的软件并提供持续的技术支持。
①适用于需求定义清晰(requirements are fixed)且稳定的软件开发 不足之处:
①实际的项目很少遵守瀑布模型提出的顺序。 ②用户常难以清楚地描述所有的需求。
③客户必须要有耐心,只有在项目接近尾声的时候,他们才能得到可执行的程序。
3.**增量模型(incremental):以迭代的方式运用瀑布模型,在每个阶段运用线性序列。这种模型把软件看作是一系列相互联系的增量,在开发过程的各次迭代中,每次完成其中的一个增量。
①第一个增量是一个核心产品,每个增量都提交一个可以操作的产品。
②如果在既定的商业要求之前不可能找到足够的开发人员,增量模型显得特别有用。
4
4.RAD模型:
①是一种侧重于短暂的开发周期的增量过程模型,为大型且必须在严格的时间内提交的项目而设计的。
②是瀑布模型的高速变体,通过基于构件的构建方法实现快速开发。 ③是一种linear sequential model RAD的不足之处(drawbacks):
①对于大型的可伸缩项目,RAD需要大量的人力资源来创建多个相对独立的RAD团队。 ②如果没有为短时间内急速完成整个系统做好准备,RAD项目将会失败。 ③如果一个系统不能合理地模块化,RAD构建会有很多问题。 ④如果系统需求是高性能,不能采用RAD模型。 ⑤技术风险很高的时候,不宜采用RAD。
演化过程模型(evolutionary process model)每次迭代产生软件的一个更完整的版本。
5.原型开发(prototyping):用于需求很模糊的时候(requirements are fuzzy,cant define requirement clearly)
**原型模型的思想是:先建立一个能够放映用户主要需求的原型,让用户实际看一下未来系统的面貌,以便判断哪些功能是符合需要的,哪些方面还需要改进,然后将原型反复改进,直至建立完全符合用户要求的新系统。
6.螺旋模型(spiral)
①结合了原型的迭代(iterative)特性、瀑布模型的系统性(systematic)和可控性(controlled)特点。采用循环的方式逐步加深系统定义和实现的深度。
②其他过程模型在软件交付之后就结束了,螺旋模型则不同,它应用在计算机软件的整个生命周期,从概念开发到维护。
③把原型开发作为降低风险的机制,它依赖大量的风险评估专家来保证成功。If a major risk is not uncovered and managed ,problems will undoubtedly occur。
7.协同开发模型:适合于不同的工程团队开发的系统工程项目。 8.专用过程模型:应用较窄,只适合于某些特定的软件工程方法。
①基于构件的开发:本质上是演化模型,需要以迭代方式构建软件。the process to apply when reuse is development objective。
②形式化方法模型:主要活动是生成计算机软件形式化的数学规格说明,意义在于提供无缺陷的软件。
③面向方面的软件开发(AOSD):以用户跨越多个系统功能、特性和信息为关注点。
9.统一过程(UP)是一种增量模型,determined iterativelly,span more than one of the process。定义了五个阶段(phase):
①起始(inception):包括客户沟通和策划活动,强调定义和细化用例,并将其作为主要模型 ②细化(elaboration):包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示
③构建(construction):细化设计模型,并将设计模型转化为软件构件实现
④转换(translation):将软件从开发人员传递给最终用户,并由用户完成Beta测试和验收测试
⑤生产(production):持续地监控软件的运行,并提供技术支持
5