第一章软件工程概述
1. 计算机软件概念
1.1 计算机软件
软件:计算机系统中与硬件相互依存的另一部分,其包括程序,数据,文档。
程序:是按事先设计的功能和性能要求,执行的指令序列。
数据:是使程序能够正常操纵信息的数据结构。
文档:是与程序开发,维护,使用有关的图文材料。
1.2 软件的特点
(1)抽象性:软件是一种逻辑实体,而不是具体的物理实体。
(2)无磨损:l在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
(3)维护困难:软件维护困难,无明显的制造过程。
(4)依赖性:l软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。
(5)未摆脱手工艺:软件的开发至今尚未完全摆脱手工艺的开发方式。
(6)复杂性:软件本身是复杂的,相当多的软件工作涉及到社会因素
(实际问题的复杂性, 程序逻辑结构的复杂性)
(7)软件成本相当昂贵
1.3 软件与硬件的关系
1.4 软件分类
(1)基于软件功能划分:系统软件;支撑软件;应用软件
工具软件,它帮助软件开发人员开发自己的软件产品
(2)基于软件工作方式划分: 实时处理;分时处理;交互式;批处理
(3)基于软件规模划分: 微型;小型;中型;大型; 甚大型; 极大型
(4)基于软件服务对象的范围划分: 项目软件(定制软件);产品软件
项目软件:为特定客户(或少数客户)特定客户(或少数客户)编写。
产品软件:直接提供给市场,或是为千百个用户服务的软件。
2.软件的发展
第一阶段:(程序设计阶段)(约1950至1965):
【特点】:硬件已通用,软件个体化,软件开发者即使用者。软件只有程序,无文档;
【典型技术】:面向批处理、自定义软件
第二阶段(程序系统阶段)(1965—1979):
【特点】:多道程序设计技术、多用户系统、人机交互式技术、 实时系统和第一代数据库管理系统的出现,使得计算机应 用得到迅速。出现了专门从事软件开发的“软件作坊”。原始的开发与维护方法陷入了极端困境,“软件危机”产生 。
【典型技术】:多用户、实时、 数据库、软件产品
第三阶段(软件工程阶段)(1975—1985):
【特点】:微处理器的出现,使计算机大众化。软件开发有了可以遵循的软件工程化的设计准则、方法和标准。
【典型技术】:分布式系统、广域网和局域网、低成本的硬件、嵌入“智能”
第四阶段(1985-至今):
【特点】:针对计算机和软件的综合应用
【典型技术】:强大的桌面系统、面向对象技术、专家系统、人工神经网络、网络计算机
3 软件危机
3.1软件危机概念(三方面)
(1)预算,进度,可靠性:软件总是超出预算、落后于进度表,而且不可靠
(2)开发,维护过程中问题:计算机软件的开发和维护过程中所遇到的一系列严重问题。 :
(3)不能完成任务,成本上升:l在软件生产的各阶段都会引入不同程度的错误,造成不能预期完成任务,致使成本上升,甚至导致软件失败
3.2.软件危机的表现
(1)软件开发和维护费用急剧上升
(2)不重视文档资料
(3)产品质量不可靠
(4)软件产品成本高于硬件产品
(5)供需失配
3.3.软件危机的原因
(1)与软件本身的特点有关(逻辑产品,未摆脱手工业)
(2)软件开发和维护的方法不正确
忽视软件开发前期的需求分析;
开发过程没有统一、规范方法论的指导;
文档资料不齐全;
忽视人与人的交流;
忽视测试工作,提交给用户的软件质量差;
轻视软件的维护。
4.软件工程与开发准则
软件工程应使用已有的工程规则的理论和模式,来解决所谓的"软件危机"。
4.1软件工程概念
用工程化的原则解决软件危机。
详细描述为:在软件开发过程中应用工程化原则,解决软件的整体质量较低、最后期限和费用没有保证等问题
IEEE给出了更全面的定义:
IEEE:软件工程是(1)把系统的,规范的,可度量的途径应用于软件开发,运行和维护过程,也就是把工程应用于软件。(2)研究(1)中提到的途径。
4.2软件工程三要素
(1)工具:软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。
(2)方法:软件工程方法为软件开发提供了 “如何做” 的技术。
(3)过程:软件工程过程定义了:
- 方法使用的顺序
- 要求交付的文档资料
- 为保证质量和适应变化所需要的管理
- 软件开发各个阶段完成的里程碑
4.3软件工程的基本准则
1、严格阶段管理
这条基本准则意味着,应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。
2、坚持阶段评审
在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误。
3、加强产品控制
当改变需求时(即客户改变要求),为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。
4、采纳新技术
采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率。
5、结果应能清楚地审查
工作进展情况可见性差,难以准确度量。为了提高软件开发过程的可见性,和更好的管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准。
6、开发小组的人员应该少而精
5.软件生存周期
软件生命周期划分为三个时期:计划时期、开发时期、运行时期;
计划时期:划分为问题定义和可行性研究;
开发时期:划分为需求分析、概要设计、详细设计、编码和测试阶段;
运行时期:主要是在运行中完成各类维护。
6.软件生存期模
软件开发模型是对软件过程的建模,包括:
-
瀑布模型
-
原型模型
-
增量模型
-
螺旋模型
6.1瀑布模型
特点:(优)
1.阶段间具有顺序性和依赖性关系
顺序性:必须待前一阶段的工作完成之后,才能进行下一阶段的工作。
依赖性:前一阶段的输出就是后一阶段的输入,只有前一阶段的输出正确,后一阶段的工作才有可能获得正确的结果。
2.推迟实现
实践表明,编码开始得越早完成开发工作所需要的时间反而越长。
3.质量保证
各阶段都必须完成规定的文档。完整、正确、合格的文档不仅是软件开发时期各类人员之间相互通信的媒介,也是软件维护的重要依据。
各阶段结束前都要对所完成的文档进行评审,以便及时发现问题,改正错误。
缺点:
(1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
(2) 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,不适应需求变化,从而增加了开发的风险。
(3) 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。