软件需求概述

软件需求:是指软件系统需要满足的功能、性能、约束和质量等方面的要求和期望。它是软件开发过程中的第一步,是软件系统设计和开发的基础。软件需求描述了软件系统需要实现的功能、性能、界面、数据、安全、可靠性、可维护性等方面的要求和期望,以及软件系统与外部环境之间的交互和接口等方面的要求和期望。软件需求是软件开发过程中最重要的一步,它直接决定了软件系统的功能、性能、可靠性和用户体验等方面,对于软件项目的成功与否起着至关重要的作用。因此,需要采用多种需求分析技术、制定详细的需求规格说明书、及时处理需求变更、进行需求验证和确认等措施,以确保需求的准确性和完整性,为后续的开发和测试工作奠定坚实的基础。需求工程:需求工程尝试为一个产品的用户和开发人员建立一个共同的需求基础。所以需求工程在整个产品开发过程中非常关键。开发人员与需求人员不同:做需求的人和做开发的人应该是两种具有不同思维的人,做需求的人员应具有集成的思维,把问题集成起来考虑;而做开发的人通常具有分解的思维,需要把要解决的问题分解为对象,分解为模块,然后逐一解决。用户需求特点:零散:用户可能从不同角度,提出不同层面,不同力度的需求,需求的表达形式也多种多样。存在矛盾:多个用户处于组织的不同岗位、不同层面,他们提出的需求可能存在片面性,甚至不同用户的需求可能还会相互矛盾。业务需求输出的主要内容: 高层业务需求(业务目标),涉众需求,业务流程,业务规则,词汇表。用户需求的主要输出:特性,功能需求,非功能性需求。系统需求的主要输出:界面说明,交互接口。需求层次的划分体现了需求工作的不同阶段及其产物。业务需求是需求定义的产物,用户需求是需求捕获的产物,系统需求是需求分析与建模的产物。

需求方法和需求分析师

