软件的定义:
软件工程=程序+数据+文档
- 程序:计算机可以接受的一系列指令,运行时可以提供所需要的功能和性能。
- 数据:使得程序能够适当地操作信息的数据结构。
- 文档:描述程序的研制过程、方法和使用的图文资料。
软件的本质特性:
软件具有复杂性、一致性、可变性和不可见性等固有的内在特性,这是造成软件开发困难的根本原因。
一致性:
- 软件不能独立存在,需要一幅于一定的环境(如硬件、网络以及其他软件)
- 软件必须遵循人为的惯例并适应已有的技术和系统
- 软件需要随接口不同而改变,随时间推移而变化,而这些变化时不同人设计的结果
可变性:
- 人们总认为软件是易修改的,但忽视了修改所带来的副作用
- 不断的修改最终导致软件的退化,从而结束其生命周期
不可见性:
- 软件是一种“看不见,摸不着”的逻辑实体,不具有空间的形体特征
- 开发人员可以直接看到程序代码,但是源代码并不是软件本身
- 软件是以机器代码的形式运行,但是开发人员无法看到源代码时如何执行
什么是软件工程:
软件工程是①将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;②对①中所述方法的研究
软件工程的目标——创造“足够好”的软件
- 较低的开发成本
- 按时完成开发任务并及时交付
- 实现客户要求的功能
- 具有良好的性能、可靠性、可扩展性、可移植性等
- 软件维护费用低
软件工程的基本要素:
- 过程:支持软件开发各个环节的控制和管理
- 方法:完成软件开发任务的技术手段
- 工具:为软件开发困难提供自动的或半自动的软件支撑环境
软件开发过程:
软件工程方法:
软件工程工具:
软件开发的基本策略:
- 软件复用:构造一个新的系统不必从零做起,直接复用已有的构建进行组装。构建是经过反复使用验证的,由其组成的新系统具有较高的质量
- 分而治之:将一个复杂的问题分解成若干个简单问题,然后逐个解决来源于人们生活与工作的经验,完全适合于技术领域
- 逐步演进:软件开发是自底向上逐步有序的生长过程。小步快跑:每走完一步再调整并为下一步确定方向,直到终点
- 优化折中:优化:优化软件的各个质量特性,如运行速度、资源利用、用户体验。折中:通过协调各个质量特性,实现整体质量的最优
产品质量维度:
质量模型: