软件开发过程

软件开发过程
软件开发过程

软件开发过程

现代社会正变得越来越复杂,随之出现的问题也变得复杂了,这样解决问题就成一种生活方式。比如固体废料处理、全球变暖、国际金融、污染、核扩散等问题就是出现时间不长的新问题,该如何解决这些问题是对人类技术和能力的挑战。

大多数问题的解决方案要求考虑周全的计划,并需要预先考虑解决方案是否适当的和有效的。对于大多数程序设计的问题,需要考虑的因素也是如此。例如,通过反复试验为移动电话网络编写软件或者为百货公司创建管理程序的过程就

是如此。这样一个解决方案最好的结果是费用昂贵但效果良好,最坏的情况是损失惨重,脱离现实。

每一个研究领域都有器用于设计这些问题的解决方案所使用的系统方法的

命名规则。在科学界,这种方法称为科学方法,而在工程学科中,这种方法称为系统方法。为了理解需要解决的问题和为建立一个有效的且适当的软件解决方案,专业软件开发人员使用一种称为软件开发过程的方法。这个过程由下列四个阶段组成。

阶段1:确定程序的要求

阶段2:设计和开发

步骤1:分析问题

步骤2;选择一个完整的解决方案算法

步骤3:编写程序

步骤4:测试和修正程序

阶段3:文档编制

阶段4:维护

前三个阶段经常改进并相互影响,直到最终设计和程序被开发出来为止。而且在设计和开发阶段,你可能会发现问题没有被完全明确或分析,需要在初期的步骤做进一步的工作,以完成程序。每一个都将在下面的段落中讨论。

阶段1:确定程序的要求

这个阶段以问题的陈述或对程序的特定要求开始,称为程序的要求。你的任务是确保程序的要求被明确的陈述,而且要理解期望达到的目标是什么。例如,假设你收到一封来自主管的简短邮件,邮件内容是说我们需要提供一个关于圆的信息的程序。

这不是一个定义清楚的要求,他没有明确说明一个良好定义的问题,因为它没有准确地告诉我们要求什么信息。立即开始编写程序去解决这个缺少明确表达的问题将是一个严重的错误。为了弄清楚和定义这个问题的陈述,需要做的第一步是向主管咨询准确的定义要产生的信息是什么以及能够提供的数据是什么。

假设你咨询了主管,并且知道升级想要的是计算和显示一个给定半径时求圆的周长的程序。只有在你了解了什么是一个清楚的陈述时,才可以进行下一步。

阶段2:设计和开发

一旦程序的详细说明已完成,形成程序设计过程核心的设计和开发阶段就可以开始了。这个阶段由下列四个步骤组成。

步骤1:分析问题。这个步骤要求确保问题事实上已经被清楚地说明和理解,并且已经为选择这个问题的算法提供了必要的信息。只有在你理解了下列内容时,这个问题才能被清楚的定义。

1.必须产生的输出

2.产生预期的输出所要求的输入数据

3.体现输入与输出之间的联系的公式

分析完成时,这三项中的每一项都必须清楚的定义。

在执行分析阶段,许新程序员喜欢首先确定数据,而在以后确定想要的输出,专业程序员则倾向于相反的工作方式。忽略输入而首先思考输出似乎对你来说有些奇怪,但输出是构造一个程序的首要的全部目的。知道了这个目的并将它牢记在心,能使你将精力集中于程序的重要方面。但是,如果你觉得一开始就确定输入数据会更轻松些,也可以这样做。

步骤2:选择一个完整的解决方案算法。这一步是确定和选择一个解决问题的算法。有时候确定完整的解决方案的算法相当容易,有时候它可能是复杂的。例如,确定某人口袋里零钱的数量或者确定一个矩形的面积的程序相当简单。但是,制造业公司的库存跟踪和控制系统的设计就比较复杂。在那些更完整的例子中,最初的解决方案的算法典型的被改进和被细化,直到这个算法极为详细地指明全部的解决方案为止。这个细化的例子稍后将在本节中提及。

在最普通的形式中,一个可应用于大多数C语言程序的完全的解决方案算法是:

获得问题的输入

计算期望的输出

报告计算的结果

这三个任务几乎是每个问题的主要责任,我们把这个算法称为问题解算机算法。例如,假设要求你用一个已给定的半径计算圆的周长,这个问题的解算

机算法就变成:

设置半径值r

使用公式C=6.28r,计算周长C

显示C的计算值

对于只需执行一个或几个计算的小的应用,通常这个问题解算机算法本身就足够了。对于较大的程序,则必须将它组编成较小的算法,以使这些较小的算法能相互连接并能明确地细化最初的算法。下面将描述细化的完成过程。

细化算法。对于较大的应用,最初的解决方案算法典型地从问题解算机算法开始,必须细化并组织成较小的算法,以指明这些小算法相互之间是如何衔接的。要达到这个目的,解决方案的描述必须从最高级要求开始,并向下逐步细化到必须被构造的部分。为了便于理解,假设有一个要求跟踪库存零件数量的计算机程序。这个程序所要求的输出是描述库存的全部零件和每种零件的数量,输入是每种零件最初的存货总量、已销售的量、退回的量和新采购的量。

程序设计者最初可能把这个程序的全部解决方案算法组编为如图1.18下半部分所示的三个问题解算机算法部分。这称为算法的一级结构图,因为它表示了最初的、还不够足够详细的、用于一个解决方案算法的结构的首次尝试。

一旦开发了一个最初的算法结构,你就能把它细化,直到这些方框中表示的任务完全被定义为止。例如,图1.18中的数据输入部分应该进一步细化到指定的输入数据的规定。由于为不可预见性的和人为的错误做规划是系

统设计人员的责任,因此还必须为修改已经输入的不正确的数据和删除前面输入的数值定义某些规定。报表部分的细化也类似。

图1.19表示的是进一步细化了的库存跟踪系统的二级结构图。

图1.18 一级结构图

注意这种设计将产生一种树形结构,当我们从这个结构的顶部移动到底部时,这些级的分支就体现出来了。当设计完成时,在较低的方框中所设计的任务典型的代表了一些简单算法,这些简单算法被结构中较高的算法所使用。这种类型的算法开发方法称为自顶向下的算法开发,它从顶端开始,在它向下达到最后一组算法的过程中,会开发出来越来越多的详细算法。

