1. 什么是软件?
定义:软件是多种术语和对象的集合,并将这些术语和对象有效的配置在一起。一般包括程序,文档和数据。
-
特点
1)软件是被工程化的逻辑系统
2)软件一般没有磨损
3)软件具有不同于一般实物系统的复杂性 -
分类
传统分类:系统软件,应用软件,工程和科学软件,嵌入式软件,专用产品软件,Web应用软件,人工智能软件
现代分类:随处计算软件,网络源软件,开源软件,数据挖掘,网络计算,认知机器,软件新经济研究(电子商务技术),SOA
一般来说,电脑软件划分为编程语言、系统软件、应用软件和介于这两者之间的中间件。其中系统软件为电脑使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。
- 软件危机
是指软件生产率、软件质量远远不能满足社会发展的需求,成为社会、经济发展的制约因素的现象。表现在开发周期长,成本高,质量差,适应性差和难以维护等方面。
解决途径
> 首先,应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误概念,软件应该是程序、数据以及相关文档的完整集合;
> 其次,充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是各类人员协同配合,共同完成的工程项目,要有良好的组织、严谨的管理;
> 再者,推广和使用在实践中总结出来的成功软件开发技术和方法,并且研究探索更好、更有效的技术和方法;
> 最后,应该开发和使用好的软件开发工具,从而有效地提高软件的生产效率
- 问题
客户不满意/风险与成本/项目过程失控/无法管理团队
出现的原因:客观上是软件产品开发的复杂度和难度随着软件规模呈指数级别的增长;主观上是软件开发人员缺乏工程性的,系统性的方法论。
- 对软件管理者:通用的程序可满足开发需求;开发周期延后可以通过增加人手;从第三方采购软件项目等
- 对软件用户:项目需求不断地在改变;对需求描述后细节由开发人员在开发过程中完善等
- 对开发者:完成编写成功上线就算是完成任务;不注重文档的编写;软件的好坏只有完成之后才知道等
- 遗留软件与软件进化
2. 什么是软件工程?
是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度实现满足用户需求的软件产品的工程,或以此为研究对象的学科
提出软件工程概念的目的: 倡导以工程的原理、原则和方法进行技术开发,以解决出现的软件危机
- 三个要素
- 过程:规定完成各项任务的过程--软件生命周期
- 方法:完成软件开发的各项任务的技术方法
- 工具:软件工程的支撑环境
- 软件工程方法学/范型
- 传统方法学/生命周期方法学/结构化范型(常用)
- 采用结构化技术完成软件开发的各项任务。(前一个任务的完成是后一个任务的前提和基础)
- 面向对象方法学(常用)
- 面向方面的软件工程方法
- 面向方面就是对软件组件做垂直分解,提取具有交叉性的功能和非功能属性,建立方面。一些公共的系统方面有:用户接口,协作工作,分布,内存管理等。
- 面向组件的软件工程方法
- 结合了一些螺旋模型的特性,基于组件的开发模型主要目的是对现有组件对象的复用
- 面向Agent的软件开发方法
- 敏捷软件工程开发方法
- 传统方法学/生命周期方法学/结构化范型(常用)
3. 什么是软件过程?
软件过程:生产一个最终满足需求并且达到工程目标的软件产品所需的步骤。
软件过程框架:封装一些阶段性行为,并将这些行为普遍应用到各类软件项目中而不需要考虑项目的大小和复杂性等。
雨伞行为:软件过程中存在一些始终贯穿整个软件过程的雨伞行为主要表现有:
1)软件项目的跟踪和控制
2)风险管理
3)软件品质保障
4)形式化技术分析
5)软件度量
6)软件配置管理
7)重用管理
软件过程模型:说明性过程模型和敏捷过程(增量模型)模型两类。
- 瀑布模型(说明性过程模型)
- 概念:最广泛使用的生命周期模型
- 特点:从高到低,从前向后逐步一个阶段一个阶段产生,是一个结构化的模型
- 阶段间的顺序性和依赖性/推迟实现/质量保证
- 增量模型
- 概念:软件产品作为一系列的增量构件来设计,编码,集成和测试。
- 特点:分批向用户提交产品,整个产品软件被分解为许多个增量构件。
- 螺旋模型
- 概念:使用原型及其它方法来降低风险。每个阶段前都加了风险分析过程的快速原型模型。
- 特点:适用于内部开发的大规模软件项目;风险驱动
- 面向对象的RUP(Rational统一过程)模型--喷泉模型
- 特点:体现了面向对象软件开发过程迭代和无缝的特性
- RUP软件开发生命周期:二维的生命周期模型,纵轴代表核心工作流,横轴代表时间
4. 什么是软件的生命周期?
由软件定义,软件开发,软件维护三个时期组成。
软件定义时期:
1)问题定义
2)可行性研究
3)需求分析软件开发时期:
1)总体设计
2)详细设计
3)编码和单元测试
4)综合测试软件维护时期:
5. 什么是敏捷开发?
简单来说就是先开发,在开发的过程不断完善,是一个增量模型。敏捷软件过程包括:
1) 以客户描述的需求内容为驱动
2) 充分认识到计划都是短暂的
3) 使用迭代方法重点强调结构行为
4) 采用多样的软件增量行为
5) 适应变化的发生
6. 什么是极限编程?
是敏捷软件开发的一种最广泛使用的方式,其主要针对的是面向对象的开发方法。主要包括四个一般性框架:计划,设计,代码和任务。
-
与传统方法的区别:极限编程的核心活动体现在需求→测试→编码→设计过程中。因此适用于规模小、进度紧、需求变化大、质量要求严的项目。它希望以最高的效率和质量来解决用户目前的问题,以最大的灵活性和最小的代价来满足用户未来的需求。