软件体系结构复习指南

前言

作为一个热心学长(好的其实是要凑这个月的4篇文章了),发一下李大牛同志的课程复习帮助指南,这里有《软核》上册的一些总结,相信靠这个可以保你及格了,如果要高分请把书本的结构梳理清楚

一、软件工程定义集合

定义 1.1(软件)软件是一组通过集成而获得特定功能和属性的计算机程序,及相关应用数据和辅助文档;简写为软件=程序+数据+文档……P10
定义 2.1 软件危机软件危机原指低下的软件生产率难以满足快速增长的现实需要的现象,后泛指以下“令人不满意”的常见现象:软件生产率低、成本高、质量低、风险高和失败率高等P30
定义 2.2 软件工程软件工程(SE)指科学知识和工程方法在软件开发、维护和演化过程中的系统应用,即软件的工程化P34
定义 2.3 软件工程学科软件工程学科是一门以创造和应用软件工程知识和方法为主要任务的、独特的、掺杂艺术和工艺特征的、各学科交叉的(尚未成熟的)工程学科P44
定义 3.1 软件质量软件的质量是它满足用户需要和系统需求的程度,常表示为一组质量属性的集合P56
定义 5.1 软件生命期软件的生命期是指软件从开发伊始,经成功交付和使用之后,至被“冻结”和“淘汰”的整个过程P86
定义 6.1 软件原型软件原型是描述或模拟待开发软件产品的部分或全部功能(主要是用户界面和重要外部行为)的工作版本P106
定义 6.2 关注点软件的关注点是从权益人的角度对待解显示问题的面描述,是软件需求的更抽象形式P110
定义 6.3横切型关注点横切型关注点是指需要获得多个关注点支持或通过与其他关注点交互才能实现的关注点P111
定义 6.4 切面切面是软件的一类组成元素,是关注点的实现形态;一个切面封装了实现一个关注点的所需功能P111
定义 8.1 软件产品线软件产品线(SPL)是一个共享领域核心功能的,又能“更好地”,满足各细分领域独特需求的软件产品集。P150
定义 9.1 模型模型是客观信息体在某个特定视角上的抽象视图。P162
定义 10.1 软件需求软件需求是对软件所应具备的功能和所应满足的约束的抽象描述,也是对软件权益人的现实需要和期望的正式表述P176
定义 11.1 需求工程需求工程是所有旨在获得、分析、描述或管理目标软件的亟待实现的需求的活动的统称P190
定义 13.1 需求获取需求获取是定义目标软件产品的用户和客户需要及相关约束,并将之描述为初始软件需求的过程P214
定义 13.2 用例软件的用例是描述“参与者”(主要是用户)所期望见到和参与的、与软件交互的过程的P220
定义 14.1 需求分析需求分析是从软件产品开发的角度,针对来自于需求获取环节的初始需求展开的进一步分析和求精P230
定义 14.2 需求分簇需求分簇是将需求集划分为多个需求簇的过程,一个需求簇是一个具有“簇内强关联而簇间弱关联”的需求子集P230
定义 14.3 需求依赖关系需求依赖关系泛指存在于需求项之间所有关联关系(包括各类约束关系)P234
定义 16.1 需求确认需求确认就是确认需求的正确性和完备性,即确认需求是否包含清晰、完整和可理解的信息,是否一致于权益人(主要是用户和客户)P258
定义 17.1 需求管理需求管理是从软件产品和项目的角度,针对需求过程及其下游的需求实现过程开展的规划、监督和控制P270
定义 17.2 需求蔓延需求蔓延是指在实现需求的过程中(如设计、构造和测试阶段)中不断涌现出的新需求的现象。P276
定义 17.3 需求基线需求基线是为软件产品的某待开发版本而选定的、待实现的需求集,通常是产品需求总集的一个子集P277
定义 18.1 需求错误与缺陷需求错误是指需求工程师造成的“需求未准确表达现实需要或约束”的事实,其产出就是需求缺陷P287
定义 18.2 需求“缺失”需求“缺失”是一类需求缺陷,指缺失了“不应该缺失”的需求(进而导致软件产品缺失了“不应该缺失”的功能或质量)P290
定义 20.1 软件设计软件设计是定义软件的各层级结构元素(包括架构、构件、用户界面和数据库),及其属性和行为P315
定义 20.2 设计模式软件的设计模式是对某类普遍问题的通用软件解决方案的抽象描述P327
定义 21.1 软件架构软件的架构是软件的组成构件、构件之间的交互关系,以及两者的外部可见属性的统一表示体P332
定义 21.2 架构风格软件的架构风格描述一类应用领域和功能相似的软件产品的惯用架构,常表示为一组设计规则或约束P345
定义 22.1 软件构件软件的构件是架构的基本组成单元,是一类具有相对独立功能的逻辑实体P361
定义 22.2 构件设计模式软件构件的设计模式描述一类构件应用所惯用的结构,常表示为一组构件设计规则或约束P363
定义 23.1 用户界面用户界面是软件的一部分,支持用户与软件进行交互,以满足用户的现实需要,最终实现软件的真正价值P376
定义 27.1 软件构造软件构造是依据既定设计方案,以编写计算机程序的形式,实现既定需求的过程P482
定义 27.2 技术债技术债是指在软件开发过程中因低质量地仓促完成产品设计、构造和测试,而被透支的维演成本和时间。P491
定义 28.1 软件调试软件调试是程序员在编程过程因发现潜存缺陷而定位和修复缺陷的过程P498
定义 31.1 软件确认与验证软件确认是指认定软件是否满足用户实际需要和业界相关标准的过程;软件验证则是指认定软件的设计方案和代码基是否实现既定需求的过程P546
定义 32.1 软件缺陷软件的缺陷是指各类软件制品(包括需求、设计、代码和测试文档等)中的不正确的软件描述和实现P556
定义 33.1 软件测试软件测试是以运行目标软件(或其部分代码段)的方式发现它的潜在缺陷的过程P580
定义 33.2 测例一个测例包括一段以运行待测软件或代码段的程序,一个既定输入,及其正确输出;常简单表示为后两者的配对P581
定义 33.3 测试套件一个测试套件是为实现针对待测软件或代码段的特定测试目的而选定的测例集P582
定义 33.4 测试计划软件的测试计划描述了待测软件的所有测试套件的规划和执行过程,及相关辅助信息P583
定义 33.5 单元测试单元测试,又称模块测试,是指测试一个代码单元,以发现其中的逻辑、算法和数据结构方面的缺陷P591
定义 33.6 集成测试集成测试就是测试当多个代码模块集成为子系统(甚至是系统)之后所表现出的整体功能P593
定义 33.7 系统测试系统测试就是依据既定需求规约文档验证软件系统的功能特征、特别是它的质量属性P594
定义 33.8 验收测试验收测试就是测试用户接收目标软件的程度,即测试软件的用户满意度P595
定义 34.1 软件审查软件审查是组织相关权益人合力找出软件制品的缺陷,进而评估制品质量,批准和验收制品的过程P612
定义 34.2 软件评审软件评审是以正式会议的形式,由与会者分工协作,从不同角度审查同一软件制品,以发现缺陷或违例,或批准缺陷或违例移除行动的过程P614
定义 37.1 软件维护软件维护是指软件在投入运行之后的缺陷修复或小规模功能增强,以保证其能按照既定现实需求持续运行于用户端P642
定义 37.2 软件演化软件演化是对成品软件的大规模的功能增强或结构重整,以版本更新的方式保证软件能够持续满足频变的现实需求P642
定义 37.3 遗迹危机遗迹危机是指组织历史的遗迹代码规模过于庞大,其维护和演化需要耗费绝大部分软件预算投入,使得新软件的开发因缺少足够投入而被大面积地取消或严重拖滞的现象P646
定义 38.1 软件老化软件老化是指在软件维护和演化过程出现的用户满意度逐渐下降、质量逐渐降低、变更成本逐渐上升的现象P653
定义 39.1 软件再工程软件的再工程是通过考察和变更软件的结构,并实现更高质量的新结构的过程P670

