软件工程复习 第一章
第一章 软件与软件工程
软件
软件包括程序、程序的处理对象——数据,以及与程序开发、维护和使用有关的图文资料(文档)
-
特点
-
(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
-
(2)软件没有明显的制造过程
-
(3)在软件的运行和使用期间,不会出现硬件中出现的机械磨损、老化问题,然而它存在退化问题
-
(4)计算机的开发与运行对计算机系统有着不同程度的依赖性。
-
(5)软件开发至今尚未完全摆脱人工的开发方式。
-
(6)软件本身是复杂的。
-
(7)软件成本相当昂贵。
-
(8)相当多的软件工作涉及社会因素。
-
-
分类
-

软件危机
软件危机是指计算机软件在开发和维护过程中遇到的一系列严重问题
-
表现
-
(1)开发出来的软件产品不能满足用户的需求
-
(2)相比越来越廉价的硬件,软件代价过高。
-
(3)软件质量难以得到保证,且难以发挥硬件潜能。
-
(4)难以准确估计软件开发、维护的费用以及开发周期
-
(5)难以控制开发风险,开发速度赶不上市场变化。
-
(6)软件产品修改维护困难,集成遗留系统更困难。
-
(7)软件文档不完备,并且存在文档内容与软件产品不符的情况。
-
-
出现的原因
-
(1)忽视软件开发前期的需求分析。
-
(2)开发过程缺乏统一的、规范化的方法论的指导。
-
(3)文档资料不齐全或不准确。
-
(4)忽视与用户之间、开发组成员之间的交流。
-
(5)忽视测试的重要性。
-
(6)不重视维护或由于上述原因造成维护工作困难。
-
(7)从事软件开发的专业人员对这个产业认识不充分,缺乏经验
-
(8)没有完善的质量保证体系
-
-
启示:使我们更加深刻地认识到软件的特性以及软件产品开发的内在规律。
-
(1)软件产品是复杂的人造系统,具有复杂性、不可见性和易变性,难以处理。
-
(2)个人或小组在开发小型软件时使用到的非常有效的编程技术和过程,在开发大型、复杂系统时难以发挥同样的作用。
-
(3)从本质上讲,软件开发的创造性成分很大,发挥的余地也很大,很接近于艺术。它介于艺术与工程之间,并逐步向工程一段漂移,但很难发展到完全的工程。
-
(4)计算机和软件技术的快速发展,提高了用户对软件的期望,促进了软件产品的演化,为软件产品提出了新的、更多的需求,难以在可接受的开发进度内保证软件的质量。
-
(5)几乎所有的软件项目都是新的,而且是不断变化的。项目需求在开发过程中会发生变化,而且很多原来预想不到的问题会出现,适当调整设计和实现手段是不可避免的。
-
(6)“人月神化”现象——生产力与人数并不成正比。
-
软件工程
1968年,在北大西洋公约组织举行的一次学术会议上,将其定义为“为了经济地获得可靠的和能在实际机器上高效运行的软件,而建立和使用的健全的工程规则”。
IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会)对软件工程的定义为:
(1)将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。
(2)对(1)中所述方法的研究。
过程、方法和工具是软件工程的3个要素
-
软件工程研究的内容
-
(1)软件开发技术。主要研究软件开发方法、软件开发过程、软件开发工具和环境。
-
(2)软件开发过程管理。主要研究软件工程经济学和软件管理学。
-
-
目标和原则
-
(1)达到要求的软件功能。
-
(2)取得较好的软件性能。
-
(3)开发出高质量的软件。
-
(4)付出较低的开发成本。
-
(5)需要较低的维护费用。
-
(6)能按时完成开发工作,及时交付使用。
-
-
7条基本原则
-
用分阶段的生命周期计划严格管理
-
坚持进行阶段评审
-
实行严格的产品控制
-
采用现代程序设计技术
-
软件工程结果应能清楚地审查
-
开发小组的人员应该少而精
-
承认不断改进软件工程实践的必要性
-
-
15个知识领域
-
软件需求
-
软件设计
-
软件构建
-
软件测试
-
软件维护
-
软件配置管理
-
软件工程管理
-
软件工程过程
-
软件工程模型和方法
-
软件质量
-
软件工程职业实践
-
软件工程经济学
-
计算基础
-
数学基础
-
工程基础
-
软件开发方法
-
结构化方法
-
面向数据结构方法
-
面向对象方法
-
形式化方法
软件工程工具
-
(1)按照功能划分:功能是对软件进行分类最常用的标准,按照功能划分,软件工程工具可分为可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具等。
-
(2)按照支持的过程划分:软件工程工具可分为设计工具、编程工具、维护工具等
-
(3)按照支持的范围划分:软件工程工具可以分为窄支持、较宽支持和一般支持工具。窄支持工具支持软件工程过程中的特定任务,一般将称之为工具;较宽支持工具支持特定的过程阶段,一般由多个工具集合而成,称之为工作台;一般支持工具支持覆盖软件过程的全部或大部分阶段,包含多个不同的工作台,称之为环境。