第二章软件需求工程及其过程2.1需求工程概述2.2软件需求与产品生命周期本章结构2.3软件需求工程的过程2.4需求工程的角色-系统分析员2.1需求工程概述需求工程是软件工程的核心组成部分,是指应用有效的技术、方法进行需求分析,确定客户需求,帮助分析和设计人员理解问题,并定义目标系统的一门学科。它把整个软件需求工程研究领域划分为需求开发和需求管理两部分。2.1需求工程概述需求开发活动内容获取每个用户类的需求。确定产品所期望的用户类。了解实际用户任务和目标以及这些任务所支持的业务需求。分析源于用户的信息,以区别用户任务需求、功能需求、业务规则、质量属性。将系统级的需求分为几个子系统,并将需求中的一部份分配给软件组件。例了解相关质量属性的重要性。商讨实施优先级的划分。例将所收集的用户需求编写成规格说明和模型。评审需求规格说明,确保对用户需求达到共同的理解与认识。例用户类用户是可分不同类型的,举例如下:DZ在各种论坛的地位是有目共睹的,特别是BT下载论坛和娱乐论坛,而且用户的需求是不同的,因此,建议开发不同功能的Discuz!4.0版本,适应不同用户需求。建议开发:1、标准版,适合一般用户和可以自己添加修改插件等用户。2、娱乐版,适合电影、游戏、休闲等论坛和下载论坛,可以集成更多的娱乐插件。3、插件版,适合对Discuz!不熟悉,不能自己修改添加插件、喜欢全功能的用户。也可以把2、3合并。需求的变化和改动笑话一则:距离史记载,没有一个软件的需求改动少于三次。唯一只改动需求两次的客户是个死人。这个可怜的家伙还是在运送第三次需求的路上被车子撞死的。(cline1995)问题是:如何来管理好需求呢?需求管理主要包括:建立基线、需求跟踪、变更控制等几个方面。需求管理活动内容定义需求基线(迅速制定需求文档的主体)。评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它。使当前的项目计划与需求一致。估计变更需求所产生影响并在此基础上协商新的承诺(约定)。让每项需求都能与其对应的设计、源代码和测试用例联系起来以实现跟踪。在整个项目过程中,跟踪需求状态及其变更情况。需求开发与需求管理之间的界限图2.2软件需求与产品生命周期软件产品经历需求、分析、设计、实现、部署后,软件将被使用并进入维护阶段,直到最后逐渐消亡。这样一个过程,叫软件生命周期模型。软件生命周期模型一.瀑布模型(线性模型)二.RAD(快速应用开发)模型三.螺旋模型四.RUP(RationalUnitedProcess)五.如何根据需求选择生命周期模型软件生命周期模型瀑布模型规定了各项软件工程活动,包括:制定开发计划,进行需求分析和说明,软件设计,程序编码,测试及运行维护,并且规定了它们自上而下,相互衔接的固定顺序,如同瀑布流水,逐级下落。它是软工中基本模型。一.瀑布模型(线性模型)软件生命周期模型瀑布模型图软件生命周期模型传统瀑布模型开发软件的特点阶段间具有顺序性和依赖性推迟实现的观点每个阶段必须完成规定的文档和成果每个阶段结束前完成文档审查,尽早改正错误软件生命周期模型快速应用开发模型强调极短的开发周期,是线性顺序模型的一个“高速”变种,通过使用基于构件的建造方法赢得了快速开发。如果需求理解得很好且约束了项目范围,它的过程使得队伍在很短时间内创建出“功能完善的系统”。二.RAD(快速应用开发)模型软件生存周期模型一.需求计划采用联合需求计划技术来收集需求信息,以结构化方式(自顶向下、逐步求精、模块化设计)讨论现有业务问题。二.用户描述采用联合应用设计来管理用户的参与,开发团队快速捕捉系统非技术设计阶段的用户信息。三.构建包括详细设计、创建(编码和测试)以及在某时间内发布给客户。四.结束用户验收测试、系统安装和用户培训。RAD模型的阶段软件生存周期模型RAD(快速应用开发)模型图60-90天需求计划用户描述构建结束开发工作量RAD使用模型的条件系统可基于构件开发和可缩放。用户能参与到整个生命周期中。项目开发周期短。项目团队熟悉应用领域,能熟练使用开发工具。举例:某集团公司的OA系统,烟草公司的资金结算系统等等。软件生存周期模型三.螺旋模型对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型加入了风险分析。螺旋模型沿着螺线旋转,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即:1.制定方案──确定软件目标,选定实施方案,弄清项目开发的限制条件。2.风险分析──分析所选方案,考虑如何识别和消除风险3.实施工程──实施软件开发4.评估──评价开发工作,提出修正建议和相应计划沿螺线自内向外每旋转一圈便开发出更为完善的一个新的软件版本。软件生命周期模型螺旋模型图评估举例:某集团公司的ERP系统建设RUP简介RationalUnifiedProcess(简称RUP)是一套软件工程过程,它又是文档化的软件工程产品,由Rational公司开发、维护并销售。RUP又是一套软件工程方法的框架,各个组织可根据自身的实际情况,以及项目规模对RUP进行裁剪和修改,以制定出合乎需要的软件工程过程。RUP简介RUP吸收了多种开发模型的优点,具有很好的可操作性和实用性、从它一推出市场,凭借Rational在业界的领导地位、以及与统一建模语言(UnifiedModelLanguage,以下简称UML)的良好集成、多种CASE工具的支持、不断的升级与维护,迅速得到业界广泛的认同,越来越多的组织(如IBM、Microsoft、Sun)以它作为软件开发模型框架。RUP简介RUP二维开发模型RUP可以用二维坐标来描述。横轴通过时间组织,是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期、阶段、迭代和里程碑;纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动、产物、工作者和工作流。RUP简介RUP中的软件生命周期在时间上被分解为四个顺序的阶段,分别是:初始阶段、细化阶段、构造阶段和交付阶段。每个阶段结束于一个主要的里程碑;每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。RUP开发过程中的各个阶段和里程碑RUP简介RUP中的每个阶段可以进一步分解为迭代。一个迭代是一个完整的开发循环,产生一个可执行的产品版本,是最终产品的一个子集,它增量式地发展,从一个迭代过程到另一个迭代过程到成为最终的系统。RUP的迭代开发模式图RUP简介1.开发复用。减少开发人员的工作量,保证软件质量2.可降低风险3.对需求进行有效管理4.可视化建模(使用ROSE工具)5.使用组件体系结构,使软件体系架构更具弹性6.贯穿整个开发周期的质量核查7.对软件开发的变更控制RUP的特点选择生命周期模型的总结需求情况瀑布模型螺旋模型RAD迭代模型需求容易定义或明确吗?是否是否能在早期确定需求吗?是否是是周期中需求经常变化吗?否是是是基于需求特点选择生命周期模型需求工程过程被认为是建立软件系统最重要的方面之一,在项目中,它涵盖了与需求相关的所有活动。需求的开发过程Pressman的需求工程过程Boehm的需求工程过程2.3需求开发过程2.3.1需求开发过程(1)需求开发是一个迭代的过程重新评估获取分析编写规约验证重写证实更正并减小误差2.3.1需求开发过程(2)需求开发过程框架Pressman的需求工程过程需求获取需求分析需求规格说明系统建模需求确认需求管理使用在怎样的需求环境中?Boehm的需求工程过程确定重要的涉众确定满足涉众要求的条件确定2中的冲突因素协商满足各方面要求的高层协议列出互相满足要求的选项研究折中选项预期管理将协议融入SRS和计划中重复1-8,直到完全开发完成面临和解决新的风险项目12345678910使用在哪些场合或项目中?需求工程的方法需求工程方法分成四类:1.面向过程,注重输入输出,如传统的结构化分析。2.面向数据,强调数据结构,如E-R模型,DD描述。3.面向控制,强调同步、并发,如DFD图。4.面向对象,它建立在对象间的交互基础上,对对象模型、动态模型和功能模型三个方面对问题进行描述,如以UML为基础的Rose的建模工具。结构化分析即使没有明确指定,软件项目组中也会有某个人会担当需求分析员的角色。企业的IS组织中,行使这一职责的专家被称为业务分析员。对需求分析员的不同称谓还包括系统分析员、需求工程师、需求经理,也有简称分析员的。2.4需求工程的角色-系统分析员2.4.1需求分析员的职责与要求需求分析员是对项目涉众的需求进行收集、分析、记录和验证等职责的主要承担者。如图所示,需求分析员是用户群体与软件开发团队间进行需求沟通的主要渠道。需求分析员项目管理规格与复杂度信息用户代表用户需求开发功能及非功能需求需求分析期望与约束功能及非功能需求测试其他股东注意:不要指望优秀的开发人员或知识渊博的用户可以自动成为优秀的业务分析员,而不需要为他们提供培训、锻炼、学习资料和指导。岗位职责:1.收集、整理、分析、提炼、跟踪、控制用户的产品需求;2.编写产品需求说明书,准确描述和解释业务需求;3.编写设计文档,引导UI设计师制作产品原型(可选);4.编写详细产品需求分析书,提供给软件开发工程师,测试工程师。职位要求:1.大学本科及以上学历,专业不限;2.具备N年以上软件产品需求分析的工作经验;3.具备较强的沟通和协调能力,引导用户提出需求;4.具备较强的需求分析能力,进行业务需求整理、分析;5.具有较强的领悟能力和学习能力,能迅速了解行业知识;6.有较强的语言和文字表达能力;规范的文档写作能力;(从毕设开始)7.熟悉UML语言,能使用软件工具进行建模。2.4.1需求分析员的职责与要求需求分析员职位要求描述举例计算机或相关专业毕业,本科以上学历,3年以上开发经验;熟悉面向对象的分析,设计和开发方法;熟悉UML,Rose,PowerDesigner等软件工程建模工具;能够进行需求分析,编写分析文档及规格说明书;能够熟练阅读MSDN等英文资料;熟悉Windows操作系统,熟悉Windows平台下编程;熟悉C#,VC++或JAVA;熟悉系统、网络、数据库编程;熟悉测试方法,错误分析定位;有大型系统开发经验者优先;一、业务方面的二、计算机方面的1.客户不懂计算机,不知道如何用计算机术语表达自己的业务需求。2.程序员不懂业务,不知道代码和业务类需求之间联系。3.只有系统分析员,既明白客户的业务需求,也理解程序员的计算机术语,因此,他通过需求调研获取用户需求,然后编写需求规格说明书,告诉程序员做什么。系统分析员必须具有两方面的知识2.4.2需求分析员知识与技能下面列出需求分析员的技能:–倾听的技巧–交谈和提问的技巧大部分需求是通过讨论得到的,因此,需求分析员必须能够与不同的个人或小组就需求展开讨论。–分析能力优秀的需求分析员能够以不同的方式思考问题。2.4.2需求分析员知识与技能举例:厦门某中心的调研–协调能力需求获取过程中,对相关人员进行协调也是需求分析员必备的一项能力。–观察能力观察力敏锐的需求分析员能够从不经意的闲谈中发现重要的信息。–写作能力需求开发提交的主要结果是书面的需求规格说明,用于在客户、营销人员、管理人员和技术人员之间传递信息。–组织信息能力需求分析员需要处理获取和分析过程中收集到的大量杂乱的信息。2.4.2需求分析员知识与技能–人际交往能力需求分析员应具备让彼此利益竞争的人们进行合作的能力。–建模能力每个需求分析员都应该掌握从传统的流程图到结构化的分析模型(数据流图、实体关系图等),直至当今的统一建模语言(UML)等多种分析工具。2.4.2需求分析员知识与技能能力的培养环境:实际项目2.4.3需求分析员的工作需求分析员是客户与开发人员交流的中间人,负责将客户对产品的初步想法转化为明确的需求说明,用来指导开发工作。定义业务需求–需求分析员的第一项工作是帮助业务管理人、产品经理或销售经理定义项目的业