软件工程考点
软件需求综述
软件项目成功的三个主要因素
<需主用>
需求的清晰表述
用户的参与
主管层的支持
软件人成功的三个主要因素
需求的把握与控制能力
良好的沟通能力
责任心与承担责任的能力
软件工程和需求工程区别与联系
软件需求工程属于软件工程的大范畴,是软件工程的一个分支,其主要对象是软件
需求
软件工程是求解软件的工程,需求工程是求解软件需求的工程
将软件工程的原理、方法、技术、手段与软件需求的实际紧密结合,并创造性的应
用于软件需求领域
除此之外,还要根据软件需求的特点来发展需求工程的理论、方法、技术和工具。
软件需求的内容/层次
<业用功>,描述XX,通过XX予以说明
业务需求
描述组织或客户对系统、产品高层次的目标要求;通过项目远景与范围文档
予以说明
用户需求
描述用户使用产品必须完成的任务,通过实例( use-case )文档予以说明
功能性与非功能性需求
描述开发人员必须实现的软件功能,用户通过这些功能完成他们的日常工作
和任务,以满足业务需求。通过软件需求规范予以说明
描述系统展现给用户的行为和执行的操作等,包括质量属性、操作界面细
节、性能要求、约束条件、应遵从的标准与规范等。通过软件需求规范和模
型予以说明
软件需求获取
需求工程包括
需求开发 <获取分析编写验证>
获取需求
分析需求
编写SRS
验证SRS
需求管理 <变更版本需求状态>
控制变更
控制版本
跟踪需求
跟踪状态
需求获取的方法(11个)
开发前景群代核心,用例事响论观查重
定义需求的开发过程
确定需求的收集、分析、细化和核实的步骤、方法、模板。
定义项目前景与范围
前景说明所有涉众对产品目标的达成的共识;
范围定义了需求是否属于某个特定版本的界线。
确定用户群
将可能使用产品的用户组,以避免出现某一用户群的需求被忽略的情况。
选择用户代表
为每类用户至少选择一位能代表他们需求的、有时间、有热情、有权利参与
需求工作的用户代表。
建立核心队伍
把同类产品或产品前版本的用户代表召集起来,从他们那里收集目前产品的
功能需求和非功能需求。
确定用例
从用户代表处收集他们使用软件完成所需任务的描述——用例,讨论用户与
系统间的交互方式和对话要求。
确定系统事件和响应
列出系统可能发生的外部事件以及对每个事件所期待的响应时间。
举行进一步需求获取的讨论
专门的需求获取讨论会可以方便分析员和客户进行合作。
观察用户如何工作
观察用户执行业务的过程。画一张简单的数据流程图或业务流程图,描绘出
用户什么时候获得什么数据,并怎样使用这些数据进行业务处理。
检查问题报告
客户对当前系统的问题报告及补充需求为新产品或新版本提供了大量丰富的
改进及增加特性的想法。
需求重用
如果客户要求的功能与已有的某产品很相似,则可查看需求是否有足够的灵
活性以允许重用一些已有的软件组件。
需求分析的方法(8个)
关联原型可行优先,建模字典分解调配
编制关联图
定义系统与外部实体的界限和接口
创建开发原型
当开发人员或用户不能确定需求时,可构建一个开发原型。它可使许多概念
和可能发生的事更为直观明了。通过评价原型,能更好地相互理解所要解决
的问题
分析需求的可行性
在允许的成本、性能要求下,分析每项需求实施的可行性,明确与每项需求
实现相联系的风险,包括与其它需求的冲突、对外界因素的依赖和技术障
碍。
确定需求优先级
应用分析方法来确定use-case、产品特性或单项需求实现的优先级别。以优
先级为基础确定产品版本应包含的需求和特性。
为需求建立模型
需求的图形分析模型是SRS的极好补充说明。这样的模型包括用例图、数据
流程图、实体关系图、状态变换图、对话框图、对象类及交互作用图等。
编写数据字典
通过建立数据字典,对系统用到的所有数据项和数据结构进行定义。
将需求分解到子系统
必须将包括多个子系统的复杂产品的需求分配到各个软件、硬件以及人员子
系统和部件中去。
应用质量功能调配(QFD)
质量功能调配(QFD)是一种高级系统技术,它将产品功能、属性与对客户
的重要性联系起来。QFD将需求分为三类:普通需求、期望需求、兴奋需
求。
开发原型
分类
抛弃型
进化型
目的
需求方案产品原型
明确并完善需求
探索设计选择方案
发展为最终的产品原型
需求文档编写与管理
数据字典
定义
一个定义应用程序中使用的所有数据元素和结构的含义、类型、长度、格式、度
量单位、精度以及允许取值范围的数据逻辑的描述。
具体内容
数据项
数据结构
数据流
数据存储
处理过程
外部实体
需求文档的编写要有以下内容
系统的目的和内容
系统中的术语表
用例
系统采用的技术
开发过程中的参加人员、业务规则、系统运行所依赖的条件、安全要求、文档要求
等各种其它需求
法律、政治、组织机构等方面的问题
面向对象
面向对象的本质特征
抽象:将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两
方面
封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口
继承:从已有类得到继承信息创建新类,子类继承父类属性和方法
多态:包括重载和重写,允许相同或不同子类型的对象对同一消息作出不同响应
系统用例
用例名称表达
命名格式:动(宾)结构,执行者视角(用户观点而非系统观点)
命名用词:避免弱动词、弱名词
用例选择:选取有意义的目标,如“设置查询条件”就是无意义的
用例间的关系
关联关系
泛化关系
依赖关系
包含关系<>
扩展关系<>
用例参与者:可以是用户,也可以是与当前系统交互的其它系统
类图和顺序图
类图
关系
依赖(虚线箭头,use a关系,知道其存在)
单向关联(一般箭头,强依赖关系)
双向关联(实线,互相引用)
继承/泛化(三角箭头,指向父类)
实现(类指向接口,三角虚线箭头)
组合(整体指向部分,整体实心菱形,部分不可以独立存在)
聚合(整体指向部分,整体空心菱形,部分可以脱离整体存在)
类
权限 属性名:类型 [ = 默认值 ]
权限 方法名称(参数列表) [ : 返回类型]
注意事项
“目”,类名-属性-方法,窗可以为空但不能缺少
public:+
protected:#
private:-
题目要求
属性要5个以上
方法要写3个
类个数不能少于3个
类之间的关系要写正确
英文命名,可以打个括号写中文解释
顺序图
要求:5个交互对象以上
对象名:从实现的角度,类名
活动图和状态图
活动图
注意事项
表达规范、统一(如果线如果是直线就一直是直线)
分支要写【条件】,一定要用中括号!
要包括5个活动以上
一律用原矩形框
起点终点的画法
分支表示选择;分叉表示并行
用什么方式分出去,就用什么方式会合