关于软件质量的思考-(thought of software quantity)

在网上看到一篇文章《 软件质量管理之困境与对策思考》的文章,很有想法。和作者本人进行了沟通。一下是我对软件质量管理的砍翻以及作者的评论。希望对大家有所帮助。
1. 关于“哑铃型”组织结构
从你的分析可以得出,质量管理部门和软件开发部门很容易形成两种对立的部门。
由于在管理过程中,不能忽略的情感因素,两大部门之间沟通的桥梁 - 数据,很容易出现误差。
本身数据对软件质量的反馈,本身就存在不准确性,只能当做参照,反映当前软件开发的大致情况。
如果在唯一的依照 - 数据上也出现偏差,我觉得质量管理部门反而起不到应有的作用。说不定,根据错误的数据,制定错误的流程,反而对软件质量起反作用。

2. 关于“哑铃型”组织结构的改进
在你的改进中,两大部门产生交集。交集部门由“来自开发部门的、对软件质量管理有很好认识的技术专家”来担任。
我认为这样做虽然是让两个部门产生交集,但同样绕不开将质量管理和软件开发放在两个不同的对立面。
[Yun] 也许。这就看我们如何定义质量部门。它应是一个独立的部门?还是作为研发部门的一个子部门?如果是后者,又如何保证做为子部门又发挥作用?这是很难解决的一个问题。
我认为软件质量最终来源于软件开发部门。所以软件质量管理应该是深入软件开发的每个环节。
[Yun] 认同。
而良好的软件质量最终又归结于开发者本身的素质,也就是金字塔的80%。
所以在软件质量管理中,不应该过分强调金字塔顶端的作用,而是应该想办法提升80%那部分的质量意识。
[Yun] 不完全认同。80%要发挥作用,一定离不开上面20%的作业。这如同战场一定要指挥官一下。想想,如何保证80%的人走的路是对的呢?
3. 而提高开发者的质量意识,归根到底又是开发者心态的问题。下面是我认为开发者可能存在的心理:
1. 开发者习惯维护自己开发的代码
2. 开发者在遇到无法解决的问题时,可能会可以 隐藏或者绕过代码的缺陷
3. Follow流程,但却不认可流程,从而不认真对待
….

即使我们有review可以来避免由开发者心态导致的问题,但是这样往往效率和质量都是不好的。
另外一点,程序员虽然不善于沟通,可是说服能力很强,很容易导致reviewer/tester被动的去认可,即使的确代码有缺陷

为什么我会这么认为。
开发从Design->Coding->UT->MT, Review贯穿其中,也就是说质量监督一直在进行。
[Yun] 在进行,并不表示进行到了位!
理论上来讲,排除Design过程中,可能产生的理解差错而遗漏的Trap。代码本身应该没有问题才对。
[Yun] 这个理论或许不成立。设计与实现是两人个完全不同的事物,前者重在塑造概念,后者则是表达概念。表达所需的概念并非简单的一一映射。
(因为UT,MT等于就是白盒测试,在这个阶段应该是最容易也最应该过滤软件Bug的阶段)
但事实上,大量的Bug都是在后期由测试人员发现的。
可以说明在前期代码开发过程中,开发者并没有很深的软件质量的意识。
 [Yun] 可以这么说。但问题也可能是,开发人员不知道真正的质量是什么。在这种情形下,他很难建立真正的质量意识。所以我倡导以实践的方式来提升质量意识。
我认为如果一个产品到了需要靠软件测试人员进行大量测试来保证质量的阶段,就意味着这个产品的质量应该是不好的。
因为,对产品最了解的应该就是最底层的软件开发人员了。
[Yun] 很有一番道理。

所以我认为,软件质量管理应该将质量意识注入每个开发者的意识当中去。让开发者主动去做质量监督和控制。
然后向质量管理部门Share他们的数据,而不是被动的提供。再由质量管理部门对开发者进行信息的反馈。

下面,是我想象中的质量管理模型。



[Yun] 这个模型对开发人员的要求更高了。另外,数据分析一定不能由质量管理者来做,而应放在开发部门。数据所表达的内容,很难真正反映软件设计层面的问题。
我认为,人的因素在软件开发过程中很重要,开发者的技术和心理都很重要。
通常,我们总是将重点放在开发者的技术层面,所以想问问你的看法,以及在软件工程学中,有没有关于软件开发者心态的研究。
[Yun] 有一本书叫《程序开发心理学》,是温格写的。

### Chain-of-Thought Prompting 的作用与用法 Chain-of-thought prompting 是一种用于增强大型语言模型推理能力的技术。它通过提供一个多步骤的逻辑链条,引导模型逐步完成复杂的推理任务。这种方法的核心在于让模型生成自然语言中间步骤,从而帮助其更好地理解问题并得出最终答案[^1]。 #### 方法概述 链式思维提示符的主要目标是模拟人类解决问题的过程,即将复杂问题分解为若干个小问题,并逐一解决它们。这种技术特别适用于涉及算术运算、逻辑推理或其他多步计算的任务。例如,在处理数学问题时,可以通过设计特定的输入-输出示例来指导模型逐步推导出解决方案。 以下是实现这一过程的具体方式: 1. **构建示范案例** 准备一组高质量的输入-输出对作为提示的一部分。这些例子应展示清晰的解题路径以及每一步背后的思考逻辑。对于数值型题目来说,则需包含详细的演算步骤而非仅仅给出最后的结果。 2. **融入形式化表达** 虽然传统上更倾向于采用自由流动式的叙述风格来进行说明,但某些情况下也可以考虑引入更加结构化的表述手段——比如伪代码或者专用术语等——以便进一步提升精确度与可读性。值得注意的是,也有研究探索过运用正式语言代替日常对话的做法(如神经符号方法)[^1]。 3. **实施少量样本学习策略** 利用上述精心挑选出来的样本来初始化系统状态空间内的潜在分布模式,而无需针对每一个新的应用场景重新训练整个网络权重向量集合[Brown等人, 2020]. 这种基于实例的教学机制极大地简化了部署流程同时也提高了泛化性能. 下面是一个简单的 Python 实现示例展示了如何应用 chain of thought prompting 来求解基本加减乘除混合运算: ```python def solve_expression(expression): try: result = eval(expression) explanation = f"Evaluating {expression} yields {result}." return {"answer": str(result), "explanation": explanation} except Exception as e: error_message = f"Error evaluating expression '{expression}'. Details: {str(e)}" return {"error": True, "message": error_message} example_input_1 = "(3 + 5) * 2" output_1 = solve_expression(example_input_1) print(f"For input '{example_input_1}', output is:") if 'error' not in output_1.keys(): print(output_1['explanation']) else: print(output_1['message']) example_input_2 = "((8 / 4) - 1)" output_2 = solve_expression(example_input_2) print("\nFor input '{}', output is:".format(example_input_2)) if 'error' not in output_2.keys(): print(output_2['explanation']) else: print(output_2['message']) ``` 此脚本定义了一个函数 `solve_expression` ,该函数接受字符串格式的数学表达式作为参数,并返回含有解答及其相应解析的文字描述的对象字典。如果遇到非法操作则会捕捉异常并将错误详情反馈给用户界面层面上去显示出来。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值