您现在的位置是:首页 >其他 >软考高级-软件系统架构师-02-软件工程(重点)网站首页其他

软考高级-软件系统架构师-02-软件工程(重点)

Azoner 2025-02-15 12:01:04
简介软考高级-软件系统架构师-02-软件工程(重点)

用工程化的思想做软件

一、软件开发方法(/原则)

  1. 软件开发方法(重点)

    1. 结构化法(面向过程/函数) C

      1. 概念
        1. 用户至上
        2. 严格区分工作阶段,每个阶段有各自的任务和成果
        3. 强调系统开发的整体性和全局性
        4. 系统开发工程化,文档标准化
        5. 自顶向下,逐步分解(求精)
      2. 缺点
        1. 写死,不灵活,修改起来困难;
        2. 而需求是不断变化的,因此出现了面向对象
    2. 原型法 特殊

      1. 需求分析阶段,适用于需求不明确的开发
      2. 做一个原型化的界面呈现给客户,让客户有直观感受并反馈提出自己的详细需求,避免完成后再返工
      3. 包括 抛弃型原型、进化型原型
    3. 面向对象 C++、Java

      1. 复用性好
      2. 建立一个全面、统一、合理的模型
      3. 分析、设计、实现三个阶段没有明确的界限(做前一个阶段时,一并将后一阶段的一部分做完;而结构化方法每一个阶段做完并且评审后才开始下一个阶段,界限很明确)。
    4. 面向服务 (颗粒度比对象大)

      1. SO方法 三个抽象层级
        1. 操作,传统函数、方法。(抽象类)
        2. 服务(模块)
        3. 业务流程,由服务协作完成。(应用程序)
      2. SOAD 三个层次
        1. 基础设计层(底层服务件)
        2. 应用结构层(服务之间的接口和服务级协定)
        3. 业务组织层(业务流程建模和服务流程编排)
      3. 服务建模 三阶段
        1. 服务发现(做什么)
        2. 服务规约(做的过程中遵循的规则约定、参数)
        3. 服务实现(做出来)
  2. 软件开发模型(重点)

    1. 瀑布模型(结构化方法产物,适用于需求明确项目)一阶阶下来像瀑布流水,每个阶段需要进行需求评审,如果评审阶段或者下一阶段发现本阶段有问题不符合要求,需要回退(红色箭头)进行修改。

      1. 定义阶段
        1. 软件计划
        2. 需求分析(论文)
          1. 缺点 不适合需求不明确的项目,因为需求分析一旦错误,所有阶段都错了,再迭代时间、人力成本太高,且失败概率大于九成。
          2. 优化 加一个原型给客户,经过几轮修改反馈得到明确的项目;如果还不明确或者客户喜欢创新,从以下两方面解决
            1. 项目管理,不要制定总价合同,写明迭代的责任方和成本利润
            2. 选择原型模型
          3. 演化出其他模型
            1. 和原型模型演化出
              1. 增量模型
              2. 螺旋模型
      2. 开发阶段
        1. 软件设计
        2. 程序编码
        3. 软件测试
      3. 运行维护
    2. 演化模型

    3. 增量模型

      1. 一个功能模块一个功能模块的实现,每个功能模块实现了都能单独上线一个版本 
    4. 螺旋模型(重点)

      1. 迭代模型的一种
        1. 加入迭代思想
        2. 多轮迭代而成,每轮有个单独的目标(原型);像做画,比如第一轮打线稿,第二轮上色等,最终多轮迭代成最终的产品
      2. 演化
        1. 由瀑布模型和原型模型演化而来
        2. 每轮有一个原型,根据本轮确定的原型进行瀑布模型,一阶段一阶段完成;多轮原型+瀑布迭代成最终产品
        3. 适合大型项目,并加入风险分析
    5. 原型模型(重点)

      1. 快速原型模型(抛弃型)
        1. 在需求阶段就固定原型然后抛掉原型模型使用其他模型,比如瀑布模型按照瀑布模型各个阶段往下做
      2. 演化模型(变换型)
        1. 在最初原型的基础上慢慢演化成最终的模型,随时调整,不像螺旋模型一轮迭代完再进行下一轮那样有明确的界限
    6. 喷泉模型 SDLC

      1. 面向对象的开发模型
        1. 迭代
        2. 无间隙
      2. 形态像喷泉喷出开花一样上面大,再从四周洒下来
    7. V模型

      1. 强调测试
        1. 测试计划提前做,测试用例角度是在什么场景,用什么输入,得到什么输出;这种思考对问题比较聚焦,能提前发现很多问题并提前完善
        2. 在需求分析阶段就做验收测试和系统测试的测试计划,在概要设计的时候做集成测试的测试计划,在详细设计的时候做单元测试的测试计划;但是是一轮完成,并非螺旋那种多轮
      2. 瀑布模型的优化
    8. 迭代模型/迭代开发方法
    9. 快速应用开发 RAD
      1. 来源
        1. 基于构件的开发(核心)
        2. 瀑布模型
    10. 构件组装模型/基于构件的开发方法 CBSD
    11. 统一过程模型/也可界定为统一开发方法(重点)

      1. 三个特点
        1. 用例驱动
          1. (面向对象的表现),一开始就构建用例,一步步设计用例并实现出来,测试也会根据用例设计一系列测试用例;
          2. 在这个方法里用例就是整个开发过程的驱动力
        2. 以架构为核心
        3. 迭代和增量
      2. 四个阶段
        1. 初始(需求评审)
          1. 确定项目范围和边界
          2. 识别系统的关键用例
          3. 展示系统的候选架构
          4. 估计项目费用和时间
          5. 评估项目风险
        2. 细化(设计架构)
          1. 分析系统问题领域
          2. 建立软件架构基础
          3. 淘汰最高风险元素
        3. 构建(构件)
          1. 开发剩余的构件
          2. 构件组装与测试
        4. 交付(上线)
          1. 进行贝塔测试
          2. 制作发行版本
          3. 用户文档定稿
          4. 确认新系统
          5. 培训、调整产品
    12. 敏捷模型--实际是方法(重点)

      1. 四种模型的结合
        1. 自适应开发
        2. 水晶方法
        3. 特性驱动开发
        4. 极限编程
    13. 模型驱动的开发方法
    14. 基于架构的开发方法(重点)
  3. 逆向工程

    1. 实现方式
      1. 从已有系统拆开逆向得到实现方法,再结合新需求生产新系统
      2. 现有系统-》逆向工程-〉考虑新需求-》正向工程-〉新系统
      3. 现有系统-》再工程-〉新系统
    2. 四个层级(重点)
      1. 实现级
        1. 程序设计:抽象语法树、符号表、过程
      2. 结构级
        1. 程序分量间相互依赖关系
        2. 比如调用图、结构图、程序和数据结构
      3. 功能级
        1. 程序段功能及程序段间关系
        2. 比如数据和控制流模型
      4. 领域级
        1. 包括反应程序分量/程序实体与应用领域概念之间对应关系的信息
        2. 比如实体关系模型
  4. 净室软件工程

    1. 去除人为干扰,比如从数学模型通过程序直接转换为可以运行的产品

