第一篇:论软件需求分析方法和工具的选用
论软件需求分析方法和工具的选用
【摘要】
本文讨论《企业人事信息系统》项目的需求分析方法与工具的选用。该系统的建设目标是帮助该企业管理好企业内部的人员和人员的活动,人事信息管理指的是企业员工从招聘面试到离职退休的全过程,涉及的主要活动包括面试、报到、培训、升职、离职或其他的人事变动,也包括电子化考勤、工资性收入的计算与分发、使用其他公司资源的有关记录(如宿舍、保险、证件办理等等)。此外,本系统也涉 及到企业在全国各地的人事信息管理,企业的组织架构的设置,级别与职务管理,人力申请直至人力需求报表,从而形成一个对企业真正有用的人事信息管理应用系统。在本文中首先讨论了选用面向对象方法与工具的主要理由与策略,进一步通过一个简例说明该方法与工具使用的效果,也讨论了使用多种工具与方法在需求分析中的必要性,最后简要小结了选用正确工具与方法的意义和作用。
在项目开展期间,我担任了系统分析、系统设计与数据库管理等大量工作。
【正文】
人事信息管理系统是一个有着广泛应用面的实用性系统,但是,我国各个企业有着自身的体制、机制、特点与不同的要求;在开发这类系统时,系统需求分析是极为重要的一环。在整个分析过程中,我们都采用了面向对象的分析方法,这是因为我们在近几年的实践中已坚信这种方法能够更加有效地表达和描述现实世界。软件要具有适用性和扩展性,就必须更接近于现实世界本身的发展规律。
以一个简单的例子来看,假设要求设计关于引进人才评估的一个系统,按我们过去的做法,先会要求提供给我们一份相关的引进人才评估表,然后依葫芦画瓢地设计相应的表单与界面。在短期来说,这样做是简便而实用的,但并不能够符合现实世界的长远目标,这套设计方法不具有扩展性,因为任何一份评估表的结构都会有可能发生许多改变的。采用面向对象的方法,可以从中提取出表类型、表结构、评分方法以及能考虑继承等各方面的要素,这样就可以保证软件的通用性,可配置性与可维护性。
在工具的选择过程中,我们选择了现在已十分流行的Rational系列,包括Rational Rose、RUP、SoDA等,为什么选取这个系列工具呢?这是基于我们对软件需求分析目标的看法,我们认为需求分析应当能正确地回答如下的几个关键性问题:
(1)用户的需求是否已详尽地被考虑到了?
(2)用户能理解或明白我们所描述的内容吗?
(3)分析是否会和设计相脱节,(4)程序员能明白我们的分析与设计要求吗?等等。
以下对上述几个问题逐一简要地加以说明:
(1)详尽地获取用户的需求。
用户的需求可分为显式的需求与隐性的需求,用户的倾向往往只顾及到当前的与明显的需求。要达到对需求理解的全面性,不仅仅只是依靠有效的用户谈话和调查,因为我们所面对的用户需求往往会有些片面的,采用Rational Rose(基于UML)提供的用例,以及多种图的联合使用,可以使我们发现其中的遗漏。
(2)使用户能充分地理解我们的表示方法,能够真正明白我们描述的内容。
软件需求分析规格说明书通常会是冗长而枯燥的,一般的用户不容易深入理解,这样就削弱了分析的正确性。通过支持面向对象及UML语言的Rational Rose可以更好地和用户交流,让用户了解系统的运作方式甚至细节的操作。
(3)使分析和设计两个阶段互相联系与贯通。
这是我们选择面向对象的方法及Rational Rose工具的重要原因,系统分析要向用户描述的不仅仅是用户的需求,而且包括解决方法,解决方法当然应包括设计(程序)、数据库与系统配置,我们当然不希望用户得到的是一个与需求规格说明不相同的软件,也不可能要求程序员完成一个不可胜任的任务。然而我们在以前的多项工作中经常发现这类情节,因为系统分析与设计相互脱节,导致一头扎在分析中不顾设计有关的事宜。
分析与设计的脱节,还不利于设计现格说明的评估,因为分析往往会脱离现实,导致缺乏评估的依据。
因为不可能成功地完成设计而使分析需要重来,就会造成巨大的浪费与损失。一个好的工具可以使分析与设计更紧密地连结起来,甚至于—一对应。面向对象的分析方法使对象之间相对而言有独立性,减少了任何影响到全局的改动,能避免因需求变化而导致全盘皆动的被动局面。
(4)使程序员明白我们的设计。
一个好的设计应该让程序员感到清晰明白,更少疑问。一个疑问很多的设计加上沟通不畅,绝对会出现在应用环境下所不需要的另一个软件,所以设计规格说明书务必清楚、形象与明确,当然,Rational Rose具有足够的图形与其他形式,能使程序员更加明确,甚至能细微到每一个语句(事实上如果使用VB,程序架构都有可能直接生成了)。
(5)选择UML可能会有更多的理由。
比如用户文档的编写、数据库设计,我们都需要做到有延续性,有自动化支持和具有质量上的保证。
所以,我们选用了以上的方法和工具。
在分析中,面对考勤班次的问题时,由于过去一直使用纸卡方式考勤,使用户对班次形成了固定的概念,而现在的许多考勤软件也采用多次刷卡的方法来形成一天的记录。经过面向对象的分析可以发现,事实上每天的上班记录是由多个时段所形成的,时段的多少在各个公司,各个工种与部门都不尽相同,每个时段可能有不同的属性,时段与时段组合可形成为班次,这更适合于现实的情况,使之能更加灵活与更有扩展性。其实,在天与天之间也都有相互之间的关系。在这一点上,我们又发现必须在考勤与薪金工资中加入与MRP中相似的期段(Periods)的基本概念,比如可以称之为考勤期段,允许为用户更加方便地设置考勤期段,可能使之不一定与自然年月日相同等等。
Rational Rose使我们更方便地把上面的想法在类上去实现,更进一步地设计好我们的高效率的数据库。
当然,使用单一的一个工具去完成一个中大型的应用系统的需求分析,是不可能成功的。因为社会在发展,用户的需求也在改变,如何把握住用户的需求是需要时间的,面向对象的方法有时也会忽略外在的与表层的要求,不仅仅是要获得关键的需求,其他更多的需求往往要等到用户在使用后才知道,然而等到用户使用是不现实的,作为原型开发模型中的原型也是收集用户需求,描述与解释需求的一类相当有效的方法与工具。
在我们的开发过程中,为了更好地让用户了解我们的系统和我们的设计方案,让用户在见面会上更有方向性与针对性,我们首先用Access开发出原型,让用户先试用。这样,我们在真正的分析与设计时就能更加符合用户的要求。
总之,软件需求分析方法和工具的使用,对我们软件开发过程影响是很深远的,选用高效能的正确的方法与工具,可以使我们的软件更加正确地反映现实需求,更加具有可用性、可扩展性和可维护性;降低了软件项目的风险。
评注:(1)写得有些特色,观点鲜明。(2)摘要写得不错,既反映了项目内容,也小结了本文的写作要点。(3)文中所举的例子虽然简单,但很实际。(4)多种方法与工具的使用,叙述得简明扼要。(5)内容可更丰富一些,更深入的例子也可再增多一些,则会更有说服力。
(6)对需求分析的全过程的描述太少。
第二篇:6.培训需求方法和工具
进行培训需求信息的收集和整理方法和工具
培训需求信息的收集与整理:组织分析、工作分析、个人分析。包括:动态的需求、静态的需求
(1)、动态需求,因每个人的能力而异,需求各异;(人岗匹配为终点)(2)、静态需求,是组织和岗位要求,对个人能力的要求的标准。(人岗匹配为终点)
培训需求信息可以通过档案资料来收集
主要来源渠道有:
(1)来自于领导层的主要信息;
(2)来自于积压部门的主要信息;
(3)来自于外部的主要信息;
(4)来自于组织内部个人的主要信息。
主要方法有:
(一)面谈法(又叫访谈法):是一种非常有效的信息收集方法,培训者与培训对象之间面对面进行
交流,充分了解相关信息
(二)小组讨论法(含重点团队分析法):指在培训对象中选出一批熟悉问题的员工作为代表参加讨论,以调查培训需求信息
(三)资料分析法(含工作任务分析法):以工作说明书、工作规范、工作任务分析记录表作为确定员
工达到要求必须掌握的知识、技能和态度的依据,将其和员工平时工作中的表现进行对比,判定员工要完成工作任务的差距所在。
(四)行为观察法:指培训者亲自到员工身边了解员工的具体情况,通过与员工在一起工作,观察员
工的工作技能、工作态度、了解其在工作中遇到的困难,搜集培训需求信息的方法。
(五)问卷调查法:
培训需求信息的工具:(1)培训需求概况信息调查工具;(2)态度、知识和技能需求信息调查工具;(3)课程选择式调查工具;(4)外部培训机构或培训经销商、服务商调查工具。
二、简述需求分析的基本工作程序。
(一)做好培训前期的准备工作;
1、建立员工背景档案;
2、同各部门人员保持密切联系;
3、向主
管领导反映情况;
4、准备培训需求调查。
(二)制定培训需求调查计划;
1、培训需求调查工作的行动计划;
2、确定培训需求调查工作的目
标;
3、选择合适的培训需求调查方法;
4、确定培训需求调查的内容。
(三)实施培训需求调查工作;
1、提出培训需求动议和愿望;
2、调查、申报、汇总需求动议;
3、分析培训需求;
4、汇总培训需求意见,确认培训需求。
(四)分析与输出培训需求结果;
1、对培训需求调查信息进行归类、整理;
2、对培训需求进行分
析、总结;
3、撰写培训需求分析报告。
(六)测试法:
(七)自我分析法:
第三篇:数据分析软件和工具
以下是我在近三年做各类计量和统计分析过程中感受最深的东西,或能对大家有所帮助。当然,它不是ABC的教程,也不是细致的数据分析方法介绍,它只 是“总结”和“体会”。由于我所学所做均甚杂,我也不是学统计、数学出身的,故本文没有主线,只有碎片,且文中内容仅为个人观点,许多论断没有数学证明,望统计、计量大牛轻拍。
于我个人而言,所用的数据分析软件包括EXCEL、SPSS、STATA、EVIEWS。在分析前期可以使用EXCEL进行数据清洗、数据结构调 整、复杂的新变量计算(包括逻辑计算);在后期呈现美观的图表时,它的制图制表功能更是无可取代的利器;但需要说明的是,EXCEL毕竟只是办公软件,它 的作用大多局限在对数据本身进行的操作,而非复杂的统计和计量分析,而且,当样本量达到“万”以上级别时,EXCEL的运行速度有时会让人抓狂。
SPSS是擅长于处理截面数据的傻瓜统计软件。首先,它是专业的统计软件,对“万”甚至“十万”样本量级别的数据集都能应付自如;其次,它是统计软 件而非专业的计量软件,因此它的强项在于数据清洗、描述统计、假设检验(T、F、卡方、方差齐性、正态性、信效度等检验)、多元统计分析(因子、聚类、判 别、偏相关等)和一些常用的计量分析(初、中级计量教科书里提到的计量分析基本都能实现),对于复杂的、前沿的计量分析无能为力;第三,SPSS主要用于 分析截面数据,在时序和面板数据处理方面功能了了;最后,SPSS兼容菜单化和编程化操作,是名副其实的傻瓜软件。
STATA与EVIEWS都是我偏好的计量软件。前者完全编程化操作,后者兼容菜单化和编程化操作;虽然两款软件都能做简单的描述统计,但是较之 SPSS差了许多;STATA与EVIEWS都是计量软件,高级的计量分析能够在这两个软件里得到实现;STATA的扩展性较好,我们可以上网找自己需要 的命令文件(.ado文件),不断扩展其应用,但EVIEWS就只能等着软件升级了;另外,对于时序数据的处理,EVIEWS较强。
综上,各款软件有自己的强项和弱项,用什么软件取决于数据本身的属性及分析方法。EXCEL适用于处理小样本数据,SPSS、STATA、EVIEWS可以处理较大的样本;EXCEL、SPSS适合做数据清洗、新变量计算等分析前准备性工作,而STATA、EVIEWS在这方面 较差;制图制表用EXCEL;对截面数据进行统计分析用SPSS,简单的计量分析SPSS、STATA、EVIEWS可以实现,高级的计量分析用 STATA、EVIEWS,时序分析用EVIEWS。关于因果性
做统计或计量,我认为最难也最头疼的就是进行因果性判断。假如你有A、B两个变量的数据,你怎么知道哪个变量是因(自变量),哪个变量是果(因变量)?
早期,人们通过观察原因和结果之间的表面联系进行因果推论,比如恒常会合、时间顺序。但是,人们渐渐认识到多次的共同出现和共同缺失可能是因果关 系,也可能是由共同的原因或其他因素造成的。从归纳法的角度来说,如果在有A的情形下出现B,没有A的情形下就没有B,那么A很可能是B的原因,但也可能 是其他未能预料到的因素在起作用,所以,在进行因果判断时应对大量的事例进行比较,以便提高判断的可靠性。
有两种解决因果问题的方案:统计的解决方案和科学的解决方案。统计的解决方案主要指运用统计和计量回归的方法对微观数据进行分析,比较受干预样本与 未接受干预样本在效果指标(因变量)上的差异。需要强调的是,利用截面数据进行统计分析,不论是进行均值比较、频数分析,还是方差分析、相关分析,其结果 只是干预与影响效果之间因果关系成立的必要条件而非充分条件。类似的,利用截面数据进行计量回归,所能得到的最多也只是变量间的数量关系;计量模型中哪个 变量为因变量哪个变量为自变量,完全出于分析者根据其他考虑进行的预设,与计量分析结果没有关系。总之,回归并不意味着因果关系的成立,因果关系的判定或 推断必须依据经过实践检验的相关理论。虽然利用截面数据进行因果判断显得勉强,但如果研究者掌握了时间序列数据,因果判断仍有可为,其中最经典的方法就是 进行“格兰杰因果关系检验”。但格兰杰因果关系检验的结论也只是统计意义上的因果性,而不一定是真正的因果关系,况且格兰杰因果关系检验对数据的要求较高(多期时序数据),因此该方法对截面数据无能为力。综上所述,统计、计量分析的结果可以作为真正的因果关系的一种支持,但不能作为肯定或否定因果关系的最 终根据。科学的解决方案主要指实验法,包括随机分组实验和准实验。以实验的方法对干预的效果进行评估,可以对除干预外的其他影响因素加以控制,从而将干预实施后的效果归因为干预本身,这就解决了因果性的确认问题。关于实验
在随机实验中,样本被随机分成两组,一组经历处理条件(进入干预组),另一组接受控制条件(进入对照组),然后比较两组样本的效果指标均值是否有差 异。随机分组使得两组样本“同质”,即“分组”、“干预”与样本的所有自身属性相互独立,从而可以通过干预结束时两个群体在效果指标上的差异来考察实验处 理的净效应。随机实验设计方法能够在最大程度上保证干预组与对照组的相似性,得出的研究结论更具可靠性,更具说服力。但是这种方法也是备受争议的,一是因 为它实施难度较大、成本较高;二是因为在干预的影响评估中,接受干预与否通常并不是随机发生的;第三,在社会科学研究领域,完全随机分配实验对象的做法会 涉及到研究伦理和道德问题。鉴于上述原因,利用非随机数据进行的准实验设计是一个可供选择的替代方法。准实验与随机实验区分的标准是前者没有随机分配样本。
通过准实验对干预的影响效果进行评估,由于样本接受干预与否并不是随机发生的,而是人为选择的,因此对于非随机数据,不能简单的认为效果指标的差异 来源于干预。在剔除干预因素后,干预组和对照组的本身还可能存在着一些影响效果指标的因素,这些因素对效果指标的作用有可能同干预对效果指标的作用相混淆。为了解决这个问题,可以运用统计或计量的方法对除干预因素外的其他可能的影响因素进行控制,或运用匹配的方法调整样本属性的不平衡性——在对照组中寻 找一个除了干预因素不同之外,其他因素与干预组样本相同的对照样本与之配对——这可以保证这些影响因素和分组安排独立。
随机实验需要至少两期的面板数据,并且要求样本在干预组和对照组随机分布,分析方法就是DID(倍差法,或曰双重差分法);准实验分析用截面数据就 能做,不要求样本在干预组和对照组随机分布,分析方法包括DID(需两期的面板数据)、PSM(倾向性得分匹配法,需一期的截面数据)和PSM-DID(需两期的面板数据)。从准确度角度来说,随机实验的准确度高于准实验和非实验分析。
关于分析工具的选择
如果根据理论或逻辑已经预设了变量间的因果关系,那么就无需使用实验方法。我对非实验数据分析工具的选择原则如下。
因变量为连续变量,自变量至少有一个连续变量,进行多元线性回归; 因变量为连续变量,自变量全部为分类变量,进行方差分析;
因变量为分类变量,自变量至少有一个连续变量,使用Logit模型或Probit模型; 因变量为分类变量,自变量全部为分类变量,进行交叉表分析和卡方检验;
因变量在某个闭区间内分布,并且有较多样本落在闭区间的边界上,使用Tobit模型;
因变量不唯一,如多产出问题,进行数据包络分析(DEA);
因变量为整数、数值小、取零个数较多,使用计数(Count)模型; 数据具有层次结构(嵌套结构),使用多层线性模型(HLM)。
随着统计和计量经济学的发展,各种前沿分析工具层出不穷,但我认为最靠谱的分析工具不外乎以下四种:DID(针对随机实验),多元线性回归,固定效 应变截距模型(FE,针对面板数据),Logit模型或Probit模型(针对分类因变量数据)。其他方法或适用条件苛刻,或分析过程折腾,或方法本身不 可靠(尤其是聚类分析、判别分析,超级不靠谱),因此能用以上四种方法分析问题时,不必为“炫方法”而瞎折腾。关于拟合优度、变量选择原则及估计值绝对大小的意义
在人人的“数据分析”小站中,某同学提出这样一个问题:“多元回归分析中,怎么选择自变量和因变量,可以使R方达到80%以上?”
很显然,问这个问题的同学要么没学好计量,要么就是犯了功利主义的错误,或者二者皆有。拟合优度的大小很大程度上取决于数据本身的性质。如果数据是 时序数据,只要拿有点相关关系的变量进行回归就能使拟合优度达到80%以上,但这样的高R方根本说明不了什么,很可能使分析者陷入伪回归的陷阱,严谨的做 法当然是做平稳性检验和协整检验;如果是截面数据,根本没必要追求R方到80%的程度,一般来说,有个20%、30%就非常大了。
如果一定要增大R方,那么最应该做的的确是对纳入模型的变量进行选择。选择纳入模型的原则我认为有三条。第一,从理论和逻辑出发,将可能影响因变量 的变量作为自变量纳入模型,即理论上或逻辑上能影响因变量的自变量必须纳入模型,即使该自变量的回归系数不显著。第二,奥姆剃刀原则——如无必要,勿增实体,即理论上或逻辑上不能影响因变量的自变量不能纳入模型,即使该自变量的回归系数显著。第三,防止纳入具有多重共线性的自变量。
前面说了,对截面数据进行计量分析,R方能达到20%、30%是非常了不起的事情。但是,如果拟合优度(或类似拟合优度的指标)在20%、30%或 更低时,回归系数只具有定性或定序上的意义,强调其绝对数值的大小没什么意义。譬如lnY=alnA+blnB+„+zlnZ+c回归的R方为20%,a 为0.375,b为0.224,且二者的T检验显著,那么我们可以说,A、B对Y有影响,也可以说一百分点的A变化对Y的影响大于一百分点的B变化对Y的影响(控制其他因素的情况下),但说一百分点的A变化对Y的影响较一百分点的B变化对Y的影响大0.151%,就没什么意义了。
第四篇:软件测试需求分析与定义方法
软件测试需求分析与定义方法
如何确定测试工作的范围?
对于一个存在生命周期的软件产品来说,它的开发和测试往往都不是一次性的,因为随着新的需求的出现,以及对原有版本的改进,新的版本会不断的发布(即使对于一些以客户定制方式运作的项目,在开发过程中以及发布后的维护期内,也会产生众多的内部版本)。随着版本的迭代,我们的测试工作也会一直继续下去。而在每一次迭代时,可能在整个工作阶段的开始就受到一些因素的影响,比如市场需求、既定的发布时间、并发的工作导致的资源紧张等等,使我们不得不考虑对软件质量要求的适度,最终使得我们在每个阶段的测试工作的要求或者说所涉及到的内容有可能是不同的。这种变化,最终将会影响到测试需求的确定。那么到底该如何确定每次迭代是测试工作的范围呢?在笔者的实践中,通常把测试工作范围的确定,等价的认为是软件需求的确定。
不过现在有一个很实际的问题是这样:软件需求在开发过程中不断发生变化,有时候到了后期还会有新的需求添加进来,还有些需求在交付内部测试版本之后又发现原来的需求本身就存在缺陷,之后再次返工,在软件最终发布之前,怎么可能确定的下来呢。啊,这些都是让我们的开发人员和测试人员极其头痛的事情。到底应该怎样在频繁变更的需求中确定哪些部分是我们在某个阶段要测试的内容呢?或者说通过什么样的方法可以改善我们上面提到的那些问题呢?一个实际的做法就是实现软件需求的版本化控制。(用软件需求的版本化控制来解决软件需求的频繁变更)既然说到了这里,就不免要说些题外话。笔者一直都认为软件需求是开发工作和测试工作在制定计划、开展工作时所共同参照的源头和依据,而我们只有在源头上控制好,才能保证下面工作的平稳开展。如果希望某个阶段工作的进度和内容可以明确的定义下来,就必须要考虑软件需求的版本化控制。这里所提到的“软件需求的版本化控制”,是指在一个软件产品的生命周期中,当要进行一个新版本的迭代时,要尽早的确定这个版本中将要实现的需求,并同上个版本做出比较,哪些内容是新增的,哪些内容是被调整过的。在该阶段工作开始之初的工作会议上,明确的向所有需要了解软件需求的涉众传达这部分信息。而如果在该版本的开发过程中不断的出现需求变更的情况,则应该根据市场策略、已公布的发布时间、客户需求、实现的代价、难易程度以及对现有工作的影响等方面,对需求进行适度划分,严格定义当前版本中需要实现的需求,而其他部分,则作为未来版本的软件需求进行考虑。如果有的朋友认为上面的内容还是太理论化,需要一个更实际的、可操作的方法。那么只能说,对于需求的变更,以及因为需求变更而引起的设计的变更,必须要早发现,早讨论,早决定,早调整。这可能更多的要依靠一个团队中相关负责人员的主动工作来保证,而不是依靠一个明确的方法。注意,这里的一个关键是,对于软件需求,同样需要严格按照版本进行管理,或者说使用“基线”进行管理。如何整理测试需求?一旦当前阶段测试工作的范围确定下来,我们就可以开始考虑测试需求的整理——也就是明确的定义现阶段要“测什么”。测试需求的确定将为我们制定进度时间表、分配资源以及如何确定某个阶段测试工作是否完成提供一个可供衡量的标准。当然,还有更重要的一点,已被确定的测试需求是我们进行测试用例设计和考虑测试覆盖的依据。整理测试需求的第一步,就是要“测试需求”。测试需求?对,不知道您是否想到,这里的“测试需求”中的“测试”是一个动词,指的是对软件需求本身的检查。
啊?这不是已经超出了测试工作的范围了吗?测试人员不是应该只关心软件的实现同需求是否相符吗?这样对测试人员要求未免太高了。——这是笔者过去同一些朋友谈到测试人员必须对需求进行检查时听到的一些不同的声音。在这里,首先要明确一个问题,就是软件测试的工作到底做什么?
在《软件测试》(Ron Patton〔美〕,中文版由机械工业出版社出版,这本书是测试新手入门的经典教材)一书的第10页,有一个明确而简洁的定义:软件测试员的目标是找到软件缺陷,尽可能早一些,并确保其得以修复。
瞧!这里说要“尽可能早”的“找到软件缺陷”。那这“尽可能早”要早到什么时候呢?
不知道大家对《软件工程》这本书还有什么印象。至少在笔者看过的多个不同版本的软件工程方面的书中,对于软件缺陷都会有一段类似的描述:缺陷发现的越早,则修复这个缺陷的代价就越小,在需求、设计、编码、测试、发布等不同的阶段,发现缺陷后修复的代价都会比在前一个阶段修复的代价提高10倍(参见下图)。这样看来,上面问题的答案自然就变成了“秃子头上的虱子”:从需求阶段开始!从“测试需求”开始!
注意,笔者这里的观点并不是说可以取消团队中的“需求评审会议”,这里并不存在冲突。笔者所希望讲述的,是测试人员应该如何看待软件需求,而并不是把“需求评审会议”所承担的责任揽到自己身上。?在论坛上也偶尔看到有的朋友问:如何测试需求呢?每次看到这样的提问,笔者内心就禁不住的一阵激动,因为一直以来,讨论这方面问题的朋友的确少之又少。
在笔者的实际工作中,对软件需求的检查包括两个方面的内容。
一是对软件需求正确性的检查,也就是要保证需求文档中所描述的内容是真实可靠的。在进行这部分工作时,不要迷信所谓的“都是用户提出的真实的需求”,因为我们必须考虑,提出这些需求的涉众,是否真的可以正确的描述自己的需求?我们的需求人员是否真的可以正确的理解用户的需求?有没有一些被用户认为在业务处理上是理所当然、极其平常的事情,而没有作为需求提出来?有没有一些被用户认为他们过去使用的软件已经提供了相应的功能,所以认为我们也应当提供,而没有提出来的?关于这个问题,也曾经有朋友提过不同的看法,认为这样对测试人员的要求太高了——既要熟悉需求人员的工作,又要熟悉软件所涉及的行业的业务。但笔者还是固执的认为,作为测试人员,还是需要对软件产品所涉及的行业的业务有一个全面的、深入的了解——当然,这不是对一个刚刚入门的测试者的要求,但是如果想称为一个优秀的测试者,是难免要付出这部分努力的。
二是要保证软件需求的可测试性。对于“可测试性”,笔者的概念是:对于一条软件需求或者一个需要实现的特性,必须存在一个可以明确预知的结果,并且可以通过设计一个可以重复的过程来对这个明确的结果进行验证。说的具体一点,就是要保证所有的需要实现的需求都是可以用某种方法来明确的判断是否符合需求文档中的描述。如果对于某条需求或某个特性,无法通过一个明确的方法来进行验证,或者无法预知它的结果,那么就意味着这条需求的描述存在缺陷,应该请需求人员对需求文档进行修改或补充——我们有理由相信,如果作为测试人员对需求无法产生准确的理解,那么开发人员也同样无法对同一条需求产生准确的理解。对于一条确定的软件需求理解的二义性,是在不规范的开发过程中导致返工的一个主要原因。如果认为有必要,那应该在“需求评审会议”上确认所有涉众对需求的理解是一致的。当然,对于如何提高软件需求的质量,在网络上或者已经出版的书刊中都已经有了很多更加具体、实用的方法,如果有兴趣,大家也可以找来参考。不过,如果您是一位测试者,那么上面这部分内容对您仍然是非常有用的。相信您只要在工作中进行尝试,慢慢的体会,一定会发现这种方法给您带来的好处。?现在当前的测试工作范围已经确定,相应版本的软件需求也通过了评审,我们就可以在这个已经确定的范围内进行测试需求的整理。我们手头上可以参考的东西,通常会有软件需求规约(以下简称SRS)和用例(以下简称UC)——当然,也可能是一份包含UC的SRS。通过对SRS和UC的阅读,我们可以从文档对特性和业务流程的描述中获得对软件所涉及的业务的一个基本的认识。比如用户在处理实际业务时都要作些什么,多个业务之间的先后顺序是怎样的,用户在处理业务是对于哪些地方有特别的要求,等等。这部分规则,将成为我们的测试需求中最基本的一部分。
至于测试需求的表现形式,笔者认为大家都可以根据自己的需要进行设计,而没有必要把思路限制在到底使用表格方式还是使用文本方式,只要把握一个原则就行了:在一条测试需求中,用容易理解的自然语言,明确的描述一项需要测试的内容。对于多项测试内容,应尽可能的剥离开来,保证一条测试需求只包含一项测试内容。
另外,大家也可能注意到了,在软件开发过程的这个阶段,通常是没有用户界面(以下简称UI)可供参考的——虽然RUP中对于需求阶段的工作描述包括了UI设计的部分,但很多时候在这个阶段还是无法提供一个确定的UI的——也就是说我们这时获得的测试需求,将是完全基于业务的,而并不包括基于UI的那部分规则,是同软件的最终具体实现相独立的。
随着开发工作的继续,开发部门的架构设计文档和详细设计文档也将陆续提交,这时候,我们可以根据设计文档来对已有的测试需求进行增补。注意,这里我们对于设计文档中提到的内容要有选择的采用,只有同SRS或UC中已经定义的部分相符的内容,才可以用来调整我们的测试需求。而同软件需求不相符的部分,则需要同设计人员和需求人员一起讨论,确定下以哪一方作为基准,决定是否需要调整软件需求,然后对测试需求进行相应的增补或者调整。比如对于一些算法,需要考虑设计文档中定义的,同系统实现相关的那些计算公式,是否同软件需求中描述的算法表达的是否是同一个意思?而对于一些约束或者业务规则,设计文档中描述的是否同需求中的相应部分一致?呵呵,看完上面这部分内容,恐怕又有一部分朋友晕倒在地了,而没有晕倒的那部分朋友也要提出异议:啊?!你这不是又包含了对开发人员所作的设计工作的检查吗?!刚刚让我们检查需求,现在又让我们检查设计,真的把我们当成全才了!没办法,为了让软件交到我们手上的时候只包含尽量少的缺陷,大家只能再辛苦一下了。我们的工作不应当仅仅限制在软件交付后尽力找到存在的缺陷,而更应该努力及早发现软件缺陷出现的苗头,尽量预防缺陷的出现。虽然并不是说在所有的团队中都应该由测试人员承担“测试需求”和“测试设计”的工作,但是测试人员对这些工作起到的作用,是其他团队中的其他角色所无法替代的。开发部门完成编码实现工作,提交供内部测试的应用程序时,测试人员手头上应该已经准备好了绝大部分测试用例和测试数据,测试部门将开始执行测试。通常在我们执行测试的过程中,即使我们已经从“通过测试”和“失败测试”两个不同的角度准备了非常充分的测试用例和测试数据,但总是有些缺陷的出现是出乎我们意料的,或者说是已有的测试需求和测试用例未能覆盖的。那么,对于这部分缺陷,也应当添加到测试需求中,并设计相应的测试用例,以便于下次版本迭代时进行参考。OK,相信说到这里,各位看客也应该可以理解我的观点了:对于一个长期发展的团队或者持续开发的产品,它的所有东西都是要不断积累的、不断迭代的。无论对于软件需求还是测试需求,不仅仅是在一个版本的开发过程中,在不同的阶段进行迭代,在产品的整个生命周期中的不同版本间,也是不断迭代和积累的。
第五篇:软件需求-案例分析
1、问题描述
许多医院存在高峰期挂号排队时间长,就诊等待时间长,倒号现象频发的问题。因此,构建一个网上预约挂号系统,通过推荐患者使用该系统进行出诊信息查询和医生预约,可以缓解就诊压力、节约患者的时间,并且可以在一定程度上保证预约者和就诊者一致,有利于提高医院的服务质量。为了更好的设计并实现这一系统,对系统进行需求建模和分析是十分必要的。
2、情景描述的主要成分
2.1、该系统所涉及的用户
本系统的用户包含患者、医生以及管理员三类。而且该三类用户各自的特征和所要面对的情景也是截然不同的。
对于患者来说,他们在年龄、计算机使用能力等方面存在较大差异,但面对的情景都一样,就是要预约挂号,挂号成功过后就诊。
对于医生来说,普遍具备较高的学历,在医疗方面具备专业知识,有一定的计算机使用能力。所面对的情景有查看挂号信息,确定要就诊的病人。
对于管理员来说,他们负责对出诊信息进行管理,是医院工作的安排者,具备较强的计算机使用能力。
不同的用户,对系统的要求也不相同。患者希望通过完成注册和登录后能够进行挂号预约,查询医生的出诊信息和个人预约信息,并且能够在规定的时间内完成挂号预约或者取消已有的预约;医生则希望能够在登录系统后可以查看病人的预约情况;而管理员希望可以修改出诊信息和调整预约挂号。这些都是功能性的需求。
同时对于所有用户都希望该系统是易用的,而且能够对自己的信息起到保护即系统安全性的要求,还有比如说系统的性能比较高效,能够及时处理自己的预约申请。当然开发系统的成本如果也能较低就更好了。这些都是非功能需求。
2.2、情景描述的主要成分
目标和关键成功因素
预约挂号情景的目标是“让患者能够及时的挂号,并能顺利的就诊”,而可能的子目标包括:患者能够注册账号,患者能够登录账号,患者能够查询预约记录,患者能够取消已有预约,患者能够查询出诊信息。关键成功因素,要保证系统能够24小时正常稳定的运行,系统里的信息要是实时变化的,即可以预约的医生要和实际在值班的医生要匹配,不能出现挂上号了却没有医生就诊的情况。
物理上下文和逻辑上下文 物理上下文:医院用于挂号的计算机可以正常的使用,情景中的可以被预约的医生应该是在医院值班的;而对于患者可以选择在医院进行预约,也可选择在家中进行预约,只要在预约时间内能到达医院就可。逻辑上下文:事件发生的条件是患者在系统中进行了预约,然后管理员会根据现有的资源(可以预约的医生)对预约进行处理,如果同意,下一步就是医生就诊;如果没有可以预约的医生或合适的时间,患者的预约就不成功,患者需要重新选择医生或时间进行预约。
组成情景的主要事件和活动 主要事件:患者预约挂号,管理员对预约挂号的处理,医生就诊。主要活动:患者注册、登录系统,患者在系统中查询可以预约的医生和时间,患者取消已有预约,患者进行就诊;管理员接受或拒绝预约,管理员分配医生;医生查询预约信息。
涉及的执行者和其他参与者
执行者:医院的医生,预约挂号系统的管理员。其他参与者:医院的相关人员,比如患者,前台咨询员等。
要使用的信息和资源 要使用的信息和资源包括,可以预约的医生数量,所在科室等,医院中的设备,病房等。 要考虑的约束条件和要使用的规则 约束条件:同一医生同一时间段内只能接受一名患者的预约,根据医疗设备的属性决定是否要排他性的使用。
3、情景需求分析的步骤
需求规格说明输入过程需求目标列表1.目标分析系统模型目标,目的使用情景用户问题实例2.输入事件分析初始系统模型用户,环境事件情景脚本4.输出需求分析3.刻画系统输出情景结构模型系统输出类型信息需求5.社会影响分析Agent目标6.涉众分析需求规格说明
3.1 目标分析
在第2部分情景描述的主要成分中已经对目标进行了分析,即:预约挂号情景的目标是“让患者能够及时的挂号,并能顺利的就诊”,而可能的子目标包括:患者能够注册账号,患者能够登录账号,患者能够查询预约记录,患者能够取消已有预约,患者能够查询出诊信息。3.2 输入事件分析
对于该系统的输入事件可能会包括如下情况:初始使用该系统的用户需要先注册,而对于已经注册的用户在使用系统预约挂号时首先要登录系统。这是最基本的两个输入事件。3.3 刻画系统输出
对于系统输出我们要考虑系统输出的形式,比如消息显示,对话框等形式。不如用户在登录系统是输入的用户名和密码不匹配的时候要给出对应的提示信息,比如用户名未注册或密码不对等。在提交预约挂号申请后系统也应给出预约成功与否的提示。3.4输出需求分析
对于输出需求要根据用户的输入给出对应的输出。比如用户输入查询请求,那么系统应该能够给出详细的信息。系统只给出对应的输出还不够,同时要考虑输出的信息是否合适。比如用户要查询眼科医生的资料,系统的输出就应该只是眼科医生的信息,而没有必要把所有医生的信息都输出。3.5 社会影响分析
在进行社会影响分析时要同时考虑到积极和消极两个方面的问题。系统是否可以提高效率,减少人员的工作量。同时也要考虑过多的自动化是否会削弱人对整个系统的意识,导致人对意外处理的能力降低,比如系统临时出现问题,是否有一套应急措施使医院日常工作能够正常的进行。
4、需求说明文档
基于之前构建的模型,并参照IEEE 830-1998标准模板,撰写的系统需求说明文档如下。
4.1 引言
引言部分将对本文档的编写目的、系统的开发目的、名词定义以及参考资料进行说明,并对文档的后续内容进行概述。4.1.1 编写目的
网上预约挂号系统是基于Web开发技术完成的网站。为了更好的设计并实现这一系统,对系统进行需求建模和分析是十分必要的。因此,基于之前构建的各类模型,撰写系统的需求说明文档,并将其作为后续项目设计、项目开发和项目测试的指导。
本文档连同之前构建的模型,可用来与客户进一步明确需求,同时可供项目经理、设计人员、开发人员参考。4.1.2 系统目的
许多医院存在高峰期挂号排队时间长,就诊等待时间长,倒号现象频发的问题。因此,构建一个网上预约挂号系统,通过推荐患者使用该系统进行出诊信息查询和医生预约,可以缓解就诊压力、节约患者的时间,并且可以在一定程度上保证预约者和就诊者一致,有利于提高医院的服务质量。4.1.3 名词定义 患者预约系统
网上预约挂号系统的子系统,主要用于为患者提供预约挂号、信息查询等功能。 医生工作查询系统
网上预约挂号系统的子系统,主要用于为医生提供各时段预约患者的信息。 医务管理系统
网上预约挂号系统的子系统,主要用于为管理员提供出诊信息修改、预约挂号调整等功能。 账号控制系统
网上预约挂号系统的子系统,主要用于用户账号的注册及登录控制。 安全保障系统
网上预约挂号系统的子系统,主要用于保障系统的程序、网络及数据库安全。4.1.4 参考资料
[1]Objectiver: A KAOS tutorial.Respect-It(2004)[2]吴双兵,刘伟.网上预约挂号系统设计与实现[J].医学信息学杂志, 2015, 36(1):36-39.4.1.5 文档概述
需求说明文档主要分为三个部分。本节属于引言部分,主要用于对文档本身进行定义和描述。文档的第二部分为系统的整体描述,包括系统的预期目标、限制条件以及用户的需求、特征。文档的第三部分是需求说明,包含对系统需求的明确定义。
4.2 整体描述
本节将对系统预期、用户需求、用户特征、条件与限制、假定与依赖以及需求分配进行说明。
4.2.1 系统预期
为了方便用户在不需安装任何软件的情况下使用系统,本系统整体采用B/S结构,用户可以通过浏览器对其进行访问。4.2.2 用户需求
参照之前完成的目标模型,对用户的需求进行整理和定义。由于系统整体较为复杂,因此本小节只包含已构建目标模型的功能性需求和非功能性需求。 功能性需求
1.患者进行预约选择
为了实现患者进行预约选择的目标,系统应完成的需求如下。(1)系统拥有患者预约页面以及预约按钮:
系统的预约页面可以显示未来1至3天的出诊医生及其所有可被预约的出诊时段。其中,尚未被预约的时段拥有预约按钮;已被预约的时段无法被其他患者预约,因此无预约按钮。(2)系统接收到预约请求:
当患者点击预约按钮,系统可以接收到预约请求。(3)患者被告知预约选择结果:
系统可以对患者是否预约成功进行判定,如果成功则跳转至信息确认页面,否则弹出对话框给予患者相应提示。2.患者确认预约信息
为了实现患者确认预约信息的目标,系统应完成的需求如下。(1)系统拥有预约信息确认页面以及预约提交按钮:
系统的预约信息确认页面会显示预约的医生和时段,患者的个人信息,以及预约提交按钮,患者可以在提交预约前核对这些信息。(2)系统接收到预约提交请求:
当患者点击提交按钮,系统可以接收到预约提交请求。(3)患者被告知预约提交结果:
系统可以对预约是否提交成功进行判定,并弹出对话框给予患者相应提示。 非功能性需求 1.安全的系统
为了保证预约挂号系统的安全性,系统应完成的需求如下。(1)用户程序安全:
系统应明确区分不同类别用户的权限。并且在用户登录时,输入的密码不可见、不可复制。(2)系统网络安全:
系统应采取安全的网络传输协议,网络数据在被传输前应进行加密。(3)数据库安全:
数据库中存储的数据应具备完整性,且密码应在加密后被存储到数据库中。此外,数据库中的数据应该可以被备份和恢复。2.低成本的系统 为了保证预约挂号系统的低成本,系统应完成的需求如下。(1)系统开发成本低:
开发团队应具备合理的项目管理,且在开发前应尽可能明确系统的需求。(2)系统运营成本低:
系统在运行过程中,应该尽可能少的占用资源。(3)系统维护成本低:
系统应该健壮可靠,出现问题后应该易于修复,且系统的功能应该易于扩展。考虑到系统健壮可靠与系统开发成本低存在一定的冲突,因此需要进行一定的权衡。4.2.3 用户特征
本系统的用户包含患者、医生以及管理员三类,其特征如下。 患者
个体间在年龄、计算机使用能力等方面存在较大差异。 医生
普遍具备较高的学历,在医疗方面具备专业知识,有一定的计算机使用能力。 管理员
负责对出诊信息进行管理,是医院工作的安排者,具备较强的计算机使用能力。4.2.4 条件与限制
为了保证系统的可移植性和可扩展性,本系统应使用Java语言进行开发。4.2.5 假定与依赖
本系统假定提供的大、中、小三种字体大小可以满足不同患者的需求,并且患者可以在系统的引导和提示下正常使用系统。4.2.6 需求分配
由于文档中并未列出系统的全部需求,因此无法对所有需求进行优先级排序。但已经列出的均为系统较为核心的功能性需求和非功能性需求,应具有高优先级。
4.3 需求说明
需求说明部分将参照之前完成的模型,对系统结构、对象模型以及操作过程模型进行详细描述。
4.3.1 系统结构
本部分将主要参照图 3-1所示的责任模型,根据主体对需求进行划分。考虑到系统较为复杂,因此只列出主体“患者预约系统”的相关需求。 患者预约系统
系统拥有患者预约页面以及预约按钮。
系统接收到预约请求。
患者被告知预约选择结果。
系统拥有预约信息确认页面及预约提交按钮。
系统接收到预约提交请求。
患者被告知预约提交的结果。4.3.2 对象模型
本部分将主要对图 4-1所示的对象模型的结构进行解释。
网上预约挂号系统可以被详细划分为患者预约系统、医生工作查询系统、医务管理系统、账号控制系统、安全保障系统等五个子系统。患者预约系统、医生工作查询系统、医务管理系统的使用者分别为患者、医生和管理员,这些用户通过系统提供的页面与系统进行交互。
对象模型中所涉及的名词在4.1.3小节中有具体解释。4.3.3 操作过程模型
本部分将主要对图 5-1,图 5-3和图 5-4所示的操作过程模型进行说明,并以表格的形式列出各操作过程的参与主体及对应需求。 患者进行预约选择
患者点击预约按钮后,患者预约系统会收到患者的预约请求,并触发预约验证操作,得到预约验证结果。接下来,患者预约系统会以得出的预约结果为基础,进行预约结果判定,进而执行页面跳转或消息框弹出操作。 患者确认预约信息
患者点击提交按钮后,患者预约系统会收到患者的预约提交请求,并触发预约提交操作。接下来,患者预约系统会根据提交结果弹出包含相应信息的提示框。
以上部分涉及到的操作过程及与之对应的主体、需求如下表所示。
以上部分涉及到的操作过程及与之对应的主体、需求如表 4-1所示。
操作 预约验证 参与主体
对应需求
患者预约系统 系统接收到预约请求,患者被告知预约选择结果
预约结果判定 患者预约系统 患者被告知预约选择结果 预约提交 患者预约系统 系统接收到预约提交请求,患者被告知预约提交结果