需求工程是指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。需求工程通过合适的工具和记号系统地描述待开发系统及其行为特征和相关约束,形成需求文档,并对用户不断变化的需求演进给予支持。需求管理的主要工作:评估正式提交的变更请求,确定变更对现有需求集的影响;重构变更后的用例模型;设置适当的需求属性和可追踪性;正式验证需求工作流程的输出结果是否满足客户对系统的需求。软件生命周期:瀑布模型核心思想:按工序将问题化简,逻辑设计与物理实现分开。将软件生命周期划分为:制定计划、需求分析、软件设计、代码编写、软件测试、软件维护。自上而下、相互衔接的固定次序。只有当一个阶段的文档编制好并获得SQA小组的确认后才可以进入下一个阶段。通过强制提供规约文档来确保各个阶段很好的完成任务。瀑布模型优点:是一个阶段性的软件开发模型,通过使用里程碑,使每个阶段具有可识别的起点和终点。在编写代码之前充分强调需求和设计,避免了时间的浪费,由于在需求和设计阶段捕获并修正可能存在的漏洞要比在后序阶段容易得多,因此,瀑布模型有利于提高软件产品的质量。在需求和设计阶段生成了规范的文档资料,当团队成员分散在不同的工作地点时,瀑布模型有助于进行信息的有效传递。瀑布模型缺点:整个模型几乎都是以文档驱动的,这对于非专业的用户来说是难以阅读和理解。需求的获取是一个不断深入的过程,对于一个项目而言,无论花多少时间和精力与用户沟通,理解用户之所想,也不可能一次获得所有需求。然而,在瀑布模型中,软件开发的各项活动要求严格按照线性方式,需求分析阶段的结果将作为下一阶段的输入,早期的错误可能要等到开发后期才能发现,进而带来严重的后果。RUP模型:RUP(Rational Unified Process)是Rational结合软件工程理论推出的软件过程模型(2002),商品化最成功的软件过程模型。RUP是可配置的: RUP根据实际做出一定的取舍,合理输出最有价值的文档,执行最有价值的核心工作流。RUP是风险驱动的:RUP各个阶段是为了化解不同的风险,持续的化解风险是RUP的灵魂RUP是以架构为中心的:架构风险是一个重大风险,RUP提倡有稳定的架构,在细化阶段必须产生稳定的架构,达到项目的架构里程碑。RUP是用例驱动的:项目实现的过程就是用例一个个实现的过程,各个阶段实现不同的用例,随着用例的实现,可执行的产品逐渐生成。RUP核心思想:确保满足用户需求:采用进化式需求,迭代开发确保满足用户需求。RUP的最终目的是产生更好的可执行的软件,而不是创建文档。尽早地适应变化:早期只分析和实现优先级最高的用例,细化阶段迭代产生稳定的架构以适应变化。始终重视质量:每个阶段的结束都有测试,采用尽早地持续地测试。在迭代过程中不再采用传统的需求规格说明、设计说明等预先定义好的需求和设计工件。取而代之的是采用“基于发现”的方法。在迭代模型中,采用象愿景文档、用例模型等轻量级的文档,只是初步地定义要建立的软件,根据这些初步地理解,在前面的几个迭代中会很快地发现“真实的用户需求”,从根本上降低了项目的风险。RUP结构:RUP有四个主要的建模元素:角色、工件、活动和工作流。RUP结构中描述了谁(角色)在做什么(工件),怎么做(活动),什么时候做(工作流)。RUP模型中软件生命周期四个阶段:先启(初始)阶段(Inception)精化阶段(Elaboration)构造阶段(Construction)移交阶段(Transition) 先启阶段结束时:生命周期目标里程碑 — 用于评价项目基本的生存能力。精化阶段结束时:生命周期结构里程碑 — 为系统的结构建立管理基准并使项目小组能够在构造阶段进行衡量。此刻,要检验详细的系统目标、范围、结构的选择、主要风险的解决方案。构造阶段结束时:初始功能里程碑。该里程碑决定了产品是否能够在测试环境中进行部署,要确定软件、环境、用户是否能够开始系统的运作。这时的产品版本常被称为“beta”版。移交阶段的终点:产品发布里程碑。此时,要确定目标是否已经实现,是否可以开始另一个开发周期。在某些情况下该里程碑可能与下一项目周期先启阶段的开始重合。RUP9个核心工作流:6个核心过程工作流(Core Process Workflows)工作流:商业建模工作流、需求工作流、分析和设计工作流、实现工作流、测试工作流、部署工作流、3个核心支持工作流(Core Supporting Workflows):配置和变更管理工作流、项目管理工作流、环境工作流。RUP的需求工作流目标是描述系统应该做什么,并使开发团队与用户就这一描述达成共识。为了达到此目标,RUP描述了如何对系统的功能和约束条件进行提取、组织并将其文档化。RUP迭代开发模式:RUP中的每个阶段可进一步分解为迭代。每个迭代均是一个完整的开发循环,产生产品的一个可执行版本,即最终产品的一个子集。从一个迭代过程到另一个迭代过程,不断增量式地演进,直至实现最终系统。敏捷软件开发:更强调开发团队与业务专家之间的密切协作、面对面的沟通(敏捷开发认为面对面的沟通比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,更注重软件开发中人的作用,更注重应对快速变化的需求的一种软件开发能力。敏捷方法特点:更关注协作。更关注质量。更关注可工作的产品。更关注全才化的专才。是基于实践的,而不是基于理论。IBM对敏捷的定义为:通过持续的利益相关人反馈,使用用例(或用户故事)和一系列短小且是固定时间的迭代去发布高质量的,高可用性的代码。敏捷项目与传统项目对比:在敏捷项目中,需求在整个生命周期中是不断变化的。明确高层次需求,并进行优先级划分。时间是影响紧急业务需求交付的关键约束资源固定,并被有效管理,在指定成本和时间内交付高质量产品。在敏捷项目中,需求通常以任务列表的形式进行描述,其优先级是可动态调整的;而在传统项目中,需求在一开始是被完整定义的和静态的。需求被充分定义和固化,时间就是项目生命周期,变化的资源以减少时间。XP编程:XP是由KentBeck在1996年提出的、适合于中小型系统的、测试驱动的敏捷开发方法。“Extreme”(极限)是指与传统的软件开发方式相对比,XP强调把它的每个方法和思想做到极限,而XP所不提倡的,如开发前期的整体设计等则将一概忽略。XP的关键:一个5-10人的开发团队与客户代表一起在现场工作。开发在不断地迭代,交付的功能不断递增。需求以用户故事的方式进行说明。程序员结对编程,遵循严格的编码标准,并进行单元测试,客户参与验收测试。在整个项目过程中,需求、架构和设计逐渐融合。必须遵循严格的编码限制以保证其代码具有极高的质量。XP 强调四种价值:交流,简易,回馈,勇气。XP特别强调客户满意度,是以构建满足客户需要的软件为目标而产生的方法论。XP强调团队合作,充分发挥人的优势,弱化人的缺点。XP属于轻量级的方法,认为文档、架构不如编程来的直接。Scrum:三个角色(ProductOwner,ScrumMaster,TeamMember)四个会议(Sprint计划会议,每日站立会议,Sprint评审会议,Sprint回顾会议)三个工件(ProductBacklog,SprintBacklog,BurndownChart)Scrum过程:产品负责人根据客户的需求编写产品订单(Product Backlog),这是一张包含大量用户故事的清单,各项需求已按优先级进行排序。然后,产品负责人与团队一起评估并制定产品开发计划,计算出完成该项目需要多少个Sprint(迭代)。由于敏捷开发注重对客户要求的快速反应,因此,产品订单中的内容及其优先级不是一成不变的,而是会随着项目的进行而不断变化的。在每个Sprint开始时,从Product Backlog中拿出优先级高的用户故事,召开Sprint计划会议,评估各项功能的相对工作量,并确定该Sprint的愿景和目标,生成Sprint Backlog。在Sprint的开发过程中,召开每日站立会议,Scrum Master通过十五分钟的每日站立会议检查团队成员的工作与进度,了解开发过程中出现的问题并及时协调。迭代结束时,所有人员参加迭代评审会议(Sprint Review Meeting),向项目干系人展示可运行的增量版本,并检查是否达到了Sprint目标。评审会议之后的迭代回顾会议(Sprint Retrospective Meeting)总结实践经验以提高团队生产力。Scrum的需求:Scrum团队Product Backlog是Scrum的核心,是一切活动的起源。Product Backlog是一个由需求(用户故事或特性等)组成的列表,其中的条目按重要性的级别进行排序。编写Product Backlog就是对需求进行建模。根据敏捷建模“主张简单”的原则,在描述Backlog中的条目时,通常借鉴XP方法中用户故事的描述方式。敏捷建模认为“内容比形式更重要”,在表示Backlog时,可以使用Excel创建Backlog,也可以使用即时贴,将Backlog展示在白板上,使每个人都能直接看到需求模型。Scrum负责需求建模的主要是Product Owner和客户。Product Owner对客户做深入的访谈,分析捕获的需求,再花1-2天时间整理出几十个用户故事。客户看到每个迭代交付的可运行的软件后,常常会有新的需求。经过认真的分析,找出需要立即考虑的或不用急迫实现的。Product Owner在每个迭代内要和客户一起分析好足够下一个迭代开发的需求。在迭代计划会议上,Product Owner向所有的开发人员解释这个迭代要完成的用户故事,开发人员可自由提问,直到他们获得足够信息。开发人员完成一个用户故事后,Product Owner还要来代替客户做验收测试,并检查是否有开发人员还没有想到的异常情况。如果存在问题需要退回给开发人员继续完善。这在一定程度上保证了系统完成的需求不偏离客户的要求。需求分析师:(也叫需求工程师、系统分析师/员、业务分析师),是客户、用户、市场/营销、产品管理和开发之间的联系纽带。他负责获取和编写客户需求并派生出用户需求和软件需求。软件需求分析其根本性问题是理解用户功能需求,由此软件需求分析实际上是与客户间交流过程完成的目标。需求分析师在整个项目管理过程中,扮演一个非常重要的角色,是用户和项目团队的接口。需求分析师工作职责:主要工作职责为:定义业务需求。确定项目涉众和用户类别。获取需求。分析需求。为需求建模。编写需求。主持对需求的确认。引导对需求的优先级划分。管理需求。需求分析师的能力要求:一位好的需求分析师应具备多方面的综合素质,具有坚实的编程功底和丰富的编程经验,合理的知识结构,较强的口头、书面表达能力,思维敏捷,思路缜密,逻辑分析能力强,以有效的获取需求,管理需求团队。具体应具备以下工作技巧:倾听、交谈和提问的技巧。分析和协调能力。观察能力。写作能力。组织能力。建模能力。人际交往和创造能力。

涉众需求

涉众需求:涉众需求是指在某个项目或产品开发过程中,与该项目或产品相关的各方利益相关者(即“涉众”)对该项目或产品所提出的需求。这些涉众可以包括客户、用户、员工、投资者、政府机构、社区组织等等。涉众需求的重要性在于,一个项目或产品的成功往往取决于是否满足了各方利益相关者的需求。如果某些利益相关者的需求被忽略或没有得到妥善处理,可能会导致项目或产品的失败,甚至可能对组织或社会造成不良影响。需求捕获的方法概览:需求捕获是软件项目的基础,对后续的分析、设计及开发有重大影响。如果需求捕获做的好,需求变更将会减少且更容易实现。需求捕获过程的质量也将决定客户对软件需求的正确性、完整性的认可。需求捕获是两个团体相互沟通,识别需要的过程。需求捕获的成功既涉及技术问题,也涉及社会交往问题。需求捕获可进一步分为:确定需求源(识别需求的提出人或称之为风险承担者)。网罗信息(收集各方人员对产品的要求,得到“期望列表”)。整和(反复分析“期望列表”直到前后一致,得到提炼后的文档化的“期望列表”)。头脑风暴:一群人围绕一个特定的兴趣领域产生新观点的情境。在需求分析人员对行业业务缺乏认识或者认识较少的情况下,充分发挥团队成员想象力,利用集体智慧构造出一个业务问题模型和解决方案模型。如果有对业务熟悉的相关人员参加效果会更好,讨论的效率会更高。在项目初期,在项目范围固定下来之前,所有项目均应该至少安排一次头脑风暴。头脑风暴环节:1确定议题:需要在会前确定一个目标,使与会者明确本次会议需要解决的问题。2会前准备:为了使头脑风暴会议取得理想效果,可在会前做适当的准备工作。如分发“热身”资料,使与会者了解与议题相关的背景材料和外界动态。3确定人选:一般以8人~12人为宜,可略有增减(小组全体成员)。与会者人数太少不利于信息交流,激发思维。 4明确分工:会议要有一名主持人,1~2名记录员。在头脑风暴会议开始时,主持人重申讨论的议题、纪律,在会议过程中启发引导,掌握进程, 5规定纪律:主持人开始时规定几条纪律,例如,要集中注意力,积极投入,不消极旁观;不要私下议论,以免影响他人的思考;发言要针对目标,开门见山,不要客套,也不必做过多的解释。6掌握时间:,会议时间最好安排在30~45分钟之间。徜若需要更长时间,则应把议题分解成几个小问题,分别进行专题讨论。头脑风暴过程:第一部分的目标是产生尽量多的想法。自由畅谈。禁止批评和责备。追求数量。变更或合成想法。第二部分的目标则是把想法列表减小到一个可操作的规模。门限投票法。竞选演讲投票法。选择用户角色集合:通过头脑风暴,获取初始的用户角色集合。整理初始的用户角色集合。整合用户角色。提炼用户角色。(不同)用户角色建模:①通过头脑风暴,获取初始的用户角色集合。每个人想到一个用户角色就在记录卡上写下其名称,每个人只是尽量多地在卡片上写出自己想到的用户角色。②整理初始的用户角色集合。把有重叠的角色的卡片也重叠在一起,以表明用户角色之间的关系。这样用户角色就会分成了几个组。③整合角色通常从完全重叠的记录卡入手。首先,记录卡的作者描述他们命名的用户角色的含义,经简短的小组讨论,判断出这些用户角色是否等同,若等同,则合并成一个④提炼角色在整合角色后,就可以对每个角色定义属性来建立角色模型了。角色属性是关于同一类用户的有用信息。下面是一些通用的角色属性。使用软件的频率。使用计算机和软件的总体水平。相关领域的知识水平。用户使用软件的总体目标。例如,有的用户注重便捷性,有些用户则更多关注丰富的用户体验。虚拟人物:虚构人物是假想的用户角色代表。对于虚构人物不仅是在用户角色上加个名字,更重要的是需要对虚构人物的特点进行充分描述,使其活灵活现,让团队中每个人都感觉知道这个人物。极端人物:定义极端人物可能会产生新的用户故事,但是,很难事先确定是否应该把这些用户故事包含在产品中。极端人物有助于搜集原本可能被遗漏的用户故事。访谈:是最常见、最基本的需求捕获技术,也是最直接、最全面和最有效的获取需求的渠道,其中蕴含着大量的技巧,访谈者是否善于运用这些技巧,将直接影响到访谈的效果。访谈技巧之一要求准备一个问题列表,目的是了解真实的问题以及潜在的解决方案。访谈的五个阶段:1、访谈准备。在进行访谈前,需求分析人员应该很好的理解被访谈客户的情况,根据项目类型可能包括组织结构、行业定位、项目范围及项目目标。2、访谈计划在访谈之前应围绕目标对访谈的时间、地点、人员、内容进行计划。尽量将要访谈内容提前发给被访谈者,使其能够提前做好准备,提高访谈效率。需求的不同阶段访谈对象是不同的,且对于不同的访谈对象,其话题中心、访谈目标也是不同的。因此,需要准备不同的问题清单。3、访谈开始和结束:开始访谈时:先简单介绍自己。陈述访谈的目的。谈谈参与访谈者关心的事情。说明有一些简短的访谈纪要,在整理后请与会者审阅。结束会谈时:简短总结讨论过的问题要点,并阐明你的理解。这使被访谈者了解到你认真倾听了他们的谈话,同时也提供了一个澄清误解的机会。4、引导访谈:开场白(陈述预先的理解,聚焦访谈的话题)计划问题(寻求问题的答案,主题工作)即兴问题(扩大需求信息量,不宜过度扩展)总结(总结访谈内容,访谈者向被访谈者陈述)封闭式问题(判断题)半封闭式问题(选择题)开放式问题(简答题)访谈要抓住细节:“4W1H”What:业务的内容是什么Who:哪些人员会参与业务过程When:什么时候发生该业务过程Why:为什么会出现这个问题How:怎么做才能完成业务目标。5、后续的访谈整理工作访谈的优缺点优点:形式灵活、直接有效、交流深入。缺点:语言交流占用时间长,用户代表了解信息不全面,容易造成信息的片面性。需求捕获研讨会:让开发团队与项目涉众见面;从项目涉众那里收集全面的“期望列表”;对所收集到的需求区分优先顺序。研讨会过程:(1)准备研讨会:充分的准备是获得成功的关键。(2)日程安排:需求捕获研讨会的议程应以项目需求和研讨会上所要讨论的开发内容为基础,会因具体的项目而异。(3)举行需求捕获研讨会。业务规则:描述和规定了组织机构的政策方针,用于表示一个特定组织的某个细节规定。若需求描述为特定用户在特定条件下才能执行某一行为时,该需求可能描述的是一条业务规则。业务规则不是功能性需求,需要加以区别。约束:要么是设计中必须遵循的限制,要么经过约束分析、转化为质量属性需求或者功能需求。需求分析员应该核实其正确性,准确表述出真正的约束,并记录把该约束作为需求的原因,让设计人员根据这些信息进行设计。数据字典:是一种用户可以访问的记录数据库和应用程序源数据的目录。当客户描述某一数据,限定了其格式、类型、允许值及默认值时,或者描述某一复杂业务数据内容由哪些数据项构成时,就是在进行数据定义。需求分析员应该把所有的数据定义到一起,形成数据字典。在产品的整个开发和维护过程中,数据字典一直是一个主要的参考。

用例方法

用例:是一种描述系统功能性需求的方法。使用用例来描述系统需求的过程叫做用例建模。用例模型主要由以下模型元素构成:用例和参与者。用例是用来描述系统的功能性需求,而不是非功能性需求。参与者是指系统以外的,需要使用系统或与系统交互的人、设备或其他系统,他们代表的是系统的使用者或使用环境。参与者分为三大类:人,也就是通常所说的用户。对于这一类参与者,应当按照业务命名。与该系统进行交互的其它系统。一些可以运行的进程。通讯关联:通讯关联表示的是参与者和用例之间的关系,表示参与者使用了系统中的用例。在UML中用连线表示通讯关联,箭头表示在这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者。用例的场景:那么所有这些可能发生的各种情况被称之为用例的场景。场景也被称作是用例的实例。在用例的各种场景中,最常见的场景是用基本流来描述的,其他的场景则是用备选流来描述。基本流和备选流:对于ATM系统中的”提款”用例,1.用户插入信用卡 2.输入密码 3.输入提款金额 4.提取现金5.退出系统取回信用卡。我们可以得到如下一些备选流:·提款-备选事件流。备选流一:用户可以在基本流中的任何一步选择退出,转至基本流步骤5。备选流二:在基本流步骤1中,用户插入无效信用卡,系统显示错误并退出信用卡,用例结束。备选流三:在基本流步骤2中,用户输入错误密码,系统显示错误并提示用户重新输入密码,重新回到基本流步骤2;三次输入密码错误后,信用卡被系统没收,用例结束。用例方法的优点:用例方法完全是站在用户的角度上来描述系统的功能的。把被定义系统看作是一个黑箱,描述了系统为外部的参与者提供了什么样的服务,而并不关心系统内部。每一个用例描述的是一个完整的系统服务,易于被用户所理解,是开发人员和用户之间针对系统需求进行沟通的一个有效手段。建立用例模型:使用用例方法来描述系统的功能需求的过程就是用例建模。用例模型主要包括以下两部分内容:用例图:在UML中,一个用例模型由若干个用例图描述。用例图是显示一组用例、参与者以及他们之间关系的图。用例规约:通过用例规约文档描述每一个。用例的细节内容 。用例建模的过程,首先找出系统的参与者,然后根据参与者确定与每个参与者相关的用例,最后细化每一个用例的用例规约。描述用例规约:由参与者和用例构成的用例图并不是用例模型的全部,用例图在总体上描述了系统所能提供的各种服务,使人对系统的功能有一个总体的认识,用例规约用来描述每一个用例的详细信息。也就是说用例模型是由用例图和用例规约组成的。RUP中用例规约模板:简要说明:简要介绍该用例的作用和目的。事件流:包括基本流和备选流,事件流应该表示出所有的场景。 用例场景 :包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。 特殊需求:描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统、开发工具等)。 前置条件:执行用例之前系统必须所处的状态。 后置条件: 用例执行完毕后系统可能处于的一组状态。基本流描述的是用例最正常的一种场景,系统执行一系列活动步骤来响应参与者提出的服务请求。备选流负责描述用例执行过程中的异常情况,备选流和基本流的组合应该能够覆盖该用例所有可能发生的场景。在描述备选流时,应该包括以下几个要素:起点:该备选流从事件流的哪一步开始;条件:在什么条件下会触发该备选流;动作:系统在该备选流下会采取哪些动作;恢复:该备选流结束之后,该用例应如何继续执行。用例场景是用例的实例,也就是说用例在实际执行的时候会有很多的不同情况发生.检查用例模型:功能需求的完备性:现有的用例模型是否完整地描述了系统功能,这也是判断用例建模工作是否结束的标志。 模型是否易于理解:用例模型最大的优点是易于被不同的涉众所理解,因而用例建模最主要的指导原则就是它的可理解性。用例的粒度、个数以及模型元素之间的关系复杂程度都应该遵循该指导原则。是否存在不一致性: 用例模型由多个系统分析员协同完成,模型本身由多个工件所组成的,所以同工件之前是否存在前后矛盾或冲突的地方,避免模型内部产生不一致性,影响到需求定义的准确性。 避免二义性语义: 好的需求定义应该是无二义性的,即不同的人对于同一需求的理解应该是一致的。在用例规约的描述中,应该避免定义模糊的需求,即无二义性。用例方法的局限性用例在捕获系统功能需求上表现很优秀,但其只涉及功能性需求,并不适合方便的捕获非功能性需求,还需要借助于其它的方法。用例模版不能自动保证清晰,清晰要依靠书写者的技巧。用例分析结构的好坏与分析人员的个人经验和领域知识有很大的关系。用例与敏捷项目:在大规模的精益和敏捷项目中,用例作为需求建模的工具很有价值。在精益和敏捷(特别是XP和Scrum)中,用例的使用范围并不广,人们更多地使用用户故事收集需求,但是在构建大规模复杂系统时,用例可以发挥其强大作用,发现用户、系统以及子系统之间的互动关系。

