一、问题定义
1. 软件的定义(产品):
软件= 程序十数据十文档
- 程序: 按事先设计的功能和性能需求执行的指令序列
- 数据: 是程序能正常操纵信息的数据结构
- 文档: 与程序开发、维护和使用有关的图文材料
2. 软件的分类:
- (按软件功能)
- 系统软件
- 支撑软件
- 应用软件
3. 软件工程方法学:
- 传统方法学(结构化方法)
- 面向对象方法学
4. 软件危机:
软件危机:在计算机软件的开发和维护 过程遇到的一系列严重问题
5. 产生软件危机的原因:
- 客观原因:软件本身特点
- 逻辑部件
- 规模庞大
- 主观原因:不正确的开发方法
- 忽视需求分析
- 错误认为: 软件开发=程序编写
- 轻视软件维护
6. 消除软件危机的途径:
- 软件工程:适网于大型、复杂、多人协作开发的情形,“化繁为简”。
7. 软件工程的定义:
定义:(1)应用系统化的、学科化的、定量的方法,来开始、运行和维护软件,即将工程应用到软件。
(2)对(1)中各种方法的研究。
目标:(易维护性)在给定的时间和预算内,按照用户的需求,开发易修改、高效、可靠、可维护、适应性强、可移动,可重用的软件。
8. 软件工程的三要素:
方法、工具、过程
9. 软件过程模型:
- 传统软件过程模型
- 瀑布模型:自上而下,相互衔接的固定次序。线性模型,强调文档;
- 原型模型:目标不明确;
- 增量模型:需求可能发生变化,具有较大风险,希望尽早进入市场;
- 现代软件过程模型
- 基于构件的开发模型
- 统一过程模型
- 敏捷开发过程
- 如何选择过程模型
- 如何选择
- 案例分析
10. 软件生命周期:
问题定义->可行性研究->需求分析->总体设计->详细设计->编码->测试->维护
二、可行性研究
(确定问题是否值得去解决)
1. 逻辑模型:
- 系统流程图(数据在系统各个部件中的加工过程)
- 数据流图 (基本功能)自顶向下,逐步分层
- 数据字典(数据信息)
2. 可行性研究的过程实质:
可行性研究的过程实质上是 压缩简化的系统分析和设计的过程
3. 研究每种解法的可行性:
- 技术可行性
- 经济可行性
- 操作可行性
三 、需求分析
(做什么?)
结构化分折法是面向数据流的分析方法
明确系统的功能;
对目标系统提出 完整、准确、清晰、具体的要求;
1. 分析模型:
- 数据模型(E-R图)(数据库) :相对稳定的
- 功能模型(数据流):描述系统功能
- 行为模型(状态转换图):通过描绘系统的状态 以及引起系统状态转换的事件,表示系统的行为。
方框层次图、IPO图
2. 从哪些方面验证软件需求的正确性:
- 一致性
- 完整性
- 现实性
- 有效性
3. 采用自顶向下逐层分解,抽象、分解
4. 分析方法:
- 结构化分析方法(SA)
- 面向对象分析方法(OOA)
四、总体设计
1. 什么是总体设计:
总体设计又称(概要设计或者初步设计),主要解决怎么做?系统如何实现
2. 设计原理:
- 模块化
- 抽象
- 逐步求精
- 信息隐藏和局部化
- 模块独立
3. 指导思想:
高内聚,低耦合
4. 耦合:
- 数据耦合(尽量使用)
- 控制耦合(少用,分解)
- 特征耦合(少用)
- 公共环境耦合(限制使用)
- 内容耦合(禁止使用)
5. 内聚:
- 低内聚 :
- 偶然内聚
- 逻辑内聚
- 时间内聚
- 中内聚:
- 过程内聚
- 通信内聚
- 高内聚:
- 顺序内聚
- 功能内聚
6. 层次图:
上层调用下层
矩形框 – 模块
连线 – 调用关系
7. HIPO:
带编号的层次图
8. 结构图(SC):
五、详细设计
具体实现
1. 什么是结构化设计?
如果一个程序的代码块仅仅通过顺序、选择、循环3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
2. 人机界面设计:
认识用户、色彩搭配、设计问题、设计指南、设计过程
设计问题:
- 系统响应时间
- 用户帮助设施
- 出错信息处理
- 命令交互
3. 过程设计的工具:
- 程序流程图(结构或非结构化)
- 盒图(结构化)又称为N-S图
- PAD图(问题分析图) (结构化)
- 判定表
- 判定树
- Jackson图
4. 程序复杂度:
McCabe方法
5. 流图(程序图):
六、实现
(编码和测试)
注释行的数量占整个源程序的1/5~1/3
1. 软件测试准则:
- 早开始
- Pareto原理 (2、8原则)80%错误由程序中20%模块造成
- 从小到大 小规模一大规模
- 充分覆盖,
- 第三方测试
2. 黑盒测试(功能测试) :
- 等价类划分法
- 边界值分析法
- 错误猜测法
- 因界图法
3. 白盒测试(结构测试):
- 逻辑覆盖法
- 路径测试法
- (冒烟测试)
4. 测试步骤:
单元测试-> 集成测试-> 系统测试->验收测试
集成测试分为:自顶向下和自底向上
自顶向下分析分为:深度优先 和 广度优先
5. 调试途径:
- 蛮干法
- 回溯法
- 原因排除法(对分查找法、归纳法、演绎法)
七、维护
八、面向对象方法学
(面向对象分析方法)
1. 面向对象思想:
数据和处理封装在一起
2. 模型:
模型 | 工具 | 功能 |
---|---|---|
对象模型 | 类图(静态图) | 做事情的实体 |
动态模型 | 什么时候做? | |
功能模型 | 用例图 | 做什么 |
3. 面向对象的核心特征:
封装、 继承、多态
4. 抽象是面向对象领域发现类的主要方法:
5. 面向对象方法指导思想:
面向对象方法指导思想————软件系统是由多个对象组成,对象间通过消息相互交流,共同协作,以完成系统功能。
6. 活动图和流程图的区别:
活动图:着重描述的是对象活动的顺关系所遵循的规则,是面向对象的 ,描述系统的行为;
流程图:着重描述的是处理过程,是面向过程的;
7. 时序图:
时序图是交互图的一种,可以动态验证类模型的可行性。
九、面向对象设计
系统设计
对象设计
1. 设计准则:
- 模块化
- 抽象
- 信息隐藏
- 弱耦合
(1)交互耦合
(2)继承耦合 - 强内聚
(1)服务内聚:一个服务完成一个功能
(2)类内聚:一个类完成一个用途
(3)一般-特殊内聚 - 可重用
2. 面向对象设计中最主要的工作:
面向对象设计中最主要的工作是建立对象模型、然后通过动态模型和功能模型去完善对象的操作(服务)
【推荐】国内首个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搭建本