软件工程

软件工程概述

  • 软件的概念、特点
  • 特点:

    • 复杂性;退化性;制约性(受计算机系统)。
    • 抽象性;人工性;社会性。
    • 无明显制造性;昂贵性。
  • 软件工程的概念、要素、目标、原则

  • 概念:借鉴传统工程师的原则和方法,以...(用目的去补充)为目的,指导软件开发和维护的工程学科。
  • 三要素:过程、方法、工具
  • 目标(三高两低):达到要求的功能,高性能,高质量,低成本,低维护
  • 原则:(两严格一少而精)
    • 以分阶段的生命周期计划来严格进行项目管理
    • 严格产品控制
    • 开发小组人员应该少而精
  • 敏捷软件开发的概念
  • 轻量级的软件工程方法,它更强调开发过程中各种变化的必然性,主张通过团队协作响应变化

  • 软件危机的概念

  • 概念:泛指软件开发和维护中遇到的一系列问题

软件过程

  • 软件过程的概念、模型
  • 概念:软件的诞生和生命周期是一个过程,这个过程叫软件过程
  • 模型:瀑布模型、喷泉模型、演化模型(原型+增量+螺旋)、基于组件的开发模型、形式化方法模型
  • 软件生命周期的概念、阶段
  • 概念:不用背,拿阶段凑即可(经过...的一个周期,叫软件生命周期)
  • 阶段:可行性研究、需求分析、软件设计、编码、软件测试、软件维护(大概是后几章标题)

可行性研究

  • 可行性的概念
  • 可行性:主要从经济、技术等方面分析所给出的解决方案是否可行,能否在规定的资源和时间的约束下完成。
  • 技术可行性:主要研究待开发的系统功能性能限制条件,技术能否实现,其技术风险
  • 经济可行性:对成本-效益或投资-效益的分析
  • 成本估算方法:COCOMO模型、三点估算、类比估算等。

需求分析与结构化分析

  • 计算机需求工程的概念
  • 概念:涉及需求的获取、分析规格说明、验证,确保需求得到准确实现

  • 需求分析的概念、任务、原则

  • 概念收集和分析用户需求,以明确软件系统应具备的功能和约束条件
  • 任务
    • 建模阶段,即建立起系统的分析模型
    • 描述阶段,即需求文档化
  • 结构化分析的模型
  • 数据字典、数据流图、E-R图、状态转换图
  • 数据流图的符号
  • 外部实体、数据流、数据变换、数据存储

软件体系结构(软件设计)

  • 分布式系统结构:多处理器、C/S等

  • 体系结构框架:MVC、MVP、J2EE等

面向对象方法与分析与设计(软件设计)

  • 面向对象方法的优势、步骤
  • 优势:符合人类思维习惯;稳定性好;可重用性好。
  • 步骤:面向对象分析,面向对象设计,面向对象实现,面向对象测试。

  • 面向对象分析的步骤

  • 步骤:确定问题域;确定类与对象;确定的关系、区分整体对象;定义属性;定义服务;确定附加约束。

  • 具体步骤:找到用例参与者;确定系统的所有用例;识别目标系统的类与对象;分析之间的关系;用模型图表示。

  • 面向对象设计的原则、步骤

  • 耦合性:主要指对象之间的耦合。

  • 内聚性:低耦合往往意味着高内聚,高内聚有利提高系统独立性。

  • 原则:模块化、低复用性;抽象化、信息隐藏;低耦合、高内聚。

  • 步骤:建立软件体系结构环境图;软件体系结构设计;子系统设计;对象设计和优化。

软件实现(编码)

  • 软件界面设计的概念
  • 概念:确定用户与软件交互的方式。

  • 软件设计风格的概念

  • 概念:指源程序的书写习惯。具有良好的风格和规范可以使程序有较强的可读性、可维护性提高团队效率

软件测试

  • 软件测试的概念、原则、步骤
  • 概念:是发现软件中错误和缺陷的主要手段。为了保证软件质量,开发人员通过软件测试发现软件中存在的问题,并及时修改。
  • 原则:无法完全测试;测试存在风险;测试只能表明存在缺陷。
  • 步骤:测试计划、测试设计、测试执行、缺陷跟踪、测试评估。
  • 白盒测试与黑盒测试的概念、比较
  • 白盒测试概念:把测试对象看作一个透明盒子根据程序内部信息设计测试用例,检查程序逻辑是否正确工作
  • 黑盒测试概念:把测试对象看作一个黑盒子不考虑程序内部,只检查程序功能是否符合需求
  • 比较:
    1. 结构:白盒考虑内部结构,黑盒不考虑。
    2. 测试用例:白盒用内部逻辑结构来生成测试用例,黑盒用软件规格说明书。
    3. 适用:白盒使用系统测试、集成测试,黑盒都适用。
    4. 覆盖:白盒能测试所有逻辑路径,黑盒不能。
  • 测试的概念:
  • 单元:检测代码的某单元功能是否正确。
  • 集成:是多个单元的聚合。多个单元组合成模块,多个模块组合成程序的更大部分。
  • 压力:通过施加高负载来测试系统稳定性和性能
  • 系统:略。
  • 验收:在系统测试之后的测试。验证新建系统是否满足用户需要。

软件维护

  • 软件维护的概念、步骤
  • 概念:概括地说,在软件交付后,为了改正缺陷改进性能补充功能所进行的软件修改。
  • 步骤:
    • 建立维护机构;
    • 用户提出申请(申请维护);维护人员确认维护类型并维护(确认维护+进行维护);
    • 整理维护记录并评审维护工作;评价维护工作。
  • 提高可维护性的措施
  • 建立明确的质量目标和优先级
  • 建立完整文档
  • 采用先进维护工具
  • 注重可维护性的评审环节
  • 软件再工程(重构、正向工程、逆向工程)的概念
  • 重构:在不改变外部的情况下,改善内部,以提高可维护性和性能

画图

数据流图

  • 外部实体:方框
  • 存储文件:平行线
  • 操作:圆形
  • 数据流向:箭头

image-20250103155548914

UML类图

  • 类名
  • 类属性
  • 类方法
  • 可见性符号:放在属性、方法前,-表示private,+表示public,#表示protected,~表示default
  • 子类
  • 与普通类一致
  • 抽象类
  • 类名放在<<>>中
  • 与普通类一致
  • 依赖关系
  • 类的继承:子类->父类
  • 类的组合:子类-<>父类(实心菱形)(父类没了,那子类也会没有)
  • 非依赖关系

  • 类的关联:类a--类b(实线)(比如人会吃肉,人类--肉类,人类和肉类没有依赖关系)

  • 类的聚合:类b-<>类a(比如动物园里有乌龟)

UML状态图

  • 状态符号
  • 分支符号与[]

image-20250105233603721

UML活动图

  • 非泳道图
  • 状态、分支、并行、合并

image-20250105233727225

image-20250105233653322

  • 泳道图

image-20250105233827969

image-20250105233857109

UML用例图

  • 主要参与者、次要参与者
  • 用例
  • 关系:包含(A->B,虚线)、扩展(A<-B,实线)、泛化(就是实例化类对象的意思)

image-20250105234615446

image-20250105234646097

UML时序图

  • 生命线
  • 请求箭头(实线)与响应箭头(虚线)
  • 选择框