本文总结了软考系统架构师中软件工程中的相关概念和知识。

软件开发方法

软件开发生命周期

传统的软件生命期(software life cycle)是指软件产品从形成概念(构思)开始,经过定义、开发、使用和维护,直到最后被废弃(不能再使用)为止的全过程。按照传统的软件生命周期方法学,可以把软件生命期划分为软件定义、软件开发、软件运行与维护三个阶段。

软件定义时期

软件定义包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标。具体可分成问题定义、可行性研究、需求分析等。

  1. 问题定义。问题定义是人们常说的软件的目标系统是“什么”,系统的定位以及范围等。也就是要按照软件系统工程需求来确定问题空间的性质(说明是一种什么性质的系统)。
  2. 可行性研究。软件系统的可行性研究包括技术可行性、经济可行性、操作可行性和社会可行性等,确定问题是否有解,解决办法是否可行。
  3. 需求分析。需求分析的任务是确定软件系统的功能需求、性能需求和运行环境的约束,写出软件需求规格说明书、软件系统测试大纲、用户手册概要。功能需求是软件必须完成的功能;性能需求是软件的安全性、可靠性、可维护性、结果的精度、容错性(出错处理)、响应速度和适应性等;运行环境是软件必须满足运行环境的要求,包括硬件和软件平台。

需求分析过程应该由系统分析员、软件开发人员与用户共同完成,反复讨论和协商,并且逐步细化、一致化、完全化等,直至建立一个完整的分析模型。需求分析工作完成后要提交软件需求规格说明(Software Requirements Specification, SRS)。内容可以有系统(或子系统)名称、功能描述、接口、基本数据结构、性能、设计需求、开发标准、验收原则等。此阶段使用到数据流图

软件开发时期

软件开发时期就是软件的设计与实现,可分成概要(总体)设计、详细设计、编码、测试等。

概要设计

是在软件需求规格说明的基础上,建立系统的总体结构(含子系统的划分)和模块间的关系,定义功能模块及各功能模块之间的关系。
此阶段使用到模块结构图、层次图和HIPO图 描述程序的结构。

详细设计

对概要设计产生的功能模块逐步细化,把模块内部细节转化为可编程的程序过程性描述。详细设计包括算法与数据结构、数据分布、数据组织、模块间接口信息和用户界面等的设计,并写出详细设计报告。

此阶段使用 程序流程图、伪代码、盒图

编码

又称编程,编码的任务是把详细设计转化为能在计算机上运行的程序。测试可分成单元测试、集成测试、确认测试和系统测试等。通常把编码和测试称为系统的实现。

软件运行和维护

软件运行就是把软件产品移交给用户使用。软件投入运行后的主要任务是使软件持久满足用户的要求。
软件维护是对软件产品进行修改或对软件需求变化做出响应的过程,也就是尽可能地延长软件的寿命。
当软件已没有维护的价值时,宣告退役,软件生命随之宣告结束。

软件开发环境

软件开发环境(Software Development Environment,SDE)是指支持软件的工程化开发和维护而使用的一组软件,由软件工具集和环境集成机制构成。
软件开发环境应支持多种集成机制,根据功能的不同,集成机制可以划分为环境信息库、过程控制与消息服务器、环境用户界面三个部分。

  1. 环境信息库。环境信息库是软件开发环境的核心,用以存储与系统开发有关的信息,并支持信息的交流与共享。环境信息库中主要存储两类信息,一类是开发过程中产生的有关被开发系统的信息,例如分析文档、设计文档和测试报告等;另一类是环境提供的支持信息,如文档模板、系统配置、过程模型和可复用构件等。
  2. 过程控制与消息服务器。过程控制与消息服务器是实现过程集成和控制集成的基础。过程集成时按照具体软件开发过程的要求进行工具的选择与组合,控制集成使各工具之间进行并行通信和协同工作。
  3. 环境用户界面。环境用户界面包括环境总界面和由它实行统一控制的各环境部件及工具的界面。统一的、具有一致性的用户界面是软件开发环境的重要特征,是充分发挥环境的优越性、高效地使用工具并减轻用户的学习负担的保证。

软件开发模型

瀑布模型

瀑布模型

瀑布模型

瀑布模型的特点是因果关系紧密相连,前一个阶段工作的结果是后一个阶段工作的输入。每一个阶段都是建筑在前一个阶段正确结果之上,前一个阶段的错漏会隐蔽地带到后一个阶段。这种错误有时甚至可能是灾难性的。因此每一个阶段工作完成后,都要进行审查和确认,这是非常重要的。历史上,瀑布模型起到了重要作用,它的出现有利于人员的组织管理,有利于软件开发方法和工具的研究

瀑布模型的缺点

  1. 软件需求分析的准确性很难确定,甚至是不可能和不现实的。因为用户不理解计算机,无法回答目标系统是“什么”的情况,对系统将来的改变部分难以确定,往往用“我不能准确地告诉你”回答开发人员。
  2. 用户和软件项目负责人要相当长的时间才能得到初始版本,这时如果改变需求,将会带来巨大的损失(例如人力、财力、时间等)。该模型的应用有一定的局限性。

原型模型

原型模型(prototype model)又称快速原型。

原型模型

原型模型

原型模型的两个阶段

原型开发阶段。

软件开发人员根据用户提出的软件系统的定义,快速地开发一个原型。该原型应该包含目标系统的关键问题和反映目标系统的大致面貌,展示目标系统的全部或部分功能、性能等。

开发原型可以考虑以下三种途径:

  • 利用模拟软件系统的人机界面和人机交互方式。
  • 真正开发一个原型。
  • 找来一个或几个正在运行的类似软件进行比较。

