乐于分享
好东西不私藏

【全民阅读】智能软件工程

【全民阅读】智能软件工程

高等学校软件工程专业系列教材——智能软件工程

扫描上方图片二维码查找系列全部教材~

图书信息

《智能软件工程

作者:朱少民、陶伊达

丛书名:高等学校软件工程专业系列教材

定价:79.80元

印次:1-2

ISBN: 9787302698722

出版日期:2025.9

责任编辑:黄芝

内容简介

《智能软件工程》是一部系统化阐述软件工程理论与实践的教材,紧扣智能化时代的软件研发需求,全面覆盖软件工程的核心内容与**发展趋势。全书以软件开发生命周期为主线,详细讲解了需求分析、系统设计、编码实现、测试与质量保障、运维与优化等关键环节,并结合人工智能(AI)、云计算等新兴技术,探讨了AI(特别是大模型、智能体等)技术在软件工程中的应用。通过理论与实践的结合,本书不仅帮助读者掌握传统软件工程的基本方法,还引导其理解如何利用大模型完成需求、设计、编程、测试、运维等工作,从而优化开发流程,显著地提升软件研发的效率与质量。

本书的主要特点在于其内容的前沿性与实用性。书中融入了目前先进的软件工程理念、优秀的科研成果和业界实践,并通过丰富的案例分析和实际操作,展示了AI技术如何赋能软件研发与管理。

读者对象

本书语言简洁流畅,结构清晰,既注重理论深度,又突出实践应用,适合高等院校软件工程、计算机科学及相关专业的学生作为教材使用,同时也为软件工程师、项目经理及技术管理人员提供了宝贵的参考资源。无论是初学者还是有经验的从业者,都能从中获得系统的理论与全方位的实践指导

