• 哈工大 软件构造课程 考点复习总结(第一、二章)


    1. 软件构造的多维视图

    1. Build-time

      Code-level: 源代码:代码的逻辑组织:AST抽象语法树、函数、方法、类、接口等具体的逻辑实现

      (class diagram类图)

      Component-level:结构:代码的物理组织:源文件、包、库、静态链接、测试用例

      (component diagram构建/组件图),编译

      Moment view : 特定时刻的源码或组件形态

      Period view:软件形态随时间的变化

      1. Build-moment-code:词汇(源码)、语法(抽象语法树)、语义(类图)
      2. Build-period-code:code churn代码变化:增减修改
      3. Build-moment-component:文件目录,静态链接、包、库
      4. Build-period-component:files/packages/components/libraries change

        SCI(software configuration item 配置项)、VCS

    2. Runtime Views

      Code-level : 可执行程序的内存状态,程序之间的互动、调用

      Component-level:软件包部署到物理环境(OS、network、硬件等),及其互动

      Moment view:特定时刻的程序行为

      Period view:随着时间的行为

      1. Run-moment-code:snapshot 快照 描述程序运行时内存里变量层面的状态 ,Memory dump(内存转储/导出)
      2. Run-period-code:sequence diagram序列图(时序交互),Execution tracing 执行跟踪(代码层面,用日志方式记录程序执行的调用次序)
      3. Run-moment-component:Deployment diagram(部署图:设备、操作系统),
      4. Run-period-component:Event logging 事件日志(系统层面)

       

      Event logging:系统管理员使用,高层次信息(如安装程序失败),有一定输出格式,不必敏捷

      Execution tracing:开发者使用,低层次信息(如抛出异常),较低格式限制,必须敏捷

      1. 软件构造的阶段划分,各阶段的活动

    3. Software development lifecycle SDLC 软件开发生命周期
      1. 0->1 从无到有

        计划-需求-设计-构造(实现)-测试-部署-运维

      2. 1->n 从有到好

        版本更新

    4. 传统软件开发模型

      基本类型:Linear 线性过程;Iterative 迭代过程

    模型:

    1. Waterfall 瀑布过程(线性非迭代)

      阶段清楚,管理简单,无法适应需求变化

    2. Incremental 增量过程(非迭代)

      多个瀑布串行,比较容易适应需求的增加(有需求就增加一个瀑布)

    3. V-Model V字模型(验证,确认)
    4. Prototyping 原型过程(迭代)

      在原型上持续不断的迭代,发现用户变化的需求

      迭代:开发出来后由用户试用/评审,发现问题反馈给卡发着,开发者修改原有的实现,继续交给用户评审

      时间代价高,但开发质量也高

    5. Spiral 螺旋过程(迭代)

      多轮迭代基本遵循瀑布模式

      每轮迭代有明确的目标,遵循"原型"过程,进行严格的风险分析,方可进入下一轮迭代

    1. Agile development 敏捷开发

      通过快速迭代和小规模的持续改进,以快速适应变化

      用户高度参与,小步骤迭代确认验证。强调人的作用

      1. 内部/外部质量指标

    外部质量因素影响用户,内部质量因素影响软件本身和它的开发者,外部质量取决于内部质量。

    1. External quality factors 外部质量
      1. Correctness 正确性:按照spec执行,得到正确的结果,软件的行为要严格符合规约中定义的行为

        保证正确性:测试和调适、防御式编程,形式化方法(形式化语言)

        encapsulation, decentralization 封装、分散化

      2. Robustness 健壮性:针对异常情况的处理:出现规约定义之外的情形,软件做出恰当的反应(出现异常时不要崩溃),未被spec覆盖的情况即为"异常情况"

        encapsulation, error handling封装、异常处理

      3. Extendibility 可扩展性:是否容易使软件适应规约的变化

        提升可扩展性的两个原则:简约主义设计,分离主义设计

        encapsulation, information hiding封装,信息隐蔽(结构良好的对象有简单的接口,并且不向外界显漏任何内部机制。)

      4. Reusability 可复用性:一次开发,多次使用,发现共性

        modularity, component, models, patterns模块化、组件、模型、模式

      5. Compatibility 兼容性:不同软件系统之间相互可容易的集成

        保持设计的同构性:标准化文件格式,标准化数据结构,标准化用户接口

      6. Efficient 性能
      7. Portability 可移植性:软件可方便的在不同的技术环境之间移植:硬件、操作系统
      8. Ease of use 易用性:易学、安装、操作、监控

        给用户提供详细的指南,结构简单

      9. Functionality 功能
      10. Timeliness 及时性:及时发布等
      11. 其他质量:verifiability 可验证性、integrity完整性,repairability可修复性,economy经济型
    2. Internal quality factors 内部质量

      代码相关:lines of code(LOC)、cyclomatic complexity 循环复杂性

      结构相关:coupling耦合度(多个模块间联系),cohesion聚合度(一个模块;高内聚,一个程序只执行一种功能) (应当 高内聚低耦合,单一责任原则)

      1. Readability 可读性
      2. Understandability 可理解性
      3. Clearness
      4. Size
    3. 最重要的几个质量因素

      Correctness and robustness: reliability(可靠性)

      Extendibility and reusability: modularity(模块化)

    4. 软件构造的五个关键质量目标
      1. Easy to understand: elegant and beautiful code / understandability 便于理解

        Understandability:注释、命名、日志等

      2. Cheap for develop: design for/with reuse: reusability 发展

        Reusability:ADT、OOP、设计模式等以及复用外部文件

      3. Ready for change: maintainability and adaptability 变化

        Maintainability and Adaptability

      4. Safe from bugs: robustness 安全

        Robustness 异常处理、断言、防御式变成、测试优先原则、日志追踪、debug、内存导出

      5. Efficient to run: performance 高效

        Performance 代码调优、空间复杂性(内存管理)、时间复杂性(I/O性能等),分布式系统,多线程

      1. 软件配置管理SCM与版本控制系统VCS

    5. VCS version control system
      1. Local VCS 本地:仓库在开发者本地机器
      2. Centralized VCS 集中式:仓库在独立的服务器
      3. Distributed VCS 分布式:仓库在独立的服务器+开发者本地机器
    6. SCM 软件配置管理:追踪和控制软件的变化
      1. SCI 软件配置项:软件变化的基本单元(如一个文件)
      2. Baseline 基线:软件持续变化过程中的"稳定时刻"(如 对外发布的版本)
      3. CMDB 配置管理数据库:存储软件的各配置项随时间发生变化的信息+基线(git的本地repository?)
      4. Versioning 版本控制
      1. Git的结构、工作原理、基本指令

    7. 结构
      1. Working directory 工作目录:本地文件系统 (已修改,未暂存)
      2. Staging area 暂存区:隔离工作目录和git仓库 (已暂存)
      3. .git directory 本地仓库(本地CMDB) (已提交)
    8. Object Graph
    9. 指令

    git branch branchname创建新分支

    git checkout branchname切换到分支

    git checkout -b branchname 创建新分支并切换到新分支

    git merge branchname 合并当前分支与目标分支

    pull=fetch + merge

    fetch 从远程仓库获取最新版本到本地,不会自动merge

    fork 复制别人的仓库到自己的仓库(自己不是contributor,不能提交修改给别人)

    clone 复制仓库到自己的本地仓库

  • 相关阅读:
    shell脚本进阶
    sort与uniq命令
    sed命令
    DNS与CDN
    nginx
    Docker Private Registry
    docker存储卷
    docker容器网络配置
    docker容器网络
    docker容器虚拟化
  • 原文地址:https://www.cnblogs.com/standingby/p/9199015.html
Copyright © 2020-2023  润新知