用户故事

定义:用户故事就是系统要为用户所做事情的简短的陈述。是用开发者和用户都能理解的方式定义系统行为的工具。重点集中在用户定义的价值上,而不再把重点放在传统的功能性的结构分解上。提供了一种轻量级的、有效的管理需求的方法。XP项目中的用户故事:用户故事起源于XP。故事是XP项目中的功能单元;团队通过交付实现的故事展示项目的进展;一个故事对客户应该是可理解的,对开发者是可测试的,对客户是有价值的,并且要足够小,使得一个编程人员在一个迭代中能完成多个(如6~10个)。谁写用户故事:在XP项目中,通常由客户书写用户故事,这样客户需要直接参与整个项目的开发过程。在Scrum项目中,产品经理(Product Owner)常常书写用户故事。基本概念:用户故事利用索引卡或在线工具记录对一个功能的简短陈述。用户故事的简短描述中不会出现系统行为的细节,要想实现用户需要的功能,还应该有更详细的细节和验收标准。用户故事的组成:用户故事的组成 -3C卡片包含了用户故事的简短文字描述、沟通获得的细节、测试时的细节。卡片(Card),用2~3句话简短描述故事的目的,用来做计划(工作量估算)或者备忘。对话(Conversation),记录用户故事背后的细节,来源于和客户或产品负责人的沟通交流。确认(Confirmation),代表验收测试,即客户和产品经理如何确认故事已经根据用户的要求实现。确认表示的是判断用户故事是否完成所满足的条件,是更详细的需求。通过客户或客户代理验收测试,确认用户故事被正确地完成。用户故事标准形式:作为一个<角色>,我能做<活动>以便于<商业价值>。<角色>代表谁正在执行指定的活动或谁会收到活动执行的结果。<活动>代表系统执行的动作。<商业价值>代表通过执行活动获得的益处。用户故事的细化:当用户故事能涵盖细节时,就不必再进行分割了。用户故事验收条件:验收条件应该简单、扼要,可以随时增加或删除,验收的目的就是验证用户的期望是否已经满足,若已经达到了用户的期望,则开发人员就该结束该故事。验收条件不是单元测试而是系统应该满足的条件。单元测试需要更深入地测试功能流、异常流、边界条件及与故事相关的所有功能。用户故事的验收测试:在敏捷开发中把功能确认称为“用户故事验收测试”,即验证用户故事确已正确实现。为了与用户故事本身相区别,把“用户故事验收测试”作为一种工件。验收测试是验证系统是否实现了用户故事预期目标的功能性测试。为了避免产生大量的手工测试,故事的测试尽可能采用自动测试。用户故事的单元测试:开发人员进行单元测试的目的是测试子模块代码的执行逻辑。在测试驱动的开发模型中,在编码之前就要写好测试用例。总之,必须经过编写测试用例、测试通过,然后建立自动测试框架,一个故事才算完成。用户故事和用例的区别:用户故事:作用:1.作为进度跟踪的依据;2.作为与人交谈的备忘录。不是精确的需求,不需要非常清楚的描述,把详细分析推迟到实现前夕进行。用户故事是可见的商业价值,而不是功能描述。用例:需要详细的描述各操作步骤以及所有异常路径,起到文档的作用。功能描述,不同用例的粒度和工作量可能相差很大。INVEST模型:独立性(Independent)独立性意味着一个故事可以独立地开发、测试甚至交付,因此,也能单独对其进行评价。可协商性(Negotiable)用户故事是可以讨论的。它们不是签署好的合同或者软件必须实现的需求。故事卡是功能的简短描述,细节将在客户和开发团队的讨论中产生。由于没有过度的限制和过多的需求细节,增强了团队和企业在功能和交付日期之间进行权衡的能力。有价值的(Valuable)每个用户故事必须提供一些价值给用户、客户或干系人。价值是INVEST模型中最重要的特性。未完成产品订单是根据价值进行优先级排序,产品的成功与失败也是基于团队交付的价值而定。可估计的(Estimable)团队应该能对故事的复杂性和需要的工作量进行一个大概的估计。为了每个迭代都能交付价值,对一个故事的估计至少应能确定它在一个迭代中是否可以完成,更加准确的估计将提高团队的可预测性。短小(small)一个用户故事能在一个迭代中完成,否则,团队无法提供任何价值。短小的故事能降低故事的复杂度,增强生产能力,使团队更敏捷高效。写软件功能的规则:规则1:做一件事情。规则2:短小。规则3:让它们更小。可测试性(Testable)每个故事都是可测试的。成功通过测试可以证明开发人员正确的实现了故事。为了保证不能完成的用户故事就不能进入迭代,许多敏捷团队采用“测试先行”的方法,即在写代码之前先写测试用例。封闭的用户故事:是指那种随着一个有意义的目标的实现而结束的用户故事,能让用户使用后感觉完成了某个任务的用户故事。团队应基于用户故事实现的时间跨度,编写故事。根据实现时间确定用户故事的规模。故事点估算:一个团队可能定义一个理想日(没有会议,没有电话,没有电子邮件,也就是没有任何打扰的一天)的工作为一个故事点。另一个团队可能定义一个理想周的工作为一个故事点。相较于用连续时间估算,理想时间更简单,因为用持续时间估算时人们不得不考虑周围可能的各种影响,估算用户故事由整个团队集体完成有两个原因:还不知道团队中的谁会负责实现该用户故事,所以要把故事分配给整个团队而不是某人。团队进行估算可能比某人估算更有用。Wideband Delphi估算方法:把所有参与估算的开发人员和客户聚在一起。客户随机抽取一个用户故事,读给所有开发人员听。开发人员根据需要尽可能多提问,客户尽其所能解答。每个开发人员在空白笔记卡上写下一个估算值,每人展示其估算值。若估算值不同,估算值高的和低的再解释一下估算依据。估算了几个故事后,应该对估算进行三角测量。三角测量就是根据这个故事和其它故事的关系来估算故事。三角测量做法:在墙上画一些竖线,每一列标明故事点数,然后把故事卡贴到相应的列中,对每个新故事进行估算后,将其放到相应的列中,可以很快地检测出刚估算的故事和这列的其它故事比较是否基本相同。故事点的应用:在一轮迭代结束时,团队会计算已完成的故事点数(冲刺回顾会议、评审会议)。因为下一轮迭代也应该完成同样的故事点数。“速率”表示团队在一轮迭代中完成(或期望完成)的故事点数——团队的开发能力评估。发布计划:发布周期:软件项目通常以2到6个月为一个新的发布周期,某些网站项目可能发布周期更短。什么时间发布?由于开发速率是预测的,团队做发布计划时希望可以和客户商定一个日期范围,而不是一个具体的日期。团队可以做出这样的发布计划:在2或3轮迭代后,系统会有最基本的功能,5到6轮迭代后,系统会有1.0版本的所有功能。故事的优先级是怎样的?为了制定一个发布计划,客户必须排列故事的优先级。莫斯科(MoSCoW)规则:必须有(Must have):系统的基本功能。应该有(Should have):很重要,但近期有替代方法的功能,将来一定要有的。可以有(Could have):如果时间不允许,发布中可以不考虑的功能。这次不会有(Won’t have this time):客户希望有,需要在后续发布中实现的功能。选择迭代长度:开发人员和客户要一起选择适合的迭代长度:一般为1至4周。短迭代的好处是允许项目较频繁地进行调整,项目进展更透明;但是,每轮迭代会有一些额外的开销。与短迭代相比,长迭代中出错的几率更大。在项目开发过程中,尽可能地保持固定的迭代长度,有利于团队的开发速度。获得初始速率的方法通常有以下三种。使用历史值(适合于团队人员没有变化且刚做过类似的项目 ——这种情况非常少见)。执行第一轮迭代,后面使用第一轮迭代的速率(适合开发成本较低的项目)。猜测 (适合开发成本较高)。将用户故事分解为任务:1将故事分解为更小的任务会更加符合项目的需要。有助于发现那些可能会被遗忘的任务。故事分解任务准则:若故事的某个任务难于估算(比如数据支持的格式列表需要上级领导的批准),就把该任务从其它任务中分离出来。2通过分解可以让多个开发人员合作完成同一个故事。例如,在上面故事的分解中,实现基本、高级搜索界面就是分开的任务。若团队正在使用用户界面设计师或专门的界面设计小组,“实现基本的搜索界面”也可以分解为两个任务:“设计基本搜索界面的布局”和“实现基本搜索界面的代码”。3若希望让客户了解故事某一部分的完成情况,可以把那部分分离出来作为一个任务。若承担的任务难以完成,可以有以下选择。请求团队中的其他成员接手一部分任务。留着所有任务,寄希望于一切顺利。与客户讨论,放弃一些任务。

