北京做网站哪里好网站架构基本知识
本博客地址:https://security.blog.csdn.net/article/details/136446772
一. 软件工程
1、软件危机。具体表现为:软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。
2、常见的软件过程模型主要包括:瀑布模型、原型模型、螺旋模型、敏捷模型、软件统一过程(RUP)模型、软件能力成熟度模型(CMM)、软件能力成熟度模型集成(CMMI)
3、瀑布模型是结构化开发方法使用的软件过程模型。其包括:需求分析、系统设计、程序设计、编码实现、单元测试、集成测试、系统测试、运行维护。瀑布模型的特点是:因果关系紧密相连,前一个阶段工作的输出结果是后一个阶段工作的输入。缺点是:需求难以一次确定、变更的代价高、结果难以预见、各阶段工作不能并行。
4、原型模型又称快速原型,是原型方法使用的生命周期模型。原型模型解决了瀑布模型需求难以一次确定、结果难以预见的缺点。原型模型有原型开发和目标软件开发两个阶段。
5、抛弃型原型将原型作为需求确认的手段,在需求确认结束后就被抛弃不用,继续用瀑布模型。演化性原型在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。
6、螺旋模型是在快速原型的基础上结合瀑布模型扩展而成。其将整个软件开发流程分成多个阶段,每一个阶段都由目标设定、风险分析、开发和有效性验证、评审 4 部分组成。支持大型软件开发,适用于面向规格说明、面向过程和面向对象的软件开发方法,强调其他模型忽视的风险分析。
7、敏捷模型属于敏捷方法使用的模型。主要有:极限编程(XP)、水晶系列方法、并列争球法、特征驱动开发方法(FDD)等。这些方法的特征如下:
 ● 极限编程(XP):高效、低风险、测试先行(先写测试代码,再编写程序)。
 ● 水晶系列方法:不同的项目,采用不同的策略。
 ● 并列争球法:该方法侧重于项目管理。
 ● 特征驱动开发方法:该方法会将开发人员分类,分为指挥者(首席程序员)、类程序员等。
8、软件统一过程(RUP)模型中有 9 个核心工作流:业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境。RUP 的特点是:用例驱动的、以架构为中心的、迭代和增量的软件开发过程。
9、软件统一过程(RUP)模型用4+1视图模型来描述架构,4包括:逻辑视图、实现视图、进程视图、部署视图。1包括:用例视图。
 ● 逻辑视图:对应最终用户,常用类图、对象图、状态图、协作图表示。
 ● 实现视图:又称为开发视图,对应程序员,通常包含包图和组件图。
 ● 进程视图:又叫过程视图,对应系统集成人员,常用活动图表示。
 ● 部署视图:又叫物理视图,对应系统工程师,常用部署图表示。
 ● 用例视图:所有其他视图都依靠用例视图(场景)来指导它们,这就是将模型称为4+1的原因。
10、软件能力成熟度模型(CMM)是一个概念模型,模型框架和表示是刚性的,不能随意改变,但模型的解释和实现有一定弹性。
11、软件能力成熟度模型集成(CMMI)是在 CMM 的基础上发展而来的。它将软件过程改进的步骤组织成 5 个成熟度等级:初始级、已管理级、已定义级、量化管理级、优化级。量化管理级与已定义级的区别是对过程性能的可预测。
二. 需求工程
1、软件需求包括 3 个不同的层次:业务需求、用户需求、功能需求
2.需求工程(RE)是指应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统及其行为特征和相关约束。需求工程由需求获取、需求分析、形成需求规格(或称为需求文档化)、需求确认与验证、需求管理 5 个阶段组成。
3、软件需求规格说明书(SRS)具体包括功能需求、非功能需求和约束。约束包括设计约束和过程约束。批准的 SRS 是需求开发和需求管理之间的桥梁。
4、需求管理是一个对系统需求变更、了解和控制的过程,包括变更控制、版本控制、需求跟踪等活动。
5、需求获取是获得系统必要的特征,或者是获得用户能接受的、系统必须满足的约束。需求获取的方法包括用户面谈、需求专题讨论会、问卷调查、现场观察、原型化方法和头脑风暴法等。需求获取的基本步骤:
 ● 开发高层的业务模型。
 ● 定义项目范围和高层需求。
 ● 识别用户角色和用户代表。
 ● 获取具体的需求。
 ● 确定目标系统的业务工作流。
 ● 需求整理与总结。
6、需求变更管理过程为:识别出问题、问题分析和变更描述、变更分析和成本计算、变更实现、修改后的需求。
7、变更控制委员会(Change Control Board,CCB)
 CCB 是决策机构,不是作业机构,通常 CCB 的工作是通过评审手段来决定项目是否能变更,但不提出变更方案。过程及操作步骤为:制定决策、交流情况、重新协商约定。
