第一章
软件定义
软件 = 程序 + 数据 + 文档
程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能
数据:使得程序能够适当地操作信息的数据结构
文档:描述程序的研制过程、方法和使用的图文资料
软件特性
复杂性、一致性、可变性、不可见性 等
复杂性:
软件规模越大,服务器等规模就越复杂,阿里云等云计算平台甚至有几百万台服务器分布在全国各地
一致性:
1.软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件)
2.软件必须遵从人为的惯例并适应已有的技术和系统。
3.软件需要随接口不同而改变,随时间推移而变化,而这些变化是不同人设计的结果。
可变性:
软件只要是在使用,就会一直在变,而这个改变是随需而变。
不可见性:
1.软件是一种“看不见、摸不着”的逻辑实体,不具有空间的形体特征。
2.开发人员可以直接看到程序代码,但是源代码并不是软件本身。
3.软件是以机器代码的形式运行,但是开发人员无法看到源代码是任何人运行。
工程含义
工程是将理论和知识应用于实践的科学,以便经济有效的解决问题
实例:
大规模的设计和建造
复杂问题与目标分解
团队协作和过程控制
软件工程的定义:
软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;对上述所述的方法的研究
目标:
较低的开发成本
按时完成开发任务并及时交付
实现客户要求的功能
具有良好性能、可靠性、可扩展性、可移植性等
软件维护费用低
基本要素
过程、工具、方案
基本策略
软件复用:
构造一个新的系统不必从零做起,直接复用已有的构件进行组装构件是经过反复使用验证的,由其组成的新系统具有较高的质量
分而治之:
将一个复杂的问题分解成若干个简单的问题,如何逐个解决来源于人们生活与工作的经验,完全适合于技术领域
逐步演进:
软件开发是自底向上逐步有序的生长过程小步快跑:每走完一步再调整并为下一步确定方向,直到终点
优化折中:
优化:优化软件的各个质量特性,如运行速度、资源利用、用户体验。
折中:通过协调各个质量特性,实现整体质量的最优
第二章
工程师所需能力
- 分析问题和解决问题的能力
- 人际沟通及交流能力
- 软件工程知识和技能
- 应用领域有关知识
- 书面语言组织和表达能力
目标
识别错误假设
确保一致性
提升依从
减少彼此误解
提高支持速度和效率
提升客户满意度
撰写优质的需求文档
需求定义
需求是对外可见的系统特征
需求,是人们要解决的某个问题或达到某种目的的需要。是系统或其组成部分为满足某种书面规定(合同,标准,规范等)所要具备的能力。
需求将作为系统开发,测试,验收,提交的正式文档依据
需求管理三任务
- 学习——需求获取
- 剪枝——需求优选
- 文档化——撰写需求规格说明书
需求内容
需求是系统为满足客户期望的目标而完成的行为
需求要体现出对问题领域的清晰理解
给出系统的使用场景和上下文
软件需求规格说明
是具有一定法律效力的合同文档
清楚的描述软件在什么情况下,需要做什么,以及不能做什么
以输入/输出、输入到输出之间的转换方式来描述功能性需求
描述经过干系人磋商达成共识的非功能性需求
一般参考需求定义模板,覆盖标准模板中定义的所有条目
作为后续的软件评估依据和变更的基准
需求文档的组织形式
文档需要有逻辑组织结构【例如:参照IEEE的模板】
典型的组织形式包括:
按系统能够响应的各种外部环境情况来组织
按系统特征来组织
按系统的响应方式来组织
按所管理的外部数据对象来组织
按用户类型来组织
按软件的工作模式来组织
按子系统的划分来组织
软件需求规格说明SRS的风格
总结
软件过程
过程是一组将输入转化为输出的相互关联或相互作用的活动
过程方法
过程方法是系统地识别和管理组织内使用的过程,保证更有效地获得期望的结果
软件开发
软件过程模型
软件过程模型就是对软件过程的抽象描述