软件工程

软件工程是一种基于工程的软件开发方法。软件工程师是将工程设计过程应用于设计,开发,测试,维护和评估计算机软件的人。该术语有时用作同义词,但可能会强调软件实施而不是设计,并且还可能缺乏工程教育或技能的含义。

工程技术用于告知软件开发过程,该过程涉及定义,实施,评估,测量,管理,变更,以及软件生命周期过程本身的改进。它大量使用软件配置管理,这是关于系统地控制配置的变化,并在整个系统生命周期中保持配置和代码的完整性和可追溯性。现代流程使用软件版本

历史

从1960年代开始,软件工程被视为其自己的工程类型。此外,软件工程的开发被视为一场斗争。很难跟上硬件,这给软件工程师带来了许多问题。问题包括超出预算,超出截止日期,需要进行大量调试和维护的软件,并且未成功满足消费者的需求,甚至从未完成。 1968年,北约举行了第一次与软件有关的软件工程会议,该会议已解决:建立了软件开发的指南和最佳实践。

软件工程一词的起源归因于各种来源。该术语出现在1965年6月发行的“计算机和自动化”的公司提供的服务列表中,并在1966年8月的ACM通信(第9卷,第8卷,第8卷)中更正式使用“致ACM成员的信“ ACM主席Anthony A. Oettinger。它也与弗里德里希·L·鲍尔(Friedrich L. Bauer)教授在1968年举行的北约会议标题有关。玛格丽特·汉密尔顿(Margaret Hamilton)在阿波罗任务中描述了“软件工程”的纪律,以赋予他们在做合法性的事情。当时被认为是“软件危机”。第40届国际软件工程会议(ICSE 2018)以弗雷德里克·布鲁克斯(Frederick Brooks)玛格丽特·汉密尔顿(Margaret Hamilton)的全体会议主题演讲庆祝了50年的“软件工程”。

1984年,该软件工程学院(SEI)成立为总部位于宾夕法尼亚州匹兹堡的卡内基梅隆大学校园的联邦资助的研发中心。 Watts Humphrey建立了SEI软件流程计划,旨在理解和管理软件工程流程。引入的过程成熟度水平将成为开发能力成熟度模型集成(CMMI-DEV),该模型定义了美国政府如何评估软件开发团队的能力。

ISO/IEC JTC 1/SC 7小组委员会收集了现代,公认的软件工程最佳实践,并作为软件工程知识体(SWEBOK)出版。软件工程被认为是主要计算学科之一。

定义和术语

软件工程的显著定义包括:

  • “科学和技术知识,方法和经验在设计,实施,测试和文档中的系统应用” - 劳工统计局 - IEEE系统和软件工程 - 词汇
  • “在软件的开发,操作和维护中应用系统,纪律,可量化的方法” - IEE EEE软件工程术语标准词汇表
  • “与软件生产的各个方面有关的工程学科” -伊恩·索默维尔(Ian Sommerville)
  • “建立和使用声音工程原则,以便从经济上获得可靠并有效地在真实机器上工作的软件” -弗里茨·鲍尔(Fritz Bauer)
  • “处理复杂计算机程序的设计,实施和维护的计算机科学分支” - Merriam-Webster
  • “'软件工程'不仅涵盖编写代码的行为,还包括组织随时间构建和维护该代码的所有工具和处理。[...]可以将软件工程视为随着时间的推移集成的编程。'“ - Google的软件工程

该术语的正式使用量也不那么正式:

  • 作为以前称为计算机编程系统分析的广泛活动的非正式术语;
  • 作为计算机编程实践的各个方面的广义术语,而不是计算机编程理论,该理论被正式研究为计算机科学的子学科;
  • 当该术语体现了一种特定的计算机编程方法的倡导时,它敦促将其视为工程学科而不是艺术或工艺,并提倡对推荐实践的编纂

“软件工程师”的词源

玛格丽特·汉密尔顿(Margaret Hamilton)阿波罗计划(Apollo Program)的工作期间推广了“软件工程”一词。 “工程”一词被用来承认,应与对技术进步的其他贡献一样认真对待这项工作。汉密尔顿详细介绍了她对该术语的使用:

当我第一次想到这个词时,至少在我们的世界中,没有人听说过它。很长一段时间以来,这是一个持续的笑话。他们喜欢向我开玩笑我的激进想法。这是一个令人难忘的一天,最受尊敬的硬件大师之一向每个人解释了他同意我的同意,即建立软件的过程也应被视为工程学科,就像与硬件一样。不是因为他接受了新的“术语”本身,而是因为我们已经赢得了他的和房间中其他人的接受,因为他本身就在工程领域。

术语的适用性

