单位 12 / 12

边界:安全、隐私、许可和道德

收益:

  • 能够识别和验证人工智能可能会产生虚假 API、不安全代码和受版权保护的内容
  • 能够在源代码机密性、个人数据和公司政策的范围内管理人工智能的使用
  • 了解许可证合规性、安全性和道德的最终责任仍然由工程师承担。

模块考试

1. 作为计算机工程师,在使用人工智能代码生成工具时,以下哪项的最终责任应始终由人类承担?

  • A) 最终批准投入生产的代码的正确性、安全性以及审查和测试 ✔
  • B) 为函数创建第一个代码框架
  • C) 生成变量名称建议列表
  • D) 准备代码注释草案文本

描述:人工智能;它可以加快代码框架、测试草案和文档等任务的速度。然而,工程师有责任对生成的代码进行审核、测试和批准,确保其正确、安全、符合要求,并投入生产;如果没有独立验证,这不能委托给人工智能。

2. AI 已经为你生成了一个函数,并且它似乎正在正常工作。投入生产之前最好的步骤是什么?

  • A) 既然功能看起来可以用,就直接投入生产
  • B) 通过编写和运行包括边缘情况的小型单元测试来验证行为✔
  • C) 只看函数的行数
  • D)使函数的名称更具描述性

说明:看起来在工作并不意味着就是正确的。编写和运行涵盖边缘情况(例如空输入、零、负值、非常大的值和不匹配)的小型单元测试可以验证函数的实际行为,而无需将其移动到实时环境。

3. AI建议了一种名为“array.sortStable()”的方法,该方法在您的语言中不存在,并以清晰的方式进行了解释。首先要采取的正确行动是什么?

  • A)直接使用该方法,因为 AI 看起来很有信心
  • B) 自己定义方法并准确使用它的名称
  • C) 从语言/库的官方文档验证该方法的存在✔
  • D) 关闭编译器警告并继续

说明:语言模型可以合理地构成实际不存在的库、包或方法名称(幻觉)。每个提议的 API 应根据该语言或库的官方和当前文档进行逐字验证;如果它没有包含在文档中,则不应使用它。

4. 您想要将公司的机密源代码和嵌入式 API 密钥粘贴到公共 AI 工具中并寻求帮助。哪种做法才是最正确的呢?

  • A) 按原样粘贴代码和 API 密钥以提高速度
  • B) 只需删除公司名称并共享其他所有内容就足够了
  • C) 共享代码,然后要求 AI 删除它
  • D) 消除秘密和隐藏逻辑,并将问题简化为代表性示例或使用制度工具 ✔

描述:秘密源代码和凭证(API 密钥、密码、连接字符串);这在公司秘密和安全方面存在风险。有必要剥离秘密和隐藏的业务逻辑,并将问题简化为匿名/代表性示例或使用企业/非数据共享工具。

5、AI说他写的一个搜索函数复杂度是O(n);但代码中有两个嵌套循环。什么是正确的工程行为?

  • A) 手动分析代码并自行提取复杂性并在必要时进行测量 ✔
  • B)接受 O(n) 并继续,因为 AI 说
  • C) 假设循环次数与性能无关
  • D) 只需更改函数名称

说明:时间复杂度 (Big-O) 显示操作数量如何随着输入的增加而增加。两个嵌套循环通常意味着 O(n^2)。人工智能的复杂性主张应通过手动分析代码并在必要时增加输入进行测量来验证;依赖该声明会产生错误的性能假设。

6. AI 生成的代码,通过连接文本直接将用户输入插入到 SQL 查询中。这里的主要问题和正确的解决方案是什么?

  • A)没问题;文本合并是最快的方法
  • B) 存在SQL注入的风险;应使用分隔输入的参数化查询(准备好的语句)✔
  • C) 只需将查询转换为大写就足够了
  • D)将查询写得更短可以解决问题

描述:将用户输入直接添加到查询文本中会产生 SQL 注入漏洞;攻击者可以使用输入修改查询。正确的解决方案是使用参数化查询(准备好的语句)将输入与查询文本分开。这是人工智能代码中最常被忽视的安全错误之一。

7.审查人工智能生成的一段代码时,你的时间有限。哪些问题最好优先考虑?

  • A) 仅格式详细信息,例如缩进和间距
  • B) 只有变量名的长度
  • C) 逻辑正确性、漏洞和边缘情况行为 ✔
  • D) 仅显示文件的总行数

