一、什么是软件
1. 软件
一组对象或项目所形成的一个“配置”,由程序、文档和数据等部分构成。
-
程序(program):可被计算机硬件理解并执行的一组指令,提供期望的功能和性能;
-
数据(data structure):程序能正常操纵信息的数据结构;
-
文档(document):与程序开发、维护和使用有关的图文材料
2. 软件的四大特征
复杂性、不可见性、一致性
-
复杂性(complexity): 软件无法以“制造”的方式被生产,只能采用手工开发方式,这是一种人为、抽象化的智能活动(智力密集型)
-
不可见性(invisibility):尚未完成的软件是看不见的,无法像产品一样充分呈现其结构,使得人们在沟通上面临极大的困难,难以精确的刻画和度量。
-
易变性(changeability):软件所应用的环境由人群、法规、硬件设备、应用领域等因素汇集而成,而这些因素皆会频繁快速的变化。
-
一致性(conformity):各子系统的接口必须协同一致,而随着时间和环境的演变,要维持这样的 一致性通常十分困难。
3. 软件的分类
系统软件:OS、编译器、DBMS、IDE
应用软件:商业软件、个人软件
二、软件的发展
-
第一阶段(1950-1960):主要用于数值计算的需求,导致“软件危机 ”的出现
-
第二阶段(1970):出现了数据库、结构化编程等技术,软件不仅是程序,还包括开发、使用、维护等文 档,“软件生命周期”的概念开始形成
-
第三阶段(1980):开始关注对软件开发过程的管理及工程性的开发,出现了CASE工具,面向对象思想OO开始出现
-
第四阶段(1990):Internet和Web导致出现分布式、异构环境下的软件,软件生命周期的每一个阶段都发展出详细的方法论
-
第五阶段(2000至今):云计算、敏捷开发,面向服务的体系架构SOA方法
三、软件危机
计算机软件的开发和维护过程所遇到的 一系列严重问题
1. 软件危机的表现
– 对软件开发成本和进度的估算很不准确
– 无法满足用户需求
– 质量很不可靠
– 难以更改、调试和增强
– 没有适当的文档
– 软件成本比重上升
– 软件开发效率跟不上计算机应用普及速度
2.软件危机产生原因
-
对软件这样一类复杂和特殊系统的认识不清
-
没有找到支持软件系统开发的有效方法
-
缺乏成功软件开发实践以及相应的开发经验
四、软件工程
(IEEE) 将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即将工程化应用到软件上;
(国务院)按预算和进度实现满 足用户要求的软件产品的定义、开发、发布和维护的工程
五、软件工程的本质
不同抽象层次之间的映射与转换
用严格的规范和管理手段来缩小偏差,通过牺牲“时间”来提高“质量”
1.两个映射
概念映射:问题空间的概念与解空间的模型化概念之间的映射
业务逻辑映射:问题空间的处理逻辑与解空间处理逻辑之间的映射
六、软件工程所关注的目标
1.功能性需求(Functional Requirements)
软件所实现的功能达到它的设计规范和满足用户需求的程度
– 完备性:软件能够支持用户所需求的全部功能的能力;
– 正确性:软件按照需求正确执行任务的能力;
– 健壮性:在异常情况下,软件能够正常运行的能力
– 可靠性:在给定的时间和条件下,软件能够正常维持其工作而不发生故障的能力。
2.非功能性需求(NFR)
系统能够完成 所期望的工作的性能与质量
– 效率:软件实现其功能所需要的计算机资源的大小,“时间-空间”;
– 可用性:用户使用软件的容易程度,用户容易使用和学习;
– 可维护性:软件适应“变化”的能力,系统很容易被修改从而适应新的需求 或采用新的算法、数据结构的能力;
– 可移植性:软件不经修改或稍加修改就可以运行于不同软硬件环境(CPU、 OS和编译器)的能力;
– 清晰性:易读、易理解,可以提高团队开发效率,降低维护代价;
– 安全性:在对合法用户提供服务的同时,阻止未授权用户的使用;
– 兼容性:不同产品相互交换信息的能力;
– 经济性:开发成本、开发时间和对市场的适应能力。
– 商业质量:上市时间、成本/受益、目标市场、与老系统的集成、生命周期 长短等。
七、软件工程中的最佳实践
1.软件工程的七条原理(B.W. Boehm, 1983)
– 用分阶段的生命周期计划严格管理
– 坚持进行阶段评审
– 实行严格的产品控制
– 采用现代程序设计技术
– 结果应能清楚地审查
– 开发小组的人员应少而精
– 不断改进开发过程
2.与顾客沟通的最佳实践原则:
– 原则1:倾听;
– 原则2:有准备的沟通;
– 原则3:需要有人推动;
– 原则4:最好当面沟通;
– 原则5:记录所有决定;
– 原则6:保持通力协作;
– 原则7:聚焦并协调话题;
– 原则8:采用图形表示;
– 原则9:继续前进原则;
– 原则10:双赢
3.IBM RUP最佳实践原则:
– 迭代化开发
– 需求管理
– 使用基于构件的体系结构
– 可视化软件建模
– 持续质量验证
– 控制软件变更