二、软件工程常识集合

常识1.1 软件复杂性软件必然是十分复杂的,且还将变得更加复杂。故而,软件开发必须采取有效的复杂性处理策略,那就是“分而治之”P14
常识1.2 软件频变性软件必然会持续变更,且还将更加频繁。变更的影响范围必须得到有效控制,以避免对软件整体造成不必要的负面影响P20
常识1.3 软件商品性大多数软件产品都是商品,所需的投入成本高且成功风险大,但在获得商业成功之后的价值回报也高P24
常识 3.1 质量价值低质量产品无法创造出足额价值P59
常识 5.1 阶段化生命期软件的生命期通常包括三大阶段:开发、维护和演化。这三个阶段构成了软件工程实践、教育和研究的主要目标域P88
常识 5.2 开发 vs 维演相比于软件的开发,软件的维护和演化通常需要耗费更多的时间和更高成本,但所创造的价值也通常更多P89
常识 5.3 维护 VS 演化相比于软件的维护,软件的演化通常需要耗费更高成本,但所创造的价值通常也更多P91
常识 6.1 阶段化开发软件开发过程通常包括四大阶段(即四类主要活动):需求工程、设计、构造和质量控制阶段(主要是测试和审查)。P94
常识 6.2 先设计后测试编程之前先设计,编程之后再测试P104
常识 6.3 原型非产品原型不是正式产品,也不能替代正式产品P107
常识 8.1 复用效应复用的层级越高,规模就越大,积极效应也越明显P140
常识 9.1 万能模型在软件领域,不存在随处可用的所谓“万能“模型P162
常识 9.2 模型的两面性任何软件模型皆有利有弊(即局限性);软件实践既不应夸大其利,更不应该忽视其弊P165
常识 9.3 模型的项目敏感性软件模型具有项目敏感性:能有效用于项目甲的模型不一定能同等有效地用于项目乙P166
常识 11.1 “不完美”需求对于绝大多数软件开发项目而言,其需求工程阶段都不可能获得“完美”的需求(即需求完整齐备且有高质量描述)P192
常识 11.2 需求过程迭代并行需求过程各阶段(需求获取、分析、描述和确认)相对独立缺又紧密相连,既可多次迭代,又可部分并行。P195
常识 11.3 需求边学边做需求过程是需求工程师引导各方权益人一起学习待解问题及其领域相关知识的复杂过程P196
常识 11.4 需求创造兼复用需求过程是一个集创造新需求和复用旧需求于一体的过程。P197
常识 12.1 问题定义软件问题的定义是一个由表及里、逐步寻真求全的渐进过程,也是一个与问题解决过程彼此依赖和相互“缠绕”的过程P200
常识 12.2 可行性分析软件项目的可行性旨在确定目标软件产品能否较大可能地实现既定目标(例如,以既定成本收获预期价值)P204
常识 12.3 愿景声明愿景声明必须描述待开发产品的技术目标,包括它应当具有的核心功能,必须满足的主要约束,和应当遵守的重要建议P207
常识 14.1 重要需求优先有潜在重大价值的需求应当给予高优先级P237
常识 14.2 需求优先级角力需求分级是各方权益人为确保各自权益而角力的过程P238
常识 15.1 需求成文将软件需求编写成具有合理结构的技术文档P246
常识 15.2 默用自然语言使用客户和用户所熟悉的自然语言、文字、常用概念及术语描述软件需求(特别是客户和用户需求)P247
常识 15.3 慎用形式化语言慎重选用形式化语言描述软件需求P248
常识 15.4 需求编号并分类在需求规约文档中为每个需求项编号,并将需求分类,再以需求分类为单位组织描述P255
常识 16.1 确认即纠错需求确认实则就是一个发现并纠正需求缺陷的过程;发现和纠正的时间越晚,其成本、难度和负面影响就越大P259
常识 17.1 需求入库选用合适的需求管理系统或工具,并定义良好的需求库结构,以支持大规模需求的有效存储、访问和管理P271
常识 18.1 兼听则明任何事物都有多面性,应当从多个角度分别予以审视,方能获得更准确而全面的认识P293
常识 18.2 用户是上帝用户是软件产品的直接服务对象;软件开发必须尽可能地满足用户的现实需要P294
常识 19.1 需求工程师需求工程师既应是掌握和擅长应用需求工程知识和技能的“专才”,又应是善于交流、合作、管理和写作的“通才”P304
常识 20.1 按需设计软件设计方案必须映射既定需求,适合既定开发团队在既定项目上下文中实现目标软件产品P317
常识 20.2 设计技术抉择软件设计应优先采用适合既定产品,团队和项目的、成熟而广泛有效的技术,不要刻意求新P318
常识 20.3 创新设计软件设计是设计师通过理解目标问题及相关约束,运用专业知识、经验和技能,创造出个性化设计方案的复杂创新过程P320
常识 20.4 不完美设计软件设计无法完全满足各方权益人的全部权益,故无法创造出所谓“完美”的设计方案P322
常识 20.5 质量设计软件设计必须重视并周密考虑产品质量;设计一经完成,软件质量就已经基本定性和定型(之后再难有大幅度变更)P323
常识 26.1 软件设计师软件设计师既应是掌握和擅长应用软件开发知识和技能的“专才”,又应是善于技术决策、交流、合作和写作的“通才”P466
常识 33.1 Dijkstra测试测试只能用于发现软件的潜存缺陷,却不能用于证明软件不存在缺陷P584
常识 33.2 测试与用户满意度测试员不能代表用户,软件测试也不能保证它的用户满意度P585
常识 33.3 测试阶段顺序阶段化测试的一般实施顺序是:单元测试->集成测试->系统测试->验收测试P591
常识 36.1 服务生测试员是服务生,要服务好程序员P636
常识 36.2 客户代表测试员是客户的技术代表,先行验收产品P636

