购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1.2 软件的材料载体与广义的软件设计内涵

按照设计理论的解释,软件设计就是在建造软件产品之前的规划活动,它使用软件抽象实体模型,建立软件内部结构并进行推理、调整,以满足客户需求、符合环境约束。

要准确理解软件设计的内涵,就要分清软件产品的建造和规划,尤其是要清楚定位编程活动。

在20世纪90年代之前,人们认为编程行为属于建造,编程之前使用各种图形化的工具建立模型的行为属于规划。当时的学派认为需要建立严谨完备的结构图、ERD等设计模型,进行推理,验证合格之后才能开始编码。

但到20世纪90年代之后,人们认识到真正的建造活动不是编程,而是由编译器完成的编译、链接等可执行程序产生过程。因为软件开发的最终产品不是源程序代码,源代码是无法直接运行的,可以运行的是编译之后由0、1组成的二进制可执行程序,所以软件的材料载体是运行在目标机器上的二进制编码,产生可执行程序的编译、链接等活动才是真正的建造,在此之前包括编程在内的活动都是设计规划。 tiC/QqFWrmtXlG3GPPiGzOb2ArR+/OCsbDEhJLpaPsYi9SeBxn6rBRx8uGTLQjJ5



1.1.3 狭义的软件设计内涵

按照传统习惯,人们将需求规格说明产生之后至编码之前的开发活动统称为狭义软件设计,它的目的是构建一个符合需求规格的工程结构,主要包括体系结构设计(概要设计)和详细设计,复杂情况下会包含人机交互设计、数据设计、安全设计等专门主题。

GB/T 11457—2006将设计定义为:a)为使一软件系统满足规定的需求而定义系统或部件的体系结构、部件、接口和其他特征的过程;b)设计过程的结果。

软件设计的惯例解释就是软件设计的狭义内涵,又被限定称为“软件工程设计”。本书后面提及的软件设计,除特殊说明之外,都是使用其狭义内涵。

虽然界定为狭义内涵,但对软件工程设计的理解不能脱离广义的软件设计背景,它仍然要遵守设计理论的基本规律,仍然是以“规划”为核心内容的。 CiWhVHu1kODh4/7A+tRjjw32+HdMu7sj6zsEdV5zrnG9LZD9pCt3q9KXcA0PYra8



1.2 为什么要进行软件设计

软件设计的关键在于处理制品的复杂度。制品不同,其复杂度不同,需要的设计程度也不同。例如,如果需要制作一个布口袋或者搭建一面简易的砖墙,那么不需要进行专门的设计就可以直接缝制和堆砌。但是如果需要制作一件衬衣或者盖一间民居,就需要进行一些精细的设计了。如果需要定制一套盛装或者建成一栋大厦,那么需要多层次、多角度、专业和杰出的设计。

软件开发也同理,如果需要开发一个“计算 n !”,或者“进行冒泡排序”,又或者“对一个文件数据进行简单增删改操作”的软件,那么不需要进行专门的设计就可以直接编写代码,这些软件的复杂度还在人类思维的直接处理能力范围之内。但是如果需要开发一个小超市使用的销售业务系统,就需要进行一些简单的设计了。如果再复杂一些,需要开发的是一套类似于淘宝、京东系统的电子商务系统,那么需要一群出色的人组成团队进行细致反复的专业设计。

综上,之所以要在建造一个制品之前进行规划,是因为制品的复杂度超越了人类思维的直接处理能力。在复杂度超出人类思维的直接处理能力时,要么生产者对生产过程毫无头绪,要么结果质量不佳导致浪费。建造之前的规划活动可以帮助生产者厘清生产过程和建造细节,以尽可能地控制制品的质量,避免浪费。

初学者在学习时,接触的往往都是相对简单的软件开发需求,以至于无法深刻理解设计的作用,甚至忽视了设计活动,这会使得他们进入大型产品开发团队时面临工作困难。

软件设计的关键是控制复杂度。控制复杂度的主要手段有两个:一个是设计分层,另一个是关注点分离。 CiWhVHu1kODh4/7A+tRjjw32+HdMu7sj6zsEdV5zrnG9LZD9pCt3q9KXcA0PYra8

点击中间区域
呼出菜单
上一章
目录
下一章
×