题目
软件设计(Software Design,SD))根据软件需求规格说明书设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及程序流程等,形成软件的具体设计方案。软件设计把许多事物和问题按不同的层次和角度进行抽象,将问题或事物进行模块化分解,以便更容易解决问题。分解得越细,模块数量也就越多,设计者需要考虑模块之间的耦合度。
请围绕"论软件设计方法及其应用"论题,依次从以下三个方面进行论述。
1.概要叙述你所参与管理或开发的软件项目,以及你在其中所承担的主要工作。
2.详细阐述有哪些不同的软件设计方法,并说明每种方法的适用场景。
3.详细说明你所参与的软件开发项目中,使用了哪种软件设计方法,具体实施效果如何。
摘要
2022年3月,我有幸加入公司新智慧公交平台的研发小组,担任架构师与软件设计师的关键角色。我的主要职责是项目的整体设计与架构评审工作。新平台构建在公司强大的中台环境之上,我们采用了基于构件的开发方法,通过整合和复用中台的中间件资源,迅速满足了项目的非功能性需求。在本次设计任务中,我们的核心目标是构建公交应用系统,专注于行业应用层的创新与实践。为了精确表达架构视图和领域需求,我们采纳了当前业界主流的面向对象的分析与设计方法,运用UML2.0统一建模语言,并结合4+1视图模型进行系统描述。经过团队的不懈努力,项目于2022年7月顺利上线。得益于我们坚持的面向对象设计方法,设计文档与主流的面向对象编码实践高度契合,极大地提高了开发效率。本文将重点阐述我们在软件设计过程中采用的策略和方法,以及这些方法在实际项目中的应用与价值。
正文
在“互联网+”时代的浪潮推动下,公共交通行业正面临着一场技术革新的机遇。2022年初,公司立足于打造新一代智慧公交物联网平台,为此专门成立了研发小组。该项目总投资达3000万元,预定于2022年8月完工。我有幸成为该项目团队的一员,担任架构师和软件设计师,肩负起项目整体设计与架构评审的重任。新智慧公交平台构建于公司的中台环境之上,这使我们得以采用基于构件的开发方法,利用公司成熟的构件库来实现非功能需求,例如单点登录、安全注册、网关等。我们的目标是构建一个公交行业应用系统,位于中台的应用层。项目采用了微服务架构,将公交业务划分为基础数据、调度、排班、设备交互、报表等多个模块,每个模块由独立的小组负责开发,以提升整体开发效率。在项目架构的整体设计阶段,我们采纳了业界主流的面向对象设计方法,运用UML2.0统一建模语言和4+1视图模型来精确描绘架构视图。在软件设计流程中,我依据软件分析师提供的系统需求规格说明书和系统架构说明书,完成了公交调度模块的需求概要设计。在此基础上制定了详细的详细设计文档,旨在帮助开发人员更深入地理解本次需求的具体内容和具体流程以及实现方式。
当前,主流的软件设计方法主要包括结构化方法和面向对象方法。结构化方法是一种以严格流程为导向的面向过程设计方法,通常采用瀑布模型或其变体作为指导。该方法通过模块化的理念,将项目分解为多个独立模块,实现了低耦合和高内聚的项目结构。结构化方法特别适用于大型、连续的开发项目,尽管其严格定义的流程可能导致开发进度较为缓慢,但能够确保最终项目的质量。在这一方法中,前期需求的完整性和质量至关重要,因为后续的开发步骤与之紧密相关。
相比之下,面向对象的设计方法基于面向对象的思想,是一种用例驱动、迭代式的设计方法。它通过多态、继承、封装等面向对象的核心概念,提供了比结构化方法更高的灵活性和适应性。面向对象设计方法主要使用UML统一建模语言来描述系统需求。面向对象的方法更适合敏捷开发模式,尤其是在需求初期不明确或可能频繁变化的场景中。此外,面向对象的设计文档与面向对象的编码实践相契合,随着面向对象成为编码的主流,这种设计方法也越来越受到开发者的青睐。经过团队的深入讨论和一致决定,我们选择了当前主流的微服务架构和面向对象的架构风格作为智慧公交平台的统一架构风格。因此,在后续的模块设计,如调度模块,我们均采用了面向对象的设计方法来编写需求概要和详细设计文档。这样的做法旨在确保团队成员间的有效沟通,从而提升项目整体开发的效率。
在调度模块的需求概要设计中,我们利用用例图来直观展示功能性需求。我们首先绘制了以用户为中心的用例图,详细描绘了用户通过前端平台操作调度系统的各项功能,包括路线单制定、排班管理、司机请求处理、违规记录查询等多个视图的展现与操作流程。接着,我们构建了以车辆设备为中心的用例图,展现了设备向平台发起操作请求的相关功能,如司机考勤签到、下发车辆运行计划、发送短信通知等。这些用例图的使用,为开发人员提供了对功能性需求的全局视角,确保了对系统功能的全面理解。在系统部署方式章节,我们通过部署图详细描述了调度系统所需的物理环境配置,并通过组件图展示了调度系统运行依赖的三方中间件,如ZooKeeper、Redis、Kafka、XXL-Job等。这些图表清晰地展示了系统的物理架构和组件的依赖关系。
在详细设计文档中,我们采用类图来描述调度系统的主要静态结构。类图可以展示代理模式在展现层与业务逻辑层之间的解耦应用;通过类图来表述状态模式描绘了车辆状态的操作和转换过程,例如车辆从停场状态切换至运行状态,以及从运行状态转换至待发状态的流程。同时,类图还详细展示了领域模型功能模块(domain层)的设计,为开发者提供了一个基于类图的静态物理架构视图,并清晰地展现了封装、继承、多态等面向对象原则的应用。
为了表述调度系统的业务流程,我们采用了多种动态视图。在概要设计中,顺序图和状态图被用来描述车辆从起始站到终点站的整个运行流程。顺序图展示了业务逻辑处理的顺序,而状态图则揭示了车辆在运行过程中可能经历的状态转换,例如从停场状态到待发状态,再到运行状态的转换,以及从营运状态切换至非营运状态的过程。在详细设计中,我们主要使用活动图来详细描述调度系统特定功能的流程,包括展示系统在处理逻辑时的并发状态、分支选择和循环操作。通过静态视图和动态视图的综合运用,我们的面向对象设计文档得以全面而详尽地呈现,为后续的开发工作奠定了坚实的基础。
2022年7月,新智慧公交项目历经需求收集、系统设计、系统评审、开发及测试等多个阶段,成功在首个城市上线。随后,该项目陆续推广至30多个城市,至今保持稳定运行。新智慧公交平台为公共交通行业的升级与优化做出了显著贡献,赢得了客户和领导的高度赞誉。项目初期,我们面临了不少挑战,如新老平台操作差异导致的用户适应问题,以及客户针对新平台提出的多样化需求。面对这些不断变化的环境,面向对象方法的迭代和持续跟进优势得以显现。为了满足不同需求,我们采纳敏捷开发的模式,快速识别并优先实现关键需求,确保及时响应客户。我们的设计文档和代码也遵循项目进度,有序地迭代更新,推出了多个版本,以便于对各城市迭代更新的版本进行维护和管理。此次项目经历为我带来了宝贵的经验,使我更深入地理解了软件设计的方法论。随着技术的不断发展,我们的软件设计方法也在持续进步,为未来的开发工作奠定了坚实的基础,最后在此感恩引领技术不断发展的先驱者们做出的卓越贡献。