索辰科技:CAE软件协同研发实践经验与措施
2023-01-21张莉,原力
根据访谈素材,整理出以下内容:
1 工业软件与传统信息化软件研发的主要区别
Q:您认为工业软件与传统信息化软件研发的主要区别在哪里?
A:传统的信息化软件以处理流程和业务逻辑为主,突出特点当业务需求转化为软件处理流程事件和任务的单元时,如果相应的资源配置充分(例如人力、技术路线、组织架构等),软件过程和成果质量就是可控的。
而工业软件最显著的特点是其自身存在不可控的地方,主要原因有以下3 方面:算法的不可控性、技术的不可控性及软件工程的不可控性。
算法不可控比较容易理解,不是说有了客观的形式化表达(数学表达),就一定能转化成有效或有价值的软件算法,这是算法的不可控。
技术的不可控性主要体现为工业软件是软件技术的综合,如涉及较为复杂的图形技术,其不同于其他软件的图形技术(比如:游戏中的图形处理),而是要与具体算法和具体功能相匹配、相适应。
软件工程方面存在的不可控,主要体现在过程沟通。工业软件涉及工业知识、学科知识与软件知识的综合,研发人员包括计算机专业和其他专业学科,例如:物理、数学等等,这就导致软件过程中存在很大的沟通问题。比如,具备深厚软件功底的人,让他理解物理、机械原理就很难,而学科人员可能对软件的认识又存在很大偏差,因为他的学习体系里没有这方面知识,也即在软件工程中存在的最大问题就是缺乏沟通的可理解性。
2 协调不同专业背景人员的相关措施
Q:工业软件是典型的多学科和跨学科技术产物,你们在协调不同专业背景人员协同工作方面有哪些措施呢?
A:与传统软件开发相比,工业软件的开发有更长的周期和积累过程,这是由不同专业技能的人组合工作时技能和沟通方面的鸿沟所造成的。
一种解决方案是“小组进化”模式,即按照专业划分研究小组,通过计划路径不断进化从而奠定技术基座,比如图形图像处理、基本的软件架构、开发语言种类、学科专业如结构或者流体。单个研究小组只关注自己的领域,并给予较长的训练和成长周期,就小组内部而言,沟通这一块就基本可控了。
具体而言,研究小组的整体绩效不以成果为考核目标,而是选定方向上的能力提升为主要目标,实现内部畅通和可控。而在产品级上则跟据需要的技术组合小组,沟通的问题落实在小组上而不是个人上,这样产品级的沟通也相对可控。这样,在基于工程需求、工程场景定义相应产品时,相应的储备资源就能够形成一个相对比较好的合力。在产品定义及开发时就可以按照标准软件工程进行计划和任务。
此外,在研究小组内部要做好资源的冗余设计,虽然会增加成本,但能将不可控因素变成可控。这种模式也存在问题,即将矛盾和风险向上层传导,例如小组间需要管理层协调,产品定义需要管理层掌控,小组的新设和退出需要管理层判定等等,当然这种情况符合工业软件研发特点,但对于传统软件行业可能不是最佳实践。
3 对人员变动的看法及相关应对措施
Q:公司人员变动,尤其是工业软件研发人员变动所带来的影响是很大的,你们如何管理公司人员变动呢?
A:对于公司而言,人员变动都会产生负面影响,无论是工程专业人员变动还是软件开发人员变动,都会导致交接和继承问题,只是在工业软件中更明显。软件本身的唯一生产者是人,这是产生不确定因素的根本原因。对于传统软件中人员变动的交接成本是可控的(极端下对业务重新开发)。
工业软件的人员变动就可能会产生严重问题,如果人员变化造成接续人员很难理解前人的思想,尤其当涉及算法这一部分问题时则会更为严重。例如,算法思想和实现、数据结构设计思想、图形技术路线和功能符号性等这些就会存在严重问题。
人员变动引发的风险既不可避免,也不存在最佳规避模式。行之有效的实践就是拿成本置换风险,尽最大可能将工业软件的不可控因素变成可控,减少整体风险。
对于软件方面,可供应对的方式是建好研究小组梯队,增加小组中人员冗余;对于工程人员方面,越是底层和基本算法越要适当引入商业合作,与具备相应能力的稳定科研机构形成供给关系,而不是依靠自身力量发展。本质上,这是在将人员变动的风险进行分摊,也即广泛开展合作。
4 是否会重写第三方机构(例如高校)提交的代码
Q:对于第三方机构(例如高校)提交的代码是否会进行重写?
A:这个问题需要个体评判,一般情况下对于高校科研人员提交的算法,重点修改侧重于性能提升,而非功能完善,因为功能是由约定时规定的。性能提升,比如单机环境需要修改为并行环境,以及考虑环境的迁移性、操作系统的兼容性。
5 研究团队的组织及不同研究小组之间的沟通方式
Q:能否谈谈研究团队的组织及不同研究小组之间的沟通方式?
A:在研发初始阶段,一个研究小组只会安排两个人,但是会赋予他们一项权利,随着自己研究的深入,可自主吸纳更多的人进去,相当于奖惩制度。某个研究小组的成果如果在实际工程应用中效果更好,就可以吸纳更多的人进去。相反,如果该研究方向在后续实践过程中没有什么贡献,可能该研究小组就会被合并到其他小组。
同一个研究小组内部研究内容相近,在相近的工作环境中工作,比如说至少是一个公司的人,很有可能还是一个办公室的人,因此沟通基本不存在问题。如果是不同的研究小组,比如说开发CAD 和CAE 图形处理的人员,通常是两个不同的研究小组,因为他们的基础渲染算法不同,但是由于都是图形学问题,所以相互还是可以沟通的。
对于专业差别较大的研究小组,其实不需要刻意安排沟通,在项目实施过程中去沟通即可。一是项目实施过程中通常都是相对比较浅显的问题,如果能够积极加以讨论,沟通问题自然会被解决;二是复杂沟通问题由管理层协调,问题向上传导。其实就是建立一种机制,给予最基础资源让各自有足够的自由发挥空间,这样团队自然如同进化一样,价值低的方向会逐渐被淘汰,价值高的方向就会不断地滚动成长。这种模式本质上还是为了应对工业软件开发中更复杂的不可控性问题。
6 CAE软件开发人员专业背景
Q:您认为CAE软件开发人员需要哪些专业背景?
A:CAE 软件研发除软件专业人员外,还需要力学背景人员。一般情况下,一位新员工,尤其是应届毕业生,进入公司后还有一个相对长的学习过程,很难在一开始就决定他们会朝哪个方向发展,新员工可能最后成长成为一名销售,或者是一名程序员。也就是说,公司内部有一个再培养过程,但是招聘都需要有一定基础背景,即纯粹的软件工程或者力学背景。
7 CAE软件开发过程中架构和框架的定义
Q:CAE 软件开发过程中,对于架构(architecture)和框架(framework)是如何定义的?
A:架构通常指一整套管理模式,比如产品定义、成本、团队组织和沟通。因此,架构通常有两个基本目标:降低成本和解决沟通问题。降低成本是指在成本可控的情况下,要尽量压缩团队规模,在质量可控的情况下,尽量压缩工期。
以下十条原则可用于降低成本:明确业务需求、任务优先排序、消除过度设计、最小可行性定义、引入敏捷方法、具备自动测试能力、统一生命周期管理、促进团队协作、变更响应机制、强化复用代码。一个团队怎么建立起有效的沟通方式,则没有确定答案,需要不断地尝试,从而确定适合的沟通方式。
框架则是面向系统的具体规范,也有两个目标:第一,明确接口,设定好技术规范;第二,明确测量,重点在于最终产品的质量而不是单一模块的质量。
8 CAE软件开发过程中的痛点问题
Q:CAE软件开发过程中,遇到的痛点问题有哪些呢?
A:一般认为CAE 软件的痛点在算法上,但个人认为CAE 软件长期迭代中的主要痛点还是数据结构的问题。
数据结构在软件中不仅仅是对外数据接口,更重要的是需要定义CAE 内部的大量功能和非功能需求,例如存取特性、运行效率、软硬件适配、兼容、资源分配、业务逻辑优化等方方面面的问题。数据结构确定之后,其变动越小越好,因为一旦变动,可能影响到各种解释器、数据传递、数据变量的规格等,所引发的问题可能会非常大。
核心问题是:如果逻辑有问题能很容易被发现,而数据结构问题因为传播路径干扰,会很难定位和修正。这点在工业软件中尤为突出,例如数据精度设计偏差可能导致频繁的数据转换中错误不断累积。例如,特定数据类型是双精度的浮点型还是整型,或者字符串类型,从最初始明确下来可能在整个软件生命周期中都不会再次定义。
9 CAE 软件开发过程中的文档要求、质量规范及支撑工具情况
Q:CAE 软件开发过程中,文档要求、质量规范及支撑工具情况是怎么样的?您能谈谈吗?
A:一般情况下不会刻意要求更多的文档,而是更关注记录思路演变,这与CAE 软件特性相关,即开发的过程和目标存在不确定性。
CAE 软件目标的不确定性有很大原因是需求实现存在不同路径,路径差异可能还非常大。为此,一般将文档分成两类:一类是业务人员,要求他们详细地描述其需求;第二类是开发人员,前期测试不需要文档支撑,但是要求在其产生成果时做详细总结。
其他场景与通用软件开发相同,代码中需要注释的地方要求有注释。
CAE 软件开发质量保证。这个问题因人而异,比较复杂,举两个例子:建立程序封装界面的可测试框架作为强制开发技术规范;使用任何语言都要求严格的代码形式化检查。
CAE 软件开发支撑工具。主要选用合适的版本控制机制和工具,再配合适用的问题追踪系统。
10 对工业软件人才培养的建议
Q:关于工业软件人才培养,您有什么好的建议?
A:对于高校相关专业而言,应该将CAE 软件主流编程语言纳入必修课,例如C 和C++,并且贯穿学生的整个学习过程,至少从大二开始,每学期要求用C++语言去完成一个项目。当前整个培养体系中对C++人才的培养远远不够。
公司简介:上海索辰信息科技有限公司成立于2006 年,总部位于上海,公司人员70%为研发与技术工程师。始终倡导与贯彻软件自主研发,至今已拥有众多国际/国内领先的软件核心技术,获得自主软件著作权30 余项,通过ISO9001 和国军标9001B 质量管理体系认证。遵照“理性创新、和衷共济、互利共赢”的共同行为准则,基于全球最佳实践和领先技术,为客户提供产品全生命周期协同研制系统软硬件、SAAS 服务。产品和服务覆盖研发前沿工程、数字化设计及智能制造,客户广泛分布在重型机械、地面交通、电子、建筑、航空、航天、兵器、船舶、光电、动力设备等行业。