逆向工程和需求工程

逆向工程

软件复用:是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费

逆向工程:软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程

逆向工程的四个级别:

实现级:包括程序的抽象语法树、符号表、过程的设计表示。

结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构。

功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型。

领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如E-R模型。

其中,领域级抽象级别最高,完备性(完整)最低,实现级抽象级别最低,完备性最高。

重构

重构是指通过改变程序的内部结构,以改进其设计、可读性、可维护性和性能,而不改变其外部行为。重构可以通过重新组织代码、简化算法、消除重复等方式来改善程序的质量和结构。

设计恢复

设计恢复是指通过对已有软件系统的逆向工程分析,还原出其设计和结构。这可以帮助我们理解现有系统的组织方式、模块之间的关系以及它们之间的交互

再工程

再工程是指对现有软件系统进行重构、改进和现代化,以满足新的需求、提高性能或增强可维护性等方面的要求。是在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本

正向工程

正向工程是指将软件设计的高级概念和抽象转化为实现代码的过程。它是逆向工程的相反过程,不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统

需求工程

需求分类

软件需求

是指用户对系统在功能、行为、性能、设计约束等方面的期望。是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。

分为需求开发,需求管理两大过程:

需求开发:需求获取,需求分析,需求定义(需求规划说明书SRS),需求验证

需求管理:变更控制,版本控制,需求跟踪,需求状态跟踪

业务需求

反映企业或客户对系统高层次的目标要求,抽象级别最高

用户需求

描述的是用户的具体目标,或用户要求系统必须能完成的任务。即描述了用户能使用系统来做什么

系统需求

从系统的角度来说明软件的需求, 抽象级别最低

分为下面三种:

功能需求:也称为行为需求,规定了开发人员必须在系统中实现的软件功能,用户利用这些功能来完成任务,满足业务需要。

非功能需求:指系统必须具备的属性或品质,又可以细分为软件质量属性(如可维护性、可靠性、效率等)、性能需求以及其他非功能需求。

设计约束:也称为限制条件或补充规约,通常是对系统的一些约束说明,例如必须采用国有自主知识产权的数据库系统,必须运行在UNIX操作系统之,又比如涉及到金钱的要精确到小数点后面2位等人为规定的或约束

需求获取

用户访谈:1对1-3,找有代表性的用户进行访谈,对提问者的水平是有要求的。其形式包括结构化(有剧本)和非结构化(随意发挥)两种。

问卷调查:用户多,无法一一访谈,收集到的需求不够精准,比较杂乱,比较考验问卷编写者的水平

采样:从种群中系统地选出有代表性的样本集的过程,类似于数学中的数理统计。样本数量=0.25*(可信度因子/错误率)2

情节串联板:一系列图片,通过这些图片来把需求给进行叙述出来,这样虽然生动,但是耗时

联合需求计划(JRP):通过联合各个关键用户代表、系统分析师、开发团队代表一起,通过有组织的会议来讨论需求。

需求记录技术:任务卡片、场景说明、用户故事、Volere白卡。

需求分析

一个好的需求应该具有无二义性、完整性、一致性、可测试性、确定性、可跟踪性、正确性、必要性等特性,因此,需要分析人员把杂乱无章的用户要求和期望转化为用户需求,这就是需求分析的工作。

绘制系统上下文范围关系图(数据流图DFD)

创建用户界面原型

分析需求的可行性

确定需求的优先级

为需求建立模型

创建数据字典

使用QFD(QFD:质量功能部署,把需求和QFD进行关联)

结构化分析

结构化特点:自顶向下,逐步分解,面向数据。

三大模型:功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)以及数据字典

数据流图(DFD)

数据流,加工,数据存储,外部实体,功能模型,从功能角度

1

数据流:由一组固定成分的数据组成,表示数据的流向。在DFD中,数据流的流向必须经过加工

加工:描述了输入数据流到输出数据流之间的变换,数据流图中常见的三种错误如图所示

1

数据存储:用来存储数据。

外部实体(外部主体):是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地(源)和系统所产生的数据的归宿地(宿)。

分层数据流图

顶层图:空的部分就是系统

1

0层图:根据顶层图的外部实体,得到加工过程

1

1层图:根据加工过程,得到加工的1层图

1

状态转换图(STD)

状态(始态,终态),事件,行为模型,从行为角度

E-R图

实体联系,数据模型,从数据角度

数据字典

数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明,即为了描述数据流图的

数据字典有以下4类条目:数据流、数据项、数据存储和基本加工

需求定义

软件需求规格说明书SRS:是需求开发活动的产物, 整个开发工作的基础

需求定义方法:

严格定义也称为预先定义(结构化定义),需求的严格定义建立在以下的基本假设之上:所有需求都能够被预先定义,开发人员与用户之间能够准确而清晰地交流。采用图形(或文字)可以充分体现最终系统,适合需求明确的情况

原型方法,迭代的循环型开发方式,原型提供了克该服困难的一个手段。特点:需要实际的、可供用户参与的系统模型。有合适的系统开发环境。反复是完全需要和值得提倡的,需求一旦确定,就应遵从严格的方法

需求验证

也称为需求确认,目的是与用户一起确认需求无误,对需求规格说明书SAS进行评审和测试

需求验证通过后,要请用户签字确认,作为验收标准之一, 这个需求规格说明书就是需求基线,不可以再随意更新,如果需要更改必须走需求变更流程

定义需求基线:通过了评审的需求说明书就是需求基线,客户和开发者的需求约定

需求管理

变更和风险

主要关心需求变更过程中的需求风险管理,带有风险的做法有:无足够用户参与、忽略了用户分类、用户需求的不断增加、模棱两可的需求、不必要的特性、过于精简的SRS、不准确的估算

需求跟踪

包括编制每个需求与系统元素之间的联系文档,这些元素包括其它需求、体系结构、设计部件、源代码模块、测试、帮助文件和文档等。

正向跟踪表示用户原始需求是否都实现了,正向跟踪一般是用来判断产品有没有少实现

反向跟踪表示软件实现的是否都是用户要求的,不多不少,可以用原始需求和用例表格(需求跟踪矩阵)来表示,反向跟踪一般是用来判断产品有没有多实现