软件的概念:软件是程序、数据和文档三者的总和。
程序:计算任务的处理对象和处理规则的描述,处理规则一般指处理的动作和步骤
数据:处理对象是数据(数字、文字、图像、声音等)或信息(数据及有关的含义)
文档:便于了解程序的阐述性材料
软件的特点
软件是开发出来的,不是制造出来的
软件的开发和运行常受计算机系统的限制
软件是一种逻辑实体,具有抽象性
软件开发的时间和进度难以估计和衡量
软件不会磨损和老化
软件测试和维护非常困难
软件的分类
按软件功能:系统软件,支撑软件和应用软件
按服务对象:项目软件和产品软件
软件发展越来越快,规模越来越大
软件危机
软件开发进度无法预测
成本增长无法控制
软件的可靠性没有保证
软件维护费用大幅度上升
开发人员无限增多
软件产品无法满足用户要求
按工程化的原则和方法组织软件开发工作是必要的、有效的,也是摆脱软件危机的一个主要出路。
软件开发的含义
软件开发:是根据用户要求建造出软件系统或系统中的软件部分的过程。
软件开发:实现问题域中的概念处理逻辑到运行平台的概念和处理逻辑的映射。
软件开发本质:问题域到不同抽象层之间概念和计算逻辑的映射。
软件开发过程:可概括为实现问题空间的概念和处理逻辑到解空间的概念和处理逻辑之间的映射。
软件开发本质:不同抽象层之间概念和处理逻辑的抽象。
建模过程:采用数学作为建模原理,在各个抽象层之间建立模型。
软件系统各个抽象层次的模型
分层的动机:控制开发的复杂性,一个抽象层是由一组确定的术语定义的。
软件工程的起源
起源:软件工程的产生起源于软件危机
软件危机:由于软件的规模越来越大,复杂度不断增加,软件需求量增大,而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有时是花费大量人力财力,而在开发过程中就夭折了。
软件工程的产生
产生:为克服软件危机提出“软件工程”,希望用工程的方法来进行软件开发。
目的:由于软件开发的特殊性;软件开发过程是高密集性的脑力劳动,是开发过程的复杂性难以控制,软件工程顺应而生,其最终目的是要实现软件生产的自动化。
软件工程的三要素:方法、工具和过程
软件工程方法:研究软件开发“如何做”的技术。
软件工具:研究支撑软件开发方法的工具、软件工具的集成环境——计算机辅助软件工程CASE
软件工程过程:将软件工程方法与软件工具结合实现合理、及时地进行软件开发的目的。
定义:在软件工程活动中,软件工程是和管理员按照软件工程的方法和原则借助于计算机及其软件工具的帮助,开发、维护、管理软件产品的过程、称为计算机辅助软件工程CASE
软件的生命周期:是指软件产品或软件系统从生产、投入使用到被淘汰的全过程。
软件过程定义:是生产一个最终满足用户需求且达到工程目标的软件产品所需的步骤。
软件过程是工作产品构建过程中,所需完成的工作活动、动作和任务的集合。
软件过程有三层含义:
个体含义:即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程,软件管理过程等。
整体含义:即指软件产品或系统在所有上述含义下的软件过程的总体。
工程含义:即指解决软件过程的工程,它应用软件工程的原则,方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提高软件生产率,降低软件成本。
软件过程模型定义:软件过程模型也称为软件生存周期模型,它是对软件过程的一种抽象表达,是软件开发全部过程、活动和任务的结构框架,能直观的表达出软件开发的全过程,明确规定要完成的主要生命活动、任务和开发策略。
软件过程模型也称为:软件开发模型,软件生命周期模型,软件工程泛型。
瀑布模型
瀑布模型是以文档驱动的模型
下一个阶段的开始依赖上一阶段的结果
每个阶段都有与之相关的里程碑和可交付的产品
每个阶段结束前完成审查,及早改正错误、
线性模型
各个阶段之间具有顺序性和依赖性
编码阶段处于中后期具有推迟实现的特点
强调需求分析和设计的重要性
其他模块很多都是以瀑布模型为基础改进而来
瀑布模型是一种经典的、非常重要的模型
1、增加工作量
2、开发风险大
3、错误推迟发现
4、不适应需求变化
瀑布模型的适用场合:瀑布模型常常适用于需求明确且稳定、技术娴熟、工程管理较严格的场合,如军工、航天、医疗。
V模型:瀑布模型的变种
原型模型也称为原型化模型、快速原型模型
原型的类型:探索型,实验型和演化型
原型的使用策略:废弃策略进而追加策略
原型可作为单独的过程模型使用,它也常被作为一种方法或实现技术应用于其它的过程模型中。
原型模型的适用场合:客户定义总体目标集,但是并不清楚系统的具体输入和输出;或者开发者不确定算法的效率,软件与操作系统是否兼容以及客户与计算机的交互方式。
增量模型
增量和原型的异同:增量和原型都是系统的一部分,但是它们的构建原因和最终的结局不同。原型的构建是为了明确需求或验证方案,最终可能会被抛弃,而增量是实际开发过程中和整个系统的一部分。
由于没有进行整体的需求分析和体系结构设计增量可能无法集成,风险较大
增量的方式
增量模型的适用场合:适用于软件开发中需求可能发生变化、具有较大风险、或者希望尽早进入市场的项目。
螺旋模型
螺旋模型的适用场合:适用于需求不明确或者需求可能发生变化的大型复杂软件系统。也就是风险比较大的复杂软件系统。由于复杂的项目管理,简单的软件项目不建议使用螺旋模型。
螺旋模型支持面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型。
喷泉模型
基于构件的开发模型
四个阶段:需求分析、构件分析、系统设计、开发集合
Rational统一过程模型
基于面向对象方法学
适用统一建模语言UML
是用例驱动的,一体系结构为核心的、迭代的增量的过程。
敏捷软件开发
极限编程