三、软件工程理念集合

理念 1.1 分而治之将软件的复杂目标问题分解为多个彼此相对独立且又易于解决的子问题,然后分别解决每个子问题P18
理念 1.2 拥抱变更开发具有良好可变性的软件,既要保证变更易于实现,又要保证变更不易于破坏软件的整体结构和属性P23
理念 1.3 提高价值/成本比所有软件实践都应关注它的成本、风险和价值,着力于降低成本、控制风险和创造价值P25
理念 2.1 四角天平软件实践必须折中地满足如下四方关键权益人的核心权益:“客户”,“用户”,“工程方”,“工程师”(四者次序部分先后)P43
理念 7.1 增量-迭代开发将软件开发过程分为若干次迭代(子)过程。完成一次迭代就交付一个版本,或实现新需求,或求精已实现的需求。P121
理念8.1 批量定制基于领域平台,快速开发出高质量的、面向细分用户群体的系列产品P153
理念 9.1 模型定制结合经验,依据项目上下文(包括项目特征、团队经历、组织文化等),定制所需的软件模型P166
理念 11.1 适度需求工程保证适度的需求工程:组建专业需求团队,并投入软件开发总预算成本和时间的15%至30%P193
理念 17.1 全程需求管理持续地管理软件需求,覆盖软件产品的整个生命期,甚至更长时间P270
理念 17.2 可持续开发制订具有可持续性的需求版本计划,以保证软件版本系列的持续竞争力,并实现总价值收益的最大化。P280
理念 20.1 常态设计合理地使用设计模式进行软件设计P328
理念 23.1 面向用户的统和界面软件产品界面必须面向用户,统和功能、情感、环境、社会和个性元素,具备全功能、可用且美观等特征P377
理念 24.1 演化型数据库开发以迭代的方式,逐步完成数据库设计和实现,保持数据库与程序之间的“和谐同步”开发P416
理念 24.2 数据驱动设计基于软件应用数据的特征,设计数据库。P420
理念 25.1 SBN双峰螺旋模型需求过程与设计过程既相互影响又相互渗透,以迭代和部分并行的螺旋方式逐步定义出软件需求和设计方案P436
理念 29.1 人本主义编程代码应着重服务于它的读者群体,其次才是它所处的目标系统的软硬件系统P512
理念 29.2 简洁编程编写简单明了的代码P513
理念 29.3 质量编程一如既往地自觉编写高质量的代码P515
理念 33.1 全程测试软件测试应始于需求阶段,并贯穿于整个开发过程P586
理念 33.2 阶段化测试分阶段地实施测试,每个测试阶段确立并实现相对独立而不重复(或较少重复)的测试目标P590
理念 34.1 阶段化审查在软件开发的各主要阶段,针对各类软件制品(包括需求、设计、测试和代码制品),有计划地组织阶段性审查P613

四、软件工程定律集合