8、需求跟踪的目的是建立与维护需求-设计-编程-测试之间的一致性,确保所有的工作成果符合用户需求。需求跟踪有正向跟踪和逆向跟踪两种方式,合称为双向跟踪。不论采用何种跟踪方式,都要建立与维护需求跟踪矩阵。
三. 系统分析与设计
1、结构化方法又称为面向功能的软件开发方法或面向数据流的软件开发方法。针对软件生存周期各个不同的阶段,有结构化分析、结构化设计和结构化编程等方法。
2、结构化分析(SA)是利用图形表达用户需求中的功能需求,使用的手段主要有数据流图(DFD)、数据字典、结构化语言、判定表和判定树等。
 ● 数据流图(DFD)由 4 种基本元素组成:数据流、处理/加工、数据存储和外部项。
 ● 数据字典是一种标记用户可以访问的数据项和元数据的目录,是对系统中使用的所有数据元素定义的集合,包括数据项、数据结构、数据流、数据存储和处理过程。
 ● 结构化分析具体的建模过程及步骤为:明确目标、确定系统范围、建立顶层 DFD 图、构建第一层 DFD 分解图、开发 DFD 层次结构图、检查确认 DFD 图。DFD 图需要满足规则:父图数据流必须在子图中出现;一个处理至少有一个输入流和一个输出流;一个存储必定有流入和流出;一个数据流至少有一端是处理端;模型表达的信息是全面的、完整的、正确的和一致的。
3、结构化设计(SD)是一种面向数据流的设计方法,SD 分为概要设计和详细设计两个阶段,其中概要设计的主要任务是:确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;详细设计的主要任务是:为每个模块设计实现的细节。在 SD 中,模块是实现功能的基本单位,一般具有功能、逻辑和状态 3 个基本属性。
4、耦合度从低到高:
| 耦合类型 | 描述 | 
|---|---|
| 非直接耦合 | 两个模块之间没有直接关系,互相不依赖对方 | 
| 数据耦合 | 一组模块借助参数表传递简单数据 | 
| 标记耦合 | 一组模块通过参数表传递记录等复杂信息(数据结构) | 
| 控制耦合 | 模块之间传递的信息中包含用于直接控制模块内部逻辑的信息 | 
| 通信耦合 | 一组模块共享了输入或输出 | 
| 公共耦合 | 多个模块都访问同一个公共数据环境,公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等 | 
| 内容耦合 | 一个模块直接访问另一个模块的内部数据、一个模块不通过正常入口跳转到另一个模块的内部、两个模块有一部分程序代码重叠、一个模块有多个入口等 | 
5、内聚度从高到低:
| 内聚类型 | 描述 | 
|---|---|
| 功能内聚 | 各个部分协同完成一个单一功能,缺一不可 | 
| 顺序内聚 | 处理元素相关,而且必须顺序执行,通常前一任务的输出是后一任务的输入 | 
| 通信内聚 | 所有处理元素集中在一个数据结构的区域上 | 
| 过程内聚 | 处理元素相关,而且必须按特定的次序执行 | 
| 时间内聚 | 所包含的任务必须在同一时间间隔内执行 | 
| 逻辑内聚 | 完成逻辑上相关的一组任务,互相存在调用关系 | 
| 偶然内聚 | 完成一组没有关系或松散关系的任务,或者仅仅代码相似 | 
6、概要设计使用系统结构图(SC)又称为模块结构图,反映了系统的总体结构。详细设计的主要任务是:设计每个模块的实现算法、所需的局部数据结构。详细设计的表示工具有:图形工具、表格工具和语言工具。图形有:业务流图、程序流程图、问题分析图(PAD)、NS 流程图等。
7、结构化编程(SP)通过顺序、分支和循环三种基本的控制结构可以构造出任何单入口单出口的程序。SP 强调:自顶向下,逐步细化;清晰第一,效率第二;书写规范,缩进格式;基本结构,组合而成。P 原则:程序=(算法)+(数据结构)。两者分开设计,以算法(函数或过程)为主。
8、数据库设计(概念结构设计部分)建立抽象的概念数据模型,通常采用实体-联系图(E-R 图)来表示。
9、面向对象的方法可以分为:面向对象的分析方法(OOA)、面向对象设计方法(OOD)、面向对象程序设计(OOP)、数据持久化与数据库。
10、面向对象的分析方法(OOA)模型由 5 个层次(主题层、对象类层、结构层、属性层和服务层)和 5 个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。OOA 的基本原则有:抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制和行为分析。OOA 的 5 个基本步骤:确定对象和类、确定结构、确定主题、确定属性、确定方法。
11、面向对象设计方法(OOD)中,数据结构和在数据结构上定义的操作算法封装在一个对象之中。类封装了信息和行为,是具有相同属性、方法和关系的对象集合的总称。类可以分为 3 种类型:实体类、控制类、边界类
12、面向对象程序设计(OOP)以对象为核心,该方法认为程序由一系列对象组成。OOP 的基本特点有封装、继承和多态。
13、在多层软件设计和开发中采用持久层专注于实现数据持久化,将对象持久化到关系数据库中,需要进行对象/关系的映射(ORM),目前主流的持久化技术框架包括Mybatis等
14、软件重用是使用已有软件产品来开发新的软件系统的过程,分为水平式重用和垂直式重用两种类型
15、逆向工程。抽象级别与逆向难度递增:
| 级别 | 内容 | 
|---|---|
| 实现级 | 语法树、符号表 | 
| 结构级 | 程序分量间的关系,如调用图 | 
| 功能级 | 功能和程序段之间的关系 | 
| 领域级 | 实体与应用域之间的关系 | 
四. 软件测试分类
1、根据程序执行状态可分为:静态测试(ST)和动态测试(DT)。
2、根据是否关注具体实现和内部结构可分为:黑盒测试、白盒测试和灰盒测试。
3、根据程序执行的方式来分类可分为:人工测试(MT)和自动化测试(AT)。
4、从阶段上划分,软件测试可以分为:单元测试、集成测试、系统测试和验收测试。
5、其他测试还有AB 测试、Web 测试、链接测试和表单测试等。
五. 基于构件的软件工程
1、基于构件的软件工程(CBSE)是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。用于 CBSE 的构件应该具备以下特征:
 ● 可组装型:所有外部交互必须通过公开定义的接口进行。
 ● 可部署性:必须能作为一个独立实体在提供其构件模型实现的构件平台上运行。
 ● 文档化:构件必须是完全文档化的。
 ● 独立性:构件应该是独立的,如确实需要其他构件提供服务,则应显示声明。
 ● 标准化:必须符合某种标准化的构件模型。
