四川大学软件工程考点.docx
《四川大学软件工程考点.docx》由会员分享,可在线阅读,更多相关《四川大学软件工程考点.docx(37页珍藏版)》请在冰豆网上搜索。
四川大学软件工程考点
第一章——软件工程介绍
1.一个包含过程(process)、一系列方法(methods)和工具(tools)的框架,我们称之为软件工程(softwareengineering)。
2.软件开发人员面临的问题:
1软件开发时间长
2软件开发成本居高不下
3在软件交付给用户之前,我们无法找到所有的错误。
4维护已有的程序花费高昂的时间和人力代价
5软件开发和维护的过程难以度量。
3.软件的定义:
1程序(program):
通过执行包含在程序中的指令可以满足预期的特征、功能和性能需求
2数据结构(datastructure):
使得程序充分利用信息。
3文档(ducoment):
描述程序操作和使用。
4.Whatisthedifferencebetweensoftwareandhardware?
1软件是开发设计的,而不是生产制造的。
2软件不会磨损(wearout),但是会退化(deteriorate)。
不断的变更是软件退化的根本原因。
硬件会磨损,磨损的部分可以用备用的构件替换,而软件缺不存在备用构件。
3虽然整个工业向着基于构件的构造模型发展,然而大多数的软件还是主要采用用户定制(custombuildt)的方式(Becauseoff-the-shellsoftwarecomponentsareunavailableinmanyapplicationdomains)。
在硬件设计中,构件复用是工程进程中通用的方法。
而在软件设计中,大规模的复用还刚刚开始尝试。
5.软件的确定性(determinate)是指系统的输入、处理和输出的顺序及时间是可以预测的;软
件的不确定性是指系统的输入、处理和输出的顺序及时间是无法提前预测的。
6.遗留软件(legacysoftware)旧的软件
①生命周期长(longevity)②业务关键性(businesscriticality)③质量差(poorquality)
遗留软件发生系统演化的原因:
1软件需要修改其适应性,从而可以满足新的计算环境或者技术的需求。
2软件必须根据新的业务需求进行升级。
3软件必须扩展以具有与更多现代系统和数据库协作的能力。
4软件构架必须进行改建以适应多样化的网络环境。
7.软件演化(evolution)
变更(change)(通常称为软件维护)推动了软件演化,它通常是由以下情况引发的:
程序纠错,调整软件以适应新的环境,满足用户新特性和功能的需求,以及对软件实施再工程以便在现代应用中发挥作用。
8.软件危机
软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题,如软件费用、软件可靠性、软件维护、软件生产、软件重用等。
第二章一一过程综述
1.软件过程定义为一个建造高质量软件所需要完成的任务的框架(framework)。
软件生命周期:
软件产品或软件系统从设计、投入使用到被淘汰的全过程。
2.**软件工程的定义:
①将系统化(systematic)、规范化(disciplined)、可量化(quantifiable)的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
②对①中所述方法的研究。
3.软件工程是一种层次化的技术,软件工程层次图如下:
工具tools
方法methods
过程process
质量关注点aqualityfocus
1软件工程的根基(bedrock)在于质量关注点。
2软件工程的基础(foundation)是过程层。
软件过程将各个层次的技术结合在一起,并实施合
理地、及时地开发计算机软件。
并且过程定义一个框架。
3软件工程方法为建造软件提供技术上的解决方法,包括沟通、需求分析、设计建模、编程、测试和支持。
4软件工程工具:
为过程和方法提供自动化或半自动化的支持。
4.过程框架定义了若干小的框架活动,为完整的软件开发建立了基础。
五个通用过程框架活动(genericprocessframeworkactivity):
1communication沟通
2planning策划
3modeling建模:
包括分析(analysis)和设计(design)两个动作
4construction构建
5deployment部署
5.stakeholder(共利益者)就是可在项目成功中分享利益的人,包括业务经理、最终用户、软件工程师、支持人员等。
6.不同的项目需要不同的任务集(taskset),软件开发根据问题和项目的特点选择任务集。
7.软件工程的通用框架由很多普适性活动(umbrellaactivity)来实现,普适性活动贯穿于整个
软件过程。
(across/throughouttheentiresoftwareprocess)
斤唏華52灵、、fnirw*jrk)
替适tTjfR1inihtvIl.'LachMfy>
»
:
聊ft1F仏
a
<
!
尽管有很多种不同的软件工程过程模型,但它们都定义了:
一组框架活动,完成每个活动所包含的任务集,任务完成所形成的工作产品,以及一组可以用于整个过程的普适性活动。
8.不同模型之间的区别:
1活动和任务的总体流程,以及相互之间的关系
2在框架中的每一个活动中任务细化的程度
3对所需要提交的工作产品的定义
4质量保证活动应用的方式
5过程跟踪和控制活动应用的方式
6过程描述的详细和严谨程度
7客户和共享利益者对项目参与的深度
8软件项目队伍所赋予的自主权
9队伍组织和角色明确程度
9.能力成熟度模型(CMMI)能力成熟度模型集成,是一个过程元模型,定义了如何建立完整
的软件过程,软件组织所应该具备的过程特征。
分为不完全级、已执行级、已管理级、已定义级、已定量管理级、优化级。
每个过程域的capabilitylevels:
1第0级:
incomplete(不完全级)
2第1级:
performed(已执行级)
3第2级:
managed(已管理级)
4第3级:
defined(已定义级)
5第4级:
quantitativelymanaged(已定量管理级)
6第5级:
optimized(优化级)
10.软件过程可以定义为一系列模式(pattern)的组合,这些模式定义了一系列的软件开发中所需的活动、动作、工作任务、工作产品及相关的行为。
Patterntemplateprovidesaconsistentmeansfordescribingapattern。
11.formaltechniquesareavailableforassessingthesoftwareprocess:
SCAMPI、CBIIPI、SPICE、ISO9001
SCAMPI提供了五步的过程评估模型:
启动(initiating)、诊断(diagnosing)、建立
(establishing)、执行(acting)、学习(learning)
SPICE和其他的标准定义了指导软件过程评估的要求,ISO对过程中的质量管理进行检查12.ISO9001:
2000采用“计划-实施-检查-行动”(plan-do-check-act)循环,将其应用于软件项目的质量管理环节。
A.计划(plan)是为实现高质量的软件产品并最终提高用户满意度,建立必须的过程目标、活动和任务。
B.实施是执行软件过程,包括框架活动和普适性活动。
C.检查监督并测量过程,以保证所有为质量管理所建立的需求均已实现。
D.行动启动软件过程改进活动,并持续地改进进程。
13.个人过程模型PSP定义的五个框架活动:
1策戈U(planning)
2高层设计(high-leveldesign)
3高层设计评审(high-leveldesignreview)
4开发(development)
5后验(postmortem)
PSP强调对所犯的错误类型进行记录和分析,以便于制定避免错误的策略。
14.团队软件过程TSP定义的框架活动:
1项目启动(launch)
2高层设计(high-leveldesign)
3实现(implementation)
4集成(integration)
5测试(test)
6后验(postmortem)个人和团队模型都强调了成功软件过程的关键因素:
测量、计划、自我管理
第三章——过程模型
1.惯例过程模型:
惯例模型规定了一套过程元素——框架活动、软件工程动作、任务、工作产品、质量保证以及每个项目的变更控制机制。
每个过程还定义了工作流
2.**瀑布模型waterfallmodel(经典生命周期classicallifecircle、
是一种基于软件生存周期的线性(linear开发模型。
它提出了一个系统的、顺序(sequential的软件开发方法,从用户需求规格说明开始,通过策划、建模、构件和部署的过程,最终提供一个完整的软件并提供持续的技术支持。
①适用于需求定义清晰(requirementsarefixed)且稳定的软件开发
不足之处:
1实际的项目很少遵守瀑布模型提出的顺序。
2用户常难以清楚地描述所有的需求。
3客户必须要有耐心,只有在项目接近尾声的时候,他们才能得到可执行的程序。
3.**增量模型(incremental):
以迭代的方式运用瀑布模型,在每个阶段运用线性序列。
这种模型把软件看作是一系列相互联系的增量,在开发过程的各次迭代中,每次完成其中的一个增
量。
1第一个增量是一个核心产品,每个增量都提交一个可以操作的产品。
2如果在既定的商业要求之前不可能找到足够的开发人员,增量模型显得特别有用。
4.RAD模型:
1是一种侧重于短暂的开发周期的增量过程模型,为大型且必须在严格的时间内提交的项目而设计的。
2是瀑布模型的高速变体,通过基于构件的构建方法实现快速开发。
3是一种linearsequentialmodel
RAD的不足之处(drawbacks):
1对于大型的可伸缩项目,RAD需要大量的人力资源来创建多个相对独立的RAD团队。
2如果没有为短时间内急速完成整个系统做好准备,RAD项目将会失败。
3如果一个系统不能合理地模块化,RAD构建会有很多问题。
4如果系统需求是高性能,不能采用RAD莫型。
5技术风险很高的时候,不宜采用RAD
演化过程模型(evolutionaryprocessmodel)每次迭代产生软件的一个更完整的版本。
5.原型开发(prototyping):
用于需求很模糊的时候(requirementsarefuzzy,cantdefinerequirementclearly)
**原型模型的思想是:
先建立一个能够放映用户主要需求的原型,让用户实际看一下未来系统的面貌,以便判断哪些功能是符合需要的,哪些方面还需要改进,然后将原型反复改进,直至建立完全符合用户要求的新系统。
6.螺旋模型(spiral)
1结合了原型的迭代(iterative)特性、瀑布模型的系统性(systematic)和可控性
(controlled)特点。
采用循环的方式逐步加深系统定义和实现的深度。
2其他过程模型在软件交付之后就结束了,螺旋模型则不同,它应用在计算机软件的整个生
命周期,从概念开发到维护。
3把原型开发作为降低风险的机制,它依赖大量的风险评估专家来保证成功。
Ifamajorrisk
isnotuncoveredandmanaged,problemswillundoubtedlyoccur。
7.协同开发模型:
适合于不同的工程团队开发的系统工程项目。
8.专用过程模型:
应用较窄,只适合于某些特定的软件工程方法。
1基于构件的开发:
本质上是演化模型,需要以迭代方式构建软件。
theprocesstoapply
whenreuseisdevelopmentobjective。
2形式化方法模型:
主要活动是生成计算机软件形式化的数学规格说明,意义在于提供无缺陷的软件。
3面向方面的软件开发(AOSD):
以用户跨越多个系统功能、特性和信息为关注点。
9.统一过程(UP)是一种增量模型,determinediterativelly,spanmorethanoneoftheprocess。
定义了五个阶段(phase):
1起始(inception):
包括客户沟通和策划活动,强调定义和细化用例,并将其作为主要模型
2细化(elaboration):
包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示
3构建(construction):
细化设计模型,并将设计模型转化为软件构件实现
4转换(translation):
将软件从开发人员传递给最终用户,并由用户完成Beta测试和验收
测试
5生产(production):
持续地监控软件的运行,并提供技术支持
1.软件敏捷开发宣言(Manifesto)
1个体和交互胜过过程和工具
2可工作软件胜过宽泛的文档
3用户合作胜过合同谈判
4响应变化胜过遵循计划
普遍存在的变化是敏捷的基本动力。
所有敏捷方法都或多或少的遵循以上的原则。
2.Agilityismorethan①aneffectiveresponsetochange。
2effectivecommunicationamongstakeholders
3drawingthecustomontotheteam
3organizingateamsothatit'scontroloftheworkperformed
Agileallianee的12条准则中,第一条是最优先要做的是通过尽早、持续交付valuablesoftware
来满足用户的要求
敏捷可用于任何软件过程,实现要点是将软件过程设计为如下方式:
1允许项目团队调整并合理安排任务
2理解敏捷开发方法的易变性并制定计划
3精简并维持最基本的工作产品
4强调增量交付策略
3.敏捷过程的三个假设(Assumption):
1提前预测哪些需求是稳定的和哪些需求会变化非常困难。
2对许多软件来说,设计和构建是交错进行的。
事实上,两种活动应顺序开展(tandem)以
保证通过构建实施来验证设计模型,而在通过构建验证之前很难估计到应当设计到什么程度。
3从制定计划的角度来看,设计、分析、构建和测试并不像我们所设想的那么容易预测。
以上说明敏捷过程必须具有自适应性(adaptable)。
4.软件开发团队及成员应具有的特点:
1competenee
2commonfocus
3collaboration
4decision-makingability
5fuzzyproblem-slovingability
6mutualtrustandrespect
7self-organization
5.极限编程XP
1XP使用面向对象方法作为推荐的开发范型
2XP的四个框架活动:
planning、design、coding、testing(计划、设计、编码和测试)
3Planning始于建立一系列描述待开发软件必要特征与功能的故事(storyoruserstory)。
项目速度是第一个发行版本中实现的用户故事个数。
4XPdesign遵循kis原则(Keep-it-simple);鼓励使用CRC作为有效机制;如果在某个故事设计中碰到困难,实现并评估原型;XP估计既是构建技术又是设计中的重构。
5XPcoding中的关键概念之一是结对编程(pairprogramming)。
6在编码之前建立单元测试是XP方法的关键因素,XP验收测试(也称用户测试),由客
户确定,根据用户故事得到的。
6.重构():
是以不改变代码外部行为而进行改进其内部结构的方式来修改软件系
统的过程。
简而言之,重构是在编码完成之后改进代码设计。
7.自适应软件开发(ASD)强调humancollaboration和teamself-organization。
ASD的三个阶段:
①speculation(思考)②collaboration③learning
8.动态系统开发方法(DSDM)
1DSDM建议使用修改版Pareto原则。
在这种情况下,如果交付整个应用系统需用100%时
间,那么80%的应用系统可以用20%的时间交付。
2像XP和ASD一样,DSDM建议使用迭代软件过程。
9.Scrum(橄榄球)
1每一个框架活动中,发生于一个过程模式中的工作任务称为一个冲刺。
2每一个过程模式定义的一系列问题:
待定项(backlog)、冲刺(sprint)
3十五分钟例会回答的基本问题:
A•上次例会之后做了什么
B.遇到什么困难
C.下次例会之前做些什么
10.Crystal提倡一种机动性的软件开发方法。
11.特征驱动开发(FDD)
1特征是可以在两周或更短的时间实现的具有客户价值的功能。
2FDD更强调项目管理原则和技术。
12.敏捷建模(AM)认为对所有的系统都是有必要的。
AM给实践者(practitioner)的分析和任务
设计以非常有用的指导。
13.敏捷理念强调的四个关键问题:
①具有控制力的自我组织团队对所开展工作的重要性
2团队成员之间、开发参与者与客户之间的交流与合作
3对变更代表机遇的认识
4强调快速软件交付让客户满意
第五章——软件工程实践综述
1.软件工程实践的精髓:
1理解问题(交流和分析)
2计划解决方案(建模和软件设计)
3实施计划(代码生成)
4检查结果的精确度(测试和质量保证)
2.Davidhooker提出的关注软件工程整体实践的核心原则:
1存在价值②保持简洁③维护视图④生产者要让消费者理解
5面向未来⑥计划复用⑦认真思考
3.W5HH原则——开发一个实际项目计划所必须提出和回答的问题是:
1为什么要开发②要做什么东西③什么时候完成④功能由谁负责
5组织位于哪里⑥怎样才能在工作中体现技术和管理⑦需要多少资源
4.在软件工程中,需要建立两类模型:
分析建模(analysis)和设计建模(design),建模的
目的是加深对所要完成的工作的理解并为开发人员提供技术指导。
1分析模型通过三个不同域描述来表达用户的需求:
theinformationdomain(信息域)、the
functionaldomain(功能域)、thebehavioraldomain(行为域)
2设计模型可以帮助开发者高效开发软件的特征:
thearchitecture(构架)、theuserinterface
(用户界面)、component-leveldetail(构件细节)
5.构造活动包括一系列编码和测试任务
1最初的测试是构件级的,称为单元测试(unittest)
2集成测试(integrationtest)在构建系统的时候进行
3确认测试(validationtest)是测试系统是否完全按照需求开发
4验收测试(acceptaneetest)由用户检验系统是否按照需求实现了所有的功能
6.测试规则:
1测试是一个以查找程序错误为目的的程序执行过程
2一个好的测试(goodtest)用例能最大限度地找到尚未发现的错误
3一个成功的测试(successfultest)能找到那些尚未发现的错误
7.部署活动包括三个动作:
交付(delivery)、支持(support)和反馈(feedback)
部署活动并不只是发生一次,而是在软件完全开发完成之前要进行许多次。
8.叙述软件构造和软件部署的区别软件构建包括编码和测试,是在开发阶段由开发人员来完成;软件部署是将所完成的部分交付给客户,由客户对其进行评测和反馈意见,此时开发人员提供技术支持和维护。
第六章——系统工程(Systemengineering)
1.计算机的系统:
组织在一起通过处理信息来实现预定目标的要素集合或排列。
2.系统要素(systemelement):
①software(软件)
2hardware(硬件)
3people(人员)
4database(数据库)
5documentation(文档)
6procedure(规程)宏要素是指基于计算机系统,它作为更大的基于计算机的系统的一部分。
3.thesystemhierarchy:
worldviewdomainviewelementviewdetailedview
4.建立模型工程师要考虑的restrainingfactor:
1Assumption
2simplification
3limitation
4construction
5preferences
5.业务过程工程(BPE)
1Thegoalofbusinessprocessengineeringistodefinearchitecturesthatwillenableabusinesstouseinformationeffectively。
2BPE定义和开发的三种架构:
dataarchitecture、applicationarchitecture、technologyarchitecture
3业务过程工程层次:
信息战略计划t业务区域分析t业务系统设计t构建和集成
6.产品工程
1thegoalofproductengineeringistotranslatethecustomer'sdesireforasetofdefinedcapabilitiesintoworkingproduct。
(定义一个能有效利用信息进行业务活动的体系)
2产品工程是从系统分析开始的系统工程,软件工程师确定用户需求。
3产品工程给出构架的不同系统构件:
software、hardware、database、people
4产品工程层次图:
需求工程T构件工程T分析和设计建模T构建和集成
7.系统建模:
每个基于计算机的系统都可按“输入-处理-输出”模板进行信息转换。
8.Hatley-Pirbhai建模模板:
1userinterface
2input
3systemfunctionandcontrol
4output
5maintenanceandself-test
系统环境图asystemcontextdiagram(SCD)residesatthetoplevelofthehierarchy。
9.UnifiedModelingLangu