(额外) 摩尔定律集成电路板上的电子晶体数目每24个月翻一番,且性能也随之翻一番。当前流行的说法是同样造价的计算机性能每18个月翻一番P32注释
定律 2.1 DeRemer规模能有效用于小型软件产品和项目的工程技术和经验都不能同等有效地应用于大型软件产品和项目P38
定律 2.2 Brooks“银弹”软件开发没有“银弹”,即不存在能够在短时间内显著改善软件生产率和质量的技术、过程、语言和工具。P39
定律 2.3 Mills生产率定律软件的生产率与质量存在紧密关联关系;一般的,低质量软件的生产率的生产率肯定不高P40
定律 3.1 适度质量满足现实需要的软件质量能有效减免开发投入P41
定律 6.1 Royce模型的低效性Royce模式不能有效适应极其复杂而频变的软件开发环境,Royce型项目的成功率低于其他常用模型。P105
定律 6.2 原型“病”工程师在开发原型的过程中付出的“功“越多,就越不愿意主动抛弃或替换它P110
定律 7.1 敏捷方法的高效性相比于Royce模型、普通增量-迭代模型,敏捷方法更适合于(当前)复杂、频变且苛刻的软件开发大环境P132
定律 8.2 平台复用效应领域平台在复用有限次(如3-4次)之后,就能使得系列产品的平均成本和时间低于单件工程所需的平均成本和时间P154
定律 10.1 Glass需求不足定律“需求不足”是导致软件开发项目失败、失控或失效的最主要原因P182
定律 10.2 需求的变增性成熟的软件产品的需求必然会经历频繁的变更,且通常会越变越多;项目所需的时间越长,需求增长的幅度就会越大P184
定律 10.3 需求的价值不均性一小部分需求对目标软件产品所贡献的价值远大于其他大部分需求所贡献的价值P186
定律 10.4 需求的技术钝性“需求难”无法通过技术革新而得到解决P187
定律 13.1 需求获取不到位“需求获取不到位”是“需求不足”的主因P219
定律 14.1 Pareto需求依赖分布超90%的需求与其他需求存在依赖关系;约20%的需求涉及约80%依赖关系P235
定律 16.1 用户优于专家关于需求正确性的判定,用户反馈远比所谓的专家分析更权威和可行P260
定律 16.2 Boehm界面原型开发目标软件产品的界面原型能显著减少最终产品中的、与用户界面相关的缺陷P265
定律 17.1 需求蔓延蔓延需求可占总需求的一半,甚至更多P276
定律 18.1 需求标准不普适在当前需求工程实践中,尚不存在真正能够“放之四海而皆准的“需求过程标准P286
定律 18.2 Glass需求缺失在所有需求缺陷中,“需求缺失”的负面影响最大,最难被发现和修复,且修复成本极高P290
定律 18.3 需求缺陷与修复成本超50%的代码缺陷源于需求缺憾,其修复工作量可占总工作量的80%,可耗费20%-40%的软件开发总成本P291
定律 18.4 需求缺陷与软件规模待开发软件的规模越大,需求缺陷的密度就越大,且移除率越低,导致最终交付数显著增大P291
定律 18.5 需求文档完整性与软件规模待开发软件的规模越大,“需求缺失”就越多,需求规约文档的完整性也就越低P292
定律 18.6 Davis用户反馈用户对需求认识越深入,其反馈就越具有“指导需求质量改善”的价值P295
定律 18.7 Chaos用户两面性于需求工程师而言,用户既是最佳合作伙伴,又是最可怕的敌人,用户“是敌是友”取决于他自身的质量P296
定律 21.1 Jones架构重要性待开发软件的规模越大,复杂度或风险越高,它的架构设计也越重要P334
定律 23.1 界面用户满意度软件界面的用户满意度主要受制于它的可用性和美观程度,而不是它的功能完整性P378
定律 23.2 可用性之感软件产品及其界面的可用性只有在投入实际应用之后才可能被有效度量。而此时任何改善可用性的行为都已十分昂贵P380
定律 25.1 设计之需求条件获取“完整的”需求仅是设计师创造高质量设计方案的必要条件,不是充分条件P437
定律 25.2 Constantine模块化高内聚和低耦合的模块结构具有良好的稳定性,即不易因变更而遭破坏P443
定律 25.3 Simon层次化设计良好的层级结构具有相对较低的复杂度(以层级间和模块间交互数为依据)P445
定律 25.4 Parnas 模块封装发生在封装模块之内的变更所产生的风险远小于跨模块变更的风险P449
定律 27.1 编程语言与软件成本软件编程所用的语言数量越多,开发成本就会相应增加,维护成本还会显著增加P490
定律 29.1 DMW定律相比于非结构化的代码,结构化的代码具有较少的缺陷,且更适宜于阅读、理解和维护P518
定律 30.1 程序员效率的差异性优秀程序员的编程效率是一般程序员的三倍以上,可达十倍,甚至更高P537
定律 30.2 编程效率与任务复杂度编程的效率与任务的复杂度成正比P538
定律 30.8 编程效率与语言和工具编程的效率会因编程语言和工具而表现出显著差异P538
定律 31.1 Hetzel-Myers技术组合组合使用多种测试和审查技术比单独使用某一种技术更有效、也更高效P550
定律 32.1 缺陷成本增长缺陷的发现和修复成本随软件生命期的推进而呈快速(甚至指数级)增长趋势P570
定律 32.2 Pareto缺陷分布约80%的缺陷密集地分布于约20%的软件代码和模块中P572
定律 32.3 缺陷持久密集代码模块的缺陷密集性倾向于在软件的多个连续版本中都保持不变P573
定律 32.4 Adams缺陷影响力一小部分缺陷对软件可靠性的影响远远超出其他大部分缺陷的影响P573
定律 32.5 故障频繁再现50%至90%的用户域软件系统运行故障都不只出现过一次P574
定律 32.6 单模块型缺陷75%至95%的代码缺陷都是单模块型缺陷,即仅存于单个模块,其修复也仅需其所在模块发生必要的变更P575
定律 32.7 进十退一缺陷修复会以约10%的几率引入新的缺陷,另有约10%的缺陷得不到完全修复P575
定律 33.1 Jones测试效能在软件开发过程中,测试一般能发现约85%的缺陷,能修复约80%的缺陷;任何单个测试方法或阶段都很难发现逾35%的缺陷P597
定律 33.2 测试效能与产品规模测试效能随待测软件规模的增大而降低,即:待测软件的规模越大,测试路径的覆盖率和缺陷发现率就会越低P599
定律 33.3 Myers不充分测试基于不充分测试的随机缺陷发现,包含较多已知缺陷的代码段更有可能包含较多未知缺陷P600
定律 34.1 Fagan评审软件评审能有效提高产品的开发效率、质量和项目过程稳定性P615
定律 35.1 质量固型软件的质量随开发进程而逐渐稳固,在设计(特别是构造)完成之后就很难以低成本方式实现大幅度改善P626
定律 35.2 质量加速就单个软件产品或整条产品线而言,质量的改善和恶化都呈现出加速的趋势P627
定律 38.1 软件老化时态软件老化是一类时态现象。从全局来看,它是不可避免的;但在局部时段和范围内,它又是可抵制和可逆转的P653
定律 38.2 软件老化常态软件老化是一类正常的维演现象。它能创造价值,但更能增加成本;它主要与代码的可维护性相关,同时影响软件的功能和用户满意度P654
定律 40.1 Lehman持续变增软件必须不断地变更,以满足变化着的现实需求;此时,软件的规模、功能和复杂度都会随之逐渐增长P683
定律 40.2 Lehman质量渐降软件的质量会随着代码的不断更新而呈现出整体逐渐降低的趋势P684
定律 40.3 Boehm变更在软件维演阶段,代码变更的规模越大,它的一次通过率就越低P685

