一、软件与软件工程
1.1、软件
1.1.1、软件的概念及特点
计算机软件是由专业人员开发并长期维护的软件产品。
软件=程序+数据+文档
特点:
1)具有抽象性
2)无明显的制造过程3)存在退化问题
4)对计算机系统有着不同程度的依赖性
5)尚未完全摆脱人工的开发方式
6)软件本身是复杂的
7)成本相当昂贵
8)相当多的软件工作涉及社会因素
1.1.2、软件的分类
1.2、软件危机
1.2.1、软件危机的表现与原因
- 表现:不能按时完成任务、质量得不到保证、工作效率低下和开发经费严重超支等现象。
- 原因:人们对软件产品认识的不足以及对软件开发的内在规律理解的偏差是软件危机出现的本质原因。
1.2.2、软件危机的启示
- 软件产品是复杂的人造系
- 个人或小组在开发小型软件时使用到的非常有效的编程技术和过程,在开发大型、复杂系统时难以发挥同样的作用,不能简单的复制。
- 从本质上讲,软件开发的创造性成分很大、发挥的余地也很大。
- 计算机和软件技术的快速发展,提高了用户对软件的期望,促进了软件产品的演化,为软件产品提出了新的、更多的需求,难以在可接受的开发进度内保证软件的质量。
- 几乎所有的软件项目都是新的,而且是不断变化的。项目需求在开发过程中会发生变化,而且很多原来预想不到的问题会出现,对设计和实现手段进行适当的调整是不可避免的。
- “人月神化”现象——生产力与人数并不成正比。
1.3、软件工程
1.3.1、软件工程的概念
- IEEE对软件工程的定义为:
1)将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件
2)对1)中所述方法的研究 - 具体说来,软件工程是以借鉴传统工程的原则、方法,以提高质量,降低成本为目的指导计算机软件开发和维护的工程当科。它是一种昙次化的技术
1.3.2 、软件工程目标和原则
软件工程要达到的基本自标包括:
- 达到要求的软件功能
- 取得较好的软件性能
- 开发出高质量的软件
- 付出较低的开发成本
- 需要较低的维护费用
- 能按时完成开发工作,及时交付使用
软件工程的7条基本原则
- 用分阶段的生命周期计划进行严格的管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 软件工程结果应能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改讲软件工程实践的必要性
1.4、软件开发方法
软件开发方法是一种使用定义好的技术集及符号表示组织软件生产的过程,它的目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件。
常见的软件开发方法包括:
1)结构化方法
2)面向数据结构方法
3)面向对象方法
4)形式化方法
此外,软件开发方法还有问题分析法、可视化开发方法等。
1.5、软件工程工具
软件工程的的工具对软件工程中的过程和方法提供自动的或半自动的支持。可以帮助软件开发人员方便简捷、高效地进行软件分析、设计、开发、测试、维扩和管理等工作。有效地利用工具可以提供软件开发质量、减少成本,缩短工期,方便软件项目的管理。
软件工程工具通常有3种分类标准:
1.按照功能划分
2. 按照支持的过程划分
3.按照支持的范围划分
程序 | 软件 |
---|---|
个人开发,个人使用 | 团体开发,多用户 |
功能有限,代码行少 | 功能齐全,代码行多 |
无好的用户界面 | 用户界面友好 |
无完整的用户手册 | 完整的用户手册 |
二、软件过程
2.1、软件过程概述
生命周期模型规定了生命周期划分为哪些阶段及各个阶段的执行顺序,因此也称为过程模型。
2.2、软件生命周期
2.2.1、软件生命周期的概念
软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及产品版本的不断更新,到最终该产品被市场淘汰的全过程。
2.2.2、传统软件生命周期的各个阶段
在传统的软件工程中,软件产号的生命周期一般可以划分为6个阶段,如图所示。
2.3、软件过程模型
瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、基于组件的开发模型、统一软件开发过程模型以及敏捷模型与极限编程。
2.3.1、瀑布模型
自顶向下
- 在软件开发的过程中,需求不发生或发生很少变化,并且开发人员可以一次性获取到全部需求。
- 软件开发人员具有丰富的经验,对软件应用领域很熟悉。
- 软件项目的风险较低。
2.3.2、快速原型模型
快
快速原型模型适用于具有以下特征的软件开发项目。
- 已有产品或产品的原型(样品),只需客户化的工程项目
- 简单而熟悉的行业或领域
- 有快速原型开发工具
- 进行产品移植或升级
2.3.3、增量模型
分批次
增量模型的最大特点就是将待开发的软件系统模块化和组件化。基于这个特点,增量模型具有以下优点。
- 将待开发的软件系统模块化可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。
- 以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
- 开发顺序灵活。开发人员可以对构件的实现顺序进行优先级排序,先完成需求稳定的核心组件。
增量模型适用于具有以下特征的软件开发项目。
- 软件产品可以分批次地进行交付
- 待开发的软件系统能够被模块化
- 软件开发人员对应用领域不熟悉,难以一次性地进行系统开发
- 项目管理人员把握全局的水平较高
2.3.4、螺旋模型
瀑布模型+原型模型+风险分析
- 螺旋模型把开发过程分为制定计划、风险分析、实施工程和客户评估4种活动。
- 螺旋模型适应于风险较大的大型软件项目的开发。它的优点是将风险分析扩展到各个阶段中,大幅度降低了软件开发的风险。
2.3.5、喷泉模型
喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。
2.3.6、基于组件的开发模型
基于组件的开发模型充分的体现了软件复用的思想,降低了开发成本和风险,并加快了产品开发。
2.3.7、统一软件开发过程模型
统一软件开发过程(Rational UnifiedProcess,RUP)模型是基于UML(统一建模语言)的一种面向对象软件开发模型
2.3.8、敏捷过程与极限编程
敏捷过程概述
- 强调快捷、小文档、轻量级的敏捷开发方法开始流行。
- 通过团队成员之间充分的交流与沟通以及合理的机制来有效地响应变化。
敏捷开发4个价值观:
1)个体与交互高于过程和工具
2)可运行软件高于详尽自文档
3)与客户协作高于合同(契约)谈判
4)对变更及时响应高于遵循计划
2.3.9、极限编程
极限编程是一种实践性较强的规范化的软件开发方法,它强调用户需求和团队工作。XP特别适用于软件需求模糊且容易改变、开发团队人数少于10人、开发地点集中(比如一个办公室)的场合。
2.3.10、选择软件过程模型
在选择软件过程模型时需要考虑以下几点。
- 符合软件自身的特性,如规模、成本和复杂性等
- 满足软件开发进度的要求
- 对软件开发的风险进行预防和控制
- 具有计算机辅助工具的支持
- 与用户和软件开发人员的知识和技能相匹配
- 6.有利于软件开发的管理和控制