一、软件的定义及本质特征
软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。
工程是将理论和只是应用于实践的科学,其目的是经济有效地解决实际问题。
软件=程序+数据+文档
- 程序:计算机可以接受一系列指令,运行时可以提供所要求的功能和性能
- 数据:使得程序能够适当地操作信息的数据结构。
- 文档:描述程序地研制过程、方法和使用的图文资料。
软件具有复杂性、一致性、可变性和不可见性等
二、软件工程发展目前面临的主要挑战
软件开发面临诸多挑战,如客户不满意、项目过程失控、风险与成本问题、无力管理团队等等。
- 客户不满意:交付的许多功能不是客户需要的;交付的日期没有保障;客户使用时发现许多bug
- 项目过程失控:客户需求变化频繁,无力应对;无法预见软件的交付质量;对流程盲目遵从,忽视客户业务价值
- 风险与成本问题:开发团队专注技术、忽视风险;无能力预测成本,导致预算超支
- 无力管理团队:无法评估开发人员能力及工作进度;困扰于如何提升团队的能力与效率
三、软件工程的基本概念及组成要素:过程、方法、工具
软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上,以及对上述方法的研究。
软件工程的过程
问题定义-需求开发-软件设计-软件构造-软件测试
软件工程方法
- 面向过程:以算法作为基本构造单元,强调自顶向下的功能分解,将功能和数据进行一定程度的分离。
- 面向对象:以类为基本程序单元,对象是类的实例化,对象之间以消息传递为基本手段。
- 面向构件:寻求比类的粒度更大的且易于复用的构件,期望实现软件的再工程。
- 面向服务:在应用表现层次上将软件构件化,即应用业务过程由服务构成,二服务由构建组装而成。
软件工程工具