软件工程

✍ dations ◷ 2025-04-03 11:46:03 #软件工程
软件工程(英语:software engineering),是软件开发领域里对工程方法的系统应用。1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。其后的几十年里,各种有关软件工程的技术、思想、方法和概念不断被提出,软件工程逐步发展为一门独立的科学。1993年,电气电子工程师学会(IEEE)给出了一个更加综合的定义:"将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中"。此后,IEEE多次给出软件工程的定义。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件、嵌入式系统、人机界面、办公包、操作系统、网页、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,提高人们的工作效率,同时提升了生活质量。软件工程师是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为系统分析师、系统架构师、前端和后端工程师、程序员、测试工程师、用户界面设计师等等。各种软件工程师人们俗称程序员。软件工程包括两种构面:软件开发技术和软件项目管理。1970年代和1980年代的软件危机。在那个时代,许多软件最后都得到了一个悲惨的结局,软件项目开发时间大大超出了规划的时间表。一些项目导致了财产的流失,甚至某些软件导致了人员伤亡。同时软件开发人员也发现软件开发的难度越来越大。在软件工程界被大量引用的案例是Therac-25的意外:在1985年六月到1987年一月之间,六个已知的医疗事故来自于Therac-25错误地超过剂量,导致患者死亡或严重辐射灼伤。鉴于软件开发时所遭遇困境,北大西洋公约组织(NATO)在1968年举办了首次软件工程学术会议,并于会中提出“软件工程”来界定软件开发所需相关知识,并建议“软件开发应该是类似工程的活动”。软件工程自1968年正式提出至今,这段时间累积了大量的研究成果,广泛地进行大量的技术实践,借由学术界和产业界的共同努力,软件工程正逐渐发展成为一门专业学科。关于软件工程的定义,在GB/T11457-2006《信息技术 软件工程术语》中将其定义为"应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、和维护的工程或进行研究的学科"。包括:ACM与IEEE Computer Society联合修定的SWEBOK(Software Engineering Body of Knowledge)提到,软件工程领域中的核心知识包括:软件的开发到底是一门科学还是一门工程,这是一个被争论了很久的问题。实际上,软件开发兼有两者的特点。但是这并不意味着它们可以被互相混淆。很多人认为软件工程基于计算机科学和信息科学就如传统意义上的工程学之于物理和化学一样。在美国,大约40%的软件工程师具有计算机科学的学位。在世界其他地方,这个比例也差不多。他们并不一定会每天使用计算机科学方面的知识,但是他们每天都会使用软件工程方面的知识。例如Peter McBreen认为,软件工程意味着更高程度的严谨性与经过验证的流程,并不适合现阶段各类型的软件开发。Peter McBreen在著作《Software Craftsmanship: The New Imperative》提出了所谓“craftsmanship”的说法,认为现阶段软件开发成功的关键因素,是开发者的技能,而不是“manufacturing”软件的流程。Capers Jones曾对美国软件组织的绩效做过评估,所得到结论是:软件工程的专业分工不足,是造成质量低落、时程延误、预算超支的最关键因素。2003年,The Standish Group年度报告指出,在他们调查的13522个项目中,有66%的软件项目失败、82%超出时程、48%推出时缺乏必需的功能,总计约550亿美元浪费在不良的项目、预算或软件估算上。在1986年,IBM大型机之父佛瑞德·布鲁克斯发表了他的著名论文《没有银弹》,在这篇著名的论文中他断言:“在10年内无法找到解决软件危机的灵丹妙药”。从软件危机被提出以来。人们一直在查找解决它的方法。于是一系列的方法被提出并且加以应用。比如结构化程序设计,面向对象的开发,CMM,UML等等。佛瑞德·布鲁克斯著名作品还有《人月神话》。布鲁克斯在《人月神话:软件项目管理之道(The Mythical Man-Month)》提到,将没有灵丹妙药(silver bullet)可以一蹴而就,开发软件的困难是内生的,只能渐进式的改善。整体环境没有改变以前,唯一可能的解,是依靠人的素质,培养优秀的工程师。软件工程存在于各种应用中,存在于软件开发的各个方面。而程序设计通常包含了程序设计和编码的反复迭代的过程,它是软件开发的一个阶段。软件工程力图对软件项目的各个方面作出指导,从软件的可行性分析直到软件完成以后的维护工作。软件工程认为软件开发与各种市场活动密切相关。比如软件的销售,用户培训,与之相关的软件和硬件安装等。软件工程的方法学认为一个独立的程序员不应当脱离团队而进行开发,同时程序的编写不能够脱离软件的需求,设计,以及客户的利益。软件工程的发展是计算机程序设计工业化的体现。软件开发过程是随着开发技术的演化而随之改进的。从早期的瀑布式(Waterfall)的开发模型到后来出现的螺旋式的迭代(Spiral)开发,以致最近开始兴起的敏捷软件开发(Agile),他们展示出了在不同的时代软件产业对于开发过程的不同的认识,以及对于不同类型项目的理解方法。注意区分软件开发过程和软件过程改进之间的重要区别。诸如像ISO 15504, ISO 9000, CMM, CMMI这样的名词阐述的是一些软件过程改进框架,他们提供了一系列的标准和策略来指导软件组织如何提升软件开发过程的质量、软件组织的能力,而不是给出具体的开发过程的定义。软件工程的方法有很多方面的意义。包括项目管理,分析,设计,程序的编写,测试和质量控制。软件设计方法可以区别为重量级的方法和轻量级的方法。重量级的方法中产生大量的正式文档。著名的重量级开发方法包括ISO 9000,CMM,和统一软件开发过程(RUP)。轻量级的开发过程没有对大量正式文档的要求。著名的轻量级开发方法包括极限编程(XP)和敏捷过程(Agile Processes)。根据《新方法学》这篇文章的说法,重量级方法呈现的是一种“防御型”的姿态。在应用“重量级方法”的软件组织中,由于软件项目经理不参与或者很少参与程序设计,无法从细节上把握项目进度,因而会对项目产生“恐惧感”,不得不要求程序员不断撰写很多“软件开发文档”。而轻量级方法则呈现“进攻型”的姿态,这一点从XP方法特别强调的四个准则—“沟通、简单、反馈和勇气”上有所体现。当前有一些人认为,“重量级方法”适合于大型的软件团队(数十人以上)使用,而“轻量级方法”适合小型的软件团队(几人、十几人)使用。当然,关于重量级方法和轻量级方法的优劣存在很多争论,而各种方法也在不断进化中。一些方法论者认为人们在开发中应当严格遵循并且实施这些方法。但是一些人并不具有实施这些方法的条件。实际上,采用何种方法开发软件取决于很多因素,同时受到环境的制约。“敏捷开发”(Agile Development)被认为是软件工程的一个重要的发展。它强调软件开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。敏捷开发被认为是一种“轻量级”的方法。在轻量级方法中最负盛名的应该是“极限编程”(Extreme Programming,简称为XP)。而与轻量级方法相对应的是“重量级方法”的存在。重量级方法强调以开发过程为中心,而不是以人为中心。重量级方法的例子比如CMM/PSP/TSP。面向方面的程序设计(Aspect Oriented Programming,简称AOP)被认为是近年来软件工程的另外一个重要发展。这里的方面指的是完成一个功能的对象和函数的集合。在这一方面相关的内容有泛型编程(Generic Programming)和模板。系统工程师主要处理系统的整体需求和设计,包括硬件与人力问题。(中文)(英文)