步骤3:编写程序。这个步骤是将选定的解决方案算法翻译为C语言计算机程序。这个过程也称为编码算法。

图1.19 二级细化结构图

如果分析和解决方案步骤已经正确完成,编写程序的过程本质上就有些

机械了。但是在一个设计良好的程序中,组成程序的语句应该遵守已经在解决方案步骤中定义的某些定义良好的结构,这些结构控制程序的执行并由下列类型组成。

1.顺序

2.选择

3.反复

4.调用

顺序定义了程序执行指令的次序。它指明了指令将用它们在编码中出现的次序执行,除非被其他结构的指令明确的改变了。

选择提供了根据某个条件式的结果在不同的指令间进行挑选的能力。例如,在执行除法之前必须检查作为被除数的数字的值。如果这个数字是0,除法将不能执行并且将给用户发布一个警告信息,数字不为0时可执行除法。选择操作及它在C语言中的编码方法在第四章介绍。

重复,也称为循环和反复,提供根据某个条件式的值重复地执行某些操作的能力。例如,学生的考试分数可能被重复地输入和相加,直到一个负的分数输入时为止。在这个例子中,负分数的输入是表示分数重复输入和相加的结束条件。在这一位置,所有输入的分数的平均值的计算能够执行。重复操作和它们如何在C语言中被编码将在第5章介绍。调用,即在需要时运行指定的代码段。调用操作和它们如何在C语言中被编码将在第6章和第7章介绍。

步骤4:测试和修正程序。测试的目的是验证程序是否运行正确并实际达到它的要求。理论上,测试应该揭露所有存在的程序错误。在计算机术语中,程序的错误称为bug。实际工作中,程序测试要求检查所有可能的语句执行的组合。

由于所要求的时间和效果,这通常是一个不可能达到的目标,除非是极简单的程序。

对大多数程序而言,彻底的测试完全是不现实的。由于这个原因,各种测试方法学逐渐发展起来。在这些方法的最基本层面,测试应该包括一个有意识的、能够确保程序正确运行和产生有意义的结果的效果。必须仔细思考这个测试想要达到的目标以及你在这个测试中将使用什么样的数据。如果测试揭露了一个错误,就必须着手调试程序,包括定位、纠错和验证这个纠错。重要的是,要认识到虽然测试可能揭露错误的存在,但并没有指明错误不存在。于是,虽然一个测试揭露了一个bug,但是这个事实并不表明另外的bug没有潜伏在程序中。

为了捕捉和修正程序中的错误,首要的是开发一组确定这个程序是否给出正确答案的数据。事实上,在正式的软件测试中,一个可接受的步骤是在编写代码之前规划这个测试过程和建立有意义的测试数据,这有助于程序员更加客观的理解这个程序必须做什么。这个测试应该检查一个程序将被使用的每一种合理的情形。这意味着测试应该使用在可接受的限制范围内的数据、在合理范围内的数据、使用程序应该检测和报告为无效数据的数据。事实上,开发优良的验证测试和使问题更加复杂的数据可能比编写这个程序本身的代码更加难一些。

阶段3:文档编制

实践中,大多数程序员在完成编程工作之后几个月就会忘记程序中许多细节。如果他们或其他程序员以后必须对程序进行修改,重新理解这个原来的程序时如何工作的就可能需要许多宝贵的时间。良好的文档编制能防止这种情况的发生。

这样多的工作变得无用或者丢失,这样多的任务必须重做,都是因为文档编制不完全,从而证明了文档编制时解决方案中最重要的步骤。实际上,有许多关

键的文档需要在分析、设计、编码和测试过程中建立。完整的文档编制要求收集这些文档、增加附加的材料和对你或你的机构最有用的形式呈现它。

虽然,并不是每个人都用相同的方法把这些文档分类,但用于每个问题的解决方案基本上包含6个关键的文档。

1.要求陈述

2.将编码的算法描述

3.程序代码内的注释

4.按时间所做的修改和更改的描述

5.样本测试运行,包括每次运行使用的输入和获得的输出

6.用户手册,怎样使用这个程序的详细说明

一个大机构的团队中任何可能使用你的程序作品的人的换位思考——从秘书到程序员再到用户——将有助于使重要的文档的内容和设计更清楚。文档编制阶段从阶段1正式开始,一直延续到维护阶段。

阶段4:维护

这个阶段的重点是问题更正、修改程序以满足变化的需求以及增加新的特点。维护经常是主要的阶段、主要的收入来源和最持久的工程阶段。软件可能花几天或几个月的时间,而维护可能要进行几年或几十年。文档的编制的越好,维护阶段就越有效,客户和用户将越高兴。学生们通常会觉得奇怪,因为他们习惯于解决一个问题并继续转向一个不同的问题。但是,商业和科学领域不这样操作。在这些领域,一个应用或一个概念典型地建立在一个前面的应用之上并可能要求几个月或几年的工作。这在程序设计中尤其如此。一个应用程序可能花了几周或几个月的时间编写,当需要新的特点时,维护可能持续好几年。由于通信、网络、

光纤和新的图形显示技术的发展,经常需要更新软件产品。

程序怎样能够容易的维护(修正、修改或者增强),与程序能够不费力的阅读和理解有联系。正如你已经知道的一样,这取决于程序在设计时的关注程度和高质量文档编制的可用性。

备份

尽管不是正式的软件开发过程的一部分,但在编写程序时制作何保留作品的复制品是最重要的。在修订程序的过程中,你可以容易的把程序的当前工作版本修改得面目全非。备份复制品能使你用最小的努力恢复最近时期的工作。一个有用的程序的最终工作版本至少应该备份两次。在这一点上,另一方有用的程序设计习惯用语是:“如果你不介意重新开始,备份是不重要的”。维护程序的三个基本规则是:

1.备份!

2.备份!!

3.备份!!!

大多数机构至少保持一份备份在能够获取的地方,而把另一份备份放在防火保险箱中或放在遥远的地方。

案例研究:设计和开发

这一节将把软件开发过程的设计和开发阶段应用到下面的程序要求。

圆的周长C可由公式C=6.28r确定,r是圆的半径。利用这个公式,编写一个C程序,计算半径为2英寸的圆的周长。

步骤1:分析问题

这一步验证这个程序说明的完整性,并证实我们已对所要求的东西有完全的理解。

