第一章
软件
操作系统本身就是一个软件,一个系统可以理解为系统软件。
什么是软件?
- 软件是计算机系统的“思维中枢”,它与计算机硬件相互作用,互相配合,从而实现了特定的系统功能。
软件的组成
- 计算机程序:人们为了完成特定的功能而编制的一组指令集。
- 数据:程序能处理的具有一定数据结构的信息。
- 软件文档:与程序的开发、维护和使用有关的图文资料,如软件开发计划书、需求规格说明书、设计说明书、测试分析报告和用户手册等。
软件的特点
-
软件是一种逻辑实体;软件是抽象的、无形的,没有物理实体,但可以记录在介质上。
-
软件是人类智力产品。
-
软件开发过程复杂。
-
软件需要长期维护。
-
软件成本昂贵。
-
大量脑力劳动。
-
具有可复用性。(软件可以复制。)
-
不可见性。
-
使用过程中不会磨损
-
开发和运行依赖于特定的计算机系统环境。
软件的分类
按照功能:系统软件、支撑软件、应用软件。
按照软件服务对象:通用软件、定制软件。
按照软件产品规模:小型软件、中型软件、大型软件。
按照工作方式:实时软件、分时软件、交互式软件、批处理软件。
软件发展阶段
-
世界上第一台计算机——埃尼阿克,诞生于1946年。
-
1.个体生产时期(40年代后期—60年代初)
-
特点:
- 软件 = 程序
- 开发者、使用者、维护者“三体合一”
- 特重视编程技巧、运行效率
- 用途专一
-
弊端:
- 程序结构性差、他人难读懂
-
-
2.软件作坊时期(60年代初—70年代初)
- 特点:
- 软件 = 程序 + 说明
- 多人分工协作编程
- 软件商品化、出现通用软件
- 进步:
- 程序的规模和复杂性增加
- 对程序加注解说明、可读性提高
- 弊端:
- 对编程者没有一定的约束规范
- 编程者之间交流很有限、各自为政
- 缺乏管理体制和技术
- 从质量、数量都难满足实用要求
- 60年代末爆发“软件危机”!!!
- 特点:
-
3.软件工程时期(70年代—至今)
- 特点:
- 软件 =程序+数据+文档
- 开发、维护软件!
- 大型、复杂软件、软件产业出现!
- 软件进入社会各行业、进入家庭!
- 进步:软件生命周期、建立工程的观念
- 强调工程原则:
- 可读性、可理解性、可测试性、可修改性
- 软件开发模型
- SA-SD方法
- 技术审查和管理复审
- 特点:
软件危机
什么是软件危机?
软件危机是指在计算机软件开发和维护时所遇到的一系列问题。
软件危机主要包含两方面的问题:
- 如何开发软件以满足软件日益增长的需求;
- 如何维护数量不断增长的已有软件。
软件危机的表现
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
软件危机的主要表现如下:
- 开发人员开发的软件产品不能完全满足用户的需求
- 软件产品的质量难以得到保证
- 软件产品的开发周期、开发经费和维护费用很难估计
- 软件产品不能适应环境的改变,难以满足市场的要求
- 软件文档不完备,文档内容不相符
软件危机的原因
- 软件开发需要用科学的工程化的思想来组织和指导软件开发的各个阶段。
- 没有完善的质量保证体系。
- 软件文档的重要性没有得到足够重视。
- 从事开发的专业人员对软件产业认识不充分,缺乏经验。
- 软件独有的特点给其开发和维护带来困难。
软件工程
什么是软件工程?怎样利用软件工程消除软件危机?
- 软件工程是指导计算机软件开发和维护的一门工程学科。它以“工程化”的思想来开发与维护软件。
- 利用软件工程消除的方法:
- 彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念。
- 必须组织良好、严格管理、各类人员协同配合,共同完成。
- 充分认识到软件开发不是某种个体劳动的神秘技巧;
- 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好的更有效的技术与方法。
- 应该开发和使用更好的开发工具。
- 先进的技术措施(方法和工具),科学的组织管理措施。
为什么要提出软件工程?
一、软件工程 = 软件 + 工程
二、软件危机
三、软件工程 = 工具 + 方法 + 过程
软件工程对软件开发有什么帮助呢?
1.软件工程就是为了软件开发和危机应运而生的
2.软件工程交给我们的是一种开发软件的思维,并非是开发一个软件的实操,通常是给予我们软件开发过程的模型,如瀑布模型、快速原型模型、增量模型、喷泉模型等等。
3.学习软件工程可以使得编程人员在开发软件的过程中更加规范化,以便后续软件的修改和优化。
4.软件工程可以使得在软件开发变得有组织性和提高有效性,提升开发的效率。
5.软件工程是完成软件开发工作中的核心主线,是高质量、进度可控、成本可控地完成软件生产过程的支撑,软件工程将需求、设计、开发、测试等工程科学规范地串联起来、高效地驱动各环节传递与传承。
软件工程的基本目标
(1)降低软件开发成本;
(2)满足用户要求的全部软件功能;
(3)符合用户要求,令用户满意的软件性能;
(4)具有较好的易用性、可重用性和可移植性;
(5)较低的维护成本,较高的可靠性;
(6)按合同要求完成开发任务,即使交付用户使用。
软件工程旨在开发满足用户需要、及时交付、不超过预算和无故障的软件。
软件工程由以下组成:
-
软件开发技术:包括软件开发方法学、软件工具和软件工程环境。
-
软件开发过程管理:包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。
软件工程三要素:方法、工具和过程。
软件生存周期
什么是软件生存周期?划分生存周期的主要原则是什么?分成几个阶段和几个时期,每个时期的标志性文档是什么?
- 软件从孕育、诞生、成长、成熟、衰亡的生存过程,即一个软件产品从被提出开始研制到软件最终被废弃不再使用为止的全过程。
- 主要原则是各阶段的任务尽可能相对独立,对同一阶段各项目任务的性质尽可能相同。
- 三个时期:计划时期、开发时期、运行时期。
- 六个阶段:
- 制定计划:《可行性研究报告》、《项目计划书》
- 需求分析:《需求规格说明书》
- 软件设计:《概要设计说明书》、《详细设计说明书》
- 程序编码:《源程序清单》
- 软件测试:《软件测试计划》、《软件测试报告》
- 运行维护:《改正性维护》、《适应性维护》、《完善性维护》
软件开发模型
软件的开发模型主要有哪些,每个开发模型的特点是什么?
-
瀑布模型
- 特点:
- 上一阶段的变换结果是下一阶段的变换的输入,相邻两个阶段具有因果关系,紧密相联。
- 是一种基于里程碑的阶段过程模型。
- 强调软件开发过程的阶段性。
- 是一种线性的软件开发模型,回溯性很差。
- 特点:
-
快速原型模型
- 特点:用户一直参与,不断改进,系统边做边改。
-
增量模型
- 特点:
- 分批地逐步向用户提交产品,能在较短的时间内向用户提交可完成部分工作的产品。
- 逐步增加产品功能,可以使用户有较充裕的时间学习和适应新产品。
- 不同的构件将可以并行开发,可能能加快项目的进度。
- 特点:
-
螺旋模型:该模型通常用来指导大型软件项目的开发,它将开发划分为制定计划、风险计划、实施开发和客户评估四类活动。
- 特点:具有风险分析环节,采用循环的方式逐步加深系统定义和实现的深度,可以大大降低风险,适合用于大型复杂的系统开发。
-
喷泉模型:是一种过程模型,同时也支持面向对象开发。
- 特点:分析和设计不严格,划分阶段以对象为单位设计。
软件开发方式
软件开发方式
增量的开发方式:即分批分期的交付用户产品,通过增量开发来应对软件产品之外的不确定因素(风险)。
迭代的开发方式:迭代的思想就是当对需求还没有信心的时候,不指望构建的软件正是客户所想要的,但可以先构建后修改,通过多次反复找到真正客户需要的软件。(逐步求精)