个人评论员在如何将软件工程或其合法性作为工程学科方面急剧不同意。大卫·帕纳斯(David Parnas)表示,软件工程实际上是一种工程形式。史蒂夫·麦康奈尔(Steve McConnell)说不是,但应该如此。唐纳德·诺斯(Donald Knuth)说,编程是一门艺术和科学。 Edsger W. Dijkstra声称软件工程软件工程师术语已被滥用,应被视为有害,尤其是在美国。

大规模项目中的任务

软件要求

需求工程是关于软件要求的启发,分析,规范和验证。软件要求可以是三种不同类型的。有功能要求非功能要求和域要求。应该执行软件的操作,并应期望用户使用适当的输出。非功能要求涉及可移植性,安全性,可维护性,可靠性,可伸缩性,性能,可重复使用性和灵活性等问题。它们分类为以下类型:接口约束,性能约束(例如响应时间,安全性,存储空间等),操作约束,生命周期约束(可维护性,可移植性等)和经济约束。在指定非功能要求时,需要了解系统或软件的工作方式。域要求与某些类别或项目域的特征有关。

软件设计

软件设计是关于定义系统或组件的架构,组件,接口和其他特征的过程。这也称为软件体系结构。软件设计分为三个不同级别的设计。这三个级别是界面设计建筑设计详细设计。界面设计是系统及其环境之间的相互作用。这与系统的内部运作一起在高水平的抽像中进行。建筑设计与系统的主要组成部分及其责任,属性,接口及其之间发生的关系和互动有关。详细的设计是所有主要系统组件,它们的属性,关系,处理以及其算法数据结构的内部元素。

软件构建

软件构建是软件开发的主要活动,是编程单元测试集成测试调试以实施设计的组合。该阶段的测试通常由程序员在构建软件时执行,以验证刚刚编写的内容并确定何时准备将代码发送到下一步。

软件测试

软件测试是一项经验,技术调查,旨在为利益相关者提供有关正在测试的产品或服务质量的信息,并采用不同的方法(例如单元测试集成测试) 。这是软件质量的一个方面。作为软件开发的单独阶段,通常由质量保证人员或编写代码的开发人员执行。

软件分析

软件分析是分析计算机程序对属性诸如性能鲁棒安全性等属性的行为过程。

软件维护

软件维护是指在运输软件产品后提供具有成本效益的支持所需的活动。软件维护正在修改和更新分发后的软件应用程序,以纠正故障并提高其性能。软件与现实世界有很大关系,当现实世界发生变化时,需要软件维护。软件维护包括:错误校正,优化,未使用和废弃功能的删除以及已经存在的功能的增强。通常,维护占项目成本的40%至80%,因此着重于维护可以降低成本。

教育

计算机编程的了解是成为软件工程师的先决条件。 2004年, IEEE计算机协会生产了Swebok ,该协会已出版为ISO/IEC技术报告1979:2005,描述了他们建议由具有四年经验的研究生软件工程师掌握的知识体系。许多软件工程师通过在职业学校获得大学学位或培训来进入该行业。本科软件工程学位的一项标准国际课程是由IEEE计算机协会计算机协会的计算课程联合工作组定义的,并于2014年进行了更新。许多大学具有软件工程学位课程;截至2010年,在美国,有244个校园软件工程课程,70个在线计划,230个硕士课程,41个博士学位课程和69个证书级别的计划。

除了大学教育外,许多公司还赞助希望从事信息技术职业的学生实习。这些实习可以向学生介绍有趣的现实世界任务,这些任务每天都会遇到典型的软件工程师。可以通过软件工程中的兵役获得类似的经验。

软件工程学位课程

当今所有从业人员的一半在计算机科学信息系统信息技术方面具有学位。一个小但不断增长的从业者拥有软件工程学位。 1987年,伦敦帝国学院的计算系推出了英国和世界的第一个三年软件工程学士学位。次年,谢菲尔德大学建立了类似的计划。 1996年,罗切斯特理工学院在美国建立了第一个软件工程学士学位课程,但是直到2003年,它才与莱斯大学克拉克森大学密尔沃基工程学院密西西比州立大学,直到2003年才获得Abet认证。获得了他们的。 1997年,印度哥印拜陀的PSG理工学院是第一个启动五年综合科学硕士学位的软件工程硕士学位。

从那时起,许多大学就建立了软件工程本科学位。一项针对本科软件工程学位的标准国际课程, SE2004 ,由2001年至2004年之间的指导委员会定义,并获得了计算机机械协会IEEE计算机协会的资助。截至2004年,在美国,大约50所大学提供了软件工程学位,该学位教授计算机科学和工程原理和实践。第一个软件工程硕士学位是在1979年在西雅图大学成立的。从那时起,研究生软件工程学位已获得更多大学。同样,在加拿大,加拿大专业工程师委员会的加拿大工程认证委员会(CEAB)也认可了几个软件工程计划。

