2023年11月24日晚,信息科学技术学院第十八期“知存讲座”暨信息科学前沿与产业创新课程在北京大学理科教学楼208教室顺利举办。华为公司高级软件教练、北大计算机系校友樊伟老师受邀进行了以“软件架构设计的思维方法与实践”为主题的分享,400余名师生到场聆听。信息科学技术学院副院长王润声老师主持了本次活动。
讲座现场
樊伟老师给大家依次讲解了三部分内容:软件架构设计综述、软件模块架构设计和软件系统架构设计。
樊伟老师主讲
一开始,樊老师谈到了自己对软件设计的理解:最大的挑战不是软件的功能如何实现,而是软件复杂性难以管理,复杂性既来自业务本身,又来自程序内部。若设计没有考虑到复杂性可能造成“长尾效应”,软件就会随着不断的扩充变得越来越不稳定。软件设计有两个类型:面向过程的软件设计和面向模型的软件设计,它们的区别在于解决问题时是“由问题到过程”还是“由问题到模型”。软件需求分析时应该在关注“做什么”的同时兼顾“怎么做”。
对此,樊老师为大家讲解了从需求功能分析和分解过渡到领域对象识别和设计的思路方法。首先,将外部需求转化为内部需求,将问题分解为各个子域,针对问题域,再抽象成一些子问题。同时,将需求模型转化为领域模型,进而逐步识别和归纳领域逻辑。接下来,樊老师以一个具体问题为案例进行了分析讲解,如何从外部需求转换到“负载分担”和“冗余备份”这两个内部抽象需求,再进一步通过领域建模和抽象,逐步将该内部需求分解映射到具体的软件对象和算法逻辑,再通过合理的设计模式予以组织和承载,从而形成对原始需求简洁、高效的设计和实现。之后,樊老师提出了一个“简单”的C语言开发问题:A+1<B与A<B-1等价吗?并通过C语言标准中对该问题层次化的渐进模型和规则定义,带领大家进一步熟悉和理解了领域建模的逻辑层次和过程方法。
紧接着樊老师带领同学们进一步理解什么是真正的“好模型”,并讲述了一个好的领域模型需要满足的基本要求和扩展要求。“好模型”的基本要求是基于领域逻辑的抽象模型,能支撑业务领域的各类需求。而扩展要求则是:能够反映业务领域的客观规律,不依赖于具体的物理设备和现实环境(而依赖抽象逻辑);具有通用性、普适性、前瞻性;能基于一个最小集,以层次化扩展性的方式,推演和支撑业务领域在各个场景下的业务流程和处理过程。
樊老师PPT分享
随后樊伟老师解答了一个大家很关心的问题:如何提升领域建模的能力?首先一定要多读、学习、分析体会领域内标准,掌握其逻辑层次、框架,以及分析过程。随后应该去尝试以规范标准的要求去写作。在这之后,做到在每一步的分析和论证过程中,力求严谨、充分。最后根据兴趣读一些领域内论文,或者数学类书籍,体会其中的分析归纳思路、推导过程,把握核心逻辑的线索。
然后针对软件模型架构的理解,樊伟老师讲解了一些比较实用的方法和思想,从逻辑视图到开发视图的分析设计过程。从领域模型到软件模型,要运用面向对象的设计思想和方法,以高内聚低耦合为指导,以现有的设计模式为参考,并基于领域模型去抽象业务逻辑,使用软件模型去实现逻辑关系。
樊老师还为大家拓展了抽象设计方法与里氏替换原则:对象继承类的关系不合理,可扩展性就会降低,因此要分析基类设计的场景,对基类进行恰当的抽象定义和设计。如果定义违反里氏替换原则,那么程序就无法应用在相应场景。
樊老师与同学互动交流
最后,樊伟老师介绍了软件系统架构设计的思维方法和步骤:要确定软件系统的架构目标,进而依次实现逻辑架构、技术架构和软件架构。并以一个分布式系统为例,分析了如何在CAP理论限制下,对系统结构进行优化,在一致性、可用性、可靠性之间权衡取舍,最大化实现架构目标。在讲座后的提问环节,樊老师还细致地回答了同学提出的疑问。
通过樊老师的分享,同学们对于软件架构设计都有了更加深刻的理解,本次“知存讲座”在同学们热烈的掌声中圆满结束。
信息科学技术学院“知存讲座”后续将持续开展,邀请信息学科领域的各位知名人士为本科生介绍信息技术学科和产业发展热点和前沿话题,引导信科青年学子,增进专业认知,寻找未来感兴趣的发展方向。