目标软件开发阶段。

在征求用户对原型的意见后对原型进行修改完善,确认软件系统的需求并达到一致的理解,进一步开发实际系统。但是在实际工作中,由于各种原因,大多数原型都废弃不用,仅仅把建立原型的过程当作帮助定义软件需要的一种手段。

螺旋模型

螺旋模型(Spiral Model)是在快速原型的基础上扩展而成。也有人把螺旋模型归到快速原型,实际上,它是生命周期模型与原型模型的一个结合。这种模型把整个软件开发流程分成多个阶段,每一个阶段都由4部分组成,它们是:

目标设定。

为该项目进行需求分析,定义和确定这一个阶段的专门目标,指定对过程和产品的约束,并且制定详细的管理计划。

风险分析。

对可选方案进行风险识别和详细分析,制定解决办法,采取有效的措施避免这些风险。

开发和有效性验证。

风险评估后,可以为系统选择开发模型,并且进行原型开发,即开发软件产品。

评审。

对项目进行评审,以确定是否需要进入螺旋线的下一次回路,如果决定继续,就要制定下一阶段计划。

螺旋模型的软件开发过程实际是上述4个部分的迭代过程,每迭代一次,螺旋线就增加一周,软件系统就生成一个新版本,这个新版本实际上是对目标系统的一个逼近(更接近一步)。经过若干次的迭代后,系统应该尽快地收敛到用户允许或可以接受的目标范围内,否则也有可能中途夭折。

 螺旋模型

螺旋模型

该模型支持大型软件开发,适用于面向规格说明、面向过程和面向对象的软件开发方法,也适用于几种开发方法的组合。

基于可重用构件的模型

构件的重用提高了软件的可靠性和易维护性,程序在进行修改时产生较少的副作用。近几年来,出现了以组件为基础的软件工程方法,基于构件组装的软件过程模型也随之产生,并且逐渐地被广泛使用。

基于可重用构件的模型

基于可重用构件的模型

人们可以把软件工程项目所创建的构件不断地积累和存储在一个构件库中,在一个系统开发过程中,一旦标识出候选构件,则可以在构件库中检索该构件,确认这些构件是否存在,如果构件已存在,就可以从构件库中取出重用。如果一个候选构件在构件库中并不存在,那么,就要进行新构件的开发。新构件开发成功后,一方面用它来构造目标系统,另一方面可以把它存入构件库中。软件目标系统是基于可重用构件的一种集成,这将大大地提高软件的可靠性和生产率。
显然,一个系统将依赖构件的健壮性。但毫无疑问,构件组装模型使软件可以重用,而重用给软件工程师提供大量的好处。构件组装模型具有极其广阔的实用性和深远的意义。

逻辑构件模型用功能包描述系统的抽象设计,用接口描述每个服务集合,以及功能之间如何交互以满足用户需求,它作为系统的设计蓝图以保证系统提供适当的功能。

物理构件模型用技术设施产品、硬件分布和拓扑结构、以及用于绑定的网络和通信协议描述系统的物理设计,这种架构用于了解系统的性能、吞吐率等许多非功能性属性。

基于面向对象的模型

面向对象技术自从问世后,很快被人们所接受,并得到广泛的应用。面向对象技术确实有很多的优点,其中构件重用是非常重要的技术之一。对象技术强调了类的创建与封装,一旦一个类创建与封装成功,就可以在不同的应用系统中被重用。
对象技术为基于构件的软件过程模型提供了更强的技术框架。基于面向对象的模型,是综合了面向对象和原型方法及重用技术的一种模型。
该模型描述了软件从需求开始,通过检索重用构件库,一方面进行构件开发,另一方面进行需求开发,需求开发完成后,在进行面向对象分析过程中,它可以在重用构件库中读取构件,并快速建立OOA(Object-Oriented Analysis)原型。同理,在进行面向对象设计时,它可以在重用构件库中读取构件,并快速建立OOD(Object-Oriented Design)原型。最后利用生成技术,建造一个目标系统。在这个模型中,一个系统可以由重用构件组装而成,甚至通过组装可重用的子系统而创建更大的系统。

面向对象的模型

面向对象的模型

业务流程设计

流程设计工具

  1. **程序流程图(PFD)**又称程序框图,是用统一规定的标准符号描述程序运行具体步骤的图形表示。程序框图的设计是在处理流程图的基础上,通过对输入输出数据和处理过程的详细分析,将计算机的主要运行步骤和内容标识出来。
  2. N-S图,也被称为盒图或NS图(Nassi Shneiderman图),一种在流程图中完全去掉流程线,全部算法写在一个矩形阵内,容易表示嵌套关系和层次关系,并具有强烈的结构化特征 。NS图几乎是流程图的同构,任何的NS图都可以转换为流程图,而大部分的流程图也可以转换为NS图。其中只有像Goto指令或是C语言中针对循环的break及continue指令无法用NS图表示。
  3. IPO是指结构化设计中变换型结构的输入(Input)、加工(Processing)、输出(Output)。IPO图是对每个模块进行详细设计的工具,它是输入加工输出(INPUT PROCESS OUTPUT)图的简称。主体是处理过程说明,可以采用流程图、判定树/表等来进行描述 。
  4. PAD图指问题分析图(Problem Analysis Diagram),是一算法描述工具,也是详细设计(软件设计)中常用的图形工具,它是一种由左往右展开的二维树型结构.PAD图的控制流程为自上而下,从左到右地执行.包含5种基本控制结构,并允许递归使用。

参考文献

  • 杨春晖.《系统架构设计师教程》. 清华大学出版社, 2012.

相关文章

Q.E.D.