原子标签索引:[概念×17 | 机制×5 | 流程×9 | 分类体系×12 | 判据×5 | 案例×4 | 数据×9] 上游:第2章(计算机系统基础知识) 下游:被第7章(系统架构设计)、第8章(质量属性与架构评估)引用;综合知识高频章
标准表述
- 软件工程过程包括4方面活动:P软件规格说明、D软件开发、C软件确认、A软件演进。
- IEEE定义:将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,并对该方法进行研究。
- 1968年NATO会议首次提出"软件危机"概念,并提出软件工程。
- 软件生命周期:软件从需求分析、设计、开发、运行维护直至被淘汰的全过程。
- 软件过程模型即软件生命周期模型,是对生命周期各项任务给予规程约束的工作模型。
- 螺旋模型是生命周期模型与原型模型的结合,每圈由目标设定、风险分析、开发和有效性验证、评审4部分组成;适用于大型软件开发。
- 敏捷方法两特点:适应性而非预设性;面向人而非面向过程。
- 敏捷核心思想3点:适应型而非可预测型;以人为本而非以过程为本;迭代增量式开发、发行版本小型化。
- XP的4个价值观:交流、朴素(简单)、反馈、勇气。
- Scrum用产品Backlog(按商业价值排序的需求列表)管理需求,迭代周期称Sprint,侧重项目管理。
- FDD三要素:人、过程和技术;定义6种关键角色;5个核心过程。
- RUP是用例驱动的、以体系结构为中心的、迭代和增量的软件开发过程(重量级)。
- RUP 9个核心工作流:业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境。
- RUP 4阶段:初始inception、细化elaboration、构造construction、移交transition;每阶段末有里程碑评估。
- RUP 4核心概念:角色(Who)、活动(How)、制品(What)、工作流(When)。
- RUP用"4+1"视图描述体系结构:用例视图、逻辑视图、实现视图、进程视图、部署视图。
- CMMI 5级:初始级、已管理级、已定义级、量化管理级、优化级。
- 软件需求3层次:业务需求、用户需求、功能需求(含非功能需求)。
- 需求工程5阶段:需求获取、需求分析、形成需求规格、需求确认与验证、需求管理。
- 需求陈述阐明"做什么"而不是"怎样做"。
- 需求跟踪分正向跟踪与逆向跟踪,合称双向跟踪,靠需求跟踪矩阵实现。
- CCB是决策机构不是作业机构,通过评审决定项目能否变更,不提出变更方案。
- 结构化方法(SASD):面向功能/面向数据流,1978年由E.Yourdon和L.L.Constantine提出,含SA、SD、SP。
- 结构化分析常用手段:数据流图DFD和数据字典。
- DFD 4种基本元素:数据流、处理/加工、数据存储、外部项。
- 数据字典描述5类条目:数据项、数据结构、数据流、数据存储、处理过程。
- 结构化设计基本思想:相对独立、单一功能的模块组成系统;分概要设计与详细设计两阶段。
- 模块设计原则:高内聚、低耦合;耦合7型(低到高:非直接、数据、标记、控制、通信、公共、内容);内聚7型(高到低:功能、顺序、通信、过程、时间、逻辑、偶然)。
- 结构化程序设计原则32字:自顶向下,逐步细化;清晰第一,效率第二;书写规范,缩进格式;基本结构,组合而成。
- 结构化程序设计原则可表示为:程序=(算法)+(数据结构)。
- E-R图:矩形=实体,菱形=联系,椭圆=属性(主属性名下加下画线);联系类型1:1、1:n、m:n。
- OOA模型由5个层次(主题层、对象类层、结构层、属性层、服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性、定义服务)组成。
- OOD类分3种:实体类(一定有属性不一定有操作)、控制类(无属性一定有方法)、边界类(可兼有属性和方法)。
- OOP=对象+类+继承+多态+消息,核心概念是类和对象。
- 对象持久化需ORM;主流持久化框架:Hibernate(全自动ORM)、iBatis(手写SQL、小巧)、JDO(SUN标准API,任何数据底层)。
- 测试按程序执行状态分静态/动态;按内部结构分黑盒/白盒/灰盒;按执行方式分人工/自动化。
- 系统测试结束标志:满足测试目标规定的需求覆盖率,且发现的缺陷全部归零。
- 负载测试看负载渐增时性能指标变化;压力测试找系统瓶颈或不可接受的性能点;两者都属性能测试。
- Alpha测试:开发环境下由用户测试;Beta测试:实际环境下多个用户测试。
- 净室软件工程理论基础:函数理论和抽样理论;技术手段4种;正确性验证是CSE的核心。
- CBSE体现"购买而不是重新构造"哲学;焦点从"实现"变成"集成"。
- 构件组装3方式:顺序组装、层次组装、叠加组装;接口不兼容3种:参数不兼容、操作不兼容、操作不完备。
- 软件项目管理对象4P:人员People、产品Product、过程Process、项目Project。
- WBS最底层是工作包,由唯一主体负责;树形结构一般不超过6层。
- SCM核心内容:版本控制和变更控制。
- SQA关注点:一开始就避免缺陷产生,作用于过程而不是最终产品。
- 影响软件质量的3因素组:产品运行、产品修改、产品转移。
- Boehm风险管理体系:风险估计(辨识、分析、排序)+风险控制(计划、处理、监督)两大阶段。
蒸馏笔记
概念
- 软件危机表现6条:进度难预测、成本难控制、功能难满足期望、质量无法保证、难以维护、缺少适当文档。
- 瀑布模型:最早使用的过程模型之一,阶段串行、前段输出是后段输入,每阶段末有里程碑审查。
- 原型模型(快速原型):快速开发含关键问题的原型以确认需求;分原型开发与目标软件开发两阶段;分抛弃型原型与演化型原型。
- 螺旋模型:快速原型基础上扩展,4部分迭代,每转一圈出一个新版本逼近目标系统。
- 敏捷方法:2001年2月美国犹他州雪鸟镇17位专家签署敏捷宣言后正式提出的适应性、以人为本的迭代增量方法。
- RUP:Rational公司创造的软件工程方法,二维模型(9核心工作流×4阶段)。
- CMMI:在CMM基础上由SEI组织开发的软件能力成熟度评估标准;5级、18个关键过程域、52个过程目标。
- 需求基线:需求文档经评审批准后形成的开发工作约定,是需求开发和需求管理之间的桥梁。
- 需求工程:应用已证实的原理方法,通过合适工具和记号系统描述待开发系统及其行为特征和相关约束;覆盖体系结构设计之前的各项开发活动。
- 正向跟踪:检查需求规格说明书中每个需求能否在后继工作成果中找到对应点。
- 逆向跟踪:检查设计文档、代码、测试用例等成果能否在需求规格说明书中找到出处。
- 耦合:模块之间联系的紧密程度;内聚:模块内部各成分联系的紧密程度。
- 信息隐藏:用封装技术隐藏模块实现细节,模块设计成"黑盒",外部只用接口信息。
- 数据抽象:OOA的核心原则,把数据(属性)和操作(服务)结合为不可分的对象单位。
- 实体类:映射需求中的实体,保存需永久存储的信息,用业务领域名词命名。
- 控制类:控制用例工作的类,由动宾短语转化(如"身份验证"→"身份验证器"),常随用例执行完毕而消亡。
- 边界类:封装用例内外流动的信息/数据流,位于系统与外界交接处(窗口、报表、接口协议等)。
- 持久化:把内存中对象保存到数据库或永久存储设备;持久层实现业务逻辑与数据逻辑解耦。
- 净室软件工程:应用数学与统计学理论,强调在规约和设计中消除错误、以统计质量验证代替单元测试的工程方法。
- 构件:可与其他构件构成软件系统的独立软件单元;可为COTS构件或自行开发。
- 软件质量:软件与明确地和隐含地定义的需求相一致的程度。
- WBS:把项目按原则分解为任务→工作→日常活动,以可交付成果为导向的工作分解结构。
机制
- 软件危机 →(NATO 1968/1969两次会议) 软件工程概念诞生。
- 瀑布模型缺陷 →(需求难一次定准) 原型模型 →(加风险分析) 螺旋模型;原型思想又被螺旋模型与敏捷方法吸收。
- 敏捷"适应性":需求不稳定→过程不可预测→传统可预测控制失效→引入反馈机制控制不可预测过程。
- 敏捷"面向人":技术决定必须由一线开发人员做出→开发人员与管理人员地位同等、共同负责。
- RUP迭代增量好处5条:早期处理关键风险;提出体系结构指导开发;更好处理需求变更;较早得到可运行系统鼓舞士气;提供更有效的开发过程。
- CMMI各级跃迁:1级靠人员能力与英雄主义→2级项目级过程受控→3级组织级标准流程制度化→4级过程性能可预测(3级与4级关键区别)→5级增量式与创新式持续改进。
- CBSE过程与传统开发差异:早期需完整需求以识别可复用构件;依可用构件修改需求;架构设计后进一步搜索/精化构件;开发即组装(含适配器开发)。
- 质量因素3组对应关系:产品运行(正确性、健壮性、效率、完整性、可用性);产品修改(可理解性、可维修性、灵活性、可测试性);产品转移(可移植性、可重用性、互操作性→风险)。
- 高内聚低耦合:内聚越高模块可理解性维护性越强;耦合越低模块越独立、可单独开发维护;但内聚高与耦合低并非绝对对应。
流程
- 软件工程过程4活动:P规格说明→D开发→C确认→A演进。
- 结构化分析7步:①分析业务情况做当前物理模型DFD;②推导等价逻辑模型DFD;③设计新逻辑系统,生成数据字典和基元描述;④建立人机接口,提出可选目标系统物理模型DFD;⑤确定各方案成本和风险等级并分析;⑥选择一种方案;⑦建立完整需求规约。
- DFD建模5步:①明确目标、确定系统范围;②建顶层DFD图;③构建第一层分解图;④开发层次结构图;⑤检查确认DFD图。
- 结构化分析SA步骤目标:物理模型→逻辑模型→新逻辑系统→目标物理模型→需求规约。
- 详细设计5步:①确定输入/输出数据逻辑结构;②找输入输出结构中有对应关系的数据单元;③导出程序结构;④列出基本操作与条件并分配到程序结构图;⑤用伪码写程序。
- E-R图作图5步:①确定所有实体集;②选实体集属性;③确定实体集间联系;④确定关键字(下画线标明);⑤确定联系类型(1或n标注在线旁)。
- OOA 5步骤:①确定对象和类;②确定结构(泛化-特化/整体-部分);③确定主题;④确定属性;⑤确定方法(服务)。
- 需求获取参考6步:①开发高层业务模型;②定义项目范围和高层需求(上下文图、顶层用例图);③识别用户角色和用户代表;④获取具体需求;⑤确定业务工作流;⑥需求整理与总结。
- 需求变更管理3环节:①问题分析和变更描述(检查有效性);②变更分析和成本计算(影响分析→决策);③变更实现(计划驱动回溯需求阶段重做;敏捷纳入下一次迭代)。
- CBSE过程6活动:系统需求概览→识别候选构件→根据发现的构件修改需求→体系结构设计→构件定制与适配→组装构件创建系统。
- 项目进度管理6过程:活动定义、活动排序、活动资源估计、活动历时估计、制定进度计划、进度控制。
分类体系
- 过程模型:瀑布模型(需求明确、串行);原型模型(需求模糊,分抛弃型/演化型);螺旋模型(大型项目、风险驱动);敏捷模型(快速变化需求);RUP(重量级、用例驱动);CMMI(过程成熟度评估而非开发模型)。
- 瀑布模型缺点3条:需求完整性正确性很难确定;严格串行,用户长时间看不到可运行系统,需求变更损失巨大;假定每阶段一次性完全解决该阶段工作,不现实。
- 原型开发3途径:利用模拟软件的人机界面和人机交互方式;真正开发一个原型;找正在运行的类似软件比较。
- 主要敏捷方法4种:XP(最引人瞩目,近螺旋式小周期);水晶系列Crystal(Cockburn提出,以人为中心、"机动性",家族按项目选择);Scrum(侧重项目管理,Backlog+每轮Sprint交付增量);FDD(De Luca与Coad提出,迭代模型)。
- XP 4价值观对应做法:加强交流;从简单做起(朴素);寻求反馈;勇于实事求是。
- FDD 6角色:项目经理、首席架构设计师、开发经理、主程序员、程序员、领域专家。FDD 5核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计、特征构建。
- RUP 4+1视图与关注者:用例视图(分析/测试人员);逻辑视图(最终用户,功能);实现视图(程序员,配置装配);进程视图(系统集成人员,性能/伸缩/吞吐);部署视图(系统工程师,发布安装拓扑)。
- CMMI 5级:L1初始级(随意混乱、靠英雄主义);L2已管理级(项目级过程受控,达成成本进度质量目标);L3已定义级(组织级标准流程制度化、开始资产积累);L4量化管理级(定量目标、过程性能可预测);L5优化级(增量式与创新式持续改进、关注组织级绩效)。
- 需求获取方法6种:用户面谈(最常见、最有效);需求专题讨论会(涉众集中共识、快捷产生初步系统定义);问卷调查(确认假设、收集统计倾向数据,宜在面谈之后);现场观察(直观了解业务执行过程);原型化方法(应对界面类高度不确定需求);头脑风暴法(新业务、发散思维)。
- 耦合7型(低→高):非直接耦合→数据耦合(传简单数据)→标记耦合(传记录/数据结构)→控制耦合(传控制内部逻辑的信息)→通信耦合(共享输入或输出)→公共耦合(访问同一公共数据环境)→内容耦合(直接访问内部数据/多入口/代码重叠)。
- 内聚7型(高→低):功能内聚(单一功能缺一不可)→顺序内聚(顺序执行)→通信内聚(同一数据结构区域)→过程内聚(特定次序)→时间内聚(同一时间间隔)→逻辑内聚(逻辑相关一组任务)→偶然内聚(无关松散任务)。
- 详细设计工具3类:图形(程序流程图、NS盒图、PAD图等);表格(判定表);语言(伪码、PDL)。PDL外层语法确定、内层语法不确定。
- 测试分类体系:静态测试(程序不运行,查文档与源码结构)/动态测试(构造测试实例→执行程序→分析结果);黑盒(按需求规格说明书测功能界面)/白盒(测内部逻辑路径,覆盖分语句/判定/分支/路径)/灰盒(两者之间);人工/自动化。
- 测试阶段:单元测试(模块,静态+黑盒提用例+白盒验证补充,高可靠模块需组合覆盖或路径覆盖);集成测试(组装后模块接口问题,白盒+黑盒结合);系统测试(独立测试小组、黑盒,含功能/性能/健壮性/安装反安装/用户界面/压力/可靠性安全性测试;变更后须多轮回归测试);性能测试(含负载测试与压力测试);验收测试(用户主导、依据合同,通过即可发布;后续Alpha/Beta测试)。
- 新型测试:AB测试(A/B或A/B/n版本同时随机制,比较体验与业务数据选优);Web测试;链接测试(链接指向正确、页面存在、无孤立页面3方面);表单测试(提交完整性、默认值正确性、受限值校验)。
- 构件应具备5特征:可组装型、可部署性(二进制、部署前无须编译)、文档化、独立性、标准化。
- 构件模型3要素:接口(操作名、参数、异常);使用信息(全局唯一名/句柄、元数据、部署配置);部署(打包规格、二进制构成)。主流构件模型:Web Services模型、EJB模型、.NET模型。
- 构件组装3方式:顺序组装(按顺序调用,输出输入须兼容);层次组装(被调用构件"提供"接口与调用构件"请求"接口兼容);叠加组装(多构件合并提供新接口,原构件互不调用)。
- 风险管理3体系:Boehm体系(风险估计+风险控制,偏理论);Charette体系(分析+管理两阶段,与Boehm接近,偏理论);CMU-SEI体系(SRE、CRM、TRM,基于实践的全面体系,把软件需求方纳入风险管理要素)。
- 质量认证2类:ISO 9000(一组标准统称,软件企业常用ISO 9001);CMM(SEI 1987年研制,我国软件企业大多采用)。
判据
- DFD检查规则5条:父图中描述过的数据流必须在相应子图中出现;一个处理至少有一个输入流和一个输出流;一个存储必有流入和流出的数据流;一个数据流至少有一端是处理端;模型信息全面、完整、正确、一致。
- 需求变更控制策略6条:所有变更必须遵循变更控制过程;未获批准的变更不做设计和实现;由变更控制委员会决定实现哪些变更;风险承担者能了解变更内容;绝不能从配置库中删除或修改变更请求原始文档;每个集成的变更必须能跟踪到经核准的变更请求(水平可追踪性)。
- WBS任务分解5要求:工作包可控可管理、不过于复杂;分解不过细、一般不超过6层;每个工作包有一个交付成果;每个任务有明确定义的完成标准;有利于责任分配。
- 需求确认与验证检查4性:以需求规格说明为输入,确认完整性、正确性、一致性、可测试性和可行性(含有效性检查、一致性检查、可行性检查、确认可验证性)。
- CCB制定决策3确认点:有效决定必须到会的人数;决策方法(投票、一致通过等);主席是否可否决集体决定。权衡"利"(节省资金/增加收入、客户满意度、竞争优势、缩短上市时间)与"弊"(开发费用增加、交付推迟、质量下降、功能减少、用户不满)。
案例
- 1968年NATO在联邦德国国际学术会议首次提出软件危机,1968/1969连续两次会议提出软件工程(5.1节)。
- 1987年Frederick Brooks《No Silver Bullet》说明需求过程在软件项目中的关键角色(5.2节)。
- 2001年2月17位软件开发专家在美国犹他州雪鸟镇聚会,正式提出敏捷概念并签署敏捷宣言(5.1.3节)。
- 20世纪70年代中期美国国防部研究软件项目失败原因,发现70%的项目因管理不善而非技术原因(5.7.1节)。
数据
- 软件工程定义4来源:Boehm、IEEE、Fritz Bauer(NATO会议)、《计算机科学技术百科全书》。
- 结构化方法:1978年Yourdon与Constantine提出;Yourdon方法是20世纪80年代使用最广泛的软件开发方法。
- 结构化编程:1965年由E.W.Dijkstra提出思想。
- IDEA:1990年瑞士联邦技术学院来学嘉与Massey提出;128位密钥、64位块、8轮迭代;25MHz VLSI芯片加密速率177Mb/s。
- AES历程:1997年1月NIST征集;15个候选选5个;2000年10月宣布Rijndael胜出;2002年5月26日发布正式标准;支持128/192/256位3种密钥;世界范围免版税。
- RUP:9个核心工作流、4个阶段;每循环生成产品新版本;每阶段由一个或多个迭代组成。
- CMMI框架:5个成熟度等级、18个关键过程域、52个过程目标、3168种关键实践。
- WBS层级:项目→任务→工作→日常活动;树形结构一般不超过6层。
- Scrum:产品Backlog(按商业价值排序)→挑选最高优先级组成Sprint backlog→每迭代末交付潜在可交付的产品增量。
易错点 / 边界情况
- 螺旋模型4部分顺序:目标设定→风险分析→开发和有效性验证→评审,每圈迭代一次生成新版本;但"系统应尽快收敛到用户可接受范围,否则可能中途夭折"。
- 原型模型中"大多数原型都废弃不用"——原型只是帮助定义需求的手段,不等于最终产品。
- 抛弃型原型确认需求后仍走完整瀑布模型;演化型原型则逐步完善成产品。
- Scrum≠XP:Scrum侧重项目管理;XP是最引人瞩目的轻量级方法,4价值观(交流/朴素/反馈/勇气)常考。
- RUP的4阶段≠瀑布的4阶段:初始/细化/构造/移交,每阶段可含多个迭代;里程碑评估未通过时可决定取消项目。
- "4+1"视图中谁关心哪个视图常考:分析测试人员→用例视图;最终用户→逻辑视图;程序员→实现视图;系统集成人员→进程视图;系统工程师→部署视图。
- CMMI 3级与4级的关键区别是"对过程性能的可预测",勿答成"是否量化管理"以外的表述。
- 内聚耦合排序方向:耦合从低到高、内聚从高到低记忆;两者都分7型,但顺序无对称对应关系。
- 实体类"一定有属性但不一定有操作";控制类"没有属性但一定有方法";边界类"可兼有属性和方法"——三句话常出判断题。
- 结构化方法中SA用DFD+数据字典(分析阶段),SD用系统结构图SC(概要设计阶段),详细设计用程序流程图/NS/PAD/PDL——阶段与工具的对应别错位。
- NS盒图特点:强制使用结构化构造、不可能任意转移控制;PAD最大优点:能反映自顶向下的历史和过程。
- PDL外层语法确定(描述控制结构)、内层语法不确定(描述具体操作)——反了就错。
- 静态测试不是"不重要的测试":单元测试先静态测试(静态分析、代码审查),再黑盒提用例、白盒验证补充。
- 验收测试与系统测试区别:系统测试是开发过程中的工作(独立测试小组);验收测试由用户开展、依据合同,通过后产品可发布;Alpha(开发环境)与Beta(实际环境多用户)在交付前后进行。
- 净室软件工程"提倡不需要单元测试"是对的(用正确性验证+统计质量控制代替),但缺点之一是"不进行传统模块测试不现实"。
- 构件组装三方式都要写胶水代码;适配器解决的是接口不兼容,不是功能缺失。
- WBS"不超过6层"是一般原则,非硬性规定;工作包须由"唯一主体"负责完成。
- 变更控制的目的"不是控制变更的发生,而是对变更进行管理,确保变更有序进行"。
- 需求专题讨论会优点6条与头脑风暴法适用场景(新业务、流程高度不确定)区分。
- 敏捷方法划分小组的原则是"高内聚、低耦合",与模块设计原则同名但语境不同。