1998年,美国海军研究生院(NPS)建立了世界软件工程学的第一个博士学位课程。此外,已经出现了许多软件工程的在线高级学位,例如富勒顿加州州立大学的计算机科学和工程系提供的软件工程学硕士(MSE)学位。史蒂夫·麦康奈尔(Steve McConnell)认为,由于大多数大学教授计算机科学而不是软件工程,因此缺乏真正的软件工程师。 IEEE要求ETS (écolede Technologiesupérieure)大学和UQAM (Montréal大学),以开发软件工程知识体( SWEBOK ),该体系已成为描述软件工程师涵盖的ISO标准。

职业

专业软件工程师许可或认证的法律要求在世界范围内各不相同。在英国,没有许可或法律要求可以承担或使用职位标题软件工程师。在加拿大的某些地区,例如艾伯塔省,不列颠哥伦比亚省,安大略省和魁北克,软件工程师可以持有专业工程师(P.ENG)的指定和/或信息系统专业人员(ISP)指定。在欧洲,软件工程师可以获得欧洲工程师(EUR)专业头衔。软件工程师还可以通过英国计算机协会成为特许工程师的专业资格。

在美国, NCEES于2013年开始为软件工程提供专业的工程师考试,从而允许软件工程师获得许可和认可。由于缺乏参与,NCEES在2019年4月之后结束了考试。目前,强制性许可仍在很大程度上辩论,并被认为是有争议的。

IEEE计算机协会ACM (美国两个主要的软件工程专业组织)为软件工程专业发布指南。 IEEE的软件工程知识体系指南 - 2004年版本Swebok定义了该领域,并描述了IEEE的知识,期望一名实践软件工程师拥有的知识。最新的Swebok V3是一个更新版本,并于2014年发布。IEEE还颁布了“软件工程道德守则”。

就业

截至2022年,全球估计有2690万个专业软件工程师,高于2016年的2100万。

许多软件工程师担任员工或承包商。软件工程师与企业,政府机构(平民或军事)和非营利组织合作。一些软件工程师作为自由职业者为自己工作。一些组织有专家可以在软件开发过程中执行每个任务。其他组织要求软件工程师进行许多或全部。在大型项目中,人们可能只专注于一个角色。在小型项目中,人们可能会同时填补几个或所有角色。许多公司在暑假或实习期间雇用实习生,通常是大学或大学生。专业包括分析师建筑师开发人员测试人员技术支持中间件分析师项目经理软件产品经理教育工作者研究人员

大多数软件工程师和程序员每周工作40个小时,但约有15%的软件工程师和11%的程序员在2008年每周工作50个小时以上。这些职业的潜在伤害是可能的,因为像其他长期坐着的工人一样在键盘上打字的计算机终端的正面,工程师和程序员容易受到眼睛疲劳,背部不适以及手和腕部问题,例如腕管综合症

美国

美国劳工统计局(BLS)计数1,365,500个软件开发人员在2018年在美国从事工作。由于其相对新颖的研究领域,经常在软件工程领域作为计算机科学课程的一部分进行教学,许多教育软件工程师拥有计算机科学学位。 BLS估计2014年至2024年,计算机软件工程将增长17%。对于软件工程的20122年,这是20122年的BLS估计值为22%。并且,从2010年的30%到2020年的BLS估计值更远。由于这种趋势,就业增长可能不如过去十年那样快,因为在美国,本来可以去的计算机软件工程师的工作将被外包给印度和其他国外等国家的计算机软件工程师。此外,美国劳工统计局(BLS)职业前景的BLS职位前景预测,从2016年到2026年,职业前景的下降将下降-7%,从2019年到2029年下降了-9%,下降了-9 %,下降了-ds。从2021年到2031年10%。然后从2022年到2032年下降-11%。由于可以从世界任何地方进行计算机编程,因此公司有时在工资较低的国家/地区雇用程式设计师.此外,与其他工程领域相比,多年来,许多软件领域的女性也一直在下降。然后还有一个其他问题,即人工智能的最新进展可能会影响对后代软件工程师的需求。但是,随着美国市场当前的许多软件工程师在未来几十年中逃离市场或年龄,这种趋势可能会改变或缓慢。

认证

软件工程学院提供有关安全,流程改进和软件体系结构等特定主题的认证。 IBMMicrosoft和其他公司还赞助自己的认证考试。许多IT认证计划针对特定技术,并由这些技术的供应商管理。这些认证计划是针对雇用使用这些技术的人员的机构量身定制的。

