如何使用预先设计提升开发效能?


prtyaa
prtyaa 2023-12-25 13:45:28 52108
分类专栏: 资讯

敏捷并不是没有设计,而是打散设计过程,让设计更贴合需求

如我们所见,在过去的几年~十几~几十~近百年里,因为互联网的蓬勃发展导致软件工程,发生了一些显著的变化。首先,软件的发布周期由几个月一次,变成了一天几次。与此同时,软件的开发模式由瀑布式开发转向了敏捷开发模式,包含 “中华田园式敏捷” 软件开发(笑~)。

 

 

 

越来越短的 deadline,越来越快的发布速度,使得软件质量正在变差。尽管大部分的软件无法存活下来,在架构还没有腐烂的时候,公司已经倒闭了。然而,缺少架构设计的软件,将会导致一次又一次的软件重写。每隔个一年半载,开发人员就狠不得重写整个应用,然后就重写了。出现这种原因,有多种多样的,如:技术债务过多,导致代码腐烂。虽然,在某些公司里重写有助于 KPI,但是并非所有的公司都是如此。

扯远了,让我们回到主题上,看看敏捷

设计的变更(TBC)

瀑布模型最早强调系统开发应有完整之周期,且必须完整的经历周期之每一开发阶段,并系统化的考量分析与设计的技术、时间与资源之投入等,因此瀑布模型又可以称为 ‘系统发展生命周期’。[wiki_waterfall]

当然了,现代的瀑布式开发,也开发发生了一些变化。敏捷软件开发,强调迭代与开发速度,并也非没有设计。于是乎,在不断碰撞的结果之下,产生了新的软件开发模式:小步的预先设计 + 持续性的架构设计——演进式架构。

  • 小步预先设计。即在不同的几个阶段里,实施不同的架构、组件、接口设计方案。
  • 演进式架构。依赖于持续的投入,来改进系统的架构。它将在下一篇文章中讨论的内容(PS:不知道什么时候能写完)。

所以,为了更好的观察和设计,我写下了这篇文章来总结它们,还有诸多细节待我去整理。

 

 

前期的预先设计:类瀑布模型

与瀑布模型不同的是,敏捷的设计强调的是轻量型的设计。相关的设计,可能在几天内,或者是一两个星期内设计及实施——依赖于资深的开发人员。而这样的类瀑布模型的设计,主要由两个阶段来体现:Inception + Interation 0。

设计阶段:Inception

 

 

 

Inception 是 ThoughtWorks 多年以来使用的启动软件设计和交付项目的方法,通过 3 天到两周的时间,采用集中式、互动式的设计工作坊,帮助客户在最短时间内达成对项目范围的一致,快速进入项目交付。[^what_inception]

在这 3 天 ~ 两周的时间里,我们会进行最重要的系统架构设计,而设计的方案也是轻量级的。它只会包含整个系统的架构,以及少数的落地代码。

概念验证。概念验证(PoC,即 Proof of concept)是对某些想法的一个较短而不完整的实现,以证明其可行性,示范其原理,其目的是为了验证一些概念或理论[^wiki_poc]。

对于大部分项目来说,它们并不需要一个概念验证的过程。概念验证,只针对于我们打算在系统中采用新的架构,而这个新的架构在组织内部没有采用过,或者说采用得特别少,因此需要验证这种新的架构模式新的概念能落地。诸如于计划在项目中采用微前端,那么我们就需要去实践它,并证明它在项目中是可行的。

产出物:概念的可靠性及验证代码

系统架构设计。常规的系统架构设计,它包含了系统的技术选型,及对应的应用架构、业务架构、部署架构等。值得注意的是,这里的设计并非详细设计,只是大致的逻辑关系。

产出物:概念和架构图。

系统架构验证。又也可以称为 原型系统(Hello, World 们),它与 PoC 不同的是:它不仅仅包含 PoC 阶段的应用代码,还包含了一些架构可行性相关的代码实施。

产出物:系统可运行。

实施阶段:Interation 0

 

 

 

在这个阶段,主要是集成基础设施,完善整个系统的应用体系。

创建、更新脚手架(boilerplate)。对,就是拿出相应的框架、架构、应用的 hello, world,更新对应的依赖,以满足项目的要求。对于不存在脚手架的项目来说,则是创建一个新的脚手架。它不仅仅是框架的脚手架,还包含了平台、公司特定的代码,以及各种代码规范,如 Git Hooks——pre-commit, pre-push,前端的 TSLint 等。

产出物 1:可复用的项目模板。

对于前后端分离应用来说,它们需要一个 API 管理工具,用于制作契约。与此同时,对于前端开发来说,还需要一个 Mock Server。

产出物:API 管理平台及 Mock Server。

最小可行系统。它包含了之前的架构相关的代码,还包含了 DevOps 相关的代码(诸如于流水线等),让整个系统能完整运行出来。与此同时,系统的每个子系统,如前端、后端、移动端等,都能以 hello, world 的形式工作起来。对于移动应用来说,它是可发布的状态——所以它意味着需要申请一系列相关的账号等。

产出物:系统随时可部署

模范代码。和之前强调的一样,要提供一个可供其它团队成员参考的代码。如果有时间编写代码,以通过代码生成的方式来生成模板代码,那是再好不过了。

产出物:可参考的功能代码。

搭建设计系统。对于组件化架构来说,设计系统是一个非常重要的基础设施。它可能只包含了 Style Guide,基础的组件库等。不过,这些并不重要,哪怕没有这样的系统,只要保证不出现大量地重复代码也可以。其相关的实践有 Storybook 等。

产出物:可视化的组件中心。

迭代中的预先设计

与此同时,在每个迭代进行的过程中,我们仍然会包含一系列的设计。

迭代中

 

 

API 接口/契约设计。无需废话。

产出物:API 接口其及 Mock Server。

建模。无需废话。不过,对于采用 DDD 的项目来说,它可能会稍微麻烦一些。

产出物:数据库模型、领域模型。

组件设计。项目开发的过程中,并非所有的组件都能满足我们的需求。为了不阻塞项目的开发,往往需要把一些相关组件的开发前置。它可能是在项目刚启动的时候,还可能是在迭代开始的时候进行。

产出物:前端组件

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30313
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2972
【软件正版化】软件正版化工作要点  2891
统信UOS试玩黑神话:悟空  2864
信刻光盘安全隔离与信息交换系统  2749
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1283
grub引导程序无法找到指定设备和分区  1253
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  170
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  169
点击报名 | 京东2025校招进校行程预告  165
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  162
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!