软件需求工程基础毛新军国防科技大学计算机学院xjmao@软件工程
内容软件需求和需求工程软件需求概念和类别、地位和作用需求工程的任务、过程和方法学软件需求的建模和分析方法结构化软件需求分析方法面向对象的需求分析方法需求工程的输出和评审输出制品、需求缺陷和需求评审软件需求变更及管理
1.1软件开发的本质(1/2)领域相关技术相关融合需求和技术期望和要求解决方案软件利益相关方软件工程师软件产品软件工程师
软件开发的本质(2/2)软件工程师用户要求软件系统开发软件系统的前提是要明确用户的期望和要求,即软件需求软件需求文档、模型、程序、数据软件工程过程、方法学和工具
1.2软件系统的利益相关方何为利益相关方(stakeholder)从软件系统中受益或与软件系统相关的人、组织或者系统受益:使用、获益、盈利相关:发生操作和交互、存在关联性软件利益相关方的表现形式:人、组织或者系统人-用户(User):最终使用软件的人人-客户(Customer):从中获取利益的组织人-开发者(Developer):负责开发软件系统的人系统(System):与待开发系统进行交互的系统组织(Organization):提出系统开发和使用软件的机构为什么开发者也可提出软件需求
软件案例:空巢老人看护系统软件密集型信息系统,通过软件连接和控制机器人和智能手机,对家中独居的老人进行看护跟踪老人在家情况老人与远端的家属进行语音和视频交互发现和通告异常情况(如摔倒、突发疾病)将老人在家状况(如图像和视频)和异常信息传送到远端家属或医生的智能手机上通过语音进行呼叫和报警提醒老人按时服药和保健......移动互联网语音和视频交互监视视频和语音视频和语音数据
示例:空巢老人看护软件的利益相关方用户老人-用户家属-用户医生-用户客户投资方系统机器人移动互联网语音和视频交互监视视频和语音视频和语音数据
示例:Mini-12306软件的利益相关方旅客需要购票、退票、改签等功能售票员帮助旅客提供购票、退票、改签等服务系统管理员设置系统的配置信息等
软件系统及其利益相关方软件系统人:用户,客户,开发者其他系统组织提出要求提出要求提出要求软件利益相关方会站在自身的角度对软件系统提出要求–软件需求
1.3何为软件需求(SoftwareRequirement)?定义1(从软件利益相关方的角度):软件系统的利益相关方对软件系统的功能和质量,以及软件运行环境、交付进度等方面提出的期望和要求定义2(软件本身的角度):软件需求是指软件用于解决现实世界问题时所表现出的功能和性能等方面的要求软件需求刻画了软件系统能做什么(Whattodo),应表现出怎样的行为,需满足哪些方面的条件和约束等要求
软件需求的类别软件功能性需求(FunctionalRequirement)能够完成的功能及在某些场景下可展现的外部可见行为或效果软件质量方面的需求(QualityRequirement)外部质量属性,外部可展现的,用户、客户等会非常关心,如运行性能、可靠性、易用性等内部质量属性,隐藏在内部的,软件开发工程师会非常关心,如可扩展性、可维护性、可理解性软件开发约束性需求(ConstraintRequirement)开发成本、交付进度、技术选型、遵循标准等方面提出的要求非功能性需求:软件质量需求和约束需求
示例:空巢老人看护软件的需求功能性需求自主跟随老人、获取老人图像和视频信息、检测老人是否摔倒等质量方面的需求始终保持在2米的安全距离,对机器人的控制在2秒内响应等约束性需求成本不能超出50万元,要求半年内交付使用等等这些需求都是谁提出来的?
示例:Mini-12306软件的需求功能性需求注册、登录、查询车次、购票、退票、改签等质量方面的需求操作界面反应控制在1秒钟范围内软件具有私密性和可信性,能保护旅客的个人敏感信息软件具有安全性,能够抵御外部的网络攻击约束性需求开发成本控制在100万元以内在6个月之内交付该软件产品软件前端APP需部署在Android、iOS、鸿蒙等操作系统下运行
软件需求的类别类别内涵关注的利益相关方示例功能性需求软件具有的功能、行为和服务用户、客户、开发者群体、其他系统分析和识别老人语音呼叫分析异常状况?软件质量需求内部质量需求开发者群体可维护性、可扩展性、可理解性、可重用性等外部质量需求用户、客户、开发者群体、其他系统界面操作要在1秒内响应视频延迟不超过2秒开发约束性需求软件开发需满足的要求客户、开发者群体、其他系统要求在6个月内交付产品软件运行在Android之上采用Java语言来实现
软件需求的特点(1/2)隐式性来自于利益相关方,它隐式存在很难辨别,甚至会遗漏掉隐晦性在利益相关方的潜意识之中,不易于表达出来,难以获取所表达的软件需求存在模糊性、歧义性、二义性多源