软件项目实训及课程设计指导——软件系统设计中的概要设计示例
1、什么是软件应用系统的系统设计
所谓的软件系统设计其实就是通过某种特定的平台,而达到完成软件系统项目的整体软件的功能和性能。从软件工程管理的角度来看,软件系统项目的设计过程主要分为两步完成。
(1)概要设计
将软件系统项目的需求转化为系统的数据结构和软件的系统总体结构——此设计阶段的工作重点在于软件系统项目的静态结构设计,并设计出构成软件系统项目的各个物理组成元素——程序模块、数据库表结构、测试用例、各种设计文档文件等。
当然,在软件系统项目的系统概要设计中所需要的各种信息主要来自于软件系统项目的需求分析的结果。
(2)详细设计
在前面的系统概要设计中的软件系统项目总体结构设计完成的基础上,通过对软件系统项目结构中的各个物理组成元素进一步设计细化和完善,最终得到软件系统项目的更加详细的数据结构和算法、用户界面设计、关键性技术问题(包括开发环境和工具、运行环境和平台等)的解决方案和对应的实现技术等。
2、软件系统的概要设计阶段中的主要工作重点
(1)设计中所需要的各种信息主要来自于软件系统项目的需求分析结果。
(2)概要设计工作的重点内容:是设计出软件系统项目的系统体系结构。
(3)系统架构设计工作的基本流程如下,这个阶段是软件系统项目的系统架构师发挥作用的主要阶段。
因此,软件应用系统在进行系统设计时,软件系统项目的系统设计人员需要做到如下的三步:
1)对系统需求进行描述;
2)对系统结构进行描述;
3)对系统行为进行描述。
因此,可以看出在这三个步骤中,第1、2步是静态的,其建模方式一般称为静态建模;而第3步则是动态的,其建模方式则称为动态建模。在UML的分析和设计的建模技术实现中静态建模可以使用UML的例图、类图等UML规范的图形来表示;而动态建模则可以用UML中的状态图、时序图、活动图等图形表示。由此可知,静态建模机制和动态建模机制是UML的两大主要类型。
3、软件系统的详细设计阶段中的主要工作重点
(1)软件系统的详细设计中所涉及的主要工作内容
1)用户界面设计、和各个模块组件的设计、实现技术等内容(给出软件结构中各模块的内部过程描述)
2)模块内部的算法设计
(2)基本要求—— 一般是做到类的方法和属性的描述,但这些方法的实现就不必做了。
4、为什么要进行(或者开展)软件应用系统的设计阶段的工作
(1)主要的原因
通过对于软件应用系统的用例分析,软件系统的分析和设计人员可以产生出一个系统的分析模型,但是设计人员很少有直接根据这个分析模型去完成程序的开发实现。为什么?如下示图为某个BBS论坛系统的系统后台管理的用例图的局部截图:
首先,我们不要幻想直接把分析类图画好后,就直接按照其去编码。
其次,我们应该了解到从用例图中得到的分析模型,只是表达了系统中的一些关键性的概念,而不能表达系统中的性能和系统的外观。
最后,系统的分析模型往往对于系统的结构设计来说又往往过于简单,复用和调试等等都不能在这个模型中被考虑完成。
因此,我们有必要对前面的分析模型再进一步地进行设计,以最终产生出软件系统的最终设计模型。
5、开展软件应用系统的系统设计工作的主要目的
进行或者开展软件应用系统的系统设计主要的目的是能够指明一种易转化成代码的工作方案,同时也是对前一个阶段中的分析工作的进一步的细化—— 即进一步细化软件系统分析阶段所提取的类(包括其操作和属性),并且增加新类以处理诸如数据库、用户接口、通信、设备等技术领域方面的问题。
之所以如此,是因为软件系统的系统设计是对问题域外部可见行为的规格说明、并增添实际的计算机系统实现所需的细节,包括人机交互、任务管理和数据管理的细节。如下为某个应用系统中的某个数据库表结构定义的局部截图:
6、软件应用系统设计时的基本要求
在进行软件应用系统的系统设计时所应该考虑的主要问题在于:处理什么?怎么处理?如何使用?
因此,软件应用系统设计时所需要关注的方面,概括起来主要包括以下三个大类:
(1)处理的对象,也就是数据。
(2)处理的方式,也就是我们的系统如何来处理系统的逻辑。
(3)如何进行交互,这个交互包括用户(使用者),以及外部系统。
7、读者需要区分软件设计和软件的编程实现
(1)软件设计以面向数据为主,以面向功能和面向对象为辅;
(2)而软件的编程实现则以面向对象为主,以面向数据和功能为辅。
8、在进行软件应用系统设计时所应该要注意的要点
(1)核心问题——能否使用重复的体系结构模式
也就是能否达到结构级的软件重用——即能否在不同的软件体系中,使用同一体系结构。比如我们经常说的C/S和B/S体系结构等问题。因为体系结构是从更高的层面上考虑问题——关注的问题就体现在"不变"因素上,体系结构一般关心应用程序的模式,更加体现在通过技术去解决这些业务差异带来的各种影响。
比如,关心是否是分布式应用程序,关心系统分层是如何设计,也关心性能和安全——因此,在这样的情况之下,会考虑集群,负载平衡,故障迁移等等一系列技术的使用。如下示图为某个软件应用系统在系统架构设计中应用MVC体系结构模式的分层设计结果的局部示图:
(2)软件系统设计工作中所应该要遵循的"3W"原则
Who(为谁设计,用户是谁)
What(要解决用户的哪些问题—-功能方面、性能方面)
Why(为什么要解决这些问题—-为用户带来价值、降低开发方的成本等)
其实"3W"的本质,就是要求软件应用系统的系统设计人员围绕着"用户"而不是围绕着"我们"或者"时髦的技术"来开展软件应用系统的设计工作的,因此满足"用户的需求、便于用户的使用、同时又能使开发的技术尽可能简单而相应地降低软件应用系统开发的总体成本",这就是软件应用系统的设计人员所要追求的设计目标。
9、软件应用系统设计中的系统概要设计——总体结构设计
(1)在什么时期进行软件应用系统的系统概要设计
在软件系统的需求分析明确并对软件应用系统的系统需求进行域建模之后,需要进一步开展系统概要设计的工作,因为软件应用系统的系统概要设计对后续的软件应用系统的开发、测试、实施、维护等方面的工作都起到关键性的影响。因此,软件应用系统的设计人员需要重点关注、细心周到地开展相关的工作。
(2)软件应用系统的概要设计工作的工作重点
如何使得系统概要设计工作能够适应特定的实施环境和部署环境?系统概要设计工作的核心应该是规划方案的构造,在揭示实施细节的基础上得到设计方案的详细对象模型。如下示图为某个软件应用系统的部署环境的局部截图:
(3) 软件应用系统的概要设计工作的重要性
1)分析和设计模型是交错并且迭代的
2)软件应用系统的概要设计的重要性主要体现在它是把软件应用系统的需求转化为软件应用系统的开发实现过程中的最重要的环节,并且软件应用系统的系统设计最终结果的优劣在根本上也决定了软件应用系统的总体质量。
10、软件应用系统设计中的系统概要设计所涉及的主要内容
(1)制定开发规范
制定本软件应用系统中的各种开发规范是项目开发小组今后共同开发的基础,有了这个开发规范和程序模块之间、项目成员彼此之间的接口规则、方式和方法,开发团队中的各个成员也就有了共同的工作语言、共同的工作平台,从而使得整个软件开发的工作可以协调而有序地进行和开展。而制定这些规范所涉及的主要内容包括:
1)代码体系、接口规约、命名规则
2)规定设计文档的编制标准。
3)规定与硬件,操作系统的接口规约,命名规则。
(2)软件系统的体系结构设计(架构设计)
体系结构是对复杂的软件系统的一种抽象,如客户/服务器(C/S)和浏览器—Web 服务器—数据库服务器(B/W/S)结构等的应用。同时在架构设计中还应该考虑采用什么形式的框架技术和服务器的平台类型等内容。
(3)划分软件应用系统中的各个模块并进行组件类的设计
根据用户的需求实现从功能上来划分各个功能模块,在模块设计中应该遵守"功能独立的单一职责原则(SRP,Single-Responsibility Principle)"是模块化设计的基本原则。因为,"功能独立"的模块可以降低软件应用系统在开发、测试、维护等阶段的代价。
(4)数据结构与算法设计
设计高效率的程序是基于良好的数据结构与算法的,而不是基于编程小技巧的。因为数据结构与算法就是一类数据的表示及其相关的操作。确定软件系统所涉及的文件系统的结构以及数据库中的数据访问的模式,进行数据完整性和安全性的设计,并确定输入,输出文件的详细的数据结构是本阶段所要考虑的问题。
(5)数据库的逻辑设计及系统数据流图(DFD),如下示图为蓝梦CRM管理系统中的系统数据结构设计阶段所涉及的系统数据流图(DFD)设计结果局部示图。
(6)其它如可靠性等方面的设计等
软件系统在运行过程中,为了能够适应环境的变化和用户新的功能要求,需经常对软件进行改造和修正、完善。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。
11、掌握软件应用系统的系统概要设计中所涉及的系统设计的一些基本的原则
(1)先进性
在设计思想、系统构架、采用技术和选用平台上均要有一定的先进性、前瞻性和扩充性。特别要考虑一定时期内业务的增长和应用的变化趋势。在充分考虑技术上先进性的同时,尽量采用技术成熟、市场占有率比较高的产品,从而保证建成的网站系统具有良好的稳定性、可扩展性和安全性。
(2)实用性
在尽量满足业务功能需求的前提下,要适应各业务角色的工作特点,做到简单、使用和人性化。实现统一身份和资源管理、统一认证、统一内容管理、个性化界面和内容定制。
(3)可靠性
由于企业应用中不可避免地要涉及不同的用户群(操作层、管理层和业务层等人员),所以建设的信息服务网站系统必须在建设平台上保证系统的可靠性和安全性。系统设计中,应有适量冗余及其他保护措施,平台和应用软件应具有容错性和容灾性。
(4)开放性
在系统架构、采用技术和选用平台方面都必须要有较好的开放性。特别是在选择产品上,要符合开放性要求,遵循国际标准化组织的技术标准,对选定的产品既有自己独特优势,又能与其他多家优秀的产品进行组合,共同构成一个开放的、易扩充的、稳定的和统一软件的系统。
(5)可维护性
系统设计应标准化和规范化,按照分层设计,软件化实现。对于采用的软件构件化开发方式要满足:一是系统结构分层,业务与实现分离;二是以统一的服务接口规范为核心,使用开放标准;三是构件语意描述要形式化;四是提炼封装构件要规范化。
(6)可伸缩性
考虑到一般的企业应用的网站系统的网上业务建设是一个循序渐进、不断扩充的过程,系统要采用积木式结构,整体构架的考虑要与现有系统进行无缝连接,为今后系统扩展和集成留有扩充余量。
(7)可移植性
在选择开发的应用平台上,应该考虑能够建设出一套与平台无关,以统一的服务接口规范和与各种数据库相连的应用组件。
12、软件应用系统的系统概要设计阶段最终的重要输出结果
(1)软件应用系统的概要设计说明书,一般需要包含如下的主要内容:
1)编码规范:信息形式、接口规约、命名规则;
2)物理模型:组件图、配置图;
3)不同角度的构架视图:用例视图、逻辑视图、进程视图、部署视图、实施视图、数据视图(可选);
4)系统总体布局:哪些部分组成、各部分在物理上、逻辑上的相互关系;
(2)数据库设计说明书
(3)用户手册
(4)制定初步的测试计划
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。