1.确定期望的输出。在确定期望的输出过程中,应关注要求陈述中类似计算、打印、决定、查找或比较这样的表述。对于上面的样本程序的要求,关键的短语是计算圆的周长,这确定了一个输出项目。由于这个问题没有其他的类似短语,只有一个输出被要求。

2.确定输入项目。在明确地确定期望的输出之后,必须确定所有的输入项目。在这一阶段,区分输入项目和输入值之间的差别是重要的。输入项目是输入量的名称,而输入值是能够用做输入项目的特定的数字或数量。例如在我们的程序要求中,输入项目是圆的半径。虽然在这个问题中这个输入项目有一特定的数字量,实际的输入值在这一阶段是不重要的。

在这一点上输入值是不需要的,因为输入和输出之间的关系典型地不取决于特定的输入值。公式取决于明确的输出和输入以及是否存在明确的限制。应注意输入和输出之间用公式表达的关系是否正确,而不必考虑任何赋给输入项的特定的值。尽管没有特定数值的输入项目不能产生一个实际的输出项目数值,但是输入和输出之间的正确关系可由相关的公式表达,这个公式接下来将列出。

3.列出相关输入和输出的公式。最后的步骤是确定如何根据输入建立输出,这由已知的输出和输入之间的公式回答。在本例中,这个关系由C=6.28r提供,式中C是输出项目,r是输入项目。还要明白这个公式不要求列出特定的输入值,只是确定输出与输入项之间的关系。

如果你不清楚如何从给定的输入获得所要求的输出,则可能需要更清楚的需求陈述。换句话说,你需要获得关于这个问题的更多信息。

4. 执行手工计算。有了列出的公式,下一步骤是用特定的输入值来检查这个公式。用手工或计算器执行一个人工计算有助于确保你真正理解这个问题。一个人工计算的另外的特点是这个结果以后能够用在测试阶段中验证程序的运行。然后,当最终程序用其他数据运行时,你就有足够程度的自信,相信正在计算的是正确的结果。

在这一步,我们需要能够赋予公式所使用的输入项目的特定的输入值,以产生期望的输出。对于这个问题,存在一个输入值:半径r为2英寸。把这个值代人公式,我们获得这个圆的周长C=6.28r=12.56英寸。

步骤2:选择一个全面解决方案的算法

在前面的段落中介绍的一般问题解算机算法是:

获得问题的输入

计算期望的输出

报告计算的结果

为了确定圆的周长,这个算法变成:

设置半径值r为2

使用公式C=6.28r,计算周长C

显示C的计算值

步骤3:编写程序

程序1.1展示的是计算一个半径为2英寸的圆的周长的代码。因为我们还没有介绍C语言,这个程序对你来说可能不太熟悉,但是你应该能够理解关键的行正在做什么。为了帮助理解,在程序中添加了行号。这些行号从来就不是C 程序的一部分,但为了易于区分不同的C语句,将总是插入行号。

在本例中,程序遵循一个顺序次序,在这里每一个语句用严格的顺序次序一个接一个地执行。但是为了帮助你理解它,注释(也就是符号/*和*/之间的文本)已经包含在行号为5,7和8的语句中。虽然所有的程序行将在下一章才全面地解释,但是现在我们只需注意这三行并使用这些注释把这些行与分析阶段选择的算法相联系。

在行号5中,定义了由这个程序使用的名称radius和circumference。这个程序没有对这些名称附上任何的意义(例如名称r和c,x和y,或者in和out 都同样可以定义),但是应该总是选择更多的描述性的和对实际问题有些含义的名称。在行号7中,赋给了名称radius一个数值,而在行号8中,一个名为circumference的项目进行了计算。最后在行号9中,输出circumference的值。

程序1.1

1 #include < stdio.h >

2

3 int name ()

4 {

5 float radius, circumference; /* declare an input and output item */

6

7radius =2.0;

8circumference =2.0 * 3.14 *radius;

9printf (“The circumference of the circle is %f\n”, circumference);

10

11return 0;

12}

当执行程序1.1时,产生下列输出:

The circumference of the circle is 12.56

步骤4:测试和修正程序

因为只有一个计算由这个程序执行,测试程序1.1实际上意味着验证这个输出是否正确。因为这个输出与我们前期的手工计算相符,我们现在能够使用这个程序用不同的半径计算圆的周长,并且将自信这个结果是正确的。

常见编程错误

学习任何编程语言的人正在犯一些基本的错误,而这些错误在你之前其他刚入门的程序员也同样犯过。每一种语言都有它自己的一组常见编程错误在等待你的粗心大意,这些错误往往使人感到十分失望。与这一章介绍的材料相关的最常见的错误如下:

1.没有花足够的时间研究问题或者没有花足够时间设计合理的算法就匆忙去编

写代码、运行程序。在这一点上,记住一条编程习惯用语是非常有用的“没有充分理解某个问题就不可能设计一个成功的程序”。一个类似的和等价的习惯用语是:“对应用进行编程所花的时间越短,通常调试和编译用的时间就越长”。

2.忘记备份程序。几乎所有的新程序员都会犯这个错误,直到他们丢失一个花

费了大量时间编码的程序为止。

3.不理解计算机只响应明确定义的算法。告诉一台计算机加一组数字与告诉一

个朋友加这些数字完全不同。计算机只接受用编程语言描述的加法的精确指令。

if-else 语句

if-else语句引导计算机根据比较结果选取一个以上的指令序列。例如,如果新泽西州居民收入少于20000美元,适应州收入税率是2%,如果个人的收入大于20000美元,对超过20000美元的部分应用不同的税率。在这种情形中能够使用if-else语句确定基于毛收入是否少于或等于20000美元的实际收入的实际税额。最常用的if-else语句的形式是:

if (表达式)

语句1;

else

语句2;

首先计算表达式的值,如果表达式的值为非0,相当于这个表达式为真,执行语句1,如果这个值为0,则执行语句2——保留字else之后的语句。这样两个语句之一总是取决于表达式的值来执行。注意这个被测表达式必须放入括号中,而分号只放在每个语句的终止处。

程序4.2

1#include

2#define LOWRATE 0.02

3#define HIGHRATE 0.025

4#define CUTOFF 20000.0

5#define FIXEDAMT 400

6

7int main()

8{

9float taxable, taxes;

10

11printf(“please type in the taxable income:”);

12scanf (“%f”, &taxable);

13

14if (taxable <=CUTOFF)

15taxes = LOWRATE*taxable;

16else

17taxes =HIGHRATE*(TAXABLE –CUTTOFF) +FIXEDAMT; 18

19printf(“Taxes are $%7.2f\n”, taxes);

20

21return 0;

22}

