西门子PLC模块CPU224XPCN中央控制单元
的因素来装备那些带着问题的从业者,让他们找到自己问题的解决方案。
要做到这点,我们需要扩大第一层观察所能接受的"证据"的定义。一些研究者一直争论说,软件工程研究存在对定量数据和研究的偏证据不是证明。总的说来,任何足以让我们认为一个理由可信,或者比另一个理由更可信的实证就是证据。不同的目的需要不同标准的证据。有些目的需要强有力的证据。比如说,决定是否要把所有的软件开发都转换成面向方面的设计和实现,这需要非常有说服力的证据来证明收益大于投资(包括经济和文化方面)。有些目的只需要薄弱的证据即可。比如说,一个面向方面的追踪应用实例可能已经足够证明面向方面的编程方法(AOP)是有价值的,留待进一步研究来澄清的是它能(在什么环境下)多好地完成目标。一份以找出设计中的缺陷为目标的评估研究,可能只需要少数参与者的回复。我们知道有一个为制造业所设计的语音反馈系统原型,在初始用户指出他们用耳塞就能屏蔽工厂噪声之后就被放弃了。一些目的只需要反例就够了。比如,当一个人试图辩驳一项假设或者一项普适的断言时,他只需要一个反例。例如,可视化编程的支持者们声称“可以图形化的就是好的”,但是通过在一项实验中证明嵌套结构在用文本表示时理解起来更快,使得这些支持者们开始重新审视他们的看法。
所以,你想问的问题和特定环境下需要的证据之间是有联系的。你需要的证据和能提供那些证据的方法之间也是有联系的。比如说,你不能向提供信息的人询问不能说的秘密,这就是调查的局限性之一。软件是创建并部署在社会技术背景之下的,所以关于软件的断言和论点需要同时借鉴考虑了社会和技术背景的证据以及包含两者之间关系的证据。
例如,理解面向方面的设计对你项目的沟通结构所产生的影响,需要先观察那项技术的整个应用场景。对方法的良好应用意味着“对症下药”,也意味着合理使用那些和问题相关并且服务于目的的证据好,而定量的工作也
同样严格并提供对相关问题的有用回答[26]。构建更强大证据集合的开始,是真正拓的方法,即整合实证研究的结果提供技能、习惯和基础,以便支持软件工程的决策。我们通常会拿软件工程与循证医学及其对严格临床证据的依赖做比较。我们的目的不是为了证明软件工程忽视了证据(虽然基于有争议观点和迷信的软件工程无疑仍然存在),而是为了说明我们的学科缺乏一个组织、文化和技术基础,以支持对不同渠道知识的聚集和整合。Barbara Kitchenham在第3章中介绍了这项运动。
我们还可以看到其他一些对软件工程的思考和反省,用来改善软件工程实践的例子。比如Fred Brooks和Walter Vincenti这样的作家,通过提取经验并使用从实践和经验中来的例证来关注实践,以此思考工程活动的本质。我们不会仅仅因为他们的论文基于的不是科学实验而是反思经验,就抵制他们的重要性。但是我们会仔细思考他们的结论:我们是否同意这些结论,这些结论是否适合我们的环境,是否与我们的经验匹配。也就是说,它们是否与我们熟悉的证据相一致。
但不论我们依靠的是科学研究(剩余章节都会关注于此),还是开明人士的报告,我们认为,作为一个软件
师,需要对证据有十分**的理解,才能帮助我们做出正确的决定,才能根据我们想问的问题来评估对证据的需求。我们本质上并不需要更多的指标,或是广泛使用的科学方法,也不需要死板的方法论和教科书似的说教。强加的流程和方法本身不能产出质量,当然也不能保证质量。然而,我们通常试图用这些方法来达到真正的目标:系统性的、博识的、循证的批判性思维。展可接受证据的定义,以此混合定性和定量的资源。也就是说,更多关于技术为什么能行或者为什么不行的文本或图片数据,以及技术影响力多少的定量数据。
然而,真正有影响力的证据实体走得更远,并且接收完全不同种类的证据。不止是试图找到具有统计意义的研究,也包含能提供更多关于技术实践应用信息的调查经验汇报。这种经验汇报目前被低估了,因为它们被认为不如现有的文献严格。比如,不总能确保各方面利益都被**衡量,不能保证混淆的因素已经排除,或者不能证明流程一致作为软件工程师,我们对什么起作用、什么不起作用或者不太起作用都有各自的意见。我们因此共享实践故事和经验,它们*终化作文化知识和各种常识。但问题是,“地球人都知道的东西”常常是错的。虽然我们不断收集信息,但是也许并未细致准确地评估并整合那些信息,甚至都没有必要的手段来这么做。性因素已经避免。然而,这些报告应该是任何软件开发技术"证据线索"的一个显而易见的部分。早期采纳者可能找到的是包含相对低可信度的可行性研究的一个小集合,或者一到两个"**"研究,这已经足够使他们采纳改变。特别是当这些研究的背景显示出证据是在一个与他们相似的环境中收集的。大部分采纳者需要看到不同上下文中的多样研究,才会相信研究的想法是有价值的,被证实不止在一个合适的环境中可行,并且已经开始成为被部分接受的行事方式。
落后者或者后期采纳者可能需要压倒性的证据,这可能包括大量的高可信度研究,以及在大范围不同背景下得到的有益结果。
一些混合这些不同类型证据的方法已经被提出[29]。但*重要的是,定性报告和定量数据之间的相互影响。我们经
看到从业者在混合不同数据类型的数据集后收到更好的效果。例如,一个同时包含硬数据和真实团队正面经验的丰富集合,帮助了软件检查技术在不同NASA中心的散播[28]。
从良好设计的经验性研究中得出的证据可以帮助结果达到统计意义,但实施可能仍然不切实际,或者不能及时回答新问题(特别在技术快速改变的领域,如软件工程)。实际运用中的证据可能对益处更有说服力,但是通常不太严格。经常需要同时结合两种证据,相互巩固,才会*具说服力
正如Andres把"观察"定义地足够广泛来包含主观印象,如果我们不根据他们的标记去创建无根据的规则,即使不那么严格的输入模式也可以帮助我们找到有效的结论。对这些证据源赋予信心指数非常重要,这样,方法论的问题就可以被凸显出来。(当然,即使*严格的研究也不会完全没有任何方法论的问题。)
经验汇报可以通过证明实践约束下达成的结果不总是与我们对给定技术的期望相匹配,从而使研究有根有据。同样重要的是,他们对于需要如何剪裁或修改技术来应对日常软件开发的实践约束提供了见解。在技术转移领域,我们经常发现,一个描述技术在实践中正面经验的案例分析,对从业者来说,比大量额外的研究报告更有价值。如此令人信服的证据体,也能通过提供对不同用户有用的证据来帮助引导改变。Rogers提出了一个经常被引用的模型,用钟形曲线刻画了一些创新产品(如研究结果)的消费者:*左边的尾巴包含了创新者,钟形的突出部分代表了大多数人,他们随着这个创新想法逐渐流行而采纳,*右边的尾巴包含了抵触改变的落后者[24]。了解自己观众的研究者能从真正健壮的数据集中选择适当的子集来构建他们的案例