随着社信息化京城的不断深入,计算机软件的需求越来越复杂,规模也越来越大。但软件危机问题提出了三十多年,至今仍无法很好的得到解决。究其原因,主要还是,主要是忽视了软件开发过程中的质量监控,以及在软件开发过程中,对需求的准确把握不能做到很好的定位。因此,这要求我们在这个过程中要准确把握需求的内容,并予以准确的定位。

需求工程作为软件工程生命周期的起点是软件开发后继阶段的基础。软件需求是软件开发的目标,也是其项目开发成功与失败的重要因素。有时候错误的需求分析很可能导致软件开发的全盘否定,需求错

误的代价会随着项目的展开儿发生变化。如果需求错误能够及时的修复,那么其代价就会被限定在一定的范围之内。如果没有及时的发现,则很可能让整个软件的开发失去其本来应有的意义。

     明白了正确的需求的重要性,还要注意一点就是把握软件在开发过程中应该有的功能性需求和非功能性需求。软件开发的前期要首先分析和撰写需求规格说明书,这也在一定程度上给我们一个机会去深究软件本身应该具备的功能性意义。采用合理化的需求分析模型,能够快速的开发出系统的概貌,有利于开发过程的顺利进行,其模型包括:瀑布

模型,螺旋模型,RUP,迭代模型和敏捷方法等。这些方法能够准确的定位产品的生命周期,从而使开发过程不至于偏离方向。减少开发过程

中走的弯路。

       我们根据用户需求,通过反复讨论、分析,最终明确一个唯一性的用户需求,这个结果其实就是我们的软件需求分析报告。一般我们采用一些开发工具,如VC或BC等,同样也会使用一些图形工具,如Potoshop、调色板等画图工具。使用各种工具表达软件需求分析,其具体表达手段可以分为:

1.效果图描述。主要是用户UI界面的描述反映用户需求功能;

2.逻辑图描述。根据用户需求功能,使用抽象化理论,以及需求分析理论,对用户需求功能进行全面的分析,建立功能性逻辑关系图,流程逻辑关系图等;

3.关系图表描述。主要是对信息关系、数据库表格、接口函数等描述;

4.工程数学描述。分析用户需求,分析用户需求信息,运用工程数学进行算法推导,进行合理化需求分析推导;

5.甘地图描述。主要是软件项目工作安排,开发周期预估;

6.其它方法描述。保证完整性合理性的有效描述。进行需求分析时,应注意一切信息与需求都是站在用户的角度上。尽量避免分析员的主观想象,并尽量将分析进度提交给用户。在不进行直接指导的前提下,让用户进行检查与评价。从而达到需求分析的准确性。分析员通过需求分析,逐步细化对软件的要求,描述软件要处理的数据域,并给软件开发提供一种可转化为数据设计、结构设计和过程设计的数据和功能表示。 

       在软件完成后,制定的软件规格说明还要为评价软件质量提供依据。开发软件系统最为困难的部分就是要准确说明开发什么。最为困难的概念性工作便是要编写出详细的技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。如果做错,这将是会最终给系统带来极大损害的一部分,并且以后再对它进行修改也极为困难。目前,国内产品的庞杂,一家企业可能有几个系统并立运行,它们之间的接口是系统开发人员最头痛的问题。对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的。但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?而如果我们不知道什么对客户来说是重要的,那我们又如何能使客户感到满意呢?

       软件需求分析评估是为了检查我们进行软件需求分析工作,保证软件需求分析工作正确性、完整性、有效性、合理性、可确认性、可实施性,完全保证用户所需求的功能。我们对组织结构与责任管理的评估主要有:参与人员任务和责任界面的明确;安排计划按时完成状况;相互间的协调能力状况。我们进行需求分析的目的是完整、准确地描述用户的需求,跟踪用户需求的变化,将用户的需求准确地反映到系统的分析

和设计中,并使系统的分析、设计和用户的需求保持一致。需求分析的特点是需求的完整性、一致性和可追溯性。完整性:是准确、全面的描述用户的需求。一致性:是通过分析整理,剔除用户需求矛盾的方面,规范用户需求。可追溯性:有两个方面的含义,整理和规范的需求,其一,需要不断的和用户进一步交流,保持和用户最新的需求一致。其二,和系统分析(设计)保持一致。

       因此在需求分析之前我们必须建立需求分析技术层面的基本框架,从技术上保证需求分析的要求,在此基础上我们进行的需求分析才能满足项目对需求分析的要求。我们必须以用户软件需求为依据,以求实的态度详细的、准确的、完整的编写软件需求分析,避免空想世界,空中楼阁的想法;避免无逻辑性、无核心的描述;避免无量化思维,无实际空间概念。需求分析评价指标主要有这么几个:功能性、完整性、正确性、逻辑性、表现性、合理性,可实施性等。评价人员投入,以及费用支出的合理性问题。正确制定工作周期,保证软件项目的顺利完成。

       还有就是需求的可确认性,可确认需求功能是实现用户需求的基本保证,如果不可确认的、不确定更改存在,将会阻碍软件实现,或者软件设计存在着不完整性缺陷,或者存在着不可实施性问题,我们必须区分是功能性障碍问题,还是未来性问题。如果不能够明确是未来性问题,则必须调整功能需求,化解不确定更改的问题。因此,判断不确定性更改是一个非常重要的问题对于需求工程,它无疑是当今软件工程中的关键问题,但又是软件工程中最复杂的过程之一,它是一个不断反复的需求定义、记录、演进的过程。需求工程的过程:需求获取,需求分析,需求规格说明,系统建模,需求确认,需求管理。首先获取需求是一个确定和理解不同涉众的需要和约束的过程。获取需求的方法有面向目标,基于场景,面向方向,面向视点,基于知识这几个层次它也是需求工程的主体内容之一。学习软件工程这门课程已经有一个学期了,整一个学期下来,应该说还是有许多值得肯定的地方的,其实在我看来,软件工程与其说是一门课程,不如说是一门思想。是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程,成为了一个综合的一个能够解决问题的思想集合。所谓的需求获取,那就是一个谈判,辩论,交流的过程,已经不是单纯的编编程序就能解决的问题了。这门课程教给了我们在完成一个实际项目时的一般程序及过程,我认为这是一份非常具有实际意义的教学内容。当我们在毕业之后,这是我们实际要运用的一项非常有用的技能,而且不仅仅局限于软件工程的范畴,我们即使是从事与其它行业,不也是要从需求获取开始。今天在这里写了这些,算是我对软件工程这门课程的一点点心得体会,也许是正确的,也许在一定的程度上存在着观点的偏激错误,但是起码这些东西是我觉得存在着的一些问题,但愿软件工程这门课程能够开的越来越好,让更多的学生们能够从这门课程中受益,在以后社会残酷的竞争之中存活下来!