1.职业精神
软件工程师表现出专业精神,特别是通过遵守道德规范和职业行为以及工程师专业团体制定的标准和实践。
专业团体通常由一个或多个专业团体代表;这些团体公布道德守则和职业行为准则以及进入该团体的标准。这些标准构成认证和许可活动的基础,可作为确定工程能力或疏忽的一种措施。
1.1. 认可、认证和许可
1.1.1. 委派
认证是认证组织能力、权威或信誉的过程。经认证的学校或项目保证遵守特定的标准并保持一定的质量。在许多国家,工程师获得知识的基本方法是完成经过认证的学习课程。通常,工程认证是由政府组织,如教育部进行的。拥有政府认证的国家包括中国、法国、德国、以色列、意大利和俄罗斯。
然而,在其他国家,认证过程独立于政府,由私人会员协会执行。例如,在美国,工程认证是由一个叫做ABET的组织进行的。一个被称为CSAB的组织作为ABET的一个参与机构,是ABET中软件工程学位项目认证的领导团体。
虽然每个国家和司法管辖区的认证程序可能不同,但一般意义是相同的。对一个机构的课程进行认证是指“认证机构承认一个教育机构保持标准,使毕业生有资格进入更高或更专业的机构或从事专业实践”[2]。
1.1.2. 认证
认证是指对一个人的特定特征的确认。一种常见的认证类型是专业认证,其中一个人被认证能够以规定的能力水平完成某一学科的活动。职业认证还可以验证持证人在解决或解决问题时达到职业标准和运用职业判断的能力。专业认证还可以包括验证规定的知识、掌握最佳实践和经验证的方法以及大量的专业经验。
工程师通常通过考试和其他基于经验的标准来获得证书。这些考试通常由非政府组织管理,如专业协会。
在软件工程中,认证证明了一个人作为软件工程师的资格。例如,ieeecs制定了两个认证计划(CSDA和CSDP),旨在确认软件工程师对标准软件工程实践的知识,并促进其职业发展。缺乏认证并不排除个人作为软件工程师的工作。目前,软件工程的认证完全是自愿的。事实上,大多数软件工程师都没有通过任何项目的认证。
1.1.3. 许可
“许可”是指授权某人进行某种活动,并对产生的工程产品负责的行为。名词“许可证”指的是该授权和记录该授权的文档。政府当局或法定机构通常颁发许可证。
获得执业许可证不仅要求个人达到一定的标准,而且要求他们具备一定的执业或操作能力。有时,有一个入门级的要求,规定了最低的技能和能力,以实践,但随着专业人员通过他或她的职业生涯,所需的技能和能力的变化和发展。
1.2. 道德和职业行为准则
道德规范和职业行为准则包括工程师的职业实践和决策应体现的价值观和行为。
职业团体建立道德和职业行为准则。它们存在于 会规范和地方法律的背景下,并经过调整以符合这些规范和地方法律。因此,道德准则和职业行为准则在面对相互冲突的要求时提供了指导。
一旦确立,职业道德和职业行为准则将由专业协会或法定机构所代表的专业人士执行。
违规行为可能是委员会的行为,如隐瞒不充分的工作,披露机密信息,伪造信息,或歪曲自己的能力。它们也可能因疏忽而发生,包括未能披露风险或提供重要信息、未能给予适当的信用或确认推荐人、以及未能代表客户利益。违反道德规范和职业行为可能会受到处罚,并可能被开除职业资格。
1999年,ACM理事会和ieeecs理事会批准了软件工程的道德和职业行为准则[6*]。根据这个代码的简短版本:
由于道德和职业行为的标准和规范可能随时被引入、修改或替换,因此软件工程师个人有责任继续学习,以保持其专业实践的最新性。
1.3. 专业协会的性质和作用
专业协会由从业者和学者组成。这些协会的作用是定义、提升和规范他们相应的职业。职业协会帮助建立职业标准以及道德和职业行为守则。为此,他们还从事相关活动,包括
- 建立和传播公认的知识体系;
- 认证、证明和许可;
- 给予纪律处分;
- 通过会议、培训和出版物促进专业发展。
参加专业协会有助于工程师个人保持和提高其专业知识和相关性,并扩大和维护其专业 络。
1.4. 软件工程标准的性质和作用
软件工程标准涵盖了各种各样的主题。它们为软件工程实践和软件开发、维护和支持过程提供了指导。通过建立一个一致同意的知识和经验体系,软件工程标准建立了一个基础,在此基础上可以制定进一步的指导方针。本指南的附录B提供了支持本指南知识领域的IEEE和ISO/IEC软件工程标准的指南。
软件工程标准的好处是多方面的,包括提高软件质量、帮助避免错误、保护软件生产者和用户、加强专业纪律以及帮助技术过渡。
1.5. 软件的经济影响
软件在个人、商业和 会层面都有经济影响。软件的“成功”可能取决于一个产品对一个公认问题的适用性,以及它在应用于该问题时的有效性。
在个人层面上,工程师的继续雇佣可能取决于他们解释和执行任务的能力和意愿,以满足客户或雇主的需求和期望。客户或雇主的财务状况可能反过来受到购买软件的积极或消极影响。
在业务层面上,正确应用于问题的软件可以减少数月的工作,并转化为更高的利润或更有效的组织。此外,获得或提供成功软件的组织通过提供就业机会和改善服务,可能对其所在的 会有好处。然而,软件的开发或收购成本也可以等同于任何重大收购的成本。
在 会层面上,软件成功或失败的直接影响包括或排除事故、中断和服务损失。间接影响包括获得或生产软件的组织的成败、 会生产力的提高或降低、 会秩序的和谐或破坏,甚至财产和生命的挽救或损失。
1.6. 雇佣合同
软件工程服务可以在各种客户-工程师关系下提供。软件工程工作可以作为公司到客户供应商,工程师到客户咨询,直接雇佣,甚至志愿服务。在所有这些情况下,客户和供应商都同意提供产品或服务作为某种考虑的回 。在这里,我们最关心的是工程师对客户的安排及其附带的协议或合同,无论它们是直接雇佣还是顾问类型,以及它们通常解决的问题。
软件工程合同中的一个常见问题是保密性。雇主从知识产权中获得商业优势,因此他们努力保护知识产权不被泄露。因此,软件工程师通常需要签署保密协议(NDA)或知识产权协议(IP)作为工作的先决条件。这些协议通常适用于软件工程师只能通过与客户的联系获得的信息。这些协议的条款可以延长到协会终止后。
另一个问题是知识产权所有权。根据明确的合同条款或相关法律,如果这些资产是在软件工程师与雇主或客户的关系期间获得的,则对软件工程资产、产品、创新、发明、发现和想法的权利可归属于雇主或客户。合同对使用非雇主拥有的设备或信息创建的资产的所有权有所不同。
最后,合同还可以在其他要素中规定执行工作的地点;执行工作的标准;用于开发的系统配置;软件工程师和雇主责任的限制;通信矩阵和/或升级计划;以及管理细节,如费率、补偿频率、工作时间和工作条件。
1.7.法律问题
围绕软件工程专业实践的法律问题主要包括与标准、商标、专利、版权、商业秘密、职业责任、法律要求、贸易合规性和 络犯罪有关的事项。因此,了解这些问题及其适用性是有益的。
法律问题是以管辖权为基础的;软件工程师必须咨询专门处理任何确定的法律问题的类型和管辖权的律师。
1.7.1.标准
1.7.2.商标
商标保护保护的名称,标志,图像和包装。但是,如果名称、图像或其他商标资产成为通用术语,则商标保护无效。
世界知识产权组织(WIPO)是制定商标规章制度的权威机构。知识产权组织是一个致力于利用知识产权促进创新和创造的联合国机构。
1.7.3.专利
专利保护发明人制造和销售创意的权利。一项专利由一个主权国家授予一个个人、一组个人或一个组织一定时期内的一系列专有权组成。专利是观念所有权保护的一种古老形式,可以追溯到15世纪。
申请专利需要仔细记录导致发明的过程。专利律师有助于以最有可能保护软件工程师权利的方式撰写专利披露声明。
请注意,如果发明是在软件工程合同过程中做出的,则所有权可能属于雇主或客户或共同持有,而不是属于软件工程师。
关于什么是可专利的,什么是不可专利的,都有一些规则。在许多国家,软件代码是不可专利的,尽管软件算法可能是。现有的和已提交的专利申请可以在WIPO上搜索。
1.7.4.版权
1.7.5.商业秘密
在许多国家,诸如公式、算法、过程、设计、方法、模式、工具或信息汇编之类的知识资产可被视为“商业秘密”,前提是这些资产并非一般人所知,并可为企业提供某种经济优势。如果资产被盗,指定“商业秘密”提供法律保护。这种保护不受时间限制。但是,如果另一方合法取得或发现同一资产,则该资产不再受保护,另一方也将拥有使用该资产的所有权利。
1.7.6.职业责任
软件工程师通常关心专业责任问题。作为向客户或雇主提供服务的个人,必须遵守标准和普遍接受的做法,从而防止因渎职、疏忽或不称职而受到指控或提起诉讼。
对于工程师,包括软件工程师,专业责任与产品责任有关。根据其管辖范围内的法律和规则,工程师可能会因未能完全认真地遵循建议的做法而被追究责任;这被称为“疏忽”。他们还可能受到有关“严格责任”和默示或明示保证的法律的约束,在这种情况下,通过销售产品,工程师会受到损害保证产品的适用性和安全性。在一些国家(例如,在美国),“隐私”(即人们只能起诉销售产品的人的想法)不再是对责任诉讼的辩护。
美国的侵权法允许任何受到损害的人在没有做出任何保证的情况下也可以要求赔偿责任。由于很难衡量软件的适用性或安全性,未能采取适当的谨慎措施可以用来证明软件工程师的疏忽。对这种指控的抗辩是为了证明在产品开发过程中遵循了标准和普遍接受的做法。
1.7.7.法律要求
软件工程师必须在当地、国家和国际法律框架的范围内工作。因此,软件工程师必须了解
- 注册和许可,包括考试、教育、经验和培训要求;
- 合同协议;
- 非合同法律,如管辖责任的法律;
- 关于国际法律框架的基本资料可从世界贸易组织(WTO)获得。
1.7.8.贸易合规性
所有软件专业人员必须了解在其工作的司法管辖区内对货物、服务和技术的进口、出口或再出口的法律限制。这些考虑包括出口管制和分类、货物转让、被制裁国家、企业或个人实体为在国外使用硬件和软件、服务和技术取得必要的政府许可证以及进口限制和关税。应咨询贸易专家以获得详细的合规指导。
1.7.9. 络犯罪
络犯罪是指涉及计算机、计算机软件、计算机 络或者控制系统的嵌入式软件的犯罪。计算机或软件可能被用于犯罪,也可能是犯罪目标。这类犯罪包括欺诈、未经授权的访问、垃圾邮件、淫秽或攻击性内容、威胁、骚扰、窃取敏感个人数据或商业秘密,以及使用一台计算机损坏或渗透其他联 计算机和自动系统控制。
计算机和软件用户通过改变电子数据来进行欺诈,以便利非法活动。未经授权的访问形式包括黑客攻击、窃听和以对其所有者不公开的方式使用计算机系统。
许多国家都有单独的法律来涵盖 络犯罪,但由于缺乏精确制定的法规,有时很难起诉 络犯罪。软件工程师有专业义务考虑 络犯罪的威胁,并了解软件系统将如何保护或危害软件和用户信息,使其免受意外或恶意访问、使用、修改、破坏或泄露。
1.8.文件
提供清晰、彻底和准确的文档是每个软件工程师的责任。根据不同利益相关者受众的需求,采用不同的标准来判断文件的充分性。
良好的文件符合公认的标准和准则。特别是,软件工程师应该记录
- 相关事实,
- 重大风险和权衡,以及
- 因使用或误用软件而产生的不良或危险后果的警告。
软件工程师应该避免
- 认证或批准不合格产品,
- 披露机密信息,或
- 伪造事实或数据。
此外,软件工程师及其经理应特别提供以下文档,供软件开发组织的其他成员使用:
- 软件需求规范、软件设计文件、所用软件工程工具的详细信息、软件测试规范和结果,以及所采用的软件工程方法的详细信息;
- 开发过程中遇到的问题过程。用于外部利益相关者(客户、用户、其他人)软件文档应特别提供
- 确定软件是否可能满足客户和用户需求所需的信息,
- 软件的安全和不安全使用说明,
- 对使用软件创建或存储的敏感信息的保护说明,以及
- 明确识别警告和关键程序。
软件的使用可能包括安装、操作、管理以及由不同用户组和支持人员执行其他功能。如果客户将获得软件源代码的所有权或修改代码的权利,软件工程师应提供软件的功能规范、软件设计、测试套件和必要的操作环境的文档。
文档应保存的最短时间长度是软件产品生命周期的持续时间或相关组织或法规要求所需的时间。
1.9.权衡分析
在软件工程实践中,软件工程师常常不得不在备选问题解决方案之间进行选择。这些选择的结果由软件工程师与利益相关者合作,对备选方案的风险、成本和收益进行专业评估来确定。软件工程师的评估被称为“权衡分析”。权衡分析尤其能够识别相互竞争和互补的软件需求,以便确定定义要构建的软件的最终需求集的优先级(参见软件需求KA和KA中的需求协商)软件工程管理中需求的确定和协商。
在一个正在进行的软件开发项目,是迟交或超出预算的情况下,权衡分析往往进行,以决定哪些软件需求可以放宽或放弃鉴于其影响。
权衡分析的第一步是确定设计目标(见工程基础KA中的工程设计)并确定这些目标的相对重要性。这允许识别最接近于实现这些目标的解决方案;这意味着目标的表述方式至关重要。
设计目标可能包括货币成本的最小化和可靠性、性能的最大化,或在广泛的维度上的一些其他标准。然而,很难对成本与风险进行权衡分析,特别是在初级生产成本和次级风险成本必须相互权衡的情况下。
软件工程师必须以道德的方式进行权衡分析,特别是在选择替代问题解决方案的比较标准以及为这些标准分配权重或重要性时,要客观公正。任何利益冲突都必须事先披露。
2.群体动力学与心理学
工程工作通常是在团队合作的背景下进行的。软件工程师必须能够与其他人进行合作和建设性的互动,首先确定并满足需求和期望。在与客户、同事、供应商和下属互动以解决软件工程问题时,团队动力学和心理学知识是一种资产。
2.1. 团队工作的动力
团队成员通过在智力上诚实、利用集体思维、承认无知和承认错误来促进这种氛围。他们公平地分担责任、 酬和工作量。他们注意清楚地、直接地、在文档中以及在源代码中进行通信,这样每个人都可以访问信息。关于工作产品的同行评审是以一种建设性和非个人的方式进行的(参见软件质量KA中的评审和审计)。这使得所有成员都能在没有个人风险的情况下追求持续改进和增长的循环。一般来说,凝聚力团队的成员表现出对彼此和领导者的尊重。
需要强调的一点是,软件工程师必须能够在多学科环境和不同的应用领域中工作。由于今天软件无处不在,从电话到汽车,软件对人们生活的影响远远超出了在商业环境中为信息管理而设计的更传统的软件概念。
2.2. 个体认知
工程师们渴望解决问题。有效地解决问题的能力是每个工程师努力追求的目标。然而,个体认知的局限性和过程影响问题的解决。在软件工程中,特别是由于软件本身的高度抽象性,个体认知在问题解决中起着非常突出的作用。
一般来说,个人(特别是软件工程师)分解问题和创造性地开发解决方案的能力可能会受到
- 需要更多的知识,
- 潜意识假设,
- 数据量,
- 害怕失败或失败的后果,
- 应用领域或组织文化,
- 缺乏表达问题的能力,
- 感知的工作氛围,以及
- 个人的情绪状态。
通过培养良好的解决问题的习惯,尽量减少误导性假设的影响,可以减少这些抑制因素的影响。专注的能力是至关重要的,因为是智力上的谦虚:两者都允许软件工程师暂停个人考虑,并与他人自由协商,这在团队工作时尤为重要。
有一套工程师用来促进问题解决的基本方法(见计算基础中的问题解决技术)。分解问题,一次解决一个问题,可以减少认知负荷。利用职业好奇心,通过培训和学习追求持续的职业发展,为软件工程师的工作组合增加技能和知识;阅读、建立人际 络、尝试新的工具、技术和方法都是职业发展的有效手段。
2.3. 处理问题的复杂性
许多(如果不是大多数的话)软件工程问题太复杂,很难作为一个整体来解决,也很难由单个软件工程师来解决。当出现这种情况时,通常采用的方法是团队合作和问题分解(参见计算基础中的问题解决技术)。
团队通过分担负担、利用彼此的知识和创造力,共同处理复杂而大的问题。当软件工程师在团队中工作时,各个工程师的不同观点和能力相互补充,并帮助构建一个否则很难获得的解决方案。软件工程的一些具体团队合作例子是结对编程(参见软件工程模型和方法KA中的敏捷方法)和代码评审(参见软件质量KA中的评审和审计)。
2.4. 与利益相关者互动
软件工程的成功取决于与利益相关者的积极互动。他们应该在软件生命周期过程的所有阶段提供支持、信息和反馈。例如,在早期阶段,识别所有利益相关者并发现产品将如何影响他们是至关重要的,这样就可以正确、完整地获取利益相关者需求的充分定义。
在开发过程中,涉众可以提供有关软件规范和/或早期版本、优先级变更以及详细或新软件需求澄清的反馈。最后,在软件维护期间,直到产品生命周期结束,涉众提供关于不断发展的或新的需求的反馈以及问题 告,以便可以扩展和改进软件。
因此,在软件产品的生命周期中,与涉众保持开放和高效的沟通是至关重要的。
2.5. 处理不确定性和模糊性
与其他领域的工程师一样,软件工程师在提供服务和开发产品时必须经常处理和解决不确定性和模糊性。软件工程师必须攻击并减少或消除任何阻碍执行工作的不清晰之处。
当不确定性或模糊性不易克服时,软件工程师或组织可以选择将其视为项目风险。在这种情况下,对工作估计或定价进行调整,以降低解决该问题的预期成本(参见软件工程管理KA中的风险管理)。
2.6. 处理多元文化环境
多元文化环境会对一个群体的动态产生影响。尤其是当群体在地理位置上分离或沟通不频繁时,这一点尤为重要,因为这种分离提高了每个接触的重要性。如果时区的差异使得口头交流不那么频繁,那么跨文化交际就更加困难。
多元文化环境在软件工程中相当普遍,也许比工程的其他领域更为普遍,这是由于国际外包的强劲趋势和软件组件在全球范围内的快速运输。例如,一个软件项目跨越国家和文化边界被分成若干部分是相当常见的,一个软件项目团队由来自不同文化背景的人组成也是相当常见的。
一个软件项目要想成功,团队成员必须达到一定的容忍度,承认一些规则依赖于 会规范,并不是所有的 会都能得到相同的解决方案和期望。
领导和管理层的支持可以促进这种容忍和相应的理解。更频繁的交流,包括面对面会议,有助于缓和地域和文化分歧,促进凝聚力,提高生产力。而且,能够用他们的母语与队友交流也是非常有益的。
3.沟通技巧
一个软件工程师在口头和读写方面进行良好的沟通是至关重要的。软件需求和期限的成功实现取决于软件工程师与客户、主管、同事和供应商之间建立清晰的理解。通过调查、理解和总结信息的能力,可以实现最佳问题解决。客户产品验收和产品安全使用取决于相关培训和文件的提供。因此,软件工程师自身的职业成功受到持续有效和及时地提供口头和书面交流的能力的影响。
3.1. 阅读、理解和总结
软件工程师能够阅读和理解技术资料。技术资料包括参考书、手册、研究论文和程序源代码。
阅读不仅是提高技能的主要途径,也是为完成工程目标而收集必要信息的途径。软件工程师筛选积累的信息,筛选出最有用的部分。客户可能会要求软件工程师为他们总结此类信息收集的结果,对其进行简化或解释,以便他们在竞争解决方案之间做出最终选择。
阅读和理解源代码也是信息收集和问题解决的一个组成部分。在修改、扩展或重写软件时,了解直接从所提供的代码派生的软件实现及其设计(必须经常推断)是至关重要的。
3.2. 写作
软件工程师能够根据客户的要求或普遍接受的实践来制作书面产品。这些书面产品可能包括源代码、软件项目计划、软件需求文档、风险分析、软件设计文档、软件测试计划、用户手册、技术 告和评估、理由、图表等。
清晰简洁的写作是非常重要的,因为它往往是相关方之间沟通的主要方法。在任何情况下,编写的软件工程产品都必须是可访问的、可理解的,并且与预期的受众相关。
3.3. 团队沟通
团队和团队成员之间的有效沟通对于协作软件工程工作至关重要。必须征求利益相关者的意见,做出决策,制定计划。团队和团队成员的数量越多,就越需要沟通。
然而,随着每个团队成员的加入,通信路径的数量呈二次曲线增长。此外,团队成员不太可能与任何被认为被开除超过两个学位(级别)的人交流。当软件工程工作或组织跨越国家和大陆边界时,这个问题可能会更严重。
有些交流可以用书面形式完成。软件文档是直接交互的常用替代品。电子邮件是另一种方式,尽管它很有用,但并不总是足够的;而且,如果一个人发送了太多的信息,就很难识别出重要的信息。越来越多的组织使用企业协作工具来共享信息。此外,对于组织政策、标准、通用工程程序和项目特定信息,使用所有团队成员都可以访问的电子信息存储是最有益的。
一些软件工程团队注重面对面的互动,并通过办公空间的安排来促进这种互动。尽管私人办公室提高了个人生产力,但以实体或虚拟形式与团队成员进行协作并提供公共工作区对于协作工作非常重要。
3.4. 演讲技巧
因此,软件工程师在演示文稿中有效地传达概念的能力会影响产品的接受、管理和客户支持;它也会影响涉众理解和协助产品工作的能力。这些知识需要以幻灯片、知识写作、技术白皮书和用于知识创造的任何其他材料的形式存档。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!