当前位置: 首页 > news >正文

软件工程概述知识点总结

一、软件工程的定义与核心目标

定义:软件工程是将系统的、规范的、可量化的方法应用于软件的开发、运行和维护,即 “用工程化手段解决软件问题”,工程化方法开发软件。

核心目标:在合理的成本范围内,开发出高质量、满足用户需求且可维护的软件

诞生背景

  • 20 世纪 60 年代末,为解决 “软件危机”(如成本超支、质量低下、进度拖延等问题),1968 年北约会议正式提出 “软件工程” 概念。
  • 对应题目
    • (1968)年北大西洋公约组织的计算机科学家在西德召开国际会议,讨论软件危机问题,正式提出‘软件工程’名词。”
    • “软件工程的出现主要是由于(软件危机的出现)。”
二、软件工程的发展历程
阶段时间范围关键事件 / 特点
萌芽期20 世纪 50-60 年代软件规模小,依赖个人编程技巧,无系统性方法;出现 “软件危机”(成本超支、进度延迟、质量差)。
结构化软件工程20 世纪 70-80 年代提出瀑布模型、结构化分析与设计方法(SA/SD),强调软件开发的工程化流程。
面向对象软件工程20 世纪 90 年代面向对象编程(OOP)普及,UML(统一建模语言)诞生,软件工程进入模块化设计阶段。
敏捷开发时代21 世纪初至今敏捷方法论(Scrum、XP)兴起,强调迭代开发、客户协作,适应快速变化的需求。
智能化与 DevOps2010 年后DevOps(开发 + 运维)融合、AI 辅助开发(如代码生成工具)、云计算驱动软件工程变革。
三、软件工程的核心要素与原则

1. 核心要素

  • 方法:解决软件开发问题的技术手段(如需求分析方法、设计模式)。
  • 工具:支持软件开发的工具链(如 IDE、版本控制工具 Git、测试工具 Jira)。
  • 过程:定义软件开发的流程和阶段(如需求→设计→实现→测试→部署)。

2. 核心原则

  • 模块化:将软件拆分为独立功能模块,降低耦合性(如 MVC 架构)。
  • 抽象化:提取共性特征,忽略细节(如面向对象中的类与接口)。
  • 分层设计:按功能划分为多层(如前端、业务逻辑层、数据层),层间通过接口交互。
  • 增量迭代:分阶段交付可运行版本,逐步完善功能(如敏捷开发的迭代周期)。
四、软件危机与软件生命周期
软件危机:

表现

  • 软件成本高、质量差、生产率低、维护困难。
  • 对应题目
    • “软件危机的主要表现是(软件产品质量低劣、软件生产率低下)。”

原因

  • 软件本身的复杂性(逻辑抽象、需求易变)。
  • 开发方法不当(如手工编程、缺乏规范)。
  • 管理不善(如文档缺失、团队协作低效)。
  • 对应题目
    • 判断题:“软件危机的产生原因之一是因为没有发明高级程序设计语言。”(答案:错,因为高级语言出现早于软件危机)
软件生命周期
  1. 定义:软件从定义、开发、运行到维护的全过程,分为三个时期:

    • 定义时期:问题定义、可行性研究、需求分析。
    • 开发时期:总体设计、详细设计、编码、测试。
    • 维护时期:改正性维护、适应性维护、完善性维护、预防性维护。
    • 对应题目
      • 单选题:“下列哪个时期不是软件生存期三个时期中的内容(计划时期)。”(答案:B)
      • 多选题:“软件生命周期分为三个时期,分别是(定义时期、开发时期、运行维护时期)。”(答案:ABD)
  2. 关键阶段

    • 可行性分析:确定项目是否值得做(对应题目:“以下哪个阶段确定项目是否值得去做(可行性分析)。” 答案:C)。
    • 需求分析:输出《需求规格说明书》(对应题目:“需求分析的结果是以(需求规格说明书)文档形式提交审核。” 答案:C)。