软件开发过程详解

软件开发过程详解 软件开发过程即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。 生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件开发过程覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。 1.需求分析 1.1 需求分析的特点和任务 需求分析是软件开发的第一步。获取需求的一个必不可少的结果是对项目中描述的客户需求的普遍理解。一旦理解了需求,分析者、开发者和客户就能探索出描述这些需求的多种解决方案。参与需求获取者只有在他们理解了问题之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工。把需求获取集中在用户任务上—而不是集中在用户接口上—有助于防止开发组由于草率处理设计问题而造成的失误。有几种原因使需求分析变得困难:(1)客户说不清楚需求;(2)需求自身经常变动;(3)分析人员或客户理解有误。 需求获取、分析、编写需求规格说明和验证并不遵循线性的顺序,这些活动是相互隔开、增量和反复的。当你和客户合作时,你就将会问一些问题,并且取得他们所提供的信息(需求获取)。同时,你将处理这些信息以理解它们,并把它们分成不同的类别,还要把客户需求同可能的软件需求相联系(分析)。然后,你可以使客户信息结构化,并编写成文档和示意图(说明)。下一步,就可以让客户代表评审文档并纠正存在的错误(验证)。这四个过程贯穿着需求分析的整个阶段。需求获取可能是软件开发中最困难、最关键、最易出错及最需要交流的方面。需求获取只有通过有效的客户—开发者的合作才能成功。分析者必须建立一个对问题进行彻底探讨的环境,而这些问题与产品有关。为了方便清晰地进行交流,就要列出重要的小组,而不是假想所有的参与者都持有相同的看法。对需求问题的全面考察需要一种技术,利用这种技术不但考虑了问题的功能需求方面,还可讨论项目的非功能需求。确定用户已经理解:对于某些功能的讨论并不意味着即将在产品中实现它。对于想到的需求必须集中处理并设定优先级,以避免一个不能带来任何益处的无限大的项目。 1.2.需求分析的一般方法

软件开发流程

快视信息软件开发流程规范: 用户需求:软件项目首先由客户经理(CM,Custom Management)接洽客户的较大的需求。这时的需求叫市场需求(或叫用户需求),客户经理会进行各个项目的安排,即对项目的启动时间和发布时间进行规划和设置。 项目经理(PM,Project Management)对客户经理负责。项目经理的需求是根据客户经理给的,项目经理不和用户(客户)直接接触(通过客户经理接触),负责和用户进行需求洽谈和沟通的是客户经理。一个项目的需求在一般情况下是不准变更的,如果有需求理解方面的不清楚可以进行沟通,但是需求是不变更的。如果用户有新的需求,一般规划在下一个版本中。因为需求变更了,这个目的时间就要进行调整,就不能按计划进行和完成。客户经理提交给项目经理的是需求规格说明书。 一、项目开工会 在项目经理领到客户经理分配给的需求后,做项目计划,具体做项目人员的确定、需求的分解(需求分解到每个人)、代码量的估计,项目各个阶段时间的划分和工作量的计划、质量指标的设定。这时项目经理需要输出的文档是项目需求分解任务书、项目计划PPT、及做好整个项目需要填写的一系列表格。然后组织项目组成员和客户经理CM、QA(质量审计经理)进行项目开工会。这时这个项目就算真正启动,计算工作量时,即计算这个项目总共花了多少个工时,工时是项目经理做计划的时间也算在内,再加上项目开工会和后续各个阶段总共花的总工时数,还有各个阶段开会所花的时间。在项目开工会上,各个成员就明确了这个项目是属于增强型项目,还是其他项目的项目性质,增强型项目的意思是说在原来上一版本的基础上又根据新的需求进行增强型开发。还有要明确项目最后开发出的新增代码量有多少,最后要明确每个人的需求任务,接下来着手进行SRS的写作。 二、SRS阶段:System/Software Requirment Specification 软件需求规格说明 在项目开工会后,项目组就开始按照在项目开工会上项目经理的需求任务分解的任务开始进行SRS的写作。 一般项目经理给你的一个子需求任务,你这时需要分解为更小的需求。一般一个需求的写作是按这样进行的。先简单介绍这个需求,然后把这个需求设计成黑盒的形式,即输入,处理过程、输出。这些都需要写详细,任何一个需求都写成这种形式,输入是什么,处理过程是什么,输出结果是什么。处理过程需要用Visio或者PPT画出处理流程图,流程图要很详细。每一步的各种情况都要表示和考虑到。对异常情况也要考虑和进行处理。还有要说明在原来的基础上怎么改动,具体方法要进行说明。设计的数据库表结构,要给出脚本,SQL语句,表结构需说明每个字段,哪些是主键,你在这个需求处理过程中哪里使用了哪些表,需要进行哪些操作,都需要说明。这里需要设计和编制《数据库设计说明书》文档。该文档中描述该系统中设计出的所有的数据库表结构和各字段类型。还有多个操作对象要画序列图表示出按时序的处理过程。这个SRS文档就相当于我们平时毕业设计或者一个题目的详细设计阶段达到的水平,甚至比它更详细。每个项目组成员都把自己的需求的SRS文档写出来之后放到配置库中,然后每个人对项目组其他成员的(非自己的)SRS文档进行Review(评审),对每个SRS文档在每页发现或者纠正的错误数不能低于一定的数目,而且要保留批注记录,经过Review的(保留批注的)文档要放到配置库的Review文件夹下,这是进行项目质量指标收集的重要依据,是QA 进行调阅和审计的资料。项目经理要对SRS文档、SRS Review文档进行汇总。在汇总后组织项目组全体成员进行SRS阶段会议,对每个人写的SRS进行评审会议(讨论和提意见),对别人给你提的修改意见你要一一进行说明,说明为什么不改,怎么改的,是什么问题,问题严重程度属于什么级别,而且都要填表,也是QA进行审计的内容。开完会后如果每个人完成的都差不多,然后安排半天或者一天的时间进行返工,主要是进行修改文档,按在会上讨论的结果和别人给你的Review 文档结果(评审结果)进行准一修改和完善。然后再进行SRS阶段开会,如果都做的比较到位和具体、符合要求,即关闭SRS阶段。这时SRS阶段的花费的工时数和一些质量活动指标就出来了,比如你这个SRS文档写了几页,每页的错误数是多少,返工修改用了多少时间,然后这些这个比率也会自动计算出来。进而可以判断这个阶段的质量。每个项目组成员在每天工作完毕后都要进行Time Sheet 的填写,必须具体到半个小时,这是统计和分析的需要。填写必须真实。 三、UTP、STP阶段(UTP、STP写作) UTP Unit Test Plan 单元测试计划 STP System Test Plan

