软件工程道德规范
文/ ACM/IEEE-CS软件工程道德和职业实践联合特别工作组
IEEE计算机协会的理事会在1993年5月设立了一个指导委员会,其目的是为确立软件工程作为一种职业而进行评估、计划和协调各种活动。同年,ACM理事会也同意设立了一个关于软件工程的委员会。到1994年1月,两个协会成立了一个联合指导委员会,“负责为软件工程职业实践制定一组适当的标准,以此作为专业决策、职业确认和教学课程的基础。”为完成这项工作,他们提出了如下建议:
* 采用标准定义;
* 定义所需的知识主体和推荐的实践活动;
* 定义道德标准;
* 定义本科生、研究生(硕士)和继续教育(再培训和转岗)的教学课程。
指导委员会决定通过设立一系列的组实现这些目标。最初的几个专题组包括:软件工程知识主体和推荐的实践活动;软件工程道德和职业实践以及软件工程课程体系。
软件工程道德和职业实践小组的目标是,就软件工程师在道德上和职业上的责任和义务制定一份文件。本道德规范草案是由IEEE和ACM联合指导委员会确定软件工程作为一种职业专题组开发的,并且已经经过该委员会的审查。软件工程道德和职业实践小组是为两个职业协会的会员更加专业化而开发本规范。现在公布这个规范草案是为征询实践者和其他有兴趣者的意见和建议。
任何规范,如果认真地制定并且正确地推行,都会成为推动职业化和建立社会安全保障的有力工具。它们不应该也不会只开花不结果,但这常常是人们对规范的错觉。本规范草案是在对多个计算学科和工程学科规范广泛研究之后作出的。所有这些规范都是在试图教育和激励采用规范的职业群体和成员。规范还告诫公众,职责对于职业的重要性。规范向实践者指明社会期望他们达到的标准,以及他们同行追求相互平等的期望。规范并不意味着鼓励讼争,并且它们也不代表立法;但它们的确就影响专业人员和他们的客户的一些问题给出了实际的建议,同时也给政策制订者提供借鉴。在开发本规范时就采纳了这些思想。根据读者以及其他渠道对本草案的反馈,将形成最终的草案并提交给联合指导委员会批准。
序言
现在,计算机越来越成为商业、工业、政府、医疗、教育、娱乐、社会事务以及人们日常生活的中心角色。那些直接或通过教学从事设计和开发软件系统的人员,有着极大的机会既可从事善举也可从事恶行,同时还能影响或使得他人做同样的事情。为尽可能保证这种力量用于有益的目的,软件工程师必须使他们自己所进行的软件设计和开发是有益的,是受人尊敬的职业。为此,软件工程师应该坚持以下道德规范。
本规范有8组由关键词命名的原则,这些原则都是与专业软件工程师的行为和他们所作出的决定有关,这些原则也适用于从业者、教育者、管理者、督办人、政策制定者、职业受训者以及学生。这些原则对参与其中的个人、群体和组织相互之间的各种关系给出了区别,并指出了在这些关系当中各自的主要义务。
规范中的每一组准则均从道德义务的三个层次来阐述,这些道德义务都是专业软件工程师在所述的各种关系中所应承担的。第一个层次给出的是一组道德价值,这也是专业软件工程师与所有其他人就人性而言所共有的善行。第二个层次则是对软件工程专业人员提出的比第一个层次更具挑战性的一些义务。之所以要求第二个层次的义务,是因为专业人员应对那些会受到他们工作影响的人们负责。第三也是更深的层次,包括只与软件工程的专业实践有关的因素所直接引出的几项义务。每8组准则中的条款是对相应的关系中各层次的义务的详细阐述。
每组准则中的条款由对应于每个层次的三种不同类型的声明组成。
第一层次:热望(对于真正的人)。热望的陈述给出了方向和目标,用于指导职业行为。这种指导性的要求对道德判断是非常重要的。
第二层次:期望(对于专业人员)。期望的陈述表达了所有专业人员的义务和职业态度。虽然它们没有描述具体的行为细节,但是它们清楚地指明了在计算学科领域中的职业责任。
第三层次:要求(对于好的从业者)。要求陈述提出了在软件工程中更具体的行为责任,这些责任与当前的技术状态密切相关。本层次陈述的范围从一般的热望陈述到具体的可度量的要求。
虽然所有层次的职业义务都已列举,但本规范并不打算包罗万象,也不希望它的各个部分被孤立地用来判定失职或违章。所列的准则和条款并不是很详尽,不希望读者根据职业行为的实际情况将不可接受的职业行为分离出可接受的条款套用。本规范也不是一个简单的给出道德判定的道德算法。在某些情况下,本规范的各个标准有可能相互冲突或与其他的标准冲突。此时,就要求软件工程师结合当时的环境,以与本道德规范的精神最一致的方式来进行道德判断和采取行动。
对于道德问题最好是给出应深思熟虑的基本准则而不是出许多规定细节来陈述。这些原则应该影响你去更广泛地考虑谁将受到你的工作的影响;去检查是否你和你的同事对待他人以应有的尊重;去推测如果公众被恰当地告知,那么他们将怎样审视你所做的决定;去分析你的决定的最低影响力是多少;以及去考虑是否你的作为够得上软件工程师的理想的职业行为。因为本规范代表那些从事该职业的人的共同意见,因此我们应该重视由那些有见识的、受人尊重的和有经验的同行在掌握全部事实的情况下,他们认为的什么是特定环境中最道德的行为方式,并且只在具有深刻原因的同时又经过认真仔细的判别之后才违反这种常规。
软件工程的动态性和需求的前后关系要求一个规范能对出现的新情形有较强的适应性且中肯。但是即使在这种一般性原则下,本规范也只对那些以文档记录职业道德态度并采取积极行动的软件工程师提供支持;提供一个开发组中的个人以及整个开发组都可以求助的道德基础。本规范也帮助定义哪些是对软件工程师提出的道德上不适当的要求。
本规范还具有教育的作用,它指出了对任何想加入或继续从事软件工程职业的人的要求。因为它表达了该职业有关道德问题的一致意见,所以可以用作决策制定的指导,它也可以作为公众和渴望从事该职业的人了解有关软件工程师的职业义务的教育工具。
准则1:公众
软件工程师应该与公众的利益保持一致。特别地,软件工程师应尽可能适当地做到:
1.01 、对他们自己的工作承担全部责任;
1.02 、不要将自身利益、雇主的利益、客户的利益或者用户的利益置于公众的利益之上;
1.03 、仅当有充足的理由相信某个软件是安全的、满足规范说明要求、已经通过了适当的测试,并且没有降低生活质量或危害环境时,才赞成或批准它;
1.04 、就他们负责的软件或相关文档,对其中存在的任何他们有理由相信对用户、第三方开发商或者环境构成实际的或潜在的危险,应向有关人士或权威机构报告,即使并非由其负责的软件产品;
1.05 、对由软件、安装、维护、支持和相关文档引起的公众关心的重大问题应努力合作予以解决;
1.06 、与软件或相关文档、方法和工具有关的所有陈述都要公正和诚实,尤其对于公众关心的部分;
1.07 、充分考虑实际能力的不足、资源的配置、资金短缺及其他可能会削弱软件收益的方面;
1.08 、当机会出现时把职业技能献给美好的事业,并对与该学科相关的公共教育事业贡献力量。
准则2:客户与雇主
软件工程师应该最大限度地考虑客户和雇主的利益,应与公众的利益保持一致。为此,软件工程师应该:
2.01 、只在他们的权力范围内提供服务,对他们经验和教育程度要诚实且坦率;
2.02 、不要在知道的情况下使用非法获得的或持有的软件;
2.03 、只以正当授权的方式使用客户或雇主的财物,并且要让客户和雇主知道并获得他们的同意;
2.04 、保证他们依据的任何文档都获得授权人的批准;
2.05 、对于在职业活动中获得的不属于公共范围的信息予以保密,当然,这种保密不应影响公众所关心的问题;
2.06 、如果他们认为一个项目可能失败,或被证实费用太高,或者违反了知识产权法,特别是版权法、专利法或商标法,以及其他问题时,应立即通知客户或雇主;
2.07 、在他们工作中或意识到软件或相关文档中有某些或与社会有关的问题时应认真辨别、记录并向雇主或客户报告;
2.08 、不接受对为他们主要雇主所作的工作不利的其他工作;
2.09 、在未获得雇主特别授意的情况下,不去代表与他们雇主的利益相反的任何一方,除非某种折衷涉及到更深层的道德准则,此时他们应使雇主或其他相应的授权人知道他们的道德情形。
准则3:产品
软件工程师应确保他们的产品及相关的维护尽可能符合标准。特别地,软件工程师应尽可能做到:
3.01 、为雇主、客户、用户和公众最大限度地提高质量和降低费用;为有关的各方之间作出折衷;
3.02 、对于他们从事的和将要从事的任何项目,保证有一正确可达的目标和方向;
3.03 、努力辨别、定义和阐明与任何工作的项目相关的道德、经济、文化、法律和环境问题;
3.04 、通过适当的培训和测验,保证对于他们从事的和将要从事的任何项目,他们是合格的;
3.05 、对于他们从事的和将要从事的任何项目,保证有一种恰当的方法学;
3.06 、努力遵循最适合于当前工作的工业标准,只有当技术上证明应该背离这些标准时才可以不遵守;
3.07 、努力去全面理解他们工作的软件的规范说明;
3.08 、保证他们所作的软件的规范说明已作好文档,能满足用户的需求,并得到客户的同意;
3.09 、对于他们从事的和将要的任何项目的费用、时间表、人员和支出,保证给出一个切合实际的预算,并且对这些预算作风险评估;
3.10 、对于他们从事的软件和有关文档,应保证充分的测试、排错和复审;
3.11 、对于他们从事的任何项目,确保有足够的文档说明,包括发现的重大问题及采用的解决方案;
3.12 、开发软件和相关的文档要努力做到尊重使用该软件的人的隐私权;
3.13 、注意只使用合法来源的准确数据,并且只以适当授权的方式使用;
3.14 、维护数据的完整性,特别是过时的有缺陷的数据;
3.15 、把对相同专业特性的各种形式的软件维护当成是新的开发。
准则4:判断
软件工程师的工作应该维护他们职业判断的独立性和完整性。特别地,软件工程师应该:
4.01 、以支持和维护人的价值来调和所有的技术判断;
4.02 、只在那些在他们的监督下准备好的且在他们的权力范围内的文档上签字;
4.03 、对于要求他们评价的任何软件或相关文档,应保持职业的客观性;
4.04 、不要从事欺骗性金融活动,比如受贿、双倍酬金或其它不正当的金融手段;
4.05 、对于那些不能合理地避免或避开并且又急切期望解决的利益冲突,要向所有有关的各方公开;
4.06 、凡与他们自身、他们的雇主、他们的客户的经济利益有关的软件或相关文档他们应拒绝作为成员或顾问参与政府或专业团体对该软件或文档作任何决定。
准则5:管理
软件工程管理者和领导者应该发扬用道德标准来管理软件的开发和维护。特别地,扮演领导角色的软件工程师应尽可能适当地做到:
5.01 、在要求雇员遵守各种标准之前,保证使他们都已得知这些标准;
5.02 、保证雇员知道雇主为保护口令、文件和其他的保密信息而采取的策略和规程;
5.03 、只有在作了适当的教育和实验之后,并调整对进一步教育和实验的要求,再分派工作;
5.04 、只通过对工作情况的全面和准确的描述来吸收雇员;
5.05 、只提供公平合理的酬报;
5.06 、对于有资格从事某项工作的下属,不能不公平地阻止他(或她)取得该项工作;
5.07 、对于雇员做出贡献的任何软件、处理技术、研究、文章或其他的知识产品,对其所有权开发出一套公平一致的协议;
5.08 、在听取对违反雇主的政策或本规范的指控之后给出必要的处理;
5.09 、不要求一个雇员地做任何与本规范不一致的事情;
5.10 、不应惩罚对项目实施道德规范的人。
准则6:职业 软件工程师应该在职业各个方面提高他们职业的正直性声誉 ,并与公众的健康、安全和福利要求保持一致。特别地,软件工程师应在尽可能的程度上做到: 帮助发展一种有利于道德行为的组织环境。
6.01 、促进公众对软件工程的了解;
6.02 、通过适当地参与一些专业组织、会议和发布会来拓宽软件工程的知识;
6.03 、支持按照本规范要求去做的那些人;
6.04 、不要以职业的耗费来发展自己的兴趣;
6.05 、服从所有管理他们工作的法规,使他们的工作与公众的健康、安全和福利要求相一致;
6.06 、陈述他们工作的软件的特性时要准确,不但要避免假断言,而且要避免有理由被认为是欺骗的、误导的或令人怀疑的断言;
6.07 、对他们工作的软件和相关文档应履行检测、纠正和报告错误等职责;
6.08 、保证客户、雇主和主管知道在本道德规范中软件工程师所应承担的义务和责任。只与声誉好的公司和组织建立联系;
6.09 、意识到违反本规范就是与职业相矛盾;
6.10 、除不可能,或者生产严重受影响,或者危险的情况之外,必须提醒严重违反本规范的有关人员;
6.11 、当发现通知严重违反该规范的人员是不可能或严重影响生产或危险时,应将情况向权威机构反映。
准则7:同事 软件工程师应该公平地对待所有与他们一起工作的人,并应采取积极的步骤支持社团的活动。特别地,软件工程师应尽可能做到:
7.01 、鼓励同事遵守该规范;
7.02 、协助同事的职业发展;
7.03 、充分信任其他人的工作;
7.04 、以客观、公正和建立正规文档的方式评审其他人的工作;
7.05 、公平地听取同事的意见、所关切的事情或任何抱怨;
7.06 、协助同事全面了解当前的标准工作的实际,包括保护口令和文件、常规的安全度量以及其它有关隐私信息的政策和规程;
7.07 、不要干涉任何同事的职业进步和发展;但当涉及到雇员、客户或公众所关心的事情可能促使软件工程师出于良好的愿望而对同事的能力提出疑问;
7.08 、不要为寻求自己个人的利益而暗中破坏其他软件工程师的工作;
7.09 、当问题处于他们自己的权力范围之外时,应征求具有该权力的其他专业人员的意见。
准则8:个人
软件工程师应该在他们的整个职业生涯中,努力增加他们从事自己的职业所应该具有的能力。特别地,软件工程师应该始终努力做到:
8.01 、进一步提高他们在软件和相关文档的设计、开发和测试方面的知识水平,以及开发过程管理方面的知识;
8.02 、提高他们在合理的时间内以合理的费用创建安全、可靠和高质量软件的能力;
8.03 、提高他们编写准确的、信息丰富的和语言流畅的文档的能力,以支持他们所工作的软件;
8.04 、提高他们对所工作的软件和相关文档的理解,以及对这些软件和文档将要应用的环境的理解;
8.05 、提高对管理他们所工作的软件和有关文档的法律知识的了解;
8.06 、提高他们对本规范、有关它的解释以及应用于他们工作的了解;
8.07 、不要因为任何不相关的偏见而对同事有不公正的成见;
8.08 、不要要求或影响其他人去从事任何违反本规范的活动;
8.09 、把违反本规范看作是与一个职业软件工程师不相称的。