《需求工程——软件建模与分析》读后感之一
虽然有老师给了好多电子书的书目,但是最后还是觉得先读一读本学期的教材《需求工程——软件建模与分析》。作为教材,浅显易懂,很容易入门。虽然上个学期已经学了一些这方面的知识,但是并不是很系统。希望可以通过这本书整理一下。
因为有了“软件危机”的产生,“软件工程”才被提出。而在“软件工程”中,需求分析又是重中之重,它对项目的成败具有至关重要的作用。和软件需求相关的因素为软件项目带来的风险和问题要远远超过所有的其他因素,糟糕的软件生产状况背后隐藏着软件工程的需求问题。
软件生产中产生需求问题的最大原因在于对应用型软件的模拟特性理解不透彻或应用不坚决,它会导致软件开发者产生轻视需求的态度问题,但除此之外,还有一些技术原因也会导致需求问题的产生。一般有非技术性和社会性因素重视不足;传统需求分析方法的缺陷;软件规模的日益扩大;需求问题的高代价性等。
什么是需求工程?需求工程是所有需求处理活动的综合,它收集信息、分析问题、整合挂点、记录需求并验证其正确性,最终反应软件被应用后与其环境互动形成的期望效应。需求工程是为了在软件开发前需要软件工程师们去了解并去设计出一套解决方案。因为软件工程师并不是了解所有领域。所以更加需要更用户沟通。需求工程十分重要。虽然人们很早就认识到这一点,但是在时间、人力、物力、财力的投入上却并没有那么重要。事后必然会导致需求分析水平低,软件开发质量低,用户抱怨多的问题出现。
然而有时候并不一定是需求分析师的问题,用户有时候并不能明确的描述出自己想要使用什么,而需求分析师又不了解用户所在领域。所以就会出现软件需求出现“不完整、不准确、不清晰、变化不可控”这些现象。所以需求分析师们必须具备以下技能以方便、明确、成功的做出需求分析。
首先需要专业技能,懂得需求工程的相关知识、理解需求工程的相关理论、熟悉需求工程的各项活动、掌握需求工程的各种办法与技术是必须得;其次是要有分析技能,必须可以从大量信息中提取、分析、整合出有用的信息处理,了解用户需求中的冲突与遗漏,分析可行性;接着需要交流技能,这是必须的,要掌握交谈和提问的技巧,否则很难跟不懂软件的客户出现隔阂,隔行如隔山,大家不能各说各的吧;还有观察技能、建模技能、写作技能、创新技能、协调技能等。需求工程师应该具有敏锐的洞察力,可以通过观察用户的工作环境和工作过程,发现通过谈话及其他方法所无法发现的重要信息。同时也应该掌握从传统流程图到结构化的分析模型,直至当今的统一建模语言等多种分析工具。因为需要跟客户、管理人员、开发人员等交涉信息,所以需要写好书面的需求规格说明书。写作技能是必须的。需求工程师需要通过写作清晰的表达出复杂的概念。
提起需求,不同背景的人会有不同的看法,IEEE对需求的定义为:用户为了解决问题或达到某些目标所需要的条件;系统或系统部件为了满足合同、标准、规范或其他正式文档所规定的要求而需要具备的条件或能力;对前两条中的一个条件或一种能力的一种文档化表述。
需求中总是遇到一些困难,因为用户和开发人员的背景不同,立场不同,所以知识理解困难,心中所想的东西也不一样。普通用户缺乏概况性和综合性的表述能力, 所以很难理解对方心中所想。用户还总是提出各种需求,固执的坚持某些特性和功能。用户并不了解软件的设计情况,所以需要这些困难需要需求工程师们一一解决。
需求是获取的主要对象,是系统期望达到的目标。它主要来源于用户、客户、领域专家等相关涉众,在湖区中体现为射中的问题、期望、观点、看法和态度等。常见的获取信息的方法有问卷调查、面谈、文档分析、文档检查、需求剥离等。也有头脑风暴、专题讨论、JAD、JRP等。
在实践中,通过利用原型,可以有很多好处,比如:及时、有力地影响用户需求的变化;减少返工;帮助控制不完整需求所带来的风险;可以将一个大的难以处理的开发过程细分成一个更小更容易处理的步骤;减少开发成本,提高经济效益;增加开发者之间的交流,帮助确定技术解决方案的可行性;有效地识别风险和解决风险,帮助进行风险管理;提高用户在软件开发中的参与程度。原型可以帮助需求解决工程师及早解决需求的不求定性。