可可软件交流社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 162|回复: 1

医疗器械软件开发人员能力矩阵

[复制链接]

1

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-12-20 14:47:54 | 显示全部楼层 |阅读模式
着数字医疗(Digital Health)和人工智能的快速发展,中国器审中心陆续发布了《人工智能医用软件产品分类界定指导原则》(2021年第47号)、《医用软件通用名称命名指导原则》(2021年第48号)、《医疗器械软件注册审查指导原则》(2022年修订版)、《医疗器械网络安全注册审查指导原则》(2022年修订版)、《人工智能医疗器械注册审查指导原则》(2022年第8号),用于对医疗器械软件和人工智能医疗器械的注册指导。医疗器械软件依据YY/T 0664-2020《医疗器械软件 软件生存周期过程》,离不开软件开发和测试,本文就讲讲医疗器械软件开发人员能力矩阵。



图1 医疗器械软件类型

概述
本文主要描述开发人员对不同技术领域掌握的深度。从代码编写、程序设计、领域知识、计算机科学、软件工程和知识面六个维度来讲讲软件开发的能力矩阵。每一个技术领域包含4个层次,层次之间是递进关系。能力矩阵用于综合评估开发人员的技能分布。
基本的代码编写
考察点Level 0Level 1Level 2Level 3
交流与沟通不能向同伴表达想法/主意。匮乏拼写和语法的能力。同伴能了解你在说什么。有良好的拼写和语法能力。能够和同伴进行高效的交流能够使用清晰的方式了解和交流想法/设计/主意/细则,能适应每种环境的交流。
IDE的使用IDE大部分用来进行文本编辑。了解其周围的接口,能够高效地通过菜单来使用IDE。了解最常操作的键盘快捷键。编写自定义宏。
API的使用需要频繁地查阅文档。把最频繁使用的API记在脑子里。广阔且深入的API知识。为了使实际任务中常用API使用更加便捷,编写过API的上层库,填补API之间的缺口。
代码可读性单字母的名称,汉语拼音的名称。对文件、变量、类、方法等,有良好的命名。没有长函数。注释会说明bug修复和代码依赖性假设。代码依赖性假设使用断言验证;自然的代码流;没有深层嵌套的条件和方法。
文件内的代码组织同一文件中组织没有依据。按照逻辑性或可访问性组织。代码分块,引用其他源文件时有良好的注释。文档头部有许可声明、总结。通过一致的空格缩进,使文档外观美观。
跨文件的代码组织没想过给代码跨文件组织。相关文件按文件夹分组。每个物理文件都有独立的目的,比如一个类的定义,一个特性的实现等。代码在物理层组织紧密,在文件名上与设计和外观相匹配。可以通过文件分布方式洞察设计理念。
源码树组织一切都放在一个文件夹内。初步地将代码分散进对应逻辑的文件夹。没有循环依赖,二进制文件,库,文档,构建,第三方的代码都组织进合适的文件夹内。源码树的物理布局与逻辑层次、组织方式相匹配。可以通过目录名称和组织方式洞察设计理念。
防御性编码不知道这个概念。检查代码中所有的参数,对关键的假设进行断言。确保检查了返回值和使代码失败的异常。有自己的库来帮助防御性编程、编写单元测试模拟故障。
错误处理只给乐观的情形编码。基本的代码错误处理,抛出异常/生成错误。确保错误/异常留在程序中有良好的状态,资源,连接,内存都有被合适的清理。在编码之前察觉可能出现的异常,在代码的所有层次中维持一致性的异常处理策略,提出整个系统的错误处理准则。

程序设计

考察点Level 0Level 1Level 2Level 3
问题分解只有直线式的代码,通过复制粘贴来复用。能够把问题分散到多个函数中。能够想出可复用的函数/对象来解决大的问题。使用适宜的数据结构和算法,写出通用的/面向对象的代码来封装问题的易改变的层面。
系统分解想不出比单一的文件/类更好的层面。如果不在同一平台或没采用相同的技术,能够把问题空间和设计方案分解。能够设计跨技术/平台的系统。能够在多个产品线和与外部体系一体化中虚拟化和设计复制的系统。同时也能够设计支持系统监视、报告、故障恢复等。
框架的使用没有使用过主平台外的任何框架。听过但没用过平台下流行的可用框架。在专业的职位中使用过一个以上的框架,通晓各框架的特色。某框架的作者。
开发平台对平台内部毫无所知。有平台基本的内部工作的知识。深度的平台内部知识,能够设想平台如何将程序转换成可执行代码。编写过增强平台或者为其平台内部提供信息的工具。比如,反汇编工具,反编译工具,调试工具等。