软件开发流程-论文

毕业设计(论文)题目:软件开发流程管理 班级:11工升 学号:1000303071 姓名: 指导教师: 2014年11月

从软件开发最初至今,不断地有新的软件开发技术产生,但是在软件开发能力和质量方面却始终存在达不到预计目标这一问题。每一个软件开发的最大目标,就是最大限度提高质量与生产率。而影响质量与生产率的三个关键因素:过程、人和技术,因此,我们除了提高技术能力,培养更多优质人才之外,还需要制定一套软件开发过程管理标准,并在软件开发过程中对这一标准不断地完善,以达到提高软件质量与生产率的目标。 本文结合CMM(软件过程成熟度模型),对软件开发、维护全过程进行标准化、规范化管理,制定出软件开发管理标准。 关键词:软件开发过程,管理标准

第一章软件开发的概念及目的 (4) 第二章软件开发流程划分及开发环境 (4) 2.1.软件开发阶段划分 (4) 2.2.软件开发环境需求........................... 错误!未定义书签。第三章软件开发过程中存在的问题 .................... 错误!未定义书签。 3.1.对用户方需求的掌握不全面................... 错误!未定义书签。 3.2.对软件的价值认识不清晰..................... 错误!未定义书签。 3.3.跟用户方的合作不顺利....................... 错误!未定义书签。 3.4.开发队伍的结构不合理....................... 错误!未定义书签。 3.5.软件开发管理制度不健全..................... 错误!未定义书签。 3.6.开发团队人员不稳定......................... 错误!未定义书签。第四章软件开发流程管理规范 . (10) 4.1.什么是CMM (10) 4.2.结合CMM制定开发流程管理方案 (11) 4.2.1软件项目生命周期模型................... 错误!未定义书签。 4.2.2需求分析流程图及描述................... 错误!未定义书签。 4.2.3设计流程图及描述....................... 错误!未定义书签。 4.2.4编码流程图及描述....................... 错误!未定义书签。 4.2.5测试流程图及描述....................... 错误!未定义书签。 4.2.6验收流程图及描述 (22) 第四章软件开发行业前景 (23) 参考文献........................................... 错误!未定义书签。

嵌入式Linux应用软件开发流程

从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。 但和其他通用软件相比,它的开发有许多独特之处: ·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。 ·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。模块划分则放在了任务的设计阶段。 ·在调试时采用交叉调试方式。 ·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。 下面主要介绍分析和设计阶段的步骤与原则: 1、需求分析 对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能 ·系统的输入、输出 ·系统的外部接口需求(如用户界面) ·它的性能以及诸如文件/数据库安全等其他要求 在实时系统中,常用状态变迁图来描述系统。在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。 此外,应清楚地说明人机接口,即操作员与系统间地相互作用。对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。

在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。 对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。 对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。 当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。 2、任务和模块划分 在进行需求分析和明确系统功能后,就可以对系统进行任务划分。任务是代码运行的一个映象,是无限循环的一段代码。从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。 在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:

一个完整的软件开发流程

一个完整的软件开发流程 一、开发流程图 二、过程产物及要求 本表主要列出开发阶段需要输出的过程产物,包括产物名称、成果描述、负责人及备注,即谁、在什么时间、应该提供什么内容、提供内容的基本方向和形式是什么。 三、过程说明 (一)项目启动 1、产品经理和项目干系人确定项目方向,产品型项目的干系人包括公司领导、产品总监、技术总监等,项目的话则包括客户方领导、主要执行人等。

2、公司领导确认项目组团队组成,包括产品经理、研发项目经理、研发工程师、测试团队等。 3、明确项目管理制度,每个阶段的成果产物需要进行相应的评审,评审有相应的《会议纪要》;从项目启动起,研发项目经理每周提供《项目研发周报》;测试阶段,测试工程师每周提供《项目测试周报》。 4、产品经理进行需求调研,输出《需求调研》文档。需求调研的方式主要有背景资料调查和访谈。 5、产品经理完成《业务梳理》。首先,明确每个项目的目标;其次,梳理项目涉及的角色;再来,每个角色要进行的事项;最后,再梳理整个系统分哪些端口,要有哪些业务模块,每个模块再包含哪些功能。 (二)需求阶段 1、进入可视化产物的输出阶段,产品经理提供最简单也最接近成品的《产品原型》,线框图形式即可。在这个过程中还可能产生的包括业务流程图和页面跳转流程图。业务流程图侧重在不同节点不同角色所进行的操作,页面跳转流程图主要指不同界面间的跳转关系。项目管理者联盟 2、产品经理面向整个团队,进行需求的讲解。 3、研发项目经理根据需求及项目要求,明确《项目里程碑》。根据项目里程表,完成《产品开发计划》,明确详细阶段的时间点,最后根据开发计划,进行《项目任务分解》,完成项目的分工。 4、研发工程师按照各自的分工,进入概要需求阶段。《概要需求》旨在让研发工程师初步理解业务,评估技术可行性。 (三)设计阶段 1、UI设计师根据产品的原型,输出《界面效果图》,并提供界面的标注,最后根据主要的界面,提供一套《UI设计规范》。UI设计规范主要是明确常用界面形式尺寸等,方便研发快速开发。UI设计常涵盖交互的内容。 2、研发工程师在界面效果图,输出《需求规格》,需求规格应包含最终要实现的内容的一切要素。 3、研发工程师完成《概要设计》、《通讯协议》及《表结构设计》,及完成正式编码前的一系列研发设计工作。 (四)开发阶段项目经理博客 1、研发工程师正式进入编码阶段,这个过程虽然大部分时间用来写代码,但是可能还需要进行技术预研、进行需求确认。

软件开发文档说明书(完整流程)

