目录
一、软件工程的定义及本质特征
1.定义:
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据以及其相关文档的完整集合。
工程是将理论和知识应用于实践的科学,以便经济有效地解决问题。
软件工程是指导计算机软件开发和维护的工程学科。
- 程序是按事先设计的功能和性能要求执行的指令序列;
- 数据是使程序能正常操纵信息的数据结构;
- 文档是与程序开发、维护和使用有关的图文材料。
2.本质特征:
复杂性
可以这样说,软件是人类创造的最复杂的物体,这种复杂性会给软件开发管理和 质量保证带来很多困难。
一致性
1.软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件)
2.软件必须遵从人为的惯例并适应已有的技术和系统。
3.软件需要随接口不同而改变,随时间推移而变化,而这些变化是不同人设计的
结果。
可变性
1.软件只要是在使用,就会一直在变,而这个改变是随需而变。
2.人们总是认为软件是容易修改的,但忽视了修改所带来的副作用。
3.不断地修改最终导致软件的退化,从而结束其生命周期。
不可见性
1.软件是一种“看不见、摸不着”的逻辑实体,不具有空间的形体特征。
2.开发人员可以直接看到程序代码,但是源代码并不是软件本身。
3.软件是以机器代码的形式运行,但是开发人员无法看到源代码是任何人运行。
二、软件工程发展历程及目前面临的主要挑战
1.软件工程的发展历史
软件的发展大致分为四个阶段:
1、无"软件"概念阶段(1946年~1955年)此阶段的特点是:尚无软件的概念,程序设计主要围绕硬件进行开发,规模很小,工具 简单,无明确分工(开发者和用户),程序设计追求节省空间和编程技巧,无文档资料 (除程序清单外),主要用于科学计算。
2、意大利面阶段(1956年~1970年)
此阶段的特点是:硬件环境相对稳定,出现了“软件作坊”。开始广泛使用产品软件(可 购买),从而建立了软件的概念。但程序员编码随意,整个软件看起来就像是一碗意大 利面一样杂乱无章,随着软件系统的规模越来越庞大,软件产品的质量越来越差,生产 效率越来越低,从而导致了“软件危机”的产生。
3、软件工程阶段(1970年至今)
强调用工程化的思想解决软件的开发问题
软件工程大体上经历了瀑布模型、迭代模型和敏捷开发三个阶段
4、面向对象阶段(1990年至今)
提出了面向对象的概念和方法。面向对象的思想包括面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及面向 对象的编程实现(OOP,Object Oriented Programming)等等
2.软件开发面临的挑战
客户不满意
1.交付的许多功能不是客户需要的
2.交付的日期没有保障3.
3.客户使用时发现许多Bug
项目过程失控
1.客户需求变化频繁,无力应对
2.无法预见软件的交付质量
3.对流程盲目遵从,忽视客户业务价值
风险与成本问题
1.开发团队专注技术,忽视风险
2.无能力预测成本,导致预算超支
无力管理团队
1.无法评估开发人员能力及工作进度
2.困扰于如何提升团队的能力与效率
三、软件工程的基本概念及组成要素
1.软件工程的基本概念
软件工程是为了解决开发成本效益和软件质量的问题而产生的,倡导以工程的原理、原则和方法进行软件的开发,用系统的、可控的和有效的方式构建高质量的软件产品。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
2.软件工程的基本要素
-
软件工程过程(支持软件开发各个环节的控制和管理)
-
软件工程方法(完成软件开发的技术手段)
-
软件工程工具
3.软件开发的基本策略
- 软件复用(不只是代码复用)
构造一个新的系统不必从零做起,直接复用已有的构件进行组装
构件是经过反复使用验证的,由其组成的新系统具有较高的质量
- 分而治之
将一个复杂的问题分解成若干个简单的问题,如何逐个解决
来源于人们生活与工作的经验,完全适合于技术领域
- 逐步演进
软件开发是自底向上逐步有序的生长过程
小步快跑:每走完一步再调整并为下一步确定方向,直到终点
- 优化折中
优化:优化软件的各个质量特性,如运行速度、资源利用、用户体验
折中:通过协调各个质量特性,实现整体质量的最优