Q: 过程是什么以及我们为什么需要一个过程
。
A: 过程就是一系列过程的集合。通常我们也翻译成流程。
人类解决复杂问题时普遍采用的一个策略就是“各个击破”, 也就是对问题进行分解然后再分别解决各个子问题。
A: 过程就是一系列过程的集合。通常我们也翻译成流程。
人类解决复杂问题时普遍采用的一个策略就是“各个击破”, 也就是对问题进行分解然后再分别解决各个子问题。
软件工程把软件生存周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发的难度。
在软件生存周期的每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结束之前都从技术方法和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量。
Q: 软件工程通常把软件开发活动划分为那几个阶段?
A: 通常我们将开发活动划分为以下几个阶段:
1. 分析
分析一般可分为两个级别
1) 系统需求分析。
因为软件总是一个大系统的组成部分,所以一开始应该建立起所有系统成分的需求,然后将某个子集分配给软件。
所做的工作包括了
a) 系统级需求的收集
b) 一小部分顶层分析和设计(用于可行性分析)
c) 战略商业级和商业领域级的需求收集。
在我现在的公司中,该工作囊括了FD和FS阶段。一般由系统工程师来负责。
2) 软件需求分析
细化软件做什么的问题。一般由系统工程师或软件工程师来负责
2. 设计
将设计从代码实现过程中独立出来可以说是一个革命性的举措。设计细化到不同的粒度也形成了不同的设计方法。
有两种不同的设计思路:
1) 完全不文档化设计,提倡代码就是设计。这是XP方法的哲学
2) 将设计尽可能的细化和文档化,通过建模工具的支持甚至可以做到代码的自动生成。
在实践过程中,大部分公司采用的是一种折中的方法:
3) 通过建模工具设计到程序概念模型的某一粒度
a) Class Diagram: 定义Class集合,囊括了程序的数据结构和软件体系结构。
b) Sequence/Interface Diagram : 定义Class之间的动态关联关系。
c) Statechart Diagram : 状态机。这个对嵌入式程序尤其重要,大部分嵌入式程序都是通过状态机来驱动的。
d) Deployment Diagram : 定义Object集合。
从我个人的经验中设计难以保证质量的原因有:
1) 设计是一种纯粹的智力活动且无法验证。无法获得代码编写那样编译调试成功的乐趣。
2) 设计很难覆盖住所有的问题,有时必须通过编码来协助思考。
3) 程序模型设计到什么样的粒度并没有一个明确的定义。
4) 编码阶段发现的设计问题无法实时反映到设计文档上,这常常使设计文档无效。
所以开发人员很容易压缩设计直接跳入到代码生成阶段。
3. 代码生成
编码&集成。
一个系统的代码往往不仅仅是一个人编写的,所以必须有一个将多个人的代码集成的阶段。
!!!软件最难是集成!!!
4. 测试
5. 维护
以上五个阶段是对软件过程的一个初步划分。这五个阶段并不是完全独立的,它们之间往往互相渗透。
eg:分析阶段通常会做一些顶层设计,而代码生成阶段做一部分测试工作也是必不可少的。
Q:什么是软件过程模型?
A:软件开发过程的一个模板。通用的软件过程模型有以下几种。
1) 瀑布模型 -- 线形顺序模型。
2) 原型模型
3) RAD模型
基于构件的快速开发方法,适合于信息系统的应用软件开发。不适合技术风险很高的情况。
4) 演化软件模型
利用一种迭带的思想方法,让软件工程师渐进的开发,逐步完善软件版本。
个人认为软件过程模型两大趋势:
1) 增量迭带
2) 并发
这两者是相互关联的,正是因为开发以增量为单位,就必须接受并发的概念。因为多个增量是不可能永远处在同一个阶段的。
A:软件开发过程的一个模板。通用的软件过程模型有以下几种。
1) 瀑布模型 -- 线形顺序模型。
2) 原型模型
3) RAD模型
基于构件的快速开发方法,适合于信息系统的应用软件开发。不适合技术风险很高的情况。
4) 演化软件模型
利用一种迭带的思想方法,让软件工程师渐进的开发,逐步完善软件版本。
个人认为软件过程模型两大趋势:
1) 增量迭带
2) 并发
这两者是相互关联的,正是因为开发以增量为单位,就必须接受并发的概念。因为多个增量是不可能永远处在同一个阶段的。