2020春 软件构造 复习2

    技术2022-07-11  91

    软件构造复习2

    软件生命周期和配置管理设计软件的两个基本模型模型其他模型瀑布过程(理论价值)增量过程(实用价值)V字模型原型过程(沟通交流+解决问题)螺旋模型(融合) Agile DevelopmenteXtreme Programming(XP,极限编程) 软件配置管理 SCM与版本控制系统VCSGIT——分布式版本控制系统 广义·软件构造的过程、系统和工具编程 Programming代码评审 Review and static analysis性能分析 Dynamic code analysis / Profiling调试与测试 Debugging and Testing重构 Refactoring 狭义·软件构造的过程构建系统

    软件生命周期和配置管理

    (软件开发,从0到n,遵循什么过程?)

    设计软件的两个基本模型模型

    线性过程:从底层/需求开始,下一步是上一步的基础 迭代过程:回头解决不合理之处

    其他模型

    (选取标准:用户参与程度,开发效率/管理复杂度,软件质量)

    瀑布过程(理论价值)

    线性推进,分阶段,整体推进,无迭代,管理简单,无法适应需求变化

    增量过程(实用价值)

    线性推进,增量式,无迭代,容易适应需求变化 (一个一个功能地实现,独立地进行,最后合成一个软件)

    V字模型

    (包含测试功能,经过测试的软件代码质量更高,测试依据相时而动)

    原型过程(沟通交流+解决问题)

    (有迭代,根据用户使用反馈问题给开发者,开发者再进行修改原有的实现,如此反复;时间代价高;开发质量高)

    螺旋模型(融合)

    多轮迭代遵循瀑布模式,每轮迭代经历原型过程

    Agile Development

    敏捷开发:快速迭代+小规模持续改进 => 快速适应变化 (除线性过程以外都是)

    1.设定发布周期 2.根据开发计划,完成周期内产品 3.不延期,按时完成

    极限的用户参与极限的小步骤迭代极限的确认/验证

    (用户的作用在该模型中极大~)

    eXtreme Programming(XP,极限编程)

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

    追踪和控制软件的变化

    1.软件配置项:软件中发生变化的基本单元(例如文件) 2.基线:软件持续变化中的稳定时刻(即对外发布的版本,需要保证时间合理,功能齐全) 3.CMDB:配置管理数据库(存储软件各配置项随时间发生变化的信息+基线) 4.版本控制VCS(复制修改文件名 => 现版本:回溯,比较差异备份软件版本历史,获取备份,合并版本,多个开发者共享,记录动作便于审计)

    仓库:相当于SCM中的CMDB工作拷贝:在开发者本地机器上的一份项目拷贝文件:一个独立的配置项版本变化:版本差异HEAD:程序员工作的现版本

    三种VCS 1)本地VCS:无法共享 2)集中式VCS:多开发者协作 3)分布式VCS:仓库存储于独立服务器+开发者各个本地机器

    GIT——分布式版本控制系统

    workspace 工作目录:本地文件系统 staging 暂存区:隔离工作目录和Git仓库 local repository 本地仓库 remote repository 提交仓库

    有关代码 git init //生成.git目录 git add * //该目录下所有文件纳入git管理【文件->暂存区】 git clone URL local_repository //把远程仓库内容克隆到本地仓库 git status //具体信息 git commit -m “v0.1 All code in main()” //创建待提交的数据结构【暂存区->本地仓库】 git log //查看提交信息 git remote add origin URL git push -u -f origin master【本地仓库->线上仓库】

    VCS和Git的区别

    分支/合并

    广义·软件构造的过程、系统和工具

    从编码开始

    编程 Programming

    从用途上划分:编程语言,建模语言,配置语言,构建语言 从形态上划分:基于语言学的构造语言,基于数学,基于图形,etc…

    编程语言

    集成开发环境 IDE(例如,Eclipse) 源代码编辑器,智能代码补全工具,代码重构工具 可视化 图形化文件管理 库管理 软件逻辑实体可视化 图形化用户界面构造器 编译器,解释器 自动化Build工具 版本控制系统 第三方工具

    建模语言(一种人工语言,用于在设计阶段描述思想和设计结果)

    例如,UML(Unified Modeling Language)

    配置语言(配置文件配置程序的参数和初始设置)

    开始只读取一次/周期性检查读取 以获得参数

    代码评审 Review and static analysis

    结对编程(实时评审,一人看一人写) 走查(提交后查看,改作业?) 正式评审会议 自动化评审(分析语法结构,C语言程设的模式吧)

    代码评审的目的:改进代码,提升编程水平;在开源软件开发中应用较多

    性能分析 Dynamic code analysis / Profiling

    动态分析:要执行程序并观察现象,收集数据,分析不足 工具:例如,visualVM

    调试与测试 Debugging and Testing

    测试:发现程序是否有错误 调试:定位错误,发现错误根源 (调试是最后手段)

    重构 Refactoring

    在不改变功能的前提下优化代码

    狭义·软件构造的过程

    build-time => run-time,借助工具将软件构造各阶段(编译,打包,静态分析,测试,生成文档,部署,etc…)的活动“自动化”,提高构造效率 => 最终生成可安装在用户机器上的软件,zip or unzip

    编译语言 解释型语言 基于网页的Web类型应用 单元测试,静态分析,etc…

    构建系统

    私人/开发者构建(目的:自用) 发布型构建(目的:发布/测试) 完善型构建(不断更新。目的:可用性测试)

    持续集成,每日更新

    构建工具 Make、Ant、Maven、Gradle、Eclipse IDE
    Processed: 0.011, SQL: 9