非功能性需求与制作需求原型

非功能性需求类型:易用性需求。观感需求。执行需求。操作及环境需求。可维护性及支持需求。安全性需求。文化政策及法律性需求。敏捷需求模型中的非功能需求在敏捷项目中,由于整个团队的焦点集中在未完成订单上,不会专门为非功能性需求进行建模,通常把非功能性需求作为未完成订单的限制。易用性:易用性是指软件被理解、学习、使用和吸引用户的能力。易用性的三原则:易见:就是各种功能操作不要藏得太深,用户很容易找到他们期望进行的各种操作。易学:是指通过在线帮助,导航,向导等方式保证软件是可自学的。易操作:熟练使用软件后应该可以更快更方便进行各项操作。还涉及到美工和UI界面,人机工程,交互式设计,心理学,用户行为模式等多方面的知识。可靠性:可靠性是指与在规定的一段时间和条件下软件维持其性能水平的一组属性:可用性:在要求的外部资源得到保证的前提下,产品在规定的条件下、规定的时刻或时间区间内处于可执行规定功能状态的能力。平均无故障时间:是指平均能够运行多长时间才发生一次故障。平均修复时间:描述产品由故障状态转为工作状态时修复时间的平均值。缺陷:缺陷会降低系统的可用性和用户的满意度。安全性:例如,要求安全级别较高的密码容错性:当错误发生时,软件会给出适当的提示或处理。可靠性与维护性:当系统出现故障和用户出现错误操作后是否支持恢复。当用户遇到错误的时候是否可以立即定位问题。当网络不稳定或异常发生的情况下,系统是否具有相应的容错措施。当业务场景和逻辑发生变化的时候系统是否支持。性能:性能需求:软件需要以特定的精度、速度或容量执行某些任务。性能需求具体方面:响应时间:通常用特定事务的平均和最坏情况表示。吞吐量:如在单位时间内完成的任务数,数据的传输速率等。容量:系统能同时容纳的客户数、事务数或数据量等。可扩展性:系统可扩展为同时容纳更多客户、事务的能力。资源利用率:说明该系统使用CPU、内存、磁盘存储、带宽等资源的情况。执行结果的精度:例如,在财务系统中,产生的结果是精确到分、角还是元等。允许值的范围。可维护性:软件的可维护性是指维护人员为纠正软件的错误、缺陷或满足用户新的需求而理解、修改和改进软件的难易度。可维护性的评价维度:可读性:指编码风格,如格式、命名、对齐、注释等。可理解性:强调代码编写应遵循的约定俗成的模式,不要将代码写的太个性化,使人难以理解;可追溯性:代码各部分之间依赖越少,隔离性越强,则追溯越容易。可改变性:是指对软件作出修改的容易程度。一是找到修改点的难度;二是修改对软件的其他部分造成影响的程度。稳定性:修改局部代码不应产生过多的不良后果 (封装、数据隐藏、分离组件和服务、数据抽象和进行类型检查等手段)。可测试性:指一个软件能够被测试的容易程度。在一定的时间和成本前提下,进行测试设计、测试执行,发现软件存在的问题,以及对故障进行定位、隔离的能力特性。可测试性好的软件必然是一个强内聚、弱耦合、接口明确、意图明晰的软件。观感需求:观感需求主要描述对产品外观、风格的期望。环境与操作需求:设计之初就应该考虑要注意软件工作的具体环境。操作需求通常包括下列内容:操作环境,如系统和物理环境。用户的情况,如视力差等。伙伴或合作系统。安全性需求:主要关注什么不应该发生。两个来源可导致产生安全威胁一是开发人员在软件的设计和实现过程中出现的纰漏和错误。二是系统开发人员对软件面临的安全问题考虑不够充分、不够完整。设计限制来源:某些必须的设计选项的限制。开发过程自身的条件限制。法规及标准。非功能性需求的描述(用户故事):作为一个用户,我想要在Windows95及其之后的任何版本上运行该产品。作为CTO,我想要软件能使用现有的订单数据库,而不是创建新的数据库,这样我们就不需要维护两个数据库了。作为一个用户,我想要这个网站在99.99%的想访问的时候可以访问它,这样我就不需要再麻烦地去找其它站点了。作为一个阿拉伯语的使用者,我想要使用这个系统。快速原型:使用快速原型进行反复交流、细化需求,就成为一种有效的技术。一个软件的原型,主要是模拟重要的功能和界面。一个软件的原型也可能是真实系统的一个模型或一部分,即真实功能的可视化显示或一部分,可能根本无法完成任何有用的功能。建立原型的目的:明确并完善需求。研究设计方案。发展为最终产品。确定系统的可行性。低保真原型:在纸上画的的草图或原型,也可以是在电脑上设计的产品页面。低保真原型的作用是表现产品中最重要的用户流程和功能所涉及的页面关系。展示产品的核心功能、信息架构以及页面间流程。确定产品UI的基本布局,例如确定页面元素和各部件的尺寸、位置以及页面中留白的使用情况。适合快速的头脑风暴,并向客户、开发和项目参与者演示设计想法,适合将一些早期的用户测试集成到产品设计中。 优点:设计人员对屏幕布局进行构思,不必关心布局中控件的精确位置及其外观,画出向最终用户显示的书面版本,设计各种各样的使用场景,分析人员可以根据用户的反馈,对原型进行快速充分的修改,理解用户如何与系统交互。由于创建低保真原型所需时间短、修改方便,因此,非常适合进行需求的探索、尝试和修改。开发团队不仅可以理解用户的真正需求,而且可获得潜在的需求。高保真原型:高保真原型是通过工具软件创建的,具有与软件产品相似外观。高保真原型展示的细节比低保真更深入细致,高保真原型是尽可能接近最终产品的样式。高保真原型比低保真原型更细节化,这让风险承担者有更多的机会探索用例的所有可能性。(1)进阶的页面设计。高保真原型的目标是对最终产品的讨论,包括在最终产品中看到的所有内容,例如产品的颜色、渐变、阴影、图形以及排版等。(2)进阶的互动原型和功能。高保真原型会进一步展示产品的动效情况,例如菜单、下拉列表、拖放等动效。还可能包含页面上移动的图形和动画,或者用户可以操作的元素。要点:(1)高保真原型要与最终产品高度一致。(2)轮播功能和交互功能。(3)高保真通常意味着带有色彩。区别:低保真和高保真原型之间的区别在于涉及的细节程度。故事板:开发人员可以把用户的需求看做是一个个需要讲述的故事。故事板可以将人们头脑中的概念转换成易于理解的实体,一个故事板“讲述一个特定的故事”。是一种获取解决方案表现方式、探究系统上下文,探索系统不同解决方案的方法。获取特定情景中系统功能逻辑和概念描述。故事板创建:建立的新功能(多要素复杂性)看做一个故事,将它分解为一系列的步骤或动作,故事板对每个步骤或动作的用户界面进行描述。故事板与原型:原型仅局限于屏幕环境的设计,忽略了屏幕之外的情景,故事板通过使用关键场景有助于理解屏幕之外的用户目标和动机。虚拟人物:虚构人物描述了一个虚拟的用户,它代表了一个基于真实用户的典型使用者。通过采用具有名称、个性、行为等特征的人,使这类用户成为鲜活的人物。创建虚拟人物目的:确保开发了用户群的所有需求。扮演一个用户,有助于对功能及其设计作出决策。使故事板集中于一个非常具体的用户背景(上下文)和目的。使用场景:使用场景描述一个人物如何与系统进行交互,从而执行一个特定任务。先决条件:明确问题。明确故事板制作的目的。明确故事板制作的类型。确定故事板应用在开发生命周期中的阶段。确定保真度。识别利益干系人的角色。识别限制条件。