. 在软件行业有一句话:一个软件能否顺利的完成并且功能是否完善,重要是看这个软件有多少文档,软件开发文档是一个软件的支柱,如果你的开发文档漏洞百出,那么你所开发出来的软件也不可能会好;开发文档的好坏可以直接影响到所开发出来软件的成功与否。 一、软件开发设计文档:软件开发文档包括软件需求说明书、数据要求说有书、概要设计说明书、详细设计说明书。 1、软件需求说明书:也称为软件规格说明。该说明书对所开发软件的功能、性能、用户界面及运行环境等做出详细的说明。它是用户与开发人员双方对软件需求取得共同理解基础上达成的协议,也是实施开发工作的基础。软件需求说明书的编制目的的就是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解、并使之面成为整个开发工作的基础。 其格式要求如下: 1 引言 1.1 编写目的。 1.2 背景 1.3 定义 2 任务概述 2.1 目标 2.2 用户的特点

. 2.3 假定和约束 3 需求规定 3.1 对功能的规定 3.2 对性能的规定 3.2.1 精度 3.2.2 时间特性的需求 3.2.3 灵活性 3.3 输入输出要求 3.4 数据管理能力要求 3.5 故障处理要求 3.6 其他专门要求 4 运行环境规定 4.1 设备 4.2 支持软件 4.3 接口 4.4 控制

. 2、概要设计说明书:又称系统设计说明书,这里所说的系统是指程序系统。编制的目的是说明对程序系统的设计考虑,包括程序系统的基本处理。流程、程序系统的组织结构、模块划分、功能分配、接口设计。运河行设计、数据结构设计和出错处理设计等,为程序的详细设计提供基础。 其格式要求如下: 1 引言 1.1 编写目的 1.2 背景 1.3 定义 1.4 参考资料 2 总体设计 2.1 需求规定 2.2 运行环境 2.3 基本设计概念和处理流程 2.4 结构 2.5 功能需求与程序的关系

软件开发过程概述

第1章软件开发过程概述 1.1 软件开发过程概述 1.1.1 软件的概念 软件(Software)简单的说就是那些在计算机中能看的着,但摸不着的东西,概念性的说软件也称为“软设备”,广义地说软件是指系统中的程序以及开发、使用程序所需要的所有文档的集合软件分为系统软件和应用软件。 软件并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。 软件被应用于世界的各个领域,对人们的生活和工作都产生了深远的影响。 1. 系统软件 系统软件是负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。 一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具)。 2. 应用软件 应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程序,比如一个图像浏览器。也可以是一组功能联系紧密,可以互相协作的程序的集合,比如微软的Office软件。也可以是一个由众多独立程序组成的庞大的软件系统,比如数据库管理系统。较常见的有:文字处理软件如WPS、Word等;信息管理软件;辅助设计软件如AutoCAD ;实时控制软件;教育与娱乐软件。 1.1.2 编程与软件开发 软件开发的内容是:需求、设计、编程和测试。 (1)需求:不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据......为了清楚地知道这些需求,你经常要和客户、项目经理等交流。 (2)设计:编码前,肯定有个计划告诉你要做什么,结构是怎样等等。你一定要按照这个来做,否则可能会一团糟。 (3)编程:如果在项目截止日,你的程序不能跑起来或达不到客户的要求,你就拿不到钱。

软件开发过程管理规范

软件开发过程管理规范文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]

0 引言 如果要提高软件开发人员的开发质量,必须有相应的考核制度,有了制度后才能推动开发人员想方设法改善自已的开发质量。目前研发对软件开发的过程缺乏细粒度的度量,所以不能依据有效的度量数据来考核开发人员的工作绩效,大部份只是凭考核人主观意志来考核,不能形成对被考核人有效的说服力。此绩效考核办法旨在结合实际情况合理客观地评价开发效率和质量。 1 目的 对软件开发的过程所产生的软件项的质量和过程进行定量的评价,用评价的结果指导软件的开发过程,不断地提高软件开发质量水平,并依据度量记录来考核软件开发人员的工作绩效。 2 软件项包括 1)技术文档:主要包括:可行性分析报告、需求分析报告、软件功能规格说明、开发计划、系统设计报告、测试文档、用户手册、总结报告等; 2)计算机程序。 3 度量数据的来源 1)项目计划; 2)评审报告; 3)测试报告; 4)问题报告; 5)软件维护记录; 4 质量度量

4.1 度量指标 主要根据各类软件项检查表的检查指标来确定,例如,软件需求规格说明书检查表(见附录1),有10个检查指标,则根据具体项目检查侧重点不同,可从中选择相应的检查指标作为度量指标。 4.2 质量等级 1)软件项的质量等级的确定根据度量综合指标进行。 2)度量综合指标计算公式为:Total = ∑QiMi。 3)其中i=1,2,...n代表指标数量; 4)Q代表度量的指标; 5)M代表度量的指标Q在整个指标体系中所占的权重系数,对不同的开发项目可能不同,此系数根据开发的不同着重点给出。 度量指标权重系数表: 序号指标权重 1 指标1 权数1 2 指标2 权数2 3 指标3 权数3 4 指标4 权数4 5 指标5 权数5 加权平均分 1.0 6)质量评价:一般地,根据度量综合指标值,有以下评分标准。 质量评价计分标准表 序号得分质量评价

软件开发过程规范

【最新资料,Word版,可自由编辑!】

目录 1.前言............................................................................................................................................... 1.1目的.......................................................................................................................................... 1.2对象.......................................................................................................................................... 1.3要求.......................................................................................................................................... 1.4适用范围.................................................................................................................................. 1.5软件开发过程模型................................................................................................................. 1.6开发过程划分 ......................................................................................................................... 2.技术过程规范部分...................................................................................................................... 2.1概述.......................................................................................................................................... 2.2业务建模阶段 ......................................................................................................................... 2.3需求阶段.................................................................................................................................. 2.4分析设计阶段 ......................................................................................................................... 2.5实现阶段.................................................................................................................................. 3.管理过程规范部分...................................................................................................................... 3.1概述.......................................................................................................................................... 3.2接受项目.................................................................................................................................. 3.3重新评估项目范围和风险(对于较大项目) ................................................................... 3.4制定开发计划 ......................................................................................................................... 3.5迭代开发管理 ......................................................................................................................... 3.6监控项目的实施 ..................................................................................................................... 3.7结束项目..................................................................................................................................

软件开发方法与过程

