2021-09-28

一、软件工程

软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,其目的是提高软件生产率、提高软件质量、降低软件成本。


软件工程基本原理

软件生存周期

1.可行性分析与项目开发计划

这个阶段主要确定软件的开发目标及其可行性。必须要回答的问题是:要解决的问题是什么?该问题有可行的解决办法吗?若有解决的办法,则需要多少费用?需要多少资源?需要多少时间?要回答这些问题,就要进行问题定义、可行性分析,制订项目开发计划。可行性分析与项目计划阶段的参加人员有用户、项目负责人和系统分析师。该阶段产生的主要文档有可行性分析报告和项目开发计划。

2.需求分析

需求分析阶段的任务不是具体地解决问题,而是准确地确定软件系统必须做什么,确定软件系统的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。该阶段的参加人员有用户、项目负责人和系统分析师。该阶段产生的主要文档有软件需求说明书。

3.概要设计

在概要设计阶段,开发人员要把确定的各项功能需求转换成需要的体系结构。在该体系结构中,每个成分都是意义明确的模块,即每个模块都和某些功能需求相对应,因此,概要设计就是设计软件的结构,明确软件由哪些模块组成,这些模块的层次结构是怎样的,这些模块的调用关系是怎样的,每个模块的功能是什么。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。概要设计阶段的参加人员有系统分析师和软件设计师。该阶段产生的主要文档有概要设计说明书。

4.详细设计

详细设计阶段的主要任务是对每个模块完成的功能进行具体描述,要把功能描述转变为精确的、结构化的过程描述。即该模块的控制结构是怎样的,先做什么,后做什么,有什么样的条件判定,有些什么重复处理等,并用相应的表示工具把这些控制结构表示出来。详细设计阶段的参加人员有软件设计师和程序员。该阶段产生的主要文档有详细设计文档。

5.编码

编码阶段就是把每个模块的控制结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的源程序清单。

6.测试

测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检查软件的各个组成部分。测试阶段的参加人员通常是另一部门(或单位)的软件设计师或系统分析师。该阶段产生的主要文档有软件测试计划、测试用例和软件测试报告。

7.维护

软件维护是软件生存周期中时间最长的阶段。已交付的软件投入正式使用后,便进入软件维护阶段,它可以持续几年甚至几十年。在软件运行过程中可能由于各方面的原因需要对它进行修改,其原因可能是运行中发现了软件隐含的错误而需要修改;也可能是为了适应变化了的软件工作环境而需要做适当变更;也可能是因为用户业务发生变化而需要扩充和增强软件的功能;还可能是为将来的软件维护活动做预先准备等。

二、软件过程

在开发产品或构建系统时,遵循一系列可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品。软件开发中所遵循的路线图称为“软件过程”。过程是活动的集合,活动是任务的集合。软件过程有3层含义:一个是个体含义,即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程、软件管理过程等;二是整体含义,即指软件产品或系统在所有上述含义下的软件过程的总体;三是工程含义,即指解决软件过程的工程,应用软件的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提 高软件的生产率,降低成本。

1.软件过程模型

软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。


软件过程模型

三、需求分析

1.软件需求

在进行需求获取之前,首先要明确需要获取什么,也就是需求包含哪些内容。软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。通常,这些需求包括功能需求、性能需求、用户或人的因素、环境需求、界面需求、文档需求、数据需求、资源使用需求、安全保密需求、可靠性需求、软件成本消耗与开发进度需求等,并预先估计以后系统可能达到的目标。此外,还需要注意其他非功能性的需求。具体内容如下。

  • (1)功能需求。考虑系统要做什么,在何时做,在何时以及如何修改或升级。
  • (2)性能需求。考虑软件开发的技术性指标。例如,存储容量限制、执行速度、响应时间及吞吐量。
  • (3)用户或人的因素。考虑用户的类型。例如,各种用户对使用计算机的熟练程度,需要接受的训练,用户理解、使用系统的难度,用户错误操作系统的可能性等。
  • (4)环境需求。考虑未来软件应用的环境,包括硬件和软件。对硬件设备的需求包括机型、外设、接口、地点、分布、湿度、磁场干扰等;对软件的需求包括操作系统、网络、数据库等。
  • (5)界面需求。考虑来自其他系统的输入,到其他系统的输出,对数据格式的特殊规定,对数据存储介质的规定。
  • (6)文档需求。考虑需要哪些文档,文档针对哪些读者。
  • (7)数据需求。考虑输入、输出数据的格式,接收、发送数据的频率,数据的准确性和精度,数据流量,数据需保持的时间。
  • (8)资源使用需求。考虑软件运行时所需要的数据、其他软件、内存空间等资源;软件开发、维护所需的人力、支撑软件、开发设备等。
  • (9)安全保密要求。考虑是否需要对访问系统或系统信息加以控制,隔离用户数据的方法,用户程序如何与其他程序和操作系统隔离以及系统备份要求等。
  • (10)可靠性要求。考虑系统的可靠性要求,系统是否必须检测和隔离错误;出错后,重启系统允许的时间等。
  • (11) 软件成本消耗与开发进度需求。考虑开发是否有规定的时间表,软/硬件投资有无限制等。
  • (12)其他非功能性要求。如采用某种开发模式,确定质量控制标准、里程碑和评审、验收标准、各种质量要求的优先级等,以及可维护性方面的要求。

2.需求分析

需求分析过程的具体实现有不同的分析方法,这些方法有自己独特的特点。然而,这些分
析方法都遵循一组操作原则。
(1)必须能够表示和理解问题的信息域。
(2)必须能够定义软件将完成的任务。
(3)必须能够表示软件的行为(作为外部事件的结束)。
(4)必须划分描述数据、功能和行为的模型,从而可以分层次地揭示细节。
(5)分析过程应该从要素信息移向细节信息。
通过应用这些原则,分析人员将能系统地处理问题。检查信息域可以更完整地理解功能,通过模型可以更简洁地交流功能和行为的特征,应用抽象与分解可减少问题的复杂度。

3.需求管理

在实际的开发过程中,获取、分析、建模、编写规约和验证这些需求开发活动通常是交叉、递增和反复地进行。而且,软件系统的需求会变更,这些变更不仅会存在于项目开发过程,而且会出现在项目已经付诸应用之后。软件需求管理是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动,对需求工程所有相关活动的规划和控制。换句话说,需求管理就是一种获取、组织并记录系统需求的系统化方案,以及一个使用户与项目团队对不断变更的系统需求达成并保持一致的过程。
在需求管理中,每个需求被赋予唯一的标识符,一旦标识出需求,就可以为需求建立跟踪表,每个跟踪表标识需求与其他需求或设计文档、代码、测试用例的不同版本间的关系。例如,特征跟踪表,记录需求如何与产品或系统特征相关联;来源跟踪表,记录每个需求的来源;依赖跟踪表,描述需求间如何关联等。
这些跟踪表可以用于需求跟踪。在整个开发过程中,进行需求跟踪的目的是为了建立和维护从用户需求开始到测试之间的一致性与完整性,确保所有的实现是以用户需求为基础,所有的输出符合用户需求,并且全面覆盖了用户需求。需求跟踪有两种方式:正向跟踪和逆向跟踪。其中,正向跟踪以用户需求为切入点,检查《需求规约》中的每个需求是否都能在后继工作产品中找到对应点;逆向跟踪检查设计文档、代码、测试用例等工作产品是否都能在《需求规约》中找到出处。

你可能感兴趣的:(2021-09-28)