试题分析

一,给出软件项目背景,实验室预约背景(软件需求过程基础理论和技术)1.什么是软件需求过程?主要包括哪些阶段?每个阶段的工作目标是什么? 一、软件需求过程是指在软件开发过程中,对软件需求进行识别、分析、规划、管理和验证的一系列活动。软件需求过程的主要目标是确保软件开发过程中所开发的软件能够满足用户需求和预期的功能,同时还要满足质量、性能、安全等方面的要求。二、需求获取:在这个阶段,与客户沟通,了解客户的需求,明确软件产品的功能、性能、质量等方面的需求。需求分析:在这个阶段,对需求进行详细的分析,梳理出软件产品的各项功能需求,制定详细的需求规格说明书。需求确认:在这个阶段,与客户确认需求规格说明书的准确性和完整性,确保需求符合客户的实际需求。需求验证:在这个阶段,通过验收测试等方式验证需求是否满足客户的实际需求。需求管理:在整个软件开发过程中,需要对需求变更、需求跟踪等进行管理,确保软件产品的需求得到有效的控制和管理。三、每个阶段的工作目标如下:需求获取:明确客户的需求,为后续的需求分析和设计提供基础。需求分析:详细分析需求,明确软件产品的各项功能需求,制定详细的需求规格说明书。需求确认:与客户确认需求规格说明书的准确性和完整性,确保需求符合客户的实际需求。需求验证:通过验收测试等方式验证需求是否满足客户的实际需求。需求管理:对需求变更、需求跟踪等进行管理,确保软件产品的需求得到有效的控制和管理。2.简答什么是业务需求,用户需求,系统需求?结合前文给出的项目背景,每类需求均举一个例子进行具体说明。 一、业务需求(Business Requirements):指企业或组织在经营活动中所面临的问题或机遇,需要使用软件来解决或实现的需求。通常由企业高层管理者或业务人员提出,主要关注的是企业的战略、目标和利益,是软件开发的起点。用户需求(User Requirements):指最终用户在使用软件过程中所需要的功能、性能、易用性等需求。通常由用户代表、产品经理或市场调研人员提出,主要关注的是用户在使用软件时的体验和需求。业务需求:即系统目标,描述组织的高层目标,从总体上描述为什么要开发系统。用户需求:用户需求描述用户使用产品必须要完成的任务,即描述用户使用系统能做些什么。通常通过对用户进行访谈、召开研讨会,对用户的工作场景进行整理,建立需求模型等,获得用户角度的需求。系统需求(System Requirements):指软件系统在设计和实现过程中必须满足的功能、性能、安全性、可靠性等要求。通常由软件开发人员、架构师或系统管理员提出,主要关注的是软件系统的技术实现和可行性。二、业务需求:能够实现会议室的预定和使用计划的管理。具体而言,系统需要支持用户查询可用的会议室,预定会议室并记录预定信息,以及支持会议室使用计划的管理,包括预定状态、占用状态、使用时间等信息。用户需求:用户可能希望能够通过系统方便地查询和预定会议室,能够看到会议室的具体信息和可用时间,并且能够方便地取消预定。另外,用户可能希望系统能够提供多种预定方式,比如通过网页、手机应用或者语音指令等方式进行预定。系统需求:对于会议室智能管理系统,其中一个系统需求可能是:系统需要能够支持高并发的预定和查询请求,同时保证系统的响应速度和稳定性。另外,系统需要支持数据备份和恢复,以保证数据的安全性和可靠性。3.请简答什么是功能性需求,非功能性需求?结合前文,写出最重要的功能性需求和非功能性需求(会议室预约,管理)(并发性) 一、功能需求:规定了产品中必须实现的软件功能,用户通过这些功能完成各项任务,满足其业务需求。功能需求有时也被称为行为需求,因为它通常是对产品的一个行为进行描述。(对比静态的功能点,某个活动流程以及相关的串联的功能点)非功能性需求:指软件产品为满足用户业务需求而必须具有的除功能需求以外的特征和限制,它描述了产品必须具备的属性或品质。主要包括(质量属性,限制条件,外部接口)二、1功能性需求:预约会议室功能:系统能够提供在线预约会议室的功能,包括选择会议室、日期、时间、参与人员等信息,确保用户能够方便快捷地预约到符合自己需求的会议室。会议室管理功能:系统能够提供会议室管理的功能,包括会议室信息的录入、修改和删除,以及会议室使用状态的查询和统计,确保管理员能够方便地管理会议室,把控会议室的使用情况。会议提醒功能:系统能够提供会议提醒功能,通过短信、邮件、推送等方式提醒用户会议的时间、地点和议程等信息,确保用户不会因为遗忘而错过会议。2、非功能性需求:性能:系统应该能够在高峰期支持至少100个并发用户,并保持快速响应时间,响应时间不超过1秒。并发连接数:系统应该能够支持至少100个同时连接的用户。并发会话数:系统应该能够同时处理至少50个用户的会话。负载均衡:系统应该能够自动进行负载均衡,以确保系统资源的合理分配,负载均衡的时间不超过5秒。缓存机制:系统应该能够缓存至少1000条常用的数据,以提高数据访问速度,缓存时间不超过1小时。事务处理:系统应该能够支持至少10个并发事务,并确保事务的一致性和可靠性。错误处理:系统应该能够正确地处理至少99%的并发操作中出现的各种错误,并向用户提供相应的提示和解决方案。安全性:系统应该采取必要的安全措施,确保用户数据的安全性和隐私保护,系统应该支持用户登录验证和访问授权控制。可扩展性:系统应该具有良好的可扩展性,能够适应系统规模和负载的增长,系统应该支持水平扩展和垂直扩展。易用性:系统应该易于使用且直观,以便用户能够快速预约和管理会议室,并提供友好的用户界面和操作指南。可靠性:系统应该保证预约和管理过程的可靠性,以避免因系统失效而造成的会议延误或取消等问题,系统应该支持数据备份和恢复机制,确保数据的完整性和可用性。日志记录:系统应该记录所有用户的操作和系统的运行状态,以便系统管理员进行故障排查和系统性能优化。二,软件需求捕获和分析1.头脑风暴,产生初始用户角色,列出所有能想到的用户角色名称?为提炼后的角色建模,要求最后的用户角色 一、在进行头脑风暴时,我们可以尝试从不同的角度去思考可能的用户角色。以下是一些能想到的用户角色名称:学生,教师,教务管理员,信息技术(IT)支持人员,会议室管理员,外部讲师,校友,访问学者,校园安保人员,校园设施维护人员。二、经过进一步提炼,我们可以将用户角色确定为以下五个:学生,教师,教务管理员,信息技术(IT)支持人员,会议室管理员。三、现在,我们来分析每个角色的主要属性:学生:学号,姓名,所属班级,专业,电子邮件地址,预定会议室权限,预定历史。教师:教职工号,姓名,所属学院,专业方向,电子邮件地址,预定会议室权限,预定历史,课程安排。教务管理员:工号,姓名,电子邮件地址,系统管理权限,预定审批权限,用户管理权限,会议室信息管理权限。信息技术(IT)支持人员:工号,姓名,电子邮件地址,系统维护权限,硬件和软件故障处理权限。会议室管理员:工号,姓名,电子邮件地址,会议室管理权限,预定审批权限,会议室维护和清洁安排权限。2.针对研究生导师制订一份需求捕获方案(访谈计划或调查问卷)一、访谈计划:访谈时间:建议在工作日内,研究生导师方便的时间段,预计时间为1小时左右。访谈人员:项目团队成员、研究生导师。问题清单:您在使用会议室的过程中,最常遇到的问题是什么?您对现有的会议室预约系统有何评价?它是否满足您的需求?您对于会议室智能化管理系统的期望是什么?您认为在会议室智能化管理系统中,哪些功能是必须的?您对于会议室智能化管理系统的安全性有何要求?如果您是系统的管理员,您希望管理系统具备哪些权限和功能?您对于会议室智能化管理系统的用户界面和易用性有何要求?您希望系统是否能提供实时数据分析和报告功能?如果系统出现故障,您希望能够如何快速解决?您对于系统的使用方法和培训有何要求?二、调查问卷:您是否了解该大学会议室智能管理系统?您是否曾使用过该系统?如果使用过,您对该系统的使用体验和效果满意吗?您在使用会议室的过程中遇到过哪些问题?有哪些需求和建议?您对系统的预订会议室、管理预订信息、查看会议室状态和设备等功能有哪些期望和需求?您对系统的界面风格、布局、颜色等方面有哪些期望和建议?您对系统的数据安全和权限管理等方面有哪些期望和建议?您认为会议室智能管理系统对您的工作或学习有哪些帮助?三,需求规格编写1.编写用户故事,采用3C卡片,针对每一部分都给出完整且高质量的描述 卡片(Card):作为一名研究生导师,我想能够方便地预约大学会议室,并获得会议室的实时使用情况,以便于更好地安排和组织学术活动。对话(Conversation):研究生导师:我需要预约下周三下午2点到5点的会议室来举办一个小组讨论会,能否提供可用的会议室?系统:好的,我们的系统中有以下会议室满足您的需求:XX会议室、YY会议室和ZZ会议室。请问您需要预约哪一个?研究生导师:我需要预约XX会议室。系统:明白了,XX会议室在您需要的时间段内是可用的。请问您需要对该会议室进行何种设置?例如:是否需要投影仪、是否需要提供饮料等。研究生导师:我需要投影仪,其他不需要。系统:好的,投影仪已经为您预约好了。请注意,您需要在预约开始前15分钟到达会议室并进行签到,否则您的预约将会被自动取消。同时,在您使用会议室时,您可以通过我们的系统查看当前会议室的实时使用情况。研究生导师:那我如何查看会议室的实时使用情况呢?系统:您可以在系统中选择查看当前会议室的实时使用情况,系统会实时更新会议室的使用情况,并将其显示在您的屏幕上。研究生导师:好的,那我现在可以确认我的预约信息了吗?系统:是的,请确认您的预约信息。同时,我们会通过短信和邮件的形式提醒您预约的详细信息。确认(Confirmation):研究生导师:确认预约信息无误。系统:已确认预约信息,谢谢使用我们的会议室预约系统。同时,祝您的学术活动顺利。卡片:作为一个大学教职员工,我希望使用智能管理系统来方便地预订和管理大学会议室,以提高会议室资源的利用效率。注释:用户角色:大学教职员工目标:方便预订和管理大学会议室,提高资源利用效率优势:简化预订流程,实时查看会议室可用性,自动化管理测试:测试1:给定一个大学会议室智能管理系统,当用户登录系统后,系统应显示可用的会议室列表。验证步骤:输入正确的用户名和密码登录系统。检查系统是否正确地显示了可用的会议室列表。预期结果:系统应正确地显示可用的会议室列表,包括会议室的名称、容量和当前可用性状态。测试2:给定一个大学会议室智能管理系统,当用户选择一个会议室并填写预订信息后,系统应成功地完成会议室预订。验证步骤:在系统中选择一个可用的会议室。填写预订信息,包括预订日期、时间、参与人数等。确认预订并检查系统的响应。预期结果:系统应成功地完成会议室预订,并显示预订成功的提示信息。测试3:给定一个大学会议室智能管理系统,当用户查看已预订的会议室时,系统应显示正确的预订信息和参与人员列表。验证步骤:登录系统并进入预订管理页面。查找已预订的会议室,并点击查看详细信息。检查系统是否正确显示了预订信息和参与人员列表。预期结果:系统应正确地显示已预订的会议室的详细信息,包括预订日期、时间、参与人数以及参与人员列表。2.将用户故事分解为可估计的开发任务,并估算该用户故事的规模(故事点)并给出估算依据。 以下是将用户故事分解为可估计的开发任务,并给出估算依据:1、根据预约信息查询可用会议室列表(2个故事点):开发一个查询可用会议室的功能,该功能可以根据预约的时间段和会议室设备要求,返回可用的会议室列表。估算依据:这是一个中等规模的开发任务,需要设计查询算法和数据库查询语句。2、预约会议室(3个故事点):开发一个预约会议室的功能,该功能可以根据用户的预约信息,预约指定的会议室,并将预约信息保存到数据库中。估算依据:这是一个较大规模的开发任务,需要设计预约流程、数据库表结构和相关的验证逻辑。3、查询会议室实时使用情况(2个故事点):开发一个查询会议室实时使用情况的功能,该功能可以根据用户选择的会议室,返回该会议室的当前使用情况。估算依据:这是一个较小规模的开发任务,需要设计查询算法和数据库查询语句。4、发送预约短信和邮件提醒(2个故事点):开发一个发送预约短信和邮件提醒的功能,该功能可以在用户预约成功后,向用户发送预约信息的短信和邮件提醒。估算依据:这是一个较小规模的开发任务,需要设计邮件和短信发送接口,并编写发送逻辑。5、总估算故事点数为9个故事点。估算依据为:根据开发任务的规模和难度,以及开发人员的工作效率,综合估算得到。其中,1个故事点约等于一名开发人员在一天内完成一项中等难度的开发任务所需的工作量。四,原型设计与需求管理1.选取一个功能,绘制低保真原型(纸上原型),并对原型中主要界面元素给出简要的文字描述。 以下是主要界面元素的简要文字描述:1、预约会议室页面:整个页面分为三个部分,分别是会议室信息、时间选择和设备选择。会议室信息部分显示了可预约的会议室列表,包括会议室名称、容纳人数、设备等信息。时间选择部分可以通过日历和时间段选择器选择预约的时间段。设备选择部分可以选择需要的设备,例如投影仪、音响等。2、会议室信息弹窗:当用户在预约会议室页面选择一个会议室后,点击该会议室的预约按钮,可以弹出一个会议室信息弹窗。该弹窗显示了该会议室的详细信息,包括会议室名称、容纳人数、设备、位置等。3、时间选择弹窗:当用户在预约会议室页面选择时间段时,可以通过点击时间段选择器弹出时间选择弹窗。该弹窗显示了可选的时间段,用户可以在弹窗中选择需要的时间段。4、设备选择弹窗:当用户在预约会议室页面选择设备时,可以通过点击设备选择器弹出设备选择弹窗。该弹窗显示了可选的设备列表,用户可以在弹窗中选择需要的设备。5、预约成功提示框:当用户成功预约了会议室后,会出现一个预约成功提示框,显示预约成功的信息,包括预约时间、会议室和设备等信息。同时,会提供返回和查看预约详情的操作按钮。2.团队遇到了需求变更情况,请简述你将综合运用哪些技术,如何实现对需求变更的管理。 1、敏捷开发方法:采用敏捷开发方法,将需求分解为可迭代的小块,每个迭代周期内只开发一个小块需求,以便于在开发过程中能够更好地适应需求变更。同时,敏捷开发方法还强调开发人员和用户之间的紧密合作,以便于及时获取用户反馈和需求变更信息。2、用户故事和原型设计:在需求变更时,采用用户故事和原型设计的方式,将用户需求转化为可视化的故事卡片和低保真原型,以便于开发人员和用户之间更好地理解需求变更内容和影响。同时,用户故事和原型设计也有助于在需求变更过程中及时发现和解决问题。3、版本控制工具:使用版本控制工具,如Git等,及时记录需求变更的内容和时间,并及时备份和恢复代码和文档,以便于在需求变更后能够更好地跟踪和管理代码和文档的变化。4、需求变更管理工具:使用需求变更管理工具,如JIRA等,管理需求变更的内容和状态,及时跟踪需求变更的进度和影响,以便于在需求变更过程中及时发现和解决问题。5、代码重构技术:在需求变更后,采用代码重构技术,对相关的代码进行重构和调整,以适应新的需求变更。同时,也要及时更新相关的文档和测试用例,以保证代码重构后的质量和可维护性。3.无论在哪种开发模型中,软件需求都被认为是一项非常重要的工作,结合本学期的实际项目经验,简述你对该观点的看法并对今后做好需求工作给出一些建议? 我认为,软件需求确实是一项非常重要的工作,它直接决定了软件系统的功能、性能、可靠性和用户体验等方面,对于软件项目的成功与否起着至关重要的作用。在大学会议室智能管理系统的实际项目经验中,我也深刻体会到了软件需求的重要性。在项目启动阶段,我们花费了大量的时间和精力,与用户和领导进行沟通和交流,了解他们的需求和期望,细化需求并制定了详细的需求规格说明书。这些工作为后续的开发和测试工作奠定了坚实的基础,也保证了项目的顺利进行和交付。基于以上经验,我认为在今后做好需求工作中,可以采取以下建议:1、与用户和领导保持密切沟通:及时了解用户和领导的需求和期望,掌握他们的态度和想法,以便于更好地进行需求分析和规格说明。2、采用多种需求分析技术:例如用户故事、原型设计、数据流图等多种需求分析技术,以便于更全面地了解需求和涉众的期望。3、制定详细的需求规格说明书:制定详细的需求规格说明书,包括需求描述、功能需求、性能需求、界面需求等方面,以便于开发人员和测试人员更好地理解需求和进行开发和测试工作。4、及时处理需求变更:在项目开发过程中,可能会出现需求变更的情况,需要及时进行处理,以避免对项目进度和质量的影响。5、进行需求验证和确认:在需求规格说明书编写完成后,需要进行需求验证和确认,以确保需求的准确性和完整性,同时也有助于发现和解决需求规格说明书中的问题和不足。综上所述,做好需求工作对于软件项目的成功至关重要,需要采用多种需求分析技术、制定详细的需求规格说明书、及时处理需求变更、进行需求验证和确认等措施,以确保需求的准确性和完整性,为后续的开发和测试工作奠定坚实的基础。