(1)软件开发过程是什么? 软件开发过程是按照软件工业化的标准定义的心之所向,所向披靡 ?在软件开发中必须具有的一系列过程规范; ?软件开发过程是定义在软件中的软件需求、软件设计、软件编码、软件测试、软件部署的实现目标和规范化的管理方法论; ?软件开发过程是保证软件工业化生产的法典;?软件开发过程做的是:定义标准和为了达到标准的路; ?软件开发过程要改善的是:软件开发的效率和质量; ?软件开发过程的实现最重要的是:人。 (2)大多数软件项目失败的原因: a)不完整、不现实的项目需求 b)对需求的变更束手无策 c)脆弱的架构 d)采用不成熟的技术 e)测试的不充分性 f)拙劣的进度计划和评估 g)缺乏资源 h)不具备项目管理方法 i)缺少管理层的支持 (3)软件工程的三个要素:方法、工具和过程(4)A software project failed if It is delivered late It is runs over the budget It does not satisfy the customer’s need It is of poor quality Classical software development methods have not solved software crisis.传统的软件开发方法没有能够解决软件危机。 (5)A software engineer’s job: a)Make a working plan.制定工作计划 b)Carry out it.(Do their work according to this plan)按照此计划工作 c)Try his/her best to produce high-quality products.尽最大努力生产 出高质量产品 (6)3 Key aspects a)Quality products 高质量产品 b)Expected costs c)On agreed schedule (7)Summary of PSP PSP is a framework designed to teach software engineers to do better work Estimate and plan →track →improve quality Quality methods take time to learn and practice,but it will help you in you engineering career Establish goals →measure quality → understand the process → change and reure process → measure & analyze the results → recycle improving Identify the tasks you do (8)敏捷软件开发宣言 个体和交互胜过过程和工具 可以做到工具的软件胜过面面俱到的文档 客户合作胜过合同谈判 响应变化胜过遵循计划 敏捷开发的原则: 1、我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。 尽早交付具有部分功能的系统和质量系统之间具有很强的相关性 2、即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。 关于态度的声明,敏捷过程的参与者不惧怕变化,努力保持软件结构的灵活性。 3、经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间越短越好。 关注的目标是交付满足客户需要的东西。它们是敏捷实践区别其他过程的特征所在。 4、在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。 有意义的、频繁的交互,必须对软件项目进行持续不断地引导。 5、围绕被激励起来的个人来构建项目。给他们提供所需要的环境和支持,并且信任他们能够完成工作。 人被认为是项目取得成功的最重要的因素。 6、在团队内部,最具有效果并且富有效率的传递信息的方法就是面对面的交谈。首要的、默认的沟通方式。 7、工作的软件是首要的进度度量标准。 敏捷项目通过度量当前软件满足客户需求的数量来度量开发速度。 8、敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期、恒定的开发速度。不是 50米短跑,而是马拉松。以快速但是可持续的速度行进。 9、不断关注优秀的技能和好的设计会增强敏捷能力。

软件开发过程

软件开发过程 一. 规范 规范应当是从简单到复杂的,我们首先制定的规范并不复杂,只是对如何使用异常机制的一些定义。要获得这些规范并不困难,大部分介绍异常的技术资料中都给出了很多的建议。理解并使用它们,仅此而已。 1、对不正常的条件使用异常,尽可能准确的使用预定义的异常。这一目标来自于Effective Java中的条款39和条款42。其目的是为了能够正确的使用异常。使用系统提供的异常能够减少代码,提高代码的可读性(特别是新人不需要了解自定义的异常结构)。大多数情况下,系统提供的异常已经足够用了。 2、尽可能多的收集异常发生时的上下文信息。异常之所以比返回码优秀的一个原因就是它能够将错误类型化,提供比错误代码多得多的信息。因此,我们实在没理由不使用这一功能。 3、正确的使用异常转义,并保留原异常信息。异常转义的目的是为了让客户端能够得到易于理解的类型。我们想象一个用户登录的情境,假设用户数据保存在一个文件中,当文件中找不到用户名的相关记录的时候抛出一个RecordNotFoundException异常,系统截获了这个异常,并将其发布给用户,问题在于,用户会觉得非常的奇怪,为什么会是记录没有找到呢?因此,建立一个IllegalUserException异常会更适合于这种情况。 4、针对不同的抽象层次定义不同的异常。正如我们在第三点中提到的,RecordNotFoundException异常并不适合于用户这个层次。但是,这个异常对于程序员调试代码就很有意义了。 5、将异常发布到合适的地方。有计算机的地方就一定有输入和输出。如果把异常发生时的信息收集看作输入,那么异常的输出是什么呢?可能是错误的提示信息,可能是一个显示错误信息的网页,可能是日志中的记录,可能是一条短信,也可能是一封EMail。这些就是异常的输出形式。此外,异常的输出还需要正确的确定对象,对用户来说,异常只要有一个友好的提醒方式就够了,但对于管理者来说,异常需要记录下来,或是通过异步消息进行通知。 这就是规范,你也可以把它称为最佳实践、建议等名词。当然,它还可以更加的细化,但事情总有个过程,一开始把问题弄得过于复杂未必是一件好事,你说呢? 二.技能 有了规范是一回事,能否把规范运用起来则取决于人员的技能。在有一部描述清末的电影中,有这样一个情节,留学归来的知识分子为了提高民众的知识水平,不惜花费巨资免费发放报纸,这一举措大受欢迎,可惜大部分的民众都不识字,他们要报纸的原因只是这东西烧火很方便。 所以其次要解决的问题就是,大部分的程序员没有足够的异常处理经方面的技能。如果程序员没有这方面的概念,你把一本异常管理最佳实践放在他的面前会有用吗? 学会使用异常并不困难,困难的是如何让程序员正确的使用异常。什么时候使用系统定义的异常。什么时候使用自定义的异常,自定义异常又该如何设计。这些都是程序员的技能问题。基于这种思路,首先做的是培训,而培训的目标是让程序员理解异常的机制,让程序员能够把异常运用到工作中。培训不等于上课,因为我们的目标是能够影响程序员的行为,单靠上课是无法达成目标的,因此我们把几种方式综合使用。一般来说,程序员对未知的技术总是

(完整word版)软件开发的完整步骤

