软考-软件工程笔记
1、软件开发方法
2、软件开发模型
3、逆向工程
4、需求工程
5、软件系统建模
6、系统设计
7、测试与评审
8、系统运行与软件维护
一、软件开发方法
1、结构化法 传统的开发方法(预设的,以开发过程为本,整体分阶段)
自顶向下,逐步分解求精严格分阶,阶段产出标准化,应用能力差
2、面向对象方法
自底向上,阶段界限不明,更好应变,更好应用,符合人们的思维习惯
3、面向服务方法
粗粒度松耦合,标准化和构件化抽象级别:操作低-》服务中-》业务流程高
4、原型法(需求阶段)
针对需求不明,按功能分:水品原型(界面)、垂直原型(复杂算法)按最终结果分:抛弃型原型、演化原型
其他软件开发方法
形式化方法:数学模型化,所有东西均可验证,而不是测试
统一过程方法
敏捷方法 适应性的,以人为本,增量迭代,小步快跑,适合小型项目
四大价值观
沟通(加强面对面沟通)
简单(不过度设计)
反馈(及时反馈)
勇气(接受变更)
12条过程实践规则
简单设计
测试驱动
代码重构
结对编程
持续集成
现场客户
发行版本小型化·
系统隐喻
代码集成所有制
规划策略
规范代码
40小时工作制
敏捷开发模型的特点
极限编程XP:一些对费用控制严格的公司中使用,非常有效。
水晶方法:搜索了用最少纪律约束而仍能成功的方法,从而在产出效率与易运作上传达一种平衡。
开放式源码:程序开发人员在地域上分布很广(其他方法强调集中办公)
SCRUM:明确定义了的可重复的方法过程,小项目交付
功用去顶开发方法FDD:编程开发人员分成两类:首席程序员和“类”程序员。
ASD方法:其核心是三个非线性的,重叠的开发阶段:猜测,合作与学习。
基于架构的开发方法ABSD
二:软件开发模型:
SDLC瀑布模型 风险高
演化模型
增量模型
螺旋模型 原型+瀑布,风险评估
原型模型
喷泉模型
v模型 重视测试
CBSD构件组装模型 速度快,成本低,可靠性高
快速应用开发模型RAD SDLC+CBSD --数据建模,业务建模,过程建模,应用生成,测试与交付
UP统一过程(用力驱动,以架构为中心迭代和增量)
初始(定义视图和业务)---细化(设计及确认系统架构)---构建(构造产品演进直至提交)---交付(产品交给用户)
三、逆向工程
现有工程--再工程--新系统
逆向工程是设计的恢复过程
实现级:包括抽象的语法树,符号表,过程的设计表示
结构级:包括反映程序分量之间相互依赖的信息,例如调用图,结构图,程序和数据结构
功能级:包括程序段功能及程序段之间关系的信息,例如数据和控制流模型
领域级:包括程序分量与诸多实体与应用领域之间对应的关系的信息,例如实体关系模型
四、需求工程
软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望
需求开发:需求获取、需求分析、需求定义(SRS:软件需求规格书)、需求验证
需求基线:经过评审的SRS
需求管理:变更控制,版本控制,需求跟踪,需求状态跟踪
需求获取
获取方法:收集资料,联合讨论会,用户访谈,书面调查,现场观摩,参加业务实践,阅读历史文档,抽样调查。
分类:业务需求(整体全局),用户需求(用户视角),系统需求(计算机化):功能需求,性能需求,设计约束
QFD:基本需求(明示,常规需求)期望需求(隐含)兴奋需求(多余)
需求分析
功能模型:数据流图DFD:数据流,加工,数据存储,外部实体
行为模型:状态装换图:状态(初态,终态)事件
数据模型:ER图 实体,联系
数据字典:数据元素,数据结构,数据流,数据存储,加工逻辑,外部实体
面向对象OOA
实体类:映射需求中的每个实体
控制类:用于控制用例工作的类
边界类:用于封装用例内,外流动信息或数据流。
UML
构造块:事务(结构事物,行为事物,分组事物,注释事物),关系,图
规则:范围,可见性,完整性,执行
公共机制:规格说明,修饰,公共分类,扩展机制
静态图(结构图)
类图,对象图,构建图,部署图(软硬件),制品图,包图,组合结构图
动态图(行为图)
用例图:系统与外部参与者的交互
顺序图:强调按时间顺序
通信图(协作图)
状态图:状态转换变迁
活动图:类似程序流程图,并行行为
定时图:强调实际时间
交互概览图
4+1视图
逻辑视图(系统分析,设计人员,类与对象)系统功能
实现视图(程序员,物理代码文件和组件)源代码结构
进程视图(系统集成人员,线程,进程,并发)
部署视图(系统和网络工程师,软件到硬件的映射)
最终用户用例视图(需求分析模型)
面向对象的分析
用例模型:识别参与者,合并需求获得用例,细化用例描述,优化调整
分析模型:定义概念类,识别类之间的关系,添加类的职责,建立交互图
需求定义:
严格定义发:
所有需求都能够被预先定义,开发人员与用户之间能够准确而清晰地交流,采用图形文字可以充分体现最终系统
原型法:并非所有的需求都能在开发前被准确的说明,项目参与者之间通常存在交流困难,需要实际可供参考的系统模型,有合法的系统开发环境,需求确定后要准寻严格方法
需求验证:
需求评审:正式评审,非正式评审
需求测试
用户签字确认,验收标准之一
需求状态变迁
需求跟踪:正向跟踪,反向跟踪
用户原始需求
软件需求
下游工作产品
需求变更管理:
问提分析和变更描述--变更分析和成本计算(CCB变更控制委员会)--变更实现
五、软件系统建模
现有系统--(模型化)--物理模型(软件设计)--(抽象化)--逻辑模型(需求分析)--(调整优化)--逻辑模型--(实例化)--物理模型--(具体化)--物理系统
六、系统设计
人机界面设计
黄金三法则
置于用户控制之下
减少用户的记忆负担
保持界面的一致性
软件设计:
软件设计包括体系结构设计、接口设计、数据设计和过程设计
结构设计:软件各主要部件之间的关系
数据设计:将模型转换成数据结构定义。好的数据设计将改善程序结构和模块划分,降低过程复杂度
接口设计(人机界面设计):软件与用户的交互
过程设计:系统结构部件之间转换成软件的过程描述
结构化设计:
概要设计(外部设计)功能需求分配给软件模块,确定每个模块功能和调用关系,形成模块结构图
详细设计(内部设计):为每个具体的任务选择适当的技术手段和处理方法
结构化设计原则:
模块独立(高内聚,低耦合)
保持模块的大小适中
多扇入,少扇出
深度和宽度均不宜过高
模块的四要素
输入输出
处理功能
内部数据
程序代码
面向对象的设计
单一职责原则:设计目标单一的类
开放-封闭原则:对扩展开放,对修改封闭
里氏替换原则:子类可以替换父类
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现变成
接口隔离原则:使用多个专门的接口比使用单一的总接口要好
组合重用原则:要尽量使用组合,而不是继承关系达到重用的目的
迪米特原则(最少知识原则):一个对象应当对其他对象有尽可能少的了解
设计模式
架构模式:软件设计中的高层决策
设计模式:主要关注软件系统的设计,与具体语言无关
惯用法:层次最低,更语言相关
设计模式三种类型的定位
1、创建型模式:创建对象
工厂方法模式(动态创建对象),抽象工厂模式(生成系列对象),原型模式(克隆对象),单例模式(单实例),构建器模式(复杂对象创建)
2、结构型模式:更大的结构
适配器模式(转换接口),桥接模式(继承树拆分),组合模式(树形目录结构),装饰模式(动态附加值能),外观模式(对外统一接口),享元模式(汉字编码),代理模式(快捷方式)
3、行为型模式:交互及职责分配。
备忘录模式(游戏存档),观察者模式(订阅,广播,联动),状态模式(状态变成类),策略模式(多方案切换),模板方法模式(框架),访问者模式(数据与操作分离)
职责链模式(传递职责),命令模式(日志记录,可撤销),解释器模式(虚拟机的机制),迭代器模式(数据集),中介模式(不直接引用)
七、软件测试
尽早、不断的进行测试
程序员避免自己测试设计的程序
既要选择有效的合理的,也要选择不合理的数据
修改后进行回归测试
尚未发现的数量和已发现的错误数量成正比
动态测试(计算机运行):黑盒测试,白盒测试,灰盒测试
静态测试(纯人工):桌前检查,代码审查,代码走查
黑盒测试(功能测试,范围广):等价类划分,边界值分析,错误推测,因果图
白盒测试:基本路径测试,循环覆盖测试,逻辑覆盖测试
测试阶段
v模型
需求分析--验收测试,系统测试
概要设计--集成测试
详细设计--单元测试
单元测试:测试模块,模块功能,性能,接口等
集成测试:模块间的接口(一次性组装风险高,增量组装测试全面),自顶向下(需要桩模块)自底向上(需要驱动模块)混合式(都需要)
系统测试:真实环境下,验证软件配置能否和系统正确连接。:功能测试,性能测试(负载测试(各种工作负载),压力测试(瓶颈,不能接受的性能点),强度测试(资源特别低),容量测试(并发量),可靠性测试(MTTF)),健壮性测试,用户界面测试,安全性测试,安全与反安装测试
确认测试:验收软件与需求的一致性。内部确认测试,Alpha测试,Beta测试,验收测试
回归测试:测试软件变更之后,变更部分的正确性对变更的需求符合性
面向对象的测试:
算法层(单元测试)
类层(模块测试)
模板层/类树层(集成测试)
系统层(系统测试)
软件调试方法:
蛮力法:主要通过计算机找错,低效,耗时
回溯法:从出错处人工沿控制流程往回追踪,直至发现出错的根源。不适于复杂程序
原因排除法:主要是演绎和归纳,用二分法
软件测试:
目的是找出存在的错误,有预知结果,可以实现设计
软件调试:定位错误并修改程序已修正错误,条件未知,不可预计,调试不能描述过程或持续时间
遗留系统演化策略:
低水平低价值:淘汰
高水平高价值:针对息孤岛,集成
高水平高价值:改造,改造系统的功能模型和数据模型
低水平低价值:继承,需要完全遗留系统的功能模型和数据模型
新旧系统的转换策略:
直接转换:成本低,风险高
并行转换策略:成本高,风险低
分段转换策略:成本低,风险低。停掉一部分子系统。
数据转换与迁移:旧数据库(抽取)--转换(通过工具迁移,手工录入,新系统生成)--(装载)新数据库
系统运行与维护
正确性维护(改正性维护):改正测试未发现的错误
适应性维护:值应用软件适应环境变化(外部环境,数据环境)而进行的修改
完善性维护:扩充功能和改善性能而进行的修改
预防性维护:为了适应未来软硬件环境的变化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
2022-02-10 顺序存储二叉树的概念
2022-02-10 二叉树的前中后序代码秒懂
2022-02-10 分析二叉树的前中后序的遍历步骤
2022-02-10 二叉树简介
2022-02-10 为什么需要树结构