二、需求工程(重点)

  1. 需求获取(重点

    1. 软件需求是用户对软件在功能、性能、行为、设计约束等方面的期望
    2. 软件需求是指帮用户达到目标或解决问题所需的条件和能力;是系统满足合同规范所具有的条件和能力;以及反映这些能力的文档说明
  2. 需求分析(重点

    1. 结构化分析SA
      1. 四个模型
        1. 功能模型
          1. 对应数据流图
        2. 行为模型
          1. 对应状态转换图
        3. 数据模型
          1. 对应ER图
        4. 数据字典
          1. 配合上面的三种模型,在各自中提供明确的信息,帮助用户理解
      2. 三个图
        1. DFD数据流图
        2. ER图/模型
        3. 状态转换图
    2. 面向对象分析OOA 
      1. 概念

        1. SA以数据流为核心,关注系统的功能模块和数据流动,适合流程明确的系统。

        2. OOA以对象为核心,关注系统中的实体及其关系,适合复杂且需要灵活扩展的系统。

      2. 常用工具

        1. UML

  3. UML图(重点,案例分析)

    1. 静态图(结构图)(选择
      1. 类图
    2. 动态图(行为图)(案例分析
      1. 用例图
      2. 选择题
        1. 三大关系
          1. 包含/使用关系
            1. 必须用到的基本用例
          2. 扩展关系
            1. 可选的,可能用到也可能用不到
            2. 和包含关系都属于依赖关系
          3. 泛化
            1. 父子关系
            2. 把共性抽出来作为父
        2. 选择题
          1. 根据三大关系选择UML流程的天空
          2. 注意:调整用例模型是可选的​​​​​​​
  4. UML视图(重点,案例分析

  5. UML关系(重点,案例分析

三、软件系统建模

四、系统设计

五、测试与评审

六、系统运行与软件维护

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。