五、软件工程法则集合

法则 3.1 质量第一依据现实需求和产品目标,定义并实现软件质量P61
法则 6.1 向下信息传递,DIT上游信息表现体所包含的信息必须是完全传递至下游信息表现体P100
法则 6.2 向上信息恢复,UIR上游信息表现体所包含的信息必须能从下游信息表现体中完全恢复(或析出)P100
法则 6.3 快速原型开发依据项目需要,及早而快速地开发出原型P108
法则 8.1 构件组装开发首先定义模块化的架构;然后购买、复用和剪裁成品构件,或定制新构件;最终基于架构组装构件以得到目标软件P146
法则 8.2 构件复用优先优先复用本组织的已有构件,其次是购买商业成品构件(COTS);只在当无法复用或购买构件之时才选择自行开发P147
法则 8.3 构件组装优先如果构件组装的条件能获满足,那就应当依据构件组装模式开发软件,而不应该选择从“零”开始P148
法则 8.4 构件可复用在构件组装开发模式中,确保架构所定义的构件和所购买或定制的构件都是可替换的、可扩展和可组合的P149
法则 10.1 需求内涵软件的需求主要描述它“该做什么”,同时不要忌讳描述它“该怎么做”(以必要、正确和适度为准则)P177
法则 12.1 关注点分离基于待开发软件产品的目标(常见于愿景声明),定义待解问题的若干关注点P211
法则 15.1 编写高质量需求项尽可能保证需求规约文档中的每项需求都是可行的、有效的、完整的、无二义的、可验证的、一致的和可追踪的P250
法则 16.1 用户确认需求由用户主导需求确认决策,工程师辅之P261
法则 18.1 保障话语权需求实践必须保障所有权益人的话语权。既要尊重权益人代表的话语“特权”(代表主流民意)也要直通“底层民意”(尤其是非主流民意),杜绝出现阻断底层“民意”的权益人“超级”代表P293
法则 21.1 基于架构开发以架构为中心,通过构件复用和组装,快速地开发出低成本高质量的软件产品P339
法则 22.1 单一职责保证每个类都有且只有一项“职责”。P364
法则 22.2 开闭保证每个类都是可扩展的,而不是可修改的。P365
法则 22.3 Liskov替换保证每个子类都能替换它的夫类P336
法则 22.4 接口隔离依据使用者所需的服务,定义类的接口,保证使用者仅依赖于它们所需要的接口服务P367
法则 22.5 依赖倒置高层模块不应该依赖于底层模块,两者都应依赖于抽象;细节也应该依赖于抽象(而非反之)P368
法则 23.1 一目了然的界面软件界面应当一目了然,或能自解释P383
法则 23.2 不经思考的点击软件界面上的“点击”操作应当不需要用户的过多事前思考P384
法则 23.3精简文字的界面软件界面应当依据用户所需,删减不必要的文字或图形信息P384
法则 23.4 以用户为中心的界面设计软件界面设计应支持用户以舒适的方式、高效地完成既定功能。P387
法则 23.5 界面一致保持界面内各元素之间、同一软件的不同界面之间、不同软件的界面之间的一致性P395
法则 23.6 个性化界面软件界面设计应在遵循相关领域标准、行业规则和常识的同时,充分挖掘界面的个性美P397
法则 24.1 保证数据独立性保证数据库的物理独立性和逻辑独立性P421
法则 24.2 控制数据冗余度控制数据库的数据冗余度,慎重处理冗余数据的“增查改删”P421
法则 24.3 最少用户数据收集仅收集必要的用户数据,且数据收集和发布过程都必须遵守政府规定、行业条文、社会道德和法律等相关约束P422
法则 25.1 溯源设计深究源问题以获得更真实和完整的设计认知,不要单凭需求文档草率完成设计P438
法则 25.2 简单设计在保证设计方案适合于目标软件及其开发项目的前提之下,尽可能地简化,使之足够简单且直接P439
法则 25.3 模块化设计对于由若干功能模块组装而成的软件,保证每个模块都是高内聚的而模块之间又是低耦合的。P441
法则 25.4 层次化设计设计清晰的软件层级结构,位于上层的功能模块通过下层多个(子)模块的松散耦合而实现P445
法则 25.5 抽象化设计软件设计应聚焦于并突出描述软件开发所必需的重要信息,而不是其他次要或无关信息。P447
法则 25.6 信息隐藏软件设计应封装模块的实现细节,仅以“接口”的形式实现模块间“通信”P448
法则 25.7 最小规划设计在设计阶段准确制订核心设计决策,然后在后续开发中而逐步制订外围设计决策,最终完成产品设计方案P451
法则 25.8 适度设计软件设计应以“满足软件实现之需求”为适度,设计方案既不应过分具体以至“李代桃僵”(即设计师代行程序员之职),也不应过分抽象以至“形同虚设”(即方案不具“指导编程”之能)P452
法则 25.9 确保概念完整性设计应确保概念内容完整且形式一致P452
法则 25.10 复用优先的射界软件设计应优先采用“整体复用”模式,其次是“部分复用”,最后才是“零复用”(即“纯定制”)P453
法则 25.11 面向变更的设计软件设计应面向未来变更,从结构上确保软件产品可持续地易于变更P456
法则 25.12 多维设计设计是多维度的,应当从多个、互用互补的视角描述同一个设计方案P458
法则 25.13 不重复自己的设计所设计的每一项软件功能都应是唯一的,即各功能模块不应具有相同的软件功能或特征P458
法则 25.14 自顶向下设计从架构设计开始,逐步细化、修正和确认设计方案,直至每个构件的设计都足够细致和清晰P459
法则 27.1 编程语言选择依据产品、项目和团队特征,选择合适的编程语言;尽可能地减少客户对编程语言的选择的“无理”干预P489
法则 27.2 尽早还债依据现实需要,尽早偿还技术债P492
法则 29.1 代码结构化按照合理而统一的规则,将代码结构化P517
法则 29.2 不重复自己变成不要重复编写相同的代码P519
法则 30.1 蓄意编程程序员应坚持学习编程知识,并在编程实践中自觉培养和提升编程技能,以实现自我超越P535
法则 31.1 面向用户的质量评估软件质量的评估应面向用户,以用户的评估结论为主,以独立第三方的结论为辅P548
法则 31.2 双管齐下保质量在软件开发初期就开始实施质量保证并规划质量控制,既要防止缺陷的出现,也要及时发现和移出潜存缺陷P552
法则 33.1 重点测试集中主要测试资源(包括测试人力、成本和时间)于缺陷密集型代码模块P602
法则 33.2 优先测试优先测试软件内实现核心功能的、或具有极大变更风险的代码模块P602
法则 33.3 Weinberg测试程序员应避免测试由自己编写的程序P603
法则 33.4 Weinberg扩展测试程序员团队应避免测试由本团队编写的程序P603
法则 35.1 质量瀑布首次开发力争获得高质量,尽可能地规避项目返工和二次开发P628