描述:代码审查中风险最高;这些问题会造成严重危害,例如逻辑错误、安全漏洞、机密信息泄露等。使用自动工具修复格式和样式问题;人类的主要注意力应该集中在准确性、安全性和边缘情况行为上。

8.你想让人工智能解决一个错误。哪种输入最能帮助人工智能找到根本原因?

  • A)只是说“代码不起作用,修复它”
  • B) 只需给出文件名
  • C) 只说出预期结果,没有错误文本
  • D) 提供完整的错误消息、堆栈跟踪、相关代码和最小重现示例 ✔

说明:为了有效调试,有必要向 AI 提供完整的错误消息、堆栈跟踪、相关代码片段以及产生错误的最小可重现样本。这种模糊的说法“不起作用”迫使人工智能进行猜测并提出笼统的建议。

9. AI 生成的所有单元测试都在第一次运行时通过。在这种情况下,哪些风险不应被忽视?

  • A) 测试可以确认代码的当前状态,但不能确认实际/预期的行为 ✔
  • B)代码绝对没有错误,因为所有测试都通过了
  • C) 测试次数多,质量就有保证
  • D) 通过测试证明覆盖完整

说明:测试可能正在验证代码的当前(可能有错误)行为,而不是其预期行为;或者它可能不包含任何有意义的断言并且始终被通过。要看到测试正在检查真正的期望,需要有意识地破解代码并确认测试变红。

10.人工智能已经为你生成了解决问题的现成代码块。您怀疑该代码可能是从开源项目中逐字复制的。哪种方法是正确的?

  • A)不假思索地使用许可证,因为代码可以工作
  • B) 检查代码的来源/许可证,必要时重写并遵守公司政策 ✔
  • C) 只需更改变量名称即可认为问题已解决
  • D) 假设许可仅涉及大公司

描述:人工智能可以逐字复制训练数据中受版权/许可的代码。商业产品中的许可违规会带来严重的法律风险。需要检查代码的来源和许可,必要时用自己的话重写,并遵守机构的许可政策。

11. AI建议您立即为您的项目切换到微服务架构。评估此提案时最合适的工程方法是什么?

  • A)立即将整个系统划分为微服务,因为人工智能建议
  • B)假设微服务始终是最佳选择
  • C) 根据实际需求、负载、团队结构和正负平衡评估提案✔
  • D)仅根据架构的受欢迎程度做出决定

说明:架构决策取决于上下文;微服务在规模和团队分离等需求方面增加了价值,但也带来了操作复杂性、分布式调试和成本等成本。根据实际需求、负荷、团队结构、利弊平衡评估方案;不应盲目遵循一般建议。

12. AI为您的代码制作了精简的README和API文档;但某些端点和参数在代码中不匹配。什么是正确的行为?

  • A)按原样发布文档,因为文本流畅
  • B) 只需修改标题,其余部分保持原样
  • C) 将文档添加到仓库而不读取它
  • D) 将每个端点和参数与实际代码进行比较并修复任何不匹配的地方 ✔

描述:文档应该准确反映实际代码;错误的文档会促使阅读它的开发人员错误地使用它。每个端点、参数和返回值都应根据实际代码进行验证,并纠正任何不匹配的情况。

13. 当向 AI 请求代码时,哪种输入方法最适合获得最高质量的输出?

  • A) 明确提供语言/版本、输入输出契约、约束和错误情况 ✔
  • B)只是说“给我写一些工作代码”
  • C) 写出最短的请求而不给出任何上下文
  • D)只指定有多少行代码

说明:强大的提示功能;它包括所使用的语言和版本、输入输出合同、性能和风格约束、错误条件以及“仅在请求的范围内”指令。无上下文的“给我写一个函数”请求是通用的,并且经常会产生不适当的代码。

14. AI 为您的 CI/CD(持续集成/部署)管道生成配置,并以纯文本形式将数据库密码嵌入其中。哪个是正确的修复方法?

  • A)将密码保留为纯文本,因为它有效
  • B) 通过环境变量或秘密管理工具将秘密移出,而不是将明文放入存储库中✔
  • C) 仅将密码移至注释行
  • D)更改文件名可以解决问题

说明:以纯文本形式将密码和密钥等机密写入配置文件会带来泄露版本控制和未经授权的访问的风险。秘密;它应该被环境变量或特殊的秘密管理器阻止,并且永远不应该以纯文本形式进入存储库。