相关

  • 细胞毒性细胞毒性(英语:Cytotoxicity)是指细胞受到释放出的有毒物质而引起的细胞毒性反应。化疗药物具有细胞毒性,一旦进入体内,能区分哪些是癌细胞和正常细胞,达到了杀癌细胞,保护正常细胞
  • 转化医学转译医学(translational medicine, 又称转化医学)是指将基础医学的研究,能够直接和临床治疗上连结的一个新的思维。最早由美国国家卫生研究院(National Institute of Health, NI
  • 脑膜炎双球菌脑膜炎双球菌(学名Neisseria meningitidis),又名脑膜炎奈瑟菌或脑脊髓膜炎双球菌,简称为脑膜炎球菌,是一种革兰氏阴性菌,因其所导致的脑膜炎而闻名,亦会造成脑膜炎球菌血症(一种致
  • 医疗照顾相关感染医疗照顾相关感染(英语:health care–associated infection(HAI or HCAI)),旧称院内感染(nosocomial infection)、医院感染或医院获得性感染(hospital-acquired infection(HAI))是指在医
  • 坏死性筋膜炎坏死性筋膜炎(英文:Necrotizing fasciitis)又称食肉菌感染或噬肉菌感染,是身体内软组织坏死导致的感染疾病,是会突然发病并且快速散播的严重疾病,症状包含在感染部位皮肤呈现红色
  • 学名二名法(英语:Binomial Nomenclature,Binominal Nomenclature 或 Binary Nomenclature),又称双名法,依照生物学上对生物种类的命名规则,所给定的学名之形式,自林奈《植物种志》(1753
  • 乔治主义乔治主义是一种经济意识形态,由亨利·乔治提出。乔治主义的观点是每个人拥有他们所创造的东西,但是所有由自然而来的东西,尤其是土地,都属于全人类共有。乔治主义通常与对土地的
  • 胸肌胸大肌为将手臂拉向胸部的肌肉,两块胸大肌位于胸的两侧。胸大肌通常称为胸肌或胸脯,成扇型,且分裂为大小不等两部分。在其窄端,两部分都附着于肱骨之上,在宽的一端,较小的部分附于
  • 波罗的语族波罗的语族是印欧语系下的一族语言,使用地区处于北欧波罗的海沿岸。共分两支:“西波罗的语支”(其下语言已全部灭亡)和“东波罗的语支”(目前仍在使用的此族语言都在其中)。虽同属
  • 篆书陶文 ‧ 甲骨文 ‧ 金文 ‧ 古文 ‧ 石鼓文籀文 ‧ 鸟虫书 ‧ 篆书(大篆 ‧  小篆)隶书 ‧ 楷书 ‧ 行书 ‧ 草书漆书 ‧  书法 ‧ 飞白书笔画 ‧