六、软件工程最佳实践集合

最佳实践 6.1 筛选原型需求依据项目目标,筛选软件原型的需求。P109
敏捷建模法十三项建模法则,十八项最佳实践P168
最佳实践 12.1SMART目标定义 采用SMART标准定义软件产品的目标,即保证目标是具体的、可度量的、可达的、问题相关的和及时的P208
最佳实践 12.2 愿景声明撰写精简愿景声明的内容(仅描述主要技术目标),保证其能有效置于半页A4纸张空间之内P209
最佳实践 12.3 确认愿景声明由客户(代表)和工程方高层就愿景声明签字,以表示他们正式同意了愿景声明所给定的产品技术目标。P210
最佳实践 13.1 多法并用获取需求基于项目、产品、过程和权益人(尤其是关键权益人)的相关特征,搭配使用多种需求获取方法P216
最佳实践 13.2 基于用例获取需求基于用例,获取和求精软件需求,尤其是关键功能需求P222
最佳实践 13.3 客户高管参加邀请至少一名客户方的高层管理者参与主要的需求获取行动P222
最佳实践 13.4 攀附“贵人”找寻能够帮助获取或细化需求的权益人,并与他们保持良好的需求协作关系。P223
最佳实践 13.5 帮助用户认清需要需求工程师应帮助用户认清现实问题及自身需要,特别是核心需要P224
最佳实践 13.6 控制会议规模控制需求获取工作会议的规模,与会人数一般不超过6至8人,开会时长也不宜超过两小时P224
最佳实践 13.7 定义软件环境在需求获取环节,定义目标软件的应用环境和技术环境P225
最佳实践 13.8 记录“源”信息为每项需求收集并记录它的源信息,尤其是它的获取来源和理由P225
最佳实践 14.1 合理需求分簇选择合理的分簇依据,完成需求分簇P233
最佳实践 14.2 基于依赖关系的变更影响分析基于需求间依赖关系,分析需求变更对需求、设计、代码、测例等制品的潜在影响P236
最佳实践 14.3 多依据分级首先选取多个依据并分别定义需求集的优先级队列,然后通过综合与权衡,形成最终的需求优先级序列。P241
最佳实践 15.1 辅以自然语言的形式化描述在必须使用正式模型或形式化语言描述某些需求之前,先尝试采用自然语言进行完整描述P249
最佳实践 15.2 需求模板定制根据项目上下文,基于组织行业或国际标准模板P252
最佳实践 15.3 创建需求术语表为需求规约文档创建术语表,并以此实现术语在整个文档中的一致化使用P255
最佳实践 16.1 需求会议评审控制需求评审会议的规模、限制待审需求量、向所有与会者提供相同的需求信息、尊重各方权益人的评审结果P263
最佳实践 16.2 需求优于审查优先审查具有以下某些特征的需求:高价值、高抽象级、高优先级、高风险、强影响力、与用户相关P263
最佳实践 16.3 基于清单审查需求基于一份记录着常见需求缺陷的清单,快速排查需求规约文档P264
最佳实践 16.4 基于原型确认界面需求快速开发目标软件产品的用户界面原型,并基于此完成用户界面需求确认P266
最佳实践 16.5 签订需求承诺书在需求确认完成之后,客户方和工程方共同签订需求承诺书,以正式启动需求实现过程P266
最佳实践 17.1 定义需求追溯链从需求获取至需求实现的整个过程中,创建并维护有效的需求追溯链(特别是“从需求回溯”和“从需求追踪”)P275
最佳实践 17.2 保守的需求基线定义软件版本的需求基线不宜超过可在50%至90%计划时间内实现的最大需求量P277
最佳实践 17.3 市场部主导需求遴选组织关键权益人特别是代表客户权益的市场部人员主导目标软件产品或版本的需求遴选活动。P278
最佳实践 17.4 基于时限遴选需求依据版本开发迭代的严格时限,遴选出属于当次迭代的基线需求(应用砍半法)P279
最佳实践 17.5 看两步走一步为多个连续版本指定需求计划大略,至少要为当前版本及其下一版本遴选出基线需求P281
最佳实践 17.6 蔓延需求统一分配组建“需求变更控制委员会”,统一分配蔓延需求至各软件版本或其开发迭代过程中P281
最佳实践 18.1 标准需求过程“本地化”针对具体软件开发项目,适当“裁剪”某标准需求过程,以切合项目的实际需要P287
最佳实践 18.2 用户分组将用户群体细分为若干子群体,在每个子群体内选定若干”高质量“用户代表,然后与他们进行充分交流P297
最佳实践18.3 协商需求冲突需求工程师应与客户和用户一起协商解决需求冲突,保证各方的核心权益都能获得满足P298
最佳实践 19.1 精简需求团队软件开发项目的需求工程团队规模一般不超过6至8人,以经验丰富,熟悉应用领域的需求工程师为主体P307
最佳实践 19.2 聪明的无知人需求团队应包含一个或限量个不熟悉应用领域的“聪明的无知人”P308
最佳实践 21.1 全息架构设计针对大型软件产品的架构设计,应当定义完整的Kruchten4+1架构模型P343
最佳实践 22.1 保持接口的健壮性构建接口的设计应使之能够易于正确使用而难于错误使用P370
最佳实践 23.1 多属性度量界面可用性采用合适方法分别度量界面的可用性属性;综合多个属性的度量结果,得出界面可用性整体评估结论P382
最佳实践 23.2 界面支持用户控制软件界面设计应尽可能地支持用户高效地控制界面的所有功能和操作流程P387
最佳实践 23.3 人性化的界面设计软件界面设计应符合大部分用户的认知特性,思维和动作习惯,同时也可针对特殊用户群设计特定界面P388
最佳实践 23.4 界面鼓励和帮助用户软件界面设计应能鼓励用户使用界面的各种操作,并为用户提供实时帮助信息P389
最佳实践 23.5 简单而令人愉悦的界面控制界面组成元素的数量,降低元素认知难度,并优化界面整体布局,使之具有审美愉悦感P391
最佳实践 23.6 最短交互软件界面设计应简化人机交互过程,减少交互次数,以最直接的方式实现交互的既定目标P392
最佳实践 23.7 有效交互保证每个人机交互步骤都是有效的,即交互的人机双方都能有效地互相传达和接收信息P394
最佳实践 23.8 界面元素一致软件界面内各元素之间应保持一致,体现为各元素所采用的概念和行为方式的一致性P395
最佳实践 23.9 界面风格一致保证单个界面的及多个界面之间的风格一致性,涉及界面布局、元素形状和颜色、字体及大小等。P396
最佳实践 23.10 界面交互一致软件界面应与用户保持交互过程的一致性,体现为交互过程中用户认知和操作方式的一致性P396
最佳实践 23.11 共通界面设计保证用户的已有界面操控知识和技能都能有效地复用至当前界面的操作过程中P397
最佳实践 24.1 先约束后数据在给数据表加入实际数据之前,先定义好与该表相关的完整性约束P417
最佳实践 24.2 应用层数据准入依据数据库的既定约束,在应用层实现一致的数据准入机制,保证所有能成功录入的数据都能成功存入数据库P417
最佳实践 25.1 缩控架构范围缩控架构的功能范围,摒弃所有缺乏“真实”需求依据的架构组成元素及相关功能P440
最佳实践 25.2 高内聚低耦合设计模块设计力争实现通信内聚或更高级别的内聚方式,而模块间耦合应尽可能地使用信息或数据耦合,少用控制耦合,坚决避免内容耦合P443
最佳实践 25.3 架构层次设计定义合理的架构层级:小型架构以三层为宜,大型架构以三到五层为宜,不宜超过七层P446
最佳实践 52.4 面向复用的设计在保证设计方案可用于当前产品、团队和项目的前提下,提升各层各类设计元素的可复用性P454
最佳实践 25.5 预测需求变更在软件设计过程中应充分预测未来需求变更,并将之落实到具体设计方案中·P457
最佳实践 26.1 向建筑师学习架构师应向建筑师学习,不仅要称为技术“达人”,而且要成为优秀的管理者,权益协调人和用户学家P471
最佳实践 26.2 美工审核界面由资深软件设计师担纲完成用户界面设计,并由专业美工审核界面P473
最佳实践 26.3 合力设计数据库由资深软件设计师担纲,辅以数据库管理员的建议和意见,合力完成数据库设计P474
最佳实践 26.4 多样的设计师团队组成团队的设计室成员应具有多样性,典型地体现为多样的教育背景、领域和实践经历P475
最佳实践 26.5 培养新人的设计团队在设计师团队中加入新晋设计师,并由资深设计师以“师授徒”的传统形式培养新人P476
最佳实践 27.1 代码及早重构如本轮编程不得已欠下了技术债,就应在本轮结束之后立即采用代码重构技术予以偿还P494
最佳实践 28.1 编写可调式的代码编写易读易排查的代码,添加必要的调试用代码(主要用于输出或打印相关调试信息)P504
最佳实践 28.2 剖析内存剖析并力求缩小程序的实际内存占有量P505
最佳实践 28.3 静态代码排查用静态分析工具排除代码的潜在缺陷P506
最佳实践 28.4 黄灯即红灯重视编译器给出的“警告”,并将之视为“错误”,并及时排除指P507
最佳实践 28.5 使用多编译器进行编译使用多个编译器分别编译代码,确保编译结果一致P507
最佳实践 29.1 重写代码多次重写代码,力求足够简洁P513
最佳实践 29.2 写少码在保证代码功能和质量(特别是可读性和可理解性)的前提下,尽可能的少写代码P514
最佳实践 29.3 童子军军规在每一次向代码库检入代码之前,确保它的质量高于它上次从代码库检出之时P516
最佳实践 29.4 慎用Goto语句慎重使用GOTO语句,控制使用次数,规避GOTO嵌套P518
最佳实践 29.5 字面编程用有实际意义的字词作为程序元素(如变量和函数)的名称,并准确表达它们的实际含义P521
最佳实践 29.6 慎重编程以维护代码的慎重态度编写程序P522
最佳实践 29.7 结对编程两个程序员组队,一起编程P522
最佳实践 29.8 标准化编程遵守组织和团队的既定编程标准,并使用合适工具实现代码库的自动标准化P523
最佳实践 29.9 代码审查所有代码,特别是核心代码,都要接受创作者特别是非创作者的审查P524
最佳实践 30.1 蓄意代码品读程序员应蓄意地频繁品读自己和他人编写的代码,从中学习和提升编程技能P535
最佳实践 30.2 蓄意参与设计程序员应积极地参与软件设计,既帮助设计师改进设计质量,又学习如何设计P536
最佳实践 33.1 白盒单元测试单元测试应当以白盒策略为主,以灰盒策略为辅,一般无需使用黑盒策略P593
最佳实践 33.2 灰盒集成测试集成测试应当以灰盒策略为主,辅以白盒和黑盒策略P594
最佳实践 33.3 黑盒系统测试系统测试应当以黑盒策略为主,以灰盒策略为辅,一般不使用白盒策略P595
最佳实践 33.4 独立Beta测试软件开发方委托专业而独立的测试机构,组织软件用户群体(或其代表)实施Beta测试。P596
最佳实践 33.5 极限测试在编程之前写编写测例P604
最佳实践 33.6 回归测试在每次代码变更之后,都要进行回归测试P605
最佳实践 33.7 测试报告编写测试报告要准确、全面而清晰地描述缺陷本身及其表征,不要包含任何批评工程师的文字(即“对事不对人”)P605
最佳实践 33.8 报告微缺陷测试员应报告微缺陷,避免因积小成大而影响软件的质量和用户满意度P606
最佳实践 33.9 善用自觉、控制偏见测试员应利用自觉以找到测试突破口,同时应控制自觉和偏见对测试的负面影响P607
最佳实践 34.1 基于清单的审查在软件审查过程中参考使用“常见缺陷清单”,以帮助找出常见缺陷P620
最佳实践 34.2 自审结合他查程序员不仅应自行审查所编写的代码,而且应邀请同行审查自己的代码P621
最佳实践 34.3 可维护性审查从可维护性的角度审查代码,以改善代码的整体可维护性P621
最佳实践 34.4 回审在交付软件之后,继续审查软件质量P622
最佳实践 39.1 择时再工程选准再工程的时机P676
最佳实践 39.2 双驱动重构以代码和测试联合驱动的方式,规划和部署高质量的代码重构P677
最佳实践 39.3 果断重写代码如果代码模块需要修改超过25%的原有代码,则应该果断重写整个代码模块P678
最佳实践 40.1 定期剪枝为软件定期剪枝,消除无用的功能和死码P686
最佳实践 41.1 维护员参与软件开发维护工程师应及早参与软件的开发工作,为后续维演工作打下良好基础P693