五、软件开发过程模型对比
模型核心特点适用场景优缺点
瀑布模型线性顺序执行(需求→设计→编码→测试→维护),阶段明确,文档驱动。需求明确、规模稳定的项目。优点:流程规范,便于管理;缺点:灵活性差,后期变更成本高。
敏捷开发(Scrum)以迭代(Sprint)为单位,短周期交付,强调团队协作与客户反馈。需求多变、需要快速响应的项目。优点:适应变化,交付效率高;缺点:文档较少,对团队协作要求高。
增量模型将软件拆分为多个增量模块,逐步开发与集成。需分阶段交付的大型项目。优点:早期可交付部分功能,降低风险;缺点:模块间集成复杂度高。
螺旋模型结合瀑布模型与风险分析,每轮迭代包含计划、风险评估、开发、评审。高风险、需求不确定的复杂项目。优点:注重风险控制;缺点:流程复杂,成本较高。
六、软件工程关键领域

1. 需求工程

  • 任务:收集、分析、定义用户需求,形成需求规格说明书(SRS)。
  • 方法:用户访谈、用例分析(Use Case)、原型法(低保真 / 高保真原型)。

2. 软件设计

  • 架构设计:确定系统整体结构(如单体架构、微服务架构)。
  • 详细设计:模块接口、数据结构、算法实现(如设计模式应用)。

3. 软件测试

  • 类型:单元测试(模块级)、集成测试(模块间交互)、系统测试(整体功能)、验收测试(用户验证)。
  • 方法:黑盒测试(功能验证)、白盒测试(代码逻辑覆盖)、自动化测试(Selenium、Junit)。

4. 软件维护

  • 类型:纠错性维护(修复缺陷)、适应性维护(兼容新环境)、完善性维护(新增功能)、预防性维护(优化代码)。
七、软件工程中的质量保证
  • ISO 9126 质量模型:功能性、可靠性、易用性、效率、可维护性、可移植性。
  • 常用工具:SonarQube(代码质量扫描)、Jira(缺陷跟踪)、Jenkins(持续集成)。
八、拓展:软件工程的最新趋势
  1. DevOps:开发与运维一体化,通过 CI/CD(持续集成 / 持续部署)缩短交付周期。
  2. AI 辅助开发:如 GitHub Copilot(AI 代码生成)、智能测试用例生成工具。
  3. 云原生开发:基于容器(Docker)、微服务、Kubernetes 构建弹性可扩展系统。
  4. 低代码 / 无代码开发:通过可视化界面快速搭建应用,降低开发门槛。
九、软件工程面临的挑战
  • 复杂性:大型系统(如分布式架构)的设计与协作难度高。
  • 需求变更:市场快速迭代导致需求频繁调整,需平衡灵活性与稳定性。
  • 技术更新:新兴技术(如 AI、区块链)对开发流程和技能的冲击。

通过以上框架,可全面覆盖软件工程的核心概念、发展脉络、方法论及实践要点,结合表格对比与趋势拓展,帮助理解其系统性与动态性。

http://www.lryc.cn/news/573123.html

相关文章:

  • (LeetCode ) 169. 多数元素(哈希表 || 二分查找)
  • python学智能算法(十五)|机器学习朴素贝叶斯方法进阶-CountVectorizer多文本处理
  • C++链表的虚拟头节点
  • Wire--编译时依赖注入工具
  • Java面试题025:一文深入了解数据库Redis(1)
  • 4.1 FFmpeg编译选项配置
  • 缓存与加速技术实践-Kafka消息队列
  • ARCGIS国土超级工具集1.6更新说明
  • 【RAG优化】深度解析开源项目MinerU:从PDF解析到多模态理解的工业级解决方案
  • Linux - 安装 git(sudo apt-get)
  • PostgreSQL/Hologres 外部服务器系统表 pg_foreign_server 详解
  • 基于 Flutter+Sqllite 实现大学个人课表助手 APP(期末作业)
  • 什么是RoCE网络技术
  • 飞书使用技巧 --- 飞书批量导入建群 (以导入名单的方式)
  • HTML5简介
  • 课程目录:腾讯混元3D × Unity3D全流程开发
  • word-spacing 属性
  • 文本分类与聚类:让信息“各归其位”的实用方法
  • 面试题-函数入参为interface类型进行约束
  • Python元组及字符串
  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • SQL Server基础语句2:表连接与集合操作、子查询与CET、高级查询
  • 服务发现与动态负载均衡的结合
  • 零基础学习Redis(12) -- Java连接redis服务器
  • c++26新功能—hive容器
  • gRPC 框架面试题精选及参考答案
  • SVN上传代码
  • 力扣1546. 和为目标值且不重叠的非空子数组的最大数目
  • 【09】设计并实现一套面向 Agent 任务规划的 DSL 语言
  • 针对机器人自修复材料的具体推荐及特性分析