1软件工程需求工程软件工程——用工程化的方法来开发软件2内容提纲软件需求–需求的重要性–需求中面临的问题需求工程–需求获取–需求分析–需求文档编制–需求确认–需求管理软件工程——用工程化的方法来开发软件3软件需求软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通过对问题及其环境的理解与分析,为问题涉及的信息、功能及系统行为建立模型。将用户需求精确化、完全化,最终形成需求规格说明。这一系列的活动即构成软件开发生命周期的需求分析阶段。软件工程——用工程化的方法来开发软件4内容提纲软件需求–需求的重要性–需求中面临的问题需求工程–需求获取–需求分析–需求文档编制–需求确认–需求管理软件工程——用工程化的方法来开发软件5需求的重要性美国于1995年开始的一项调查的结果有力的证明了需求的重要性。调查范围:对全国范围内的8000个软件项目进行跟踪调查。调查结果:–有1/3的项目没能完成,–在完成的2/3的项目中,又有1/2的项目没有成功实施。–仔细分析失败的原因后发现,与需求过程相关的原因占了45%,而其中缺乏最终用户的参与以及不完整的需求又是两大首要原因,各占13%和12%。软件工程——用工程化的方法来开发软件6需求的重要性需求是软件生命周期中的第一个阶段,也是软件工程中最重要的一个部分。需求分析是软件工程的根基,它奠定了软件设计、实现、测试、维护和项目管理的基础。“大多数软件灾难的种子通常都是在软件项目开始的头三个月内种下的。”——CapersJones软件工程——用工程化的方法来开发软件7需求的重要性在软件工程的一系列工程中,遗留的问题发现的越晚,所付出的成本就会越高。软件工程——用工程化的方法来开发软件8内容提纲软件需求–需求的重要性–需求中面临的问题需求工程–需求获取–需求分析–需求文档编制–需求确认–需求管理软件工程——用工程化的方法来开发软件9需求中面临的问题客户说不清楚需求–客户所定义的需求对开发者似乎是一个较高层次的产品概念,而开发人员所说的需求对用户来说又像是详细设计了。需求分析人员缺乏领域知识需求自身的变更分析人员和客户对需求的理解不同输入是朴素和粗糙的,而输出要完全精确–需要大量细化和求精的工作软件工程——用工程化的方法来开发软件10理解问题的需求是软件工程师所面对的最困难的任务之一。构建一个软件系统最困难的部分是确定构建什么。需求决定了软件做什么,要提供什么功能。软件工程——用工程化的方法来开发软件11内容提纲软件需求–需求的重要性–需求中面临的问题需求工程–需求获取–需求分析–需求文档编制–需求确认–需求管理软件工程——用工程化的方法来开发软件12需求工程需求工程是一个软件工程动作,开始于沟通并持续到建模。需求工程通常被划分为两个部分:需求开发和需求管理。需求开发又可进一步分为需求获取、需求分析、需求文档编制和需求确认四个阶段。需求管理又分为需求跟踪、需求变更控制、版本管理和需求复用。软件工程——用工程化的方法来开发软件13需求工程这八个子过程是顺序递进的,且是以一次次迭代的形式贯穿于软件工程的整个生命周期之中的。软件工程——用工程化的方法来开发软件14内容提纲软件需求–需求的重要性–需求中面临的问题需求工程–需求获取–需求分析–需求文档编制–需求确认–需求管理软件工程——用工程化的方法来开发软件15需求获取“用户的需要就是需求”软件开发是由需求驱动的,需求是源于用户的需要,这是一个基本原则。需求获取就是要将“需要”表达成“需求”。在需求获取工作中主要涉及了3个至关重要的因素:–应搜集什么信息;–从什么来源中搜集信息;–用什么机制或技术搜集信息。软件工程——用工程化的方法来开发软件16需求获取——软件需求来源确认共同利益者——“直接或间接从正在开发的系统中获益的人”业务操作管理人员产品管理人员市场营销人员内部和外部客户最终用户产品工程师软件工程师支持和维护工程师及其他人员软件工程——用工程化的方法来开发软件17需求获取——软件需求来源两种项目(相对)的需求获取来源工程项目:一般是根据与用户签定的合同研发,旨在满足特定用户需求的项目由特定的客户(业务部门)提交业务需求书是需求的重要来源。产品项目:一般是根据公司战略和市场需求研发,旨在进行批量出售或推广的项目市场的声音或市场的潜在声音都是用户的需求,产品不可能面面俱到,IT企业有足够的主动权来选择用户、细分市场、定位产品,特别是在市场还未正式地发出声音之前,通过创意来挖掘未来的需求,这种抢占市场先机的需求获取,是需求开发的最高境界。软件工程——用工程化的方法来开发软件18需求获取——软件需求层次业务需求反映了组织机构或客户对系统、产品高层次的目标要求。用户需求描述了用户使用产品必须要完成的任务。功能需求定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。非功能需求从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的额外要求。软件工程——用工程化的方法来开发软件19举例:银行ATM系统业务需求:系统为用户提供自助存取款服务;用户需求:用户可以随时安全、快捷一进行存款和取款;功能需求:系统允许用户从银行帐户中取款;系统允许用户向银行帐户中存款;系统允许用户查询银行帐户的现存余额;系统使用8位数字密码检验用户存取的合法性。非功能需求:系统在20秒之内响应所有的请求;除了每天30分钟的维护外,系统每周7天、每天24小时都可使用。需求来源:客户或用户(如银行职员、管理人员、用户);行业标准、政策或法规;当前手工处理系统的文档;咨询银行领域的专家。软件工程——用工程化的方法来开发软件20需求获取——需求获取手段访谈和会议观察用户工作流程或者实践软件工程——用工程化的方法来开发软件21需求获取——需求获取手段用户和开发人员共同组成联合小组加强联系促进交流增进合作软件工程——用工程化的方法来开发软件22内容提纲软件需求–需求的重要性–需求中面临的问题需求工程–需求获取–需求分析–需求文档编制–需求确认–需求管理软件工程——用工程化的方法来开发软件23需求分析需求分析主要是在可行性分析的基础上,对收集到的需求进行提炼、分析和仔细审查,进一步了解确定用户需求。准确地回答“系统必须做什么?”的问题。形成完整的分析模型,获得需求规格说明书。需求分析的目的在于开发出高质量的和具体的需求,从而支持项目的估算和软件的设计、开发和测试。软件工程——用工程化的方法来开发软件24需求分析——需求分析的任务1、确定目标系统的具体要求确定系统的运行环境要求硬件环境和软件环境系统的性能要求系统功能确定目标系统具备的所有功能2、建立目标系统的逻辑模型软件工程——用工程化的方法来开发软件25需求分析——需求分析的任务需求分析的核心在于建立分析模型。实现步骤当前系统模型化目标系统物理模型具体化物理模型抽象化逻辑模型实例化逻辑模型做什么导出理解需求表达需求软件工程——用工程化的方法来开发软件26需求分析——需求分析的原则近几年来已提出许多软件需求分析与说明的方法,每一种分析方法都有独特的观点和表示方法,但都适用下面的基本原则。1、能够表达和理解问题的信息域和功能域–信息域包括信息流、信息内容和信息结构;–信息流,即数据通过一个系统时的变化方式(如下图);–功能域反映上述三方面的控制信息。数据存储转换1转换2附加数据输入数据中间数据结果数据软件工程——用工程化的方法来开发软件27需求分析——需求分析的原则2、能够对问题进行分解和不断细化,建立问题的层次结构。3、需要给出系统的逻辑视图和物理视图–软件需求的逻辑视图给出的是软件要达到的功能和要处理信息之间的关系,而不是实现的细节。–软件需求的物理视图给出的是处理功能和信息结构的实际表现形式,这往往是由设备本身决定的。软件工程——用工程化的方法来开发软件28需求分析——需求分析的方法不同的开发方法,需求分析的方法也有所不同,常见的分析方法有:功能分析方法结构化分析方法信息建模法面向对象的分析方法软件工程——用工程化的方法来开发软件29需求分析——需求分析的方法功能分析方法将系统看作若干功能模块的集合,每个功能又可以分解为若干子功能,子功能还可继续分解,分解的结果已经是系统的雏形。结构化分析方法是一种以数据、数据的封闭性为基础,从问题空间到某种表示的映射方法,由数据流图(DFD图)表示。信息建模法是从数据的角度对现实世界建立模型的,基本工具是ER图。面向对象的分析方法面向对象的分析方法(OOA)的关键是识别问题域内的对象,分析它们之间的关系,并建立起三类模型。软件工程——用工程化的方法来开发软件30举例数据库中存放的是职工的某学校医疗费管理系统所属部门、职工号、姓名职工报销时应填写:所属部门、职工号、姓名、日期校内门诊、校外门诊、住院费、子女医疗费医疗费分类:该校规定,每年每个职工的医疗费有一个限额(如80元),限额在年初确定,其限额规则如下:1、每个职工一年内报销的医疗费不超过限额时,全部报销2、超额,则超出部分只可报销90%,其余10%由职工个人负担3、职工子女的医疗费也有限额(如40元)软件工程——用工程化的方法来开发软件311、医疗费管理系统每天记录当天报销的若干职工或职工子女的医疗费的类别、金额。2、在当天下班前让系统自动结帐、统计当天报销的医疗费总额,供出纳员核对。3、每笔帐要保存备查,每天所报销的费用要和各个职工已报销的金额累计起来,以便检查哪些职工已超额。4、系统还要配有适当的查询功能。5、年终结算后,下一年度开始时要对数据库文件进行初始化。6、当职工调离本单位,职工调如本单位或在本单位内部门间调动,数据库文件应能及时得到修改。请完成对上述系统的需求分析用户对系统的要求软件工程——用工程化的方法来开发软件322019/8/10该系统规模不太大,可以和用户单位的其他管理系统使用相同的计算机硬件设备、相同的操作系统和相同的关系数据库管理系统。如果,可以使用汉化了的数据库管理系统,但在建立数据库结构时,凡是用英文名称来代表字段名时,则必须在数据字典中予以说明。1、确定系统的环境要求软件工程——用工程化的方法来开发软件332019/8/102、系统性能要求(1)数据不能随意更改(2)保证数据的准确性由于医疗费管理系统涉及到会计经费问题,数据不能随意更改但数据输入又难免会出错。因而在每输入一个职工的医疗费后,屏幕提示“数据有误吗?”。若是在核对时有误,可及时更改,避免输入错误。一天报销结束时,在数据存档前,再让出纳员核对一下经费总额,若出纳员支出的金额总数有误时,应让计算机显示每笔帐目,供一一仔细核对,此时在允许修改一次。当正式登帐后,数据就绝对不允许在修改了,由此保证财务制度的严格性,保证数据的安全性。软件工程——用工程化的方法来开发软件342019/8/103、系统的功能(1)具有表格形式屏幕的输入格式(2)具有重复录入数据的功能(3)具有查询和统计汇总的功能(4)职工的调入和调出以及对数据库的初始化软件工程——用工程化的方法来开发软件35内容提纲软件需求–需求的重要性–需求中面临的问题需求工程–需求获取–需求分析–需求文档编制–需求确认–需求管理软件工程——用工程化的方法来开发软件36需求文档编制用自然语言来描述软件需求,会产生许多意想不到的如不精确、二义性等问题,因此,需要采用适当的方法形成一致的、完备的和无二义性的软件需求规格说明。将结构化语言与自然语言结合,编写文本型文档;建立可视化的模型;采用形式化的方法进行需求规格说明,如Z模式、PetriNet等。软件工程——用工程化的方法来开发软件37需求文档编制软件需求规格说明(SRS)是需求开发的最终结果,它精确地阐述一个软件系统必须提供的功能和性能以及它所要考虑的限制条件。软件需求规格说明不仅是系统测试和用户文档的基础,也是所有子系列项目规