软件开发的完整步骤目录 1 问题定义 (4) 1.1 用户调查 (4) 1.2 编写《系统目标与范围说明》 (4) 2 可行性研究 (4) 2.1 确定项目的规模和目标 (4) 2.2 研究正在运行的系统 (4) 2.3 建立新系统的高层逻辑模型 (5) 2.4 重新定义问题 (5) 2.5 导出和评价各种方案 (5) 2.6 推荐可行方案 (5) 2.7 编写《可行性研究报告》 (5) 2.8 提交审查 (5) 3 需求分析 (6) 3.1 制定需求分析计划 (6) 3.2 需求获取 (6) 3.3 分析和综合 (6) 3.4 协商与沟通 (6) 3.5 编写《需求规格说明书》 (6)

3.6 需求验证 (7) 3.7 修改完善开发计划 (7) 3.8 技术审查和管理复审 (7) 4 概要设计 (7) 4.1 制定规范 (7) 4.2 设想供选择的方案 (7) 4.3 推荐最佳方案 (8) 4.4 功能分解 (8) 4.5 软件结构设计 (8) 4.6 数据设计 (8) 4.7 制定测试计划 (8) 4.8 编写《概要设计规格说明书》 (8) 4.9 其他文档编写 (8) 4.10 技术审查和管理复审 (9) 5 详细设计 (9) 5.1 数据结构设计 (9) 5.2 物理设计 (9) 5.3 算法设计 (9) 5.4 界面设计 (9) 5.5 其他设计 (10) 5.6 编写《详细设计规格说明书》 (10) 5.7 技术审查和管理复审 (10)

6 编码 (10) 6.1 选择合适的程序设计语言 (10) 6.2 制定编码规范 (10) 6.3 建立数据库系统 (10) 6.4 程序编码 (11) 7 测试 (11) 7.1 测试用例设计 (11) 7.2 单元测试 (11) 7.3 集成测试 (11) 7.4 系统测试 (11) 7.5编写《测试分析报告》 (12)

我对软件开发过程的理解

软件开发的过程 摘要:软件开发过程即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。 生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件开发过程覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。 1.需求分析 1.1 需求分析的特点和任务 需求分析是软件开发的第一步。获取需求的一个必不可少的结果是对项目中描述的客户需求的普遍理解。一旦理解了需求,分析者、开发者和客户就能探索出描述这些需求的多种解决方案。参与需求获取者只有在他们理解了问题之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工。把需求获取集中在用户任务上—而不是集中在用户接口上—有助于防止开发组由于草率处理设计问题而造成的失误。有几种原因使需求分析变得困难:(1)客户说不清楚需求;(2)需求自身经常变动;(3)分析人员或客户理解有误。 需求获取、分析、编写需求规格说明和验证并不遵循线性的顺序,这些活动是相互隔开、增量和反复的。当你和客户合作时,你就将会问一些问题,并且取得他们所提供的信息(需求获取)。同时,你将处理这些信息以理解它们,并把它们分成不同的类别,还要把客户需求同可能的软件需求相联系(分析)。然后,你可以使客户信息结构化,并编写成文档和示意图(说明)。下一步,就可以让客户代表评审文档并纠正存在的错误(验证)。这四个过程贯穿着需求分析的整个阶段。需求获取可能是软件开发中最困难、最关键、最易出错及最需要交流的方面。需求获取只有通过有效的客户—开发者的合作才能成功。分析者必须建立一个对问题进行彻底探讨的环境,而这些问题与产品有关。为了方便清晰地进行交流,就要列出重要的小组,而不是假想所有的参与者都持有相同的看法。对需求问题的全面考察需要一种技术,利用这种技术不但考虑了问题的功能需求方面,还可讨论项目的非功能需求。确定用户已经理解:对于某些功能的讨论并不意味着即将在产品中实现它。对于想到的需求必须集中处理并设定优先级,以避免一个不能带来任何益处的无限大的项目。 1.2.需求分析的一般方法 跟班作业。通过亲身参加业务工作来了解业务活动的情况。这种方法可以比

软件开发流程与详细解释

软件开发流程整理2012/4/3 问题定义 问题定义指在项目初期,从客户或用户处获取需求,弄清用户需要计算机解决的问题根本所在,以及项目所需的经费和资源的文档,最终使开发人员与客户就所构建的系统的范围达成一致意见。 用户调查 对用户进行访谈,调查,初步了解项目范围,需要解决的问题以及项目经费的重要信息。 编写《系统目标与范围说明》 将本阶段的结果写成相应的文档,即《系统目标与范围说明》。 可行性研究 软件可行性分析最根本的任务是用最少的代价,对以后的行动方针提出建议。如果问题没有可行的解释,分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费;如果问题值得解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。 确定项目的规模和目标 分析员对有关人员进行调查访问,仔细阅读和分析有关的材料,对项目的规模和目标进行定和确认,清晰地描述项目的一切限制和约束,确保分析员正在解决的问题确实是要解决的问题。 研究正在运行的系统 收集,研究,分析现有系统的文档资料和使用手册,实地考察现有系统,在考察的基础上,访问有关人员,确定目标系统必须完成的基本功能。 建立新系统的高层逻辑模型 根据对现有系统的分析研究,逐步明确了新系统的功能,处理流程以及所受约束,然后使用数据流图和数据字典,概括的描述高层的数据处理和流动。

重新定义问题 将新系统的高层逻辑模型与项目的问题及目标进行比较,重新复查问题定义,工程规模和目标。 导出和评价各种方案 分析员建立了新系统的高层逻辑模型,并进行复查后,要从技术的角度出发,提出高层逻辑模型的不同方案,即导出若干较高层次的物理解法。根据技术可行性,经济可行性,社会可行性对各种方案进行评估,去掉行不通的解法,得到可行的解法。 推荐可行方案 根据之前可行性研究的结构,应该决定该项目是否值得去开发。若值得开发,那么可行的解决方案是什么,并且说明该方案可行的原因和理由。 草拟开发计划 初步确定工程进度表,开发人员,所需要的资源以及对项目所需要的时间进行估计。 编写《可行性研究报告》 将该阶段的可行性研究过程的结果写成相应的文档,即《可行性研究报告》。 提交审查 用户和使用部门对《可行性研究报告》进行仔细审查,从而决定该项目是否进行开发,是否接受可行的实现方案。 需求分析 需求分析要求开发人员准确理解用户的需求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转化到相应的形式功能规约(需求规格说明)的过程。需求分析是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。 制定需求分析计划 需求分析是一项重要的工作,也是最困难的工作,这个阶段可能会耗费相当的时间,人力以

相关文档
最新文档