编辑荐语

    本书系统化阐述软件工程理论与实践,紧扣智能化时代的软件工程学科的发展和研发需求,覆盖软件工程的核心内容与**发展趋势,并结合云计算、大模型等新兴技术,探讨AI在软件工程中的应用。强调问题驱动教学模式、“做中学”实践,教材内容系统、丰富,和工业界的技术实践保持一致。

    智能软件工程有声书

    软件工程诞生

    20世纪60年代是一个充满创新和挑战的时代,此时计算机科学正处在它的黄金发展期。然而,随着计算机硬件的飞速发展,软件开发却陷入了一场前所未有的危机。

    20世纪60年代初,软件开发的世界一片混沌,如布鲁克斯(FrederickP.Brooks)在《人月神话》一书中描述的软件开发场景———众多史前巨兽在焦油坑中痛苦地挣扎却无力摆脱场面,它们挣扎得越猛烈,焦油纠缠得就越紧。程序员们像一群在黑暗中摸索的探险者,没有指南针,没有地图,只能依靠直觉和经验来编写代码。他们面对的是复杂且不断膨胀的软件项目,这些项目常常超出预定的时间和预算,质量问题层出不穷,维护起来更是困难重重。

    随着时间的推移,这场危机开始显现出它真正的面目。项目延期、预算超支、软件质量低下,这些问题像瘟疫一样在软件开发领域蔓延。人们开始意识到,如果不采取行动,这场危机将会摧毁整个软件行业的未来。

    面对“软件危机”,人们调查研究了软件开发的实际情况,逐步认识到工程化的方法对软件系统的研发和维护的必要性。于是,一个转折点出现了。1968年,NATO(NorthAtlanticTreatyOrganization,北大西洋公约组织)在当时的联邦德国组织并召开了国际会议讨论软件危机问题。来自世界各地的软件领域的专家、科学家们聚集在一起分享他们的经验和见解,共同探讨,以获得问题的解决途径。他们开始借鉴传统工程领域(如土木工程、建筑工程等)的经验,试图将软件开发转变为一种更加系统化、可预测和可控的过程。在这次会议上,正式提出了“软件工程”(SoftwareEngineering,SE)这一术语,从此一门新的工程学科诞生了,并得以不断发展,逐渐成熟起来。

    软件工程的定义

    软件工程学科诞生后,人们为软件工程给出了不同的定义,例如,最早的定义是由F.L.Bauer给出的:软件工程是为了经济地获得能够在实际机器上高效运行的、可靠的软件而建立和应用一系列坚实的软件工程原则。而美国卡耐基·梅隆大学软件工程研究所(SEI)给出的定义则是:软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题。但目前普遍使用的软件工程定义是由IEEE给出的,更能准确地说明软件工程:软件工程是将系统的、规范化的、量化的方法应用于软件的开发、运行和维护之中。

    软件工程学科包含为完成软件需求、设计、构建、测试和维护所需的知识、方法和工具。

    软件工程不局限在理论之上,更重要的是在实践上,能够帮助软件组织协调团队、运用有限的资源,遵守已定义的软件工程规范,通过一系列可复用的、有效的方法,在规定的时间内达到预先设定的目标。针对软件工程的实施,无论是采用什么样的方法和工具,先进的软件工程思想始终是最重要的。只有在正确的工程思想指导下,才能制定正确的技术路线,才能正确地运用方法和工具达到软件工程或项目管理的既定目标。

    软件工程(SE)又是一门交叉性的工程学科,与“计算机科学”“数学”“工程科学”“管理

    科学”“应用领域业务知识与实践”有着深刻的联系。这些学科和知识领域在软件工程中起着不同的作用,共同塑造了软件工程的理论基础、实践方法和应用场景。

    从三个视角看软件工程

    (1)工程视角聚焦于软件系统的构建过程,强调运用系统、科学的方法来进行软件开发和维护。该视角形成了软件工程方法学,涵盖一系列开发模型(如瀑布模型、敏捷开发模型)、设计模式(如单例模式、工厂模式)以及各种技术流程。这些方法和模式为软件开发提供了系统的指导,帮助开发团队有条不紊地开展工作,提高开发效率和软件质量。例如,要求我们做好需求分析和定义之后才能进行设计,而在设计中,最好从总体设计、架构设计开始,逐步细化,完成模块、接口、UI的设计。

    (2)管理视角着重于对软件项目的整体规划、组织、协调和控制,以确保项目按时、按预算交付高质量的软件产品。从管理视角出发形成了软件工程管理学,涉及项目管理、资源管理、质量管理等多方面。项目管理确保项目按照预定计划推进,资源管理保障资源的合理分配和有效利用,如明确项目的目标和范围;制定项目计划,合理分配人力、物力和财力资源;质量管理则致力于提高软件产品的质量,满足用户的需求和期望,如持续集成、持续测试,及时发现问题并解决问题。在实际项目中,会运用到各种管理工具和技术,如甘特图用于项目进度管理,成本估算模型用于成本管理,以提高管理的效率和效果。

    (3)技术视角关注于支持软件工程活动的各种技术手段和工具。基于技术视角形成了软件开发技术、测试技术和运维技术等。软件开发技术涵盖了从编程技术、数据结构与算法、数据字典设计、软件架构设计到网络通信的各种技术实践;测试技术包括单元测试、集成测试、系统测试等多种测试方法,用于确保软件的质量;运维技术则涉及软件的部署、监控、维护和优化,保证软件在运行过程中的稳定性和可靠性。同时,技术视角还关注新兴技术的应用,如人工智能、机器学习、云计算等,为软件的创新和发展提供支持。

    软件工程方法学

    工程学是从科学中分离出来,以科学、数学和经验证据的形式将知识应用于结构、机器、材料、设备、系统、过程和组织之上,并实现这些对象的创新、设计、构造、操作和维护。工程学将研究注意力集中在工程方法上,即如何低成本、高效地实现所要求的目标。工程学科涵盖了广泛的更专业的工程领域(如化学工程、土木工程、电气工程、机械工程等),每个领域都

    特别强调应用数学、应用科学和应用类型的特定领域知识。

    软件工程方法学实际上是研究软件开发和维护过程中有效的系统方法,确定软件开发 的各个阶段,规定每一阶段的活动、产品、验收的步骤和完成准则。 

    •软件方法学实际上就是研究在软件工程中可以采用的软件研发和运维的方法、技术 和工具,即完成软件构建和维护所需要的有效方法和技术。在应用方法和技术过程中,自然会使用一定的工具来完成相应的任务,使用软件工具会避免因人而异的理 解或对方法的误理解偏差,使用工具会更有效地采用方法,提高软件设计的质量和 软件生产效率,降低软件开发、维护的成本。 

    •软件方法学离不开软件过程(如开发流程)。首先,实现软件过程的定义、监控、管理 和改进,也就是规定完成软件开发和维护过程中各个阶段性任务的内容、实施步骤、 启动条件和完成准则。其次,过程问题,不仅表现为过程本身的问题,而且常常表现 为方法的问题或工具的问题。 

    •软件开发环境是方法和工具的结合,或者说是基于合适的软件开发模型建立的、一 组相关的软件工具集合,以支持一定的软件开发方法的实施。

    软件工程管理学

    软件工程管理学,通过对软件开发各阶段的活动进行管理,以确保软件开发或维护项目在预定的时间和预算内完成,并满足高质量的要求。软件工程管理的任务是有效地组织人员和资源,采取适当的方法和技术,并利用有效的工具来完成预定的软件开发和维护任务。软件工程管理的内容包括软件计划管理、成本管理、人员组织、配置管理等。

    •计划管理。对任何工程项目,都是计划先行,事先要了解软件项目的需求和工作范围,然后对工作量进行预估,完成进度安排和人员调度,识别风险。

    •成本管理。在软件开发和维护过程中,肯定会发生费用,包含开发人员的薪酬、软硬件设备购买和维护费用、开发环境的支撑费用以及日常运行的其他各项支出。这种费用就是软件项目的成本。作为软件企业就要考虑如何控制成本、降低成本,期望以较少的投入获得最佳的收益。软件开发是一项知识密集型的工作,人员成本是最主要的成本之一,所以在成本管理中,重点应放在人力资源的管理上,包括如何缩短开发周期,以及如何提高软件自身的使用周期。

    •人员组织。软件开发是靠软件团队共同完成,而且不同的人员在软件活动中会承担不同的责任和任务,所以需要定义不同的角色,协调团队成员之间的关系,促进团队之间的配合,有效地实现人员的组织和管理。

    •软件配置管理。软件配置管理就是在系统的整个开发、运行和维护过程中定义配置项,建立其基准线,从而可以控制各个配置项的状态和变更,验证配置项的完整性和正确性。

    •质量管理是指确定质量方针、目标和职责,并通过质量体系中的质量策划、质量控制、质量保证和质量改进来使其实现的所有管理职能的全部活动,包括技术评审、软件测试、缺陷跟踪、过程检查和过程改进等。

    •软件度量。随着软件系统的规模、复杂度等的不断增加,有效的软件管理的需求也相应地增加。度量可以帮助我们更好地了解产品状况,发现产品的潜在问题,从而进行更有效的管理。

    软件工程要素

    我们知道,软件工程的活动是智力活动,在其过程中,始终要强调以人为本,人的因素是 非常重要的因素,包括个人的能力、团队的能力和组织的管理水平。软件工程在人员管理上 和传统的工程学相距甚远。 软件工程涉及面很广,例如,从软件项目管理看,自然涉及人员与组织、成本、风险、软件 配置项、基线、质量等要素。从软件技术本身看,会涉及设计模式、编程语言、开发平台、网 络、通用组件、中间件、接口、数据库、人机界面、服务器、客户端等要素。如果抛开一些具体 的因素,则主要考虑的因素有软件质量、标准、过程、方法、技术、工具、团队等。在过去,人们 常常强调软件工程的三要素,即流程、方法和工具。 

    (1)软件工程首先要建立流程,有了清晰的流程,就可以很好地控制软件开发和维护的 整个过程。软件流程可以定义软件整个生命周期所有进行的活动和受到的相应约束。 

    (2)流程确定之后,方法就显得重要,流程的实施需要借助方法,或者说,软件工程方法 为软件开发提供了“如何做”的技术。方法可以分为需求建模方法、需求分析方法、设计方 法、编程方法、测试方法等。 

    (3)软件工具为软件工程方法提供了自动的或半自动的实现手段,甚至为软件开发和 维护构造一个有机的支撑环境。软件工程的过程则是将软件工程的方法和工具综合起来以 达到合理、及时地进行计算机软件开发的目的。

    精彩样章试读

    向上滑动阅览

    本书目录

    向上滑动阅览

    目录

    案例文档等

    电子材料

    第1章什么是软件工程

    1.1软件工程诞生

    1.1.1软件工程的定义

    1.1.2从三个视角看软件工程

    1.1.3软件工程方法学

    1.1.4软件工程管理学

    1.1.5软件工程要素

    1.1.6软件工程的基本思想

    1.1.7软件工程知识体系SWEBOK

    1.2软件工程1.0

    1.2.1瀑布模型的不足

    1.2.2V模型诠释软件过程

    1.3软件工程2.0

    1.3.1敏捷开发历史

    1.3.2敏捷开发原则

    1.3.3极限编程

    1.3.4行为驱动开发

    1.3.5Scrum开发框架

    1.3.6软件即服务

    1.4软件工程3.0

    1.4.1软件工程3.0的特征

    1.4.2软件工程三个时代的比较

    小结

    思考题

    参考文献

    第2章过去我们是如何开发软件的

    2.1软件研发的三种基本思维

    2.1.1产品思维

    2.1.2项目思维

    2.1.3工程思维

    2.2软件工程中的主要活动

    2.2.1产品定义

    2.2.2需求定义

    2.2.3设计

    2.2.4编程

    2.2.5测试

    2.2.6部署与运维

    2.3开源软件运动

    2.4精益开发

    2.4.1看板

    2.4.2精益软件开发实践

    2.5开发与运维的融合: DevOps

    2.5.1DevOps的概念及其工具链

    2.5.2经典案例: 凤凰项目

    思考题

    参考文献

    第3章如何定义好的软件需求

    3.1软件需求工程概要

    3.2软件有哪些需求

    3.2.1业务需求

    3.2.2用户角色需求

    3.2.3系统的功能需求

    3.2.4系统非功能性需求

    3.2.5其他需求类型

    3.3真实需求的获取

    3.3.1需求获取的过程

    3.3.2传统的需求获取方法

    3.3.3针对新产品的其他方法

    3.3.4针对已有产品的其他方法

    3.3.5智能需求获取方法

    3.4智能需求分析与定义

    3.4.1去伪存真

    3.4.2结构化分析方法

    3.4.3面向对象的分析方法

    3.4.4面向敏捷的分析方法

    3.4.5场景分析方法

    3.5需求评审

    3.5.1如何确定传统软件需求的评审标准

    3.5.2如何评审敏捷需求——用户故事

    3.5.3智能需求评审

    3.6需求跟踪与变更管理

    3.6.1需求跟踪

    3.6.2需求变更管理

    3.7业务架构

    3.7.1业务架构的价值与构建

    3.7.2业务架构的框架与工具

    小结

    思考题

    参考文献

    第4章如何设计软件

    4.1软件设计的基本原则

    4.1.1抽象与精化

    4.1.2模块化

    4.1.3信息隐藏

    4.1.4关注点分离

    4.1.5面向对象设计

    4.1.6智能问答: 让设计原则不再高冷 

    4.2软件系统架构设计

    4.2.1单体架构

    4.2.2分布式架构

    4.2.3面向服务的架构

    4.2.4微服务架构

    4.2.5无服务架构

    4.3微服务架构设计

    4.3.1如何定义“服务”

    4.3.2如何实现服务间的沟通

    4.3.3REST与消息机制

    4.3.4AI辅助的软件架构设计

    4.3.5最佳实践

    4.4接口设计

    4.4.1设计维度

    4.4.2设计原则

    4.4.3案例研究: 使用Cursor辅助的接口设计

    4.5UI设计

    4.5.1视觉

    4.5.2交互

    4.5.3原型

    4.5.4智能化工具

    4.6数据设计

    4.6.1数据组织

    4.6.2数据存储

    4.6.3AI辅助的数据设计

    小结

    思考题

    参考文献

    第5章如何高效地进行软件开发

    5.1AI辅助编程

    5.1.1代码实现

    5.1.2代码理解

    5.1.3代码调试

    5.1.4代码可维护性

    5.2软件构建

    5.2.1编译和构建

    5.2.2构建系统类型

    5.2.3软件包管理

    5.2.4依赖管理

    5.2.5最佳实践

    5.2.6Dependabot与智能构建

    5.3软件文档

    5.3.1读者类型

    5.3.2文档类型

    5.3.3文档的重要性

    5.3.4编写高质量文档的挑战

    5.3.5最佳实践: 文档即代码

    5.3.6AI文档生成

    5.4代码审查

    5.4.1关键要素

    5.4.2工作流程

    5.4.3自动化与智能化

    小结

    思考题

    参考文献

    第6章如何保障软件质量

    6.1深入理解软件质量

    6.1.1什么是质量

    6.1.2软件质量属性

    6.1.3软件缺陷: 质量的对立面

    6.2软件质量工程体系

    6.2.1传统的质量管理体系

    6.2.2构建软件质量工程体系

    6.2.3根据上下文定制SQES

    6.3软件测试目标、原则和类型

    6.3.1软件测试目标

    6.3.2软件测试的分类

    6.3.3测试的原则

    6.4智能测试分析与计划

    6.4.1LLM驱动测试需求分析

    6.4.2生成测试计划书

    6.5智能测试设计与开发

    6.5.1智能测试方法概述

    6.5.2基于测试需求文档生成测试用例

    6.5.3基于业务流程图生成E2E测试用例

    6.5.4测试用例的复审

    6.5.5生成功能测试脚本

    6.5.6生成API测试脚本

    6.6LLM驱动非功能性测试

    6.6.1LLM驱动性能测试

    6.6.2LLM驱动安全性测试

    6.7智能测试评估

    6.7.1智能缺陷定位

    6.7.2评估测试覆盖率

    6.7.3测试报告生成

    小结

    思考题

    参考文献

    第7章如何实现持续集成与持续交付

    7.1持续交付

    7.1.1软件交付概述

    7.1.2软件交付的反模式

    7.1.3持续交付的理念

    7.2持续集成

    7.2.1过程与方法

    7.2.2最佳实践

    7.2.3智能化持续集成

    7.3持续测试

    7.3.1测试的分类

    7.3.2与持续交付集成的持续测试策略

    7.4部署与发布

    7.4.1自动化部署

    7.4.2低风险发布

    7.5部署流水线

    7.5.1执行流程解析

    7.5.2定制的部署流水线

    7.5.3部署流水线平台与工具链

    7.6云原生的CI/CD

    7.6.1“云原生”概念

    7.6.2搭建云原生的CI/CD工作流

    7.6.3智能云

    7.7智能化应用的CI/CD

    7.7.1机器学习模型

    7.7.2基于LLM的软件应用

    小结

    思考题

    参考文献

    第8章下一个版本如何开始

    8.1软件维护

    8.1.1软件维护的类型

    8.1.2可维护性指标

    8.1.3软件腐化

    8.1.4代码重构

    8.1.5智能维护和升级

    8.2软件演化

    8.2.1遗留系统

    8.2.2风险与挑战

    8.2.3遗留系统管理策略

    8.2.4现代化与再工程

    8.2.5架构重构

    8.2.6弃用

    8.3向智能化软件演进

    8.3.1任务智能化

    8.3.2功能智能化

    8.3.3过程智能化

    小结

    思考题

    参考文献

    第9章如何更好地支持系统运维

    9.1基础设施维护与验证

    9.1.1基础设施即代码

    9.1.2对基础设施进行验证

    9.1.3系统运维工具

    9.2A/B测试

    9.2.1A/B测试设计

    9.2.2A/B测试平台与测试执行

    9.2.3关于用户体验度量

    9.3监控告警系统

    9.3.1日志分析及Elastic Stack的使用

    9.3.2调用链分析及Skywalking的使用

    9.3.3指标监控及Prometheus的使用

    9.3.4监控系统解决方案

    9.4安全性监控

    9.4.1安全监控与审计框架

    9.4.2智能安全监控

    9.5智能运维

    9.5.1从自动化运维到智能运维

    9.5.2智能运维的典型场景

    小结

    思考题

    参考文献

    第10章智能化浪潮下软件工程的未来

    10.1现状

    10.1.1需求

    10.1.2设计

    10.1.3实现

    10.1.4质量管理

    10.1.5维护与演化

    10.2挑战

    10.2.1大模型在软件工程任务上的局限性

    10.2.2计算资源与基础设施

    10.3未来

    10.3.1自然的人机交互

    10.3.2端到端工作流

    10.3.3隔离环境

    10.3.4自学习与自适应

    小结

    思考题

    参考文献

    附录实验