软件工程复习笔记
一、软件
什么是软件
软件 = 程序 + 数据结构 + 文档
软件的分类
- 应用软件
- 系统软件
- 支撑软件
软件需求
- 软件功能性需求(Functional Requirement)
能够完成的
功能
及在某些场景下可展现的外部可见行为或效果
- 软件质量方面的需求(Quality Requirement)
外部质量属性
,外部可展现的,用户、客户等会非常关心,如运行性能、可靠性、易用性等
内部质量属性
,隐藏在内部的,软件开发工程师会非常关心,如可扩展性、可维护性、可理解性
- 软件开发约束性需求(Constraint Requirement)
开发成本、交付进度、技术选型、遵循标准等方面提出的要求
类别 | 内涵 | 关注的利益相关方 | 示例 |
---|---|---|---|
功能性需求 | 软件具有的功能、行为和服务 | 用户、客户、开发者群体、其他系统 | - 分析和识别老人语音呼叫 - 分析异常状况 |
内部质量需求 | 开发者群体 | - 可维护性、可扩展性、可理解性、可重用性等 | |
软件质量需求 | 外部质量需求 | 用户、客户、开发者群体、其他系统 | - 界面操作要在1秒内响应 - 视频延迟不超过2秒 |
开发约束性需求 | 软件开发需满足的要求 | 客户、开发者群体、其他系统 | - 要求在6个月内交付产品 - 软件运行在Android之上 - 采用Java语言来实现 |
开源软件和闭源软件
闭源软件
软件代码不对用户开放的一类软件,购买软件只提供可运行软件或服务,没有提供源代码
以许可证方式授权用户使用
缺点:无法掌握软件内部实现情况(如是否存在安全漏洞和恶意代码),也无法对软件进行修改和完善,极大影响了开发者的创新自由
开源软件
一种源代码可以自由获取和传播的计算机软件,其拥有者通过开源许可证赋予被许可人对软件进行使用、修改和传播
优点
- 源代码可自由传播
- 免费使用降低成本
- 激发创作者的热情
- 快速开发搭建系统
软件质量
软件质量是指软件满足给定需求的程度,它是软件的生命线
要求:
- 正确性
- 可靠性
- 健壮性
- 有效性
- 安全性
- 可维护性
- 可移植性
- 可重用性
- 可理解性
- 可信性
- 持续性
- 可用性
- 互操作性
保证方法
二、软件工程
概念
将系统化
、规范化
、可量化
的方法应用于软件的开发、运行和维护的过程;以及上述方法的研究
原则
- 抽象与建模
- 模块化
- 软件重用
- 信息隐藏
- 关注点分离
- 分而治之
- 双向追踪原则
- 工具辅助
三、软件过程模型
定义了软件开发的具体活动以及活动间的逻辑关系
不同模型的特点
模型名称 | 指导思想 | 关注点 | 适合软件 | 管理难度 |
---|---|---|---|---|
瀑布模型 | 提供系统性指导 | 与软件生命周期相一致 | 需求变动不大、较为明确、可预先定义的应用 | 易 |
原型模型 | 以原型为媒介指导用户的需求导出和评价 | 需求获取、导出和确认 | 理解需求难以表述清楚、不易导出和获取的应用 | 易 |
增量模型 | 快速交付和并行开发 | 软件详细设计、编码和测试的增量式完成 | 需求变动不大、较为明确、可预先定义的应用 | 易 |
迭代模型 | 多次迭代,每次仅针对部分明确软件需求 | 分多次迭代来开发软件,每次仅关注部分需求 | 需求变动大、难以一次性说清楚的应用 | 中等 |
螺旋模型 | 集成迭代模型和原型模型,引入风险分析 | 软件计划制定和实施,软件风险管理,基于原型的迭代式开发 | 开发风险大,需求难以确定的应用 | 难 |
四、敏捷开发
一种轻量级软件开发方法
相对于重量级的软件开发方法而言
主张软件开发要以代码为中心,快速、轻巧和主动应对需求变化,持续、及时交付可运行的软件系统
提供了一组思想和策略,指导快速响应用户需求的变化,快速交付可运行的软件制品
基本主张
较之于过程和工具,应更加重视人和交互
的价值
较之于面面俱到文档,应更加重视可运行软件系统
的价值
较之于合同谈判,应更加重视客户合作
的价值
较之于遵循计划,应更加重视响应用户需求变化
的价值
指导思想
Note
- 强化可运行的软件,弱化软件文档
- 以适应变化为目的,提升应变能力
- 以人为本,让方法等服务于人
敏捷准则
- 通过
持续不断地及早交付
有价值的软件使客户满意。 欣然面对需求变化
,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。经常地交付
可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期
。- 业务人员和开发人员必须
相互合作
,项目中的每一天都不例外。 激发个体的斗志
,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。- 不论团队内外,传递信息效果最好效率也最高的方式是
面对面的交谈
。 - 可
工作的软件
是进度的首要度量标准。 - 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
- 坚持不懈地追求
技术卓越和良好设计
,敏捷能力由此增强。 - 以
简洁
为本,它是极力减少不必要工作量的艺术。 - 最好的架构、需求和设计出自
自组织团队
。 - 团队定期地
反思
如何能提高成效,并依此调整
自身的举止表现。
五、UML统一建模语言
视点 | 图(diagram) | 说明 |
---|---|---|
结构 | 包图(package diagram) | 从包层面描述系统的静态结构 |
类图(class diagram) | 从类层面描述系统的静态结构 | |
对象图(object diagram) | 从对象层面描述系统的静态结构 | |
构件图(component diagram) | 描述系统中构件及其依赖关系 | |
行为 | 状态图(statechart diagram ) | 描述状态的变迁 |
活动图(activity diagram) | 描述系统活动的实施 | |
通信图(communication diagram) | 描述对象间的消息传递与协作 | |
顺序图(sequence diagram) | 描述对象间的消息传递与协作 | |
部署 | 部署图(deployment diagram) | 描述系统中工件在物理运行环境中的部署情况 |
用例 | 用例图(use case diagram) | 从外部用户角度描述系统功能 |
六、软件测试
程序是运行软件的载体,也是软件缺陷的载体
白盒测试
基于程序内部的执行流程来设计测试用例
黑盒测试
基于程序的外在功能和接口来设计测试用例