软件工程职业道德规范.ppt
职业道德规范,软件工程职业道德规范的形成,1993年5月,IEEE计算机协会的管理委员会设立了一个指导委员会,其目的是为确立软件工程作为一个职业而进行评估、计划和协调各种活动。同年,ACM理事会也同意设立一个关于软件工程的委员会。到1994年1月,两个协会成立了一个联合指导委员会,负责为软件工程职业实践制定一组适当标准,以此作为工业决策、职业认证和教学课程的基础。,随后IEEE计算机协会和ACM联合指导委员会的软件工程道德和职业实践专题组制定了软件工程师道德规范。在往后的几年里,IEEE一直根据该准则的要求不断致力于推动软件工程行业化和规范化的发展,成立专门评审机构对软件开发从业员进行证书认证。同时,为了符合发展的需要,IEEE与ACM也对软件工程师道德规范进行了补充与更新。现在所使用的版本是5.2版。,规范的性质与目的:,对软件工程师的教育与我们从事工作的标准;以文件的方式对软件工程师的道德与义务作出规定;教导从业员业内的权威机构对我们的期望是什么,我们奋斗的目标是什么;指出了对公众的责任在这一行业里的重要性。,规范的主要内容,规范的条款主要包括两部分内容,8个主要方面。第一部分:把条款高度浓缩,提取成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 对违反雇主政策或道德观念的指控,进行公证的听证;5.11 不要求软件工程师去做任何与道德规范不一致的事;5.12 不能处罚对项目表露有道德方面关切的人;,原则6 专业,软件工程师应当自觉推动本行业所提倡的诚实、正直的道德规范,并自觉维护本行业的声誉,使软件行业更好的为公众利益所服务,特别是在适当的情况下软件工程师应当:6.01 积极推动发展一个适合执行道德规范的环境;6.02 推进软件工程知识的传播;,6.03 通过适当参加各种专业组织、会议和出版刊物,提高软件工程的知识;6.04 作为一名专业人员,鼓励其他软件工程师努力遵循本道德规范;6.05 不以牺牲职业、客户或雇主利益为代价,谋求自身利益;6.06 服从所有监管作业的法令,唯一可能的例外是,仅当这种服从与公众利益有不一致时;6.07 要精确叙述自己所开发的软件的特性,不仅避免错误的断言,也要防止那些可能造成猜测投机、空洞无物、欺骗性、误导性或者有疑问的断言;,6.08 对所从事的软件和相关文档,负起检测、修正和报告错误的责任;6.09 保证让客户、雇主和主管人员知道软件工程师对本道德规范的承诺,以及这一承诺带来的后果影响;6.10 避免与本道德规范有冲突的业务和组织沾边;6.11 要认识违反本规范是与成为一名专业工程师不相称的;6.12 在出现明显违反本规范时,应立即和相关当事人进行磋商,除非在无法磋商、会影响生产或有危险时才可例外;6.13在出现明显违反本规范时,当和相关当事人无法磋商,或者会影响生产或有危险时,应向有关当局报告;,原则7 同事,软件工程师对其同事应持平等互助和支持的态度特别是在适当的情况下软件工程师应当:7.01 鼓励同行遵守本道德规范;7.02 在专业发展方面帮助同行;7.03 充分信任和赞赏其他人的工作,也要避免不应有的赞誉;7.04 评审别人的工作,应客观、直率和适当的进行文档记录;7.05 持良好的心态听取同行的意见、关切和抱怨;,7.06 协助同行充分熟悉当前的标准来进行工作,包括保护口令、文件和保密信息有关的政策和步骤,以及一般的安全措施;7.07 不要不公正地干涉同行的职业发展,但出于客户、雇主或公众利益的考虑,软件工程师应以善意态度质询同行的胜任能力;7.08 在工作超越本人胜任范围的情况下,应主动征询其他熟悉这一领域的同行或相关专业人员;,原则8 自身,软件工程师应终生不断地学习和实践其专业知识,并在学习和实践的过程中不断提高自身的道德规范素养,特别是在适当的情况下软件工程师应当:8.01 深化他们的开发知识,包括软件的分析、规格说明、设计、开发、维护和测试,相关的文档,以及开发过程的管理;8.02 提高他们在合理的成本和时限范围内,开发安全、可靠和高质量软件的能力;8.03 提高他们正确开发、学识见闻的和编写文档的能力;,8.04 提高他们对所开发软件和相关文档资料,以及开发环境的了解;8.05 提高他们对从事的软件开发工作和文档所相关的标准和法律的熟悉程度;8.06 提高他们对本规范,及其解释和如何应用于本身工作的了解;8.07 不要因为任何偏见而不公正地对待他人;8.08 不影响他人在执行道德规范时所采取的任何行动;8.09 要认识违反本规范是与成为一名专业软件工程师不相称的。,案例分析:SDI 系统,1983年3月,美国总统里根提出为保护本土利益,美国将启动SDI 工程,这也是著名的“Star Wars(星球大战)”计划。-弹道飞弹防御系统:SDI中一个最主要的计划,通过计算敌方弹道飞弹的飞行轨迹来进行拦截防御,成功率不可低于99%。-要求相关软件必须将传感器,武器,控制与通信元件等组合起来并协同工作以满足该系统的需要。-预算高达1万多亿美元,相关主要决策者认为该项目的主要问题是时间,与金钱。而并不是项目的可行性。,成立了一个由高薪聘用的软件工程专家组成的专家组来指导,评估和策划SDI系统。成员的顾问费用为$1,000/天。David Parnas 专家组的成员,(倡导结构化编程的先驱,Norbert Wiener 奖的第一届得主。)在该项目的策划和开发过程中宣告辞职并声明:不可能开发出这种软件。,1985年,在MIT(麻省理工)赞助了一场辩论并邀请了赞成和反对SDI 系统和SDI专家组的成员参加。David Parnas也以反对方的身份参加了该辩论,他以“前提 结论”的风格进行辩论,David Parnas的前提是:1.不可能有详细的软件说明书;2.基本上不可能进行软件可行性测试;3.不具备在使用软件的过程中,进行错误的修补或补丁的打入等软件升级条件。4.没有任何已知的经验或方法论能改变上述情况。因此结论是:不可能构造一款能完全让人信任的SDI 软件。,之后SDI 系统在耗费近千亿美元后,于20世纪90年代中止;SDI 完全终止前的5年里进行了13次拦截测试,只有3次成功;而这些测试并没有考虑真实攻击下的因素如:干扰弹,能在发射后修改轨道的导弹等。,案例分析:SDI 系统,所牵涉到的关于软件工程师的道德问题:怎样和不赞同你意见的同事合作?是否应该,或者什么时候向外界揭发问题?是否应该继续为一个已知道不可能完成,但$的项目工作?,5.12(管理者)不能处罚对项目表露有道德方面关切的人;3.02 确保他们正在进行的或建议的项目有适当和可达到的目标;1.03 所接受的开发工作,必须确认其是安全的、符合规格说明的、经过合适测试;1.04 当他们有理由相信有关的软件和文档,会对用户、公众或环境造成任何实际或潜在的危害时,应马上向适当的人或有关当局揭露;,案例分析与讨论,/*CPR 数据库系统:*/通过计算机记录和访问病人的健康状况的系统。国际医学界对CPR系统的定义:实现从不同地点对病人信息进行采集、加工、存储、传输和服务的综合系统;以电子病历的形式替代传统的纸张病历对病人的身体状况和历史进行记录,并在必要时可进行查阅;可作为人类从生命诞生到结束的电子信息保健资料库。,CPR系统数据保密问题的背景:保存在CPR系统的信息包括病人详细的个人资料,如:地址,电话号,社保号,家庭背景等。病人的健康状况与历史,如:接受的治疗,服用的药物等。这些相关的信息如果被不法泄露,会对病人带来非常严重的后果。CPR系统能通过多种途径提高其安全系数,如:用户名/密码,电子智能卡,指纹鉴定,视网膜扫描或声音识别等。,一家医院聘用软件工程师兼顾问Sam来为其开发CPR系统,并告诉他医院已经通过之前的研究决定:该系统的保密子系统只需要使用最初级的用户名/密码保密方式来进行登录和访问即可。然而,作为专业软件从业员的Sam认为85%的电脑系统的密码是可以被破解的;另外,以往的经验告诉他大部分破解密码,盗取资料的人通常是来自内部。因此Sam认为最低限度也应该再创建一个索引子系统用来记录下所有登录过的用户,这样尽管资料被窃仍可以追踪盗取者的位置。,由于Sam对于医院来说只是外部人员,因此他并没有决定或更改该项目的权利。另外,医院也因为投资预算有限而没有让Sam参与项目决定方案的制定。Sam的工资以小时算,也就是说工作小时越多,其获得的酬劳就越多。然而他始终因为上面的保密问题而觉得烦恼,因此他求助于同行希望能获得建议。,案例分析与讨论,Sam 所有可能的选择:1)向医院提出加强保密子系统的计划。2)取消项目并向相关的机构揭露问题。3)取消项目但不揭露问题。4)按要求完成项目后再向相关的机构揭露问题。5)按要求完成项目也不揭露问题。,1)向医院提出加强保密子系统的计划 根据条款”1公众 软件工程师应当始终如一地以符合公众利益为目标。”因此,Sam 有责任保护软件使用人的私人资料不受到侵犯。然而加强保密的计划必定会增加医院的预算,根据条款“3.01 努力保证高质量、可接受的成本和合理的进度。Sam 有必要与雇主讨论折中的方案,并有责任告知计划可能存在的风险。,2)取消项目并向相关的机构揭露问题。3)取消项目但不揭露问题。这两个选项并不符合条款“4.01 所有技术性判断要服从支持和维护公众利益的需要”的精神。取消项目并不能提高该医院CPR 系统的保密质量,并有可能进一步降低的风险。并且向外界泄漏问题有可能导致Sam 丧失其职业生命。,4)按要求完成项目后再向相关的机构揭露问题5)按要求完成项目也不揭露问题 有违条款“6.专业 软件工程师应当自觉推动本行业所提倡的诚实、正直的道德规范,并自觉维护本行业的声誉”两个选项都会损害软件工程师的声誉。就算选择4)也因为项目已经完成并付款而降低其关心病人隐私的可信程度。Sam 不应该在明确知道项目有损害公众可能性存在,而继续服从开发工作。,综上所述,第一个选项应该是最好的选择。并且Sam应该为雇主和公众的最高利益着想。假如他的雇佣费用高昂是导致医院预算紧缩的原因,他有必要把降低自己的雇佣费用也考虑到加强保密系统的方案中。向外界揭露问题和保护雇主利益有一定的矛盾,因此不到万不得已不要考虑。在这个案例选择揭露会导致情况比不揭露更糟糕,特别是在完成项目并获得报酬后再揭露。,软件工程师八荣八耻 Based on IEEE Code of Ethics(CoE)-1999 1.以遵循公共利益为荣,以背离公共利益为耻;2.以维护商客利益为荣,以损害商客利益为耻;3.以产品最高规格为荣,以产品粗制滥造为耻;4.以诚实独立思考为荣,以虚假违心迎合为耻;5.以推动道德建设为荣,以忽视道德建设为耻;6.以高尚职业信誉为荣,以自误误人失信为耻;7.以平等待人相助为荣,以媚上欺下拆台为耻;8.以终生学习不懈为荣,以自骄自满懈怠为耻。,