七、软件工程英文知识点索引

Redwine-Riddle技术成熟论导读P2
Gartner技术成熟度曲线导读P3
Brooks难度论第一篇软件复杂度P15
DeRemer定律第一篇规模挑战P38
Brooks银弹定律第一篇生产率和质量P39
Mills生产率定律第一篇生产率和质量P40
Royce模型(瀑布)第二篇开发模型P103
AOSD模型第二篇开发模型P110
瑞理统一过程RUP模型第二篇开发模型P122
Mcllroy复用定律第二篇软件复用P141
CBSD模型框架第二篇软件模型框架P143
FURPS分类法第三篇需求分类P179
Kano分类法第三篇需求分类P180
Xerox六步曲第三篇需求前奏问题定义P202
SMART实践第三篇愿景定义P208
Pareto需求依赖分布第三篇需求分析P235
AHP第三篇需求分级方法P239
Boehm原型定律第三篇需求确认P265
Davis用户反馈定律第三篇参与者与需求过程P294
Chaos用户两面性定律第三篇参与者与需求过程P296
Jones架构定律第四篇架构设计P334
Kruchten架构模型第四篇架构模型P341
RW十大交叉视角第四篇架构模型P342
Zachman通用框架第四篇架构模型P343
Krucheten架构模板第四篇架构模板P344
Liskov替换法则第四篇OO设计法则P366
Kurg可用性三法则第四篇用户界面设计P383
SBN双峰螺旋模型第四篇软件设计与需求工程P435
Constantine模块化定律第四篇模块化设计P443
Simon层次化定律第四篇层次化设计P445
Parnas模块封装定律第四篇信息隐藏P449
DMW第五篇编程法则P518
Dijkstra之Goto有害论第五篇编程法则P518
Davis编程法则第五篇编程法则P519
Martin编程实践第五篇编程实践P525
Hetzel-Myers组合定律第六篇质量控制P550
Pareto缺陷分布定律第六篇缺陷七定律P572
FIRST规则第六篇单元测试P592
Jones测试效能定律第六篇测试效能P597
Myers不充分测试定律第六篇测试核心知识P600
Fagan评审定律第六篇软件评审P615
Gilb质量五法则第六篇质量控制P628
Boehm变更定律第七篇维演核心知识P685
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EE(Java Enterprise Edition)是一种用于开发企业级应用程序的Java平台。它包含了一系列的规范和API,提供了强大的功能和工具来简化和加快企业级应用程序的开发过程。 在准备Java EE考试的复习资料时,有几个关键的方面需要重点关注。首先是了解Java EE的体系结构,包括各个层次组件的功能和关系。这包括Web层、业务逻辑层和持久化层等。理解这些概念对于构建稳健的企业级应用程序非常重要。 其次,需要学习掌握Java EE的核心技术和API,如Servlet、JSP、EJB、JPA等。这些技术和API是Java EE的基础,掌握它们能够帮助开发人员设计和实现高效的应用程序。 此外,了解Java EE的安全机制和容器管理是考试中的重要内容。熟悉如何配置和使用应用服务器(如Tomcat、JBoss等)可以提高应用程序的性能和安全性。 在复习资料的准备过程中,可以参考一些权威的教材和指南,如《Java EE开发权威指南》和《Java EE 企业级开发教程》等。这些资料通常包含了详细的知识点和实践案例,能够帮助理解Java EE的概念和应用。 最后,为了更好地准备考试,可以尝试做一些实际的项目练习。通过实践,可以将理论知识应用于实际开发中,加深对Java EE的理解和掌握。 总之,复习Java EE考试需要掌握Java EE的体系结构、核心技术和API、安全机制和容器管理等相关知识。通过准备专业的教材和指南,并进行实际项目练习,可以更好地备考Java EE考试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值