软件工程作为一门新兴学科,旨在成功构建大型软件系统,以在开发成本、时间、功能和性能等方面实现预期目标。为了达成这一目标,软件工程提出了工程化思想,从管理和技术两个方面引导软件开发。尽管目前软件工程并不能完全解决软件危机,但在软件开发和维护过程中,通过纠正一些错误观念和实践,采用实践中总结出的成功技术和方法,已经积极地提高了软件的生产率和成功率。同时,人们也认识到,软件生产过程在很多方面与传统工程相似,但具备独特的属性和问题。
最早给出软件工程定义的是IEEE(Institute of Electrical & Electronic Engineers,电气与电子工程师协会),其在1983年给出的定义是:软件工程是研究和应用如何以系统化的、规范的、可度量的方法去开发、运行和维护软件,即把工程化应用到软件上(段莎莉,2022)。
软件工程主要研究软件的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件成本、改进软件产品质量、提高软件生产率水平的目标。软件工程学从硬件工程和其他人类工程中吸收了许多成功的经验,明确提出了软件生命周期的模型,发展了许多软件开发与维护阶段适用的技术和方法,并应用于软件工程实践,取得良好的效果。
事实上,软件工程不等同于编译,重点在“工程”,软件工程就是用工程的方法和技巧,经验丰富的管理技巧,经济地创建高质量的软件,并有效地维护。这个领域涉及计算机科学的很多方面,但跟计算机科学有点不同,计算机科学偏向理论,而软件工程更注重实际的软件系统研制和开发。
软件是一种逻辑实体,比较抽象,所以很难看到它的进度和质量。因此,管理软件生产的过程特别重要。软件工程通过不断的实践和改进,形成了七条基本原则:
一是制定分阶段的生命周期计划来严格管理;二是每个阶段都要认真评审;三是对产品进行严格控制;四是采用现代的程序设计技术;五是每个阶段的结果都要认真审查;六是开发小组的人要少而精;七是不断改进软件工程实践(赵学军,2020)。
计算机科学与技术和软件工程是计算机领域的两个相关但不同的学科。它们之间的主要区别有以下几点:
首先,计算机科学与技术更注重计算机系统和理论的研究,比如算法、数据结构、计算理论等,以及计算机硬件和软件的设计与开发。简单来说,它更关注计算机底层的东西。
而软件工程则更注重软件开发的全过程,包括需求分析、设计、编码、测试、部署和维护等阶段。它更侧重在实际开发中需要做什么,比如怎么设计软件、怎么测试、怎么维护等等。
其次,计算机科学与技术可能更注重理论研究,比如算法和数据结构的基本概念,而软件工程则更注重实际开发中的方法论和工程原则,比如敏捷开发、瀑布模型等。
再次,计算机科学与技术出现得更早,起源于计算理论和数学。而软件工程是在计算机科学的基础上发展起来的,强调在大规模软件开发中的工程原则和实践。
最后,计算机科学与专业人员可能更多地涉及算法设计、计算理论、人工智能、计算机网络等方面的工作。而软件工程专业人员则更专注于软件开发的实际应用,包括需求分析、设计、编码、测试、维护等。
虽然两者之间有很多区别,但实际上它们之间有很多重叠和相互关联的地方。许多大学的计算机科学与技术课程中也包含了软件工程的内容,因为在工作中,计算机科学专业的人员通常需要具备一定的软件工程知识才能顺利完成项目。
软件工程属于工学门类下的一级学科,下设有软件工程理论与方法、软件工程技术、软件服务工程、领域软件工程等二级学科。
(一)软件工程理论与方法
软件工程理论与方法是软件工程中的一个关键学科,主攻研究软件开发的理论原理、方法技术以及管理实践。这一领域涵盖了多个主要研究方向:
首先,我们有软件开发方法论,专门探讨并制定适用于软件开发的方法论,其中包括传统的瀑布模型、敏捷开发和迭代开发等。这一领域的关注点在于如何有效组织和规划软件开发过程,以确保项目能够成功地按期交付。
其次,软件工程原理着眼于研究软件开发的基本原理,包括问题建模、需求分析、系统设计、编码和测试等方面的原理。这有助于深入理解软件开发过程中的基本概念和方法。
另外,软件体系结构方向关注研究软件系统的整体结构,包括模块化、组件化和架构设计等。一个合理的软件体系结构设计对确保系统的可维护性、可扩展性和性能至关重要。
在软件质量保障方面,研究如何确保软件产品的质量,包括测试方法、代码审查和性能优化等。这有助于减少软件中的缺陷,提高系统的稳定性和可靠性。
项目管理是另一个重要方向,专注于研究软件项目的管理理论和实践,包括项目计划、进度管理、团队协作和风险管理等。有效的项目管理对确保项目按时交付、在预算内完成至关重要。
此外,软件工程工具和环境方向致力于研究和开发支持软件开发过程的工具和环境,包括集成开发环境(IDE)、版本控制系统和项目管理工具等。
最后,软件工程教育方向研究软件工程教育的理论和方法,包括课程设置、教学方法和实践培训等,以培养出合格的软件工程师。
总体而言,软件工程理论与方法的核心目标在于提高软件开发过程的效率、质量和可维护性,使整个软件工程变得更加科学、规范和易于管理。
(二)软件工程技术
软件工程技术作为一个二级学科,主要研究软件工程领域中的具体技术和方法。在这个学科下,主要关注以下研究方向:
一方面,研究软件开发方法与工具,包括集成开发环境(IDE)、版本控制系统、自动化构建工具等,旨在提高开发效率和代码质量。
另一方面,关注程序设计与编码技术,追求优秀的程序设计原则和编码技术,以确保开发出结构良好、可维护、可扩展的软件系统。
此外,专注于软件测试与质量保障,研究软件测试方法、自动化测试工具以及质量保障策略,以确保软件产品的高质量和稳定性。
针对软件体系结构与设计模式,研究整体结构设计和常用设计模式,以支持系统的可维护性、可扩展性和性能优化。
涉及移动应用开发技术,包括iOS和Android平台的应用开发,着眼于移动应用的界面设计、性能优化和适配等方面的研究。
在网络与分布式系统方向,研究网络通信、分布式系统架构和技术,以支持分布式应用的开发和部署。关注大数据与云计算,研究大数据处理和云计算平台上的软件工程技术,包括大数据分析、云服务架构和应用开发等方面。致力于人机交互与用户体验,研究如何设计用户友好的软件界面,以提高用户体验和用户满意度。
关注安全与隐私保护,研究软件安全技术、密码学以及隐私保护方法,以确保软件系统的安全性和用户信息的隐私保护。
最后,研究敏捷开发与DevOps实践,促进快速交付、持续集成和持续部署。总体而言,该学科旨在推动软件开发过程的创新,提高软件系统的质量。
(三)软件服务工程
软件服务工程学科研究软件服务系统体系结构、软件服务业务过程、软件服务工程方法、软件服务运行支撑等方向。
(四)领域软件工程
领域软件工程在一些特色高校衍生出一些特色的研究方向。例如南昌工程学院的软件工程(水利信息化方向),我们来看看其主要课程设置,包括了水资源与可持续发展、程序设计基础(C 语言)、面向对象方法学(JAVA)、离散数学、数据结构与算法、软件工程导论、计算机组成与体系结构、操作系统、计算机网络、数据库原理、水文学原理、软件需求分析、软件构造技术、专业英语、软件质量保证与测试、软件项目管理、水资源规划与利用、软件设计与体系结构、人机交互的软件工程方法、工程经济学、水资源信息技术等。所以很多时候在特色鲜明的高校,其专业研究方向会非常鲜明。
领域软件工程是软件工程的一个分支,它集中精力在特定领域内的软件开发和管理。这项研究聚焦于几个核心方面:首先,它探索如何在特定领域中有效地进行需求分析,确保软件系统能够贴合该领域的独特需求和规范。其次,通过研究领域建模,我们努力建立与特定领域相关的模型,更好地理解和描述业务流程以及关键概念,为软件开发提供更精准的指导。此外,领域软件工程涉及设计和开发特定领域的编程语言(DSL),以简化和优化在该领域内的软件开发过程。它还关注于制定适用于特定领域的软件工程方法和实践,旨在提高在该领域内软件项目的成功率和效率。最后,研究领域软件架构,寻找在特定领域中构建高效、可维护和可扩展软件系统的最佳实践和架构模式。
这个独立学科之所以得以发展为一个二级学科,原因有几个方面。首先,它的专业性使其成为一个独立的实体,专注于特定领域的软件开发,要求研究者对该领域的专业知识有深入的理解。其次,随着技术的不断发展,不同领域对于个性化软件的需求日益增加,迫切需要专门针对这些领域进行深入研究的学科。此外,领域软件工程研究的方法和实践的独特性,不仅提高了软件开发的效率,还确保了软件系统在特定领域内的质量和适应性。最后,它在实践中逐渐形成了一系列独特的理论和方法,这种独立性促使了它成为一个独立的学科。
软件产业是信息产业的核心,也是信息社会的基础性、战略性产业,而软件工程专业是软件产业的支柱。软件工程可同金融产业、生物工程产业、工业制造业、机器人产业、大数据产业、物联网产业、软件测试产业等融合,来构建软件工程特色专业或方向,培养面向地方经济建设的应用型软件工程人才(沈海波,2018)。
软件工程需在实施过程中需要实行项目组负责体制,也需要明确的进度和质量管理(于晓蕾,2012),所以小博认为很多学习软件工程的学生其实可以辅修一些管理学,这对于自己的发展是很有好处的。
就具体就业方向来看,软件工程是一个广泛的领域,提供了多样的就业方向。
软件开发工程师,他们负责设计、编写、测试和维护应用程序,可能专注于特定的编程语言、平台或应用领域。
前端开发工程师关注用户界面和用户体验,利用HTML、CSS和JavaScript等技术创建网站或移动应用的前端。
后端开发工程师负责构建应用程序的服务器端,处理数据存储、业务逻辑和与前端的交互。
全栈开发工程师能够处理整个应用程序的开发,包括前端和后端的所有方面。
移动应用开发工程师专注于为移动设备创建应用程序。
软件测试工程师确保应用程序质量和稳定性,通过测试和调试来发现和修复缺陷。DevOps工程师通过整合开发和运维流程提高软件交付的效率和质量。数
据科学家/工程师使用统计学、机器学习和数据分析等技术解决问题并提取有价值信息。
人工智能工程师专注于开发和实施人工智能算法和模型,解决图像识别、语音识别和自然语言处理等问题。
网络安全工程师保护计算机系统、网络和数据免受未经授权的访问、破坏或泄露。软件架构师设计整体系统结构,确保系统具有良好的可扩展性、可维护性和性能。项目经理规划、执行和监控软件项目,确保项目按时交付,并符合预算和质量标准。
在选择就业方向时,个人兴趣、技能和行业需求都是重要考虑因素。随着技术的发展,新的就业方向也可能不断涌现。
软件工程现在有双一流学科的高校是北京大学、浙江大学、清华大学、北京航空航天大学、国防科技大学。
根据软科学科排名,软件工程学科排名前10的高校是华东师范大学、北航、清华、电子科技大学、北京大学、大连理工大学、南京大学、天津大学、国防科技大学和山东大学等高校。
南京大学软件工程实力强劲,其语言智能处理研究组(LIP)实力是很可以的。南京大学软件学院入选国家首批特色化示范性软件学院;
就其学习课程来看,南京大学软件学院的主要课程有:软件工程方法、系统软件、互联网+软件技术、数据科学、智能化软件、软件工程高级技术、嵌入式物联网等方向。主干课程:离散数学、计算系统基础、C语言程序设计基础、软件工程与计算(I、II、III)、数据结构与算法、计算机组织结构、C++高级程序设计、互联网计算、编译原理、计算机操作系统、计算机网络、数据管理基础、人机交互系统、需求与商业模式创新、软件系统设计、软件质量与管理等课程。
从就业来看,南大软件学院本硕就业率均为100%,这个还是很值得赞叹的,而且南大软件学院主要就业公司包括了华为、腾迅、阿里巴巴、字节跳动、美团、Microsoft、Paypal等著名IT企业。
就升学来看,南大软件学院升学高校是非常不错的,包括了卡耐基•梅隆大学、密歇根大学、普林斯顿大学、普渡大学、加州大学、印第安纳大学、马里兰大学、英国牛津大学、早稻田大学、香港科技大学等著名高校,这些高校在国际上都是很有名气的。
卡内基梅隆大学(Carnegie Mellon University)的软件工程专业在全球享有很高的声誉。该大学以其在计算机科学和工程领域的卓越研究和教育而闻名,软件工程是其中一个重要的方向。该大学在软件工程和计算机科学领域有着世界一流的研究团队,涉及各种前沿主题,包括软件工程方法学、软件架构、人机交互、人工智能等。
南大软件学院考研录取非常公平,因此吸引了很多学生前去报考,其考研科目包括了政治、英二、数二、842,其中842参考书目如下所示:
《数据结构(用面向对象方法与C++语言描述)》(第2版),清华大学出版社;
《Data Structures and Algorithm Analysis in Java》(3rd Edition),Pearson.;
《软件工程与计算:软件开发的技术基础》,骆斌主编、丁二玉、刘钦编著,机械工业出版社;
《软件工程》(最新版),伊恩·萨默维尔著,机械工业出版社;
《操作系统教程》(第5版),费翔林、骆斌编著,高等教育出版社;
《计算机网络》(第7版),谢希仁著,电子工业出版社。
当然,如果考研想报考一些双非高校,长沙理工大学、南京财经大学、华侨大学、武汉科技大学、北京联合大学、青岛大学、扬州大学等高校的软件工程都是不错的,性价比比较高,尤其是人文社科见长的南京财经大学,性价比很高。
然而,软件工程在人工智能领域的实践中所遭遇的挑战亦不容忽视。一方面,伴随着人工智能算法的日新月异,其日益增加的复杂性以及海量级别的数据需求给软件工程师带来了极高的挑战,他们需要具备更为深厚且专业的知识储备与技术实力来应对。另一方面,人工智能算法的广泛应用也催生了伦理和道德层面的诸多争议,这使得软件工程师及其开发团队在实现算法的过程中,必须对社会影响以及各利益相关方的权益予以足够的重视。
故此,软件工程在人工智能领域的实践与挑战相互促进,共同进步。唯有通过不懈的学习与进步,提升软件工程师们的技术修为与道德素养,方能确保人工智能算法的安全性、稳定性及可持续发展。
参考文献
葡萄城组编;梁瑞,刘艺彬,宁伟,胡耀编著. 低代码开发实战 基于低代码平台构建企业级应用[M]. 2022
段莎莉著,计算机软件开发与应用研究[M].吉林人民出版社,2021.02.
赵学军. 计算机技术与人工智能基础[M]. 北京邮电大学出版社, 2020 :115.
沈海波,周如旗,朱雄泳.新工科+工程教育认证背景下软件工程特色专业建设探索[J].软件工程,2018,21(03):57-59+30.
于晓蕾.浅析软件工程存在的问题及发展方向[J].电子世界,2012(10):82-83.
田秀梅.软件工程(水利信息化方向)专业建设的探索[J].才智,2011(34):281.