设计也可以按图索骥

设计也可以按图索骥

本博文为北航高等软件工程课程第三次博客作业,用于总结在在设计阶段的成果。

本小组的题目是社区疫情防控追踪系统。要求基于对生活社区的疫情防控需要,建立一个轻量级易用的追踪系统,可以追踪社区每天进出的个人、每个人的状态,并能在社区间共享相关信息以实现风险评估和预警传播。该项目要求在手机上实现个人使用的程序(诸如微信小程序)。

什么是设计

首先,设计阶段需要做什么

软件设计是从软件需求规格说明出发,形成软件的具体设计方案的过程,也就是说在需求分析阶段明确软件是“做什么”的基础上,解决软件“怎么做”的问题。结构化设计方将把软件设计分为概要设计和详细设计两个阶段。

从这段描述中可以看出,设计阶段是根据课程前一阶段需求分析的结果,选定软件的技术路线,确定软件的整体架构。在概要设计中,将软件划分为功能模块,确定模块的功能,设计接口,确定模块之间的层次结构,调用关系,以及确定交互界面。同时也需要设计数据结构,以及完成数据库的设计,建立的是软件系统的逻辑模型。在详细设计中,规定了每个模块的细节结构,包括详细的逻辑,算法,数据的输入和输出等。

设计阶段我们做了什么

在设计阶段,小组成员根据需求分析的结果,对软件进行详细设计。首先是技术选型,本项目选用了微信小程序前端+SpringBoot后台,并根据需求规格说明,然后我们确定了软件中的实体,如用户实体,打卡记录实体,并根据实体关系分析了实体间的约束,设计了数据库。接着将软件划分成了多个功能模块,如用户信息模块,填报模块,管理模块,状态服务等,在功能上相近或者相关的功能会被规划到一个模块中。根据模块的划分,确定了模块的具体功能,并确定了这些模块的层次关系,和它们的调用结构。最后规定了每个功能的具体输入和输出格式,并语言说明了功能的逻辑,对每个功能,详细说明了其关联的实体和其他模块,用顺序图规定了每个功能的逻辑操作。

但是在设计评审前一周,在老师的指导下,我们还是发现了设计中的很多问题,第一点是存在部分需求中体现的功能没有在设计文档中体现出来,第二点是有一些功能没有在在设计文档中表示清楚,例如与其他社区的信息共享,虽然我们已经有了相应的设计,但是没有很好的在设计文档中表示出来。

设计阶段的收获与感悟

在本次软件设计阶段,我参与了完整的软件设计阶段,包括软件的技术选型,架构设计,模块设计,接口设计,数据结构设计,以及每个模块和功能的逻辑结构,输入,输出和对相关过程的描述,受益匪浅。

在本次软件设计阶段,我了解了设计阶段中可以用到的OCL对象约束语言,它可以表达UML类图中值的约束,还能够用来对UML图中的任何元素写表达式,也可以指出系统中的一个值或者对象。是一门值得仔细研究的语言,但我对OCL的了解不是很深入,可以深入研究。

在本次软件工程的设计阶段中,注意到这可能和真实场景中软件设计有差距之处:首先,设计阶段的任务是根据软件需求说明书,形成具体的软件设计方案,解决的是软件“怎么做”的问题,概要设计说明的是架构,软件模块和功能之间的关系,详细设计详细说明模块或功能的详细实现细节。我们怎样确定功能或者模块的细节?在我看来,凭借的是对软件需求的深入了解。设计文档的作用是什么,通过对软件细节的设计和描述,可以帮助开发人员在不懂得业务的情况下,依然可以完成指定的任务。然而在这种小组组队完成整个阶段的项目中,小组成员每个人都身兼数职,并参与了领域分析,需求分析等多个阶段,对软件的功能都有了详细解,因此在这种情况下,设计文档的作用可能没有真实场景中明显。

软件的设计是一项非常重要的工作,如第三条所言,在课程的情境下,因为组内的成员沟通便利,并且都熟知软件的设计,因此在这个过程中,设计文档起到的作用似乎有限。但是即使是在这样的情况下,依旧出现了小组成员对功能的逻辑和输入输出理解不一致而导致的问题,因此可以试想,在真正复杂的大型软件开发过程中,一份完善的设计文档的重要性。

软件的设计,确实是一个按图索骥的过程,前人已经为我们积累了大量的软件开发方面的经验,借助这些经验,我们可以规避众多软件开发方面的风险,就设计而言,按照前人的经验,对软件进行概要设计和详细设计,可以大大减少软件开发时出现的不协调性,提高软件开发的效率,但是目前模式是否是最优的,是否有新的开发模式或是有可以提升的地方,依旧需要大量的理论研究以及探索实践。

posted @ 2021-01-07 18:40  原味咖啡奶  阅读(65)  评论(0编辑  收藏  举报