通用软件工程技能的更广泛认证可通过各种专业社会获得。截至2006年, IEEE已认证了575多个软件专业人员作为认证的软件开发专业人员(CSDP)。 2008年,他们添加了一项入门级认证,称为认证软件开发助理(CSDA)。 ACM在1980年代初进行了专业认证计划,由于缺乏兴趣而停产。 ACM检查了1990年代后期对软件工程师进行专业认证的可能性,但最终认为这种认证不适用于软件工程专业工业实践。

在英国,英国计算机协会已经开发了一项合法认可的专业认证,称为Chartered IT专业人员(CITP) ,可用于完全合格的成员( MBC )。软件工程师可能有资格获得英国计算机协会工程和技术机构的会员资格,因此有资格通过这两个机构将特许工程师地位视为特许工程师。在加拿大,加拿大信息处理协会已经开发了一项具有法律认可的专业认证,称为信息系统专业人员(ISP) 。在加拿大安大略省,从加拿大工程认证委员会(CEAB)认可的计划毕业的软件工程师,成功完成PEO(安大略省的专业工程师)专业练习考试(PPE),并拥有至少48个月的可接受工程经验,有资格获得许可通过安大略省的专业工程师,可以成为专业工程师P.Eng。但是,PEO不认识任何在线或远程教育;尽管两者之间存在巨大的重叠,但并不认为计算机科学程序等于软件工程计划。这引发了争议和认证战争。它还持有该行业的P.Eng持有人的数量。该领域的绝大多数工作专业人员拥有CS,而不是SE学位。鉴于非SE学位持有人的艰难认证路径,大多数人永远不会费心寻求许可证。

全球化的影响

外包的最初影响以及国际人力资源在发展第三世界国家的相对较低的成本导致了从北美和欧洲的公司到印度以及后来的软件开发活动的大规模迁移:中国,俄罗斯和其他发展中国家。这种方法有一些缺陷,主要是距离 /时区差异,这阻止了客户与开发人员之间的人际关系以及大规模的工作转移。这对软件工程专业的许多方面产生了负面影响。例如,由于担心离岸外包(从其他国家进口软件产品或服务)和外国签证工人流离失所,因此发达国家的一些学生避免了与软件工程有关的教育。尽管统计数据目前没有对软件工程本身构成威胁;相关职业,计算机编程似乎确实受到了影响。然而,通过以下工作流巧妙地利用海上和近岸资源的能力提高了许多组织的整体运营能力。当北美人离开工作时,亚洲人刚刚到达工作。当亚洲人离开工作时,欧洲人将到达工作。这提供了每天24小时对业务关键流程进行监督的持续能力,而无需支付加班费或破坏关键的人力资源,睡眠模式。

尽管全球外包具有多个优势,但全球和通常分布的开发可能会遇到由于开发人员之间距离而造成的严重困难。这是由于这种类型的距离的关键要素已被确定为地理,时间,文化和交流(包括在不同位置使用不同语言和英语方言)。在过去的15年中,在全球软件开发领域进行了研究,并发表了广泛的相关工作,突出了与复杂活动相关的好处和问题。与软件工程研究的其他方面一样,在该和相关领域也在进行中。

奖品

软件工程领域有几个奖品:

批评

软件工程将其从业人员视为遵循定义明确的工程方法解决问题的个人。这些方法在各种软件工程书籍和研究论文中指定,始终具有可预测性,精度,可缓解风险和专业精神的含义。这种观点导致呼吁获得许可,认证和编纂的知识体,作为传播工程知识和成熟领域的机制。

软件工程扩展了工程,并藉鉴了工程模型,即工程过程,工程项目管理,工程要求,工程设计,工程构建和工程验证。这个概念是如此新,以至于很少被理解,并且被广泛误解,包括软件工程教科书,论文以及程序员和手工艺者的社区中。

软件工程中的核心问题之一是,其方法不够经验,因为通常不存在对方法的现实验证,或者非常有限,因此软件工程通常仅在“理论环境”中被误解为可行的。

当今软件开发中许多概念的创始人埃德斯格·迪克斯特(Edsger Dijkstra)拒绝了“软件工程”的想法,直到他在2002年去世,认为这些术语对他所谓的计算机科学的“激进新颖性”的类比很差:

这些现像中的许多现像以“软件工程”的名称捆绑在一起。由于经济学被称为“痛苦的科学”,因此软件工程应被称为“注定纪律”,注定要失败,因为它甚至无法实现其目标,因为其目标是自相矛盾的。当然,软件工程将自己表现为另一个值得的原因,但这是眼睛:如果您仔细阅读其文献并分析其奉献者的实际工作,您会发现软件工程已被接受为“如果不能不能编程,则如何进行编程。”

也可以看看

学习和实践

角色

专业方面