2、构件模型定义了构件实现、文档化以及开发标准。目前主流的构件模型是 Web Services 模型、Sun 公司的 EJB 模型和微软的.NET 模型。构件模型包含了一些模型要素如接口、使用信息和部署信息。构件模型提供了一组被构件使用的通用服务,包括平台服务和支持服务。
3、支持基于构件组装的软件开发过程主要包括:
 ● 系统需求概览。
 ● 识别候选构件。
 ● 根据发现的构件修改需求。
 ● 体系结构设计。
 ● 构件定制与适配。
 ● 组装构件,创建系统。
4、CBSE 过程与传统的软件开发过程的不同点:
 ● 早期需要完整的需求,以便尽可能多地识别出可复用的构件。
 ● 早期阶段根据可利用的构件来细化和修改需求以匹配 CBSE。
 ● 架构设计完成后,可能需要修改构件以适合功能和架构的需求。
 ● 开发过程就是组装构件的过程,有时需要开发适配器。
 ● CBSE 中的架构设计阶段特别重要,决定和限制了可选构件的范围。
5、常见的构件组装有顺序组装、层次组装和叠加组装 3 种组装方式。构件组装可能面临接口不兼容的问题,常见的有参数不兼容、操作不兼容和操作不完备 3 种。这时需要编写适配器构件来解决不兼容的问题。
六、软件项目管理
1、软件进度管理一般包括活动定义、活动排序、活动资源估计、活动历时估计、制定进度计划和进度控制 6 个过程。
2、工作分解结构(WBS)是把一个项目,按一定的原则分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的活动中,直到分解不下去为止。
3、活动定义是指确定完成项目的各个可交付成果所必须进行的各项具体活动,还需要明确每个活动的前驱、持续时间、必须完成日期、里程碑或可交付成果。
4、任务活动图是项目进度管理、项目成本管理等一系列项目管理活动的基础,通常采用甘特图等方式来展示和管理项目活动。
5、软件配置管理(SCM)是一种标识、组织和控制修改的技术。SCM 的目的是:使错误降为最小并最有效地提高生产效率。SCM 的核心内容包括版本控制和变更控制。
6、软件质量保证(SQA)的目的是:使软件过程对于管理人员来说是可见的。SQA 的主要任务是:
 ● SQA 审计与评审,包括对软件工作产品、软件工具和设备的审计,评审开发组的行为符合预定的过程。
 ● SQA 报告。
 ● 处理不符合问题。
7、软件质量认证,国内软件企业主要采用的是 ISO 9001 和 CMM。
8、软件风险管理的主要目标是预防风险和应对发生的风险。风险管理活动可以分为:
 ● Bochm 把风险管理活动分成风险估计(风险辨识、风险分析、风险排序)和风险控制(风险管理计划、风险处理、风险监督)两大阶段。
 ● Charette 把风险分成分析(辨识、估计、评价)和管理(计划、控制、监督)两大阶段。