具体的领域知识

考察点Level 0Level 1Level 2Level 3
脚本的使用不具备脚本工具的知识。仅限于批处理文件和shell脚本。掌握诸如:python/perl/ruby/powershell写过并且发表过可重用的脚本代码。
界面开发从来没写过界面程序。能够写出简单的界面。能够兼顾界面的易用性、美观性。
数据库开发认为Excel就是数据库。知道基本的数据库概念,规范化、ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)、事务化,能够写简单的select语句能设计良好的、规范化的数据库模式。掌握视图,存储过程,触发器和用户定义类型。知道聚集与非聚集索引的差异。能使用ORM(Object Relational Mapping对象关系映射)工具。能进行数据库管理和性能优化;编写复杂的select查询;能够使用相关SQL来替换游标,理解数据内部的存储,了解如何镜像、复制数据库。
信息安全对信息安全没有任何接触。了解信息安全的基本概念。熟悉不同厂商的产品及优缺点。熟悉信息安全相关的各种标准、规范。了解在不同行业中的应用。

计算机科学

考察点Level 0Level 1Level 2Level 3
数据结构不知道数组和链表的差异能够解释和使用数组,链表,字典等,并且能够用于实际的编程任务。了解基本数据结构时间和空间的折中,比如数组vs 链表,能够解释如何实现哈希表和处理冲突,了解优先队列及其实现。高等的数据结构的知识,比如B-树、二项堆、斐波那契堆、AVL树、红黑树、伸展树、跳跃表以及前缀树等。
算法不能够找出一个数组各数的平均值(这令人难以置信,但是我的确在应聘者中遇到过)基本的排序,搜索和数据的遍历和检索算法。树,图,简单的贪婪算法和分而治之算法,能够适度了解矩阵该层的含义。能够辨识和编写动态规划方案,良好的图算法知识,良好的数值估算的知识,能够辨别NP问题等
编程体系不知道何为编译器、链接器和解释器。对编译器、链接器、解释器有基本的了解。知道什么是汇编代码以及在硬件层如何工作。有一些虚拟内存和分页知识。了解内核模式vs用户模式,多线程,同步原语以及它们如何实现,能够阅读汇编代码。了解网络如何工作,了解网络协议和socket级别编程。了解整个程序堆栈、硬件(CPU+内存+中断+微码)、二进制代码、汇编、静态和动态链接、编码、解释、JIT(just-in-time)编译、内存碎片回收、堆、栈、存储器编址…

软件工程

考察点Level 0Level 1Level 2Level 3
需求分析接受给定的需求和代码规格。能对规格的遗漏提出疑问。了解全面情况,提出需要被规格化的整体范围。能够提出更好的可选方案,根据经验的浮现给出需求。
源码版本控制通过日期备份文件夹。基本的CVS/SVN操作。熟练地使用CVS/SVN特性。包括如何分支/合并/基线等。有分布式VCS系统的知识。尝试过Mercurial/Git/Bzr/Darcs
自动化编译只知道在IDE下编译。知道如何编译在命令行下编译系统。能够安装一个脚本构建基本的系统。能够安装一个脚本来构建系统并且归档,安装程序,生成发布记录和给源码控制中的代码分配标签。
自动化测试认为所有的测试都是测试员的工作。能够编写自动化的单元测试,能够为正在编写的代码提出良好的测试用例。按照TDD (Test Driven Development)方式编写代码。了解并且能够有效自动化安装,载入/性能和UI测试。

其它知识面

考察点Level 0Level 1Level 2
语言接触了解基本的命令式语言。命令式语言、面向对象语言和说明型语言(SQL)。了解静态类型vs动态类型、弱类型vs强类型了解函数式语言。
新技术,新知识从来没听说过即将到来的技术。听说过某领域即将到来的技术。下载过alpha preview/CTP/beta版本,并且读过一些文章和手册。
文章来源于网络,如不希望被转载可与我联系,我将立即进行删除处理。
回复

使用道具 举报

0

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2025-3-26 22:30:32 | 显示全部楼层
LZ敢整点更有创意的不?兄弟们等着围观捏~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|可可软件交流社区

GMT+8, 2025-4-8 03:36 , Processed in 0.100095 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表