ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

软件构造(三) 软件构造过程与配置管理

2021-07-02 23:30:01  阅读:238  来源: 互联网

标签:文件 Git 代码 配置管理 构造 git 版本 软件 暂存


1.软件开发生命周期(SDLC)

From 0 to 1 从无到有 (这不tm废话么)
在这里插入图片描述

2.传统软件过程模型

两种基本类型

  • 线性过程(Linear)
    在这里插入图片描述

  • 迭代过程(Iterative)
    在这里插入图片描述
    现有的模型有:

  1. 瀑布模型
    分为概念、启动、分析、设计、构建、测试、实现和维护等阶段。就像瀑布一样流经这几个过程。说白了就是线性的过程。
    因为是一条道走到黑,因此无法适应变化
    在这里插入图片描述

  2. 增量过程模型
    在这里插入图片描述
    将一个瀑布模型分为多个瀑布模型去实现,与瀑布模型能适应一定变化的需求了

  3. V字模型
    可以看作是瀑布模型的一个扩展

即编写代码之后进行各层次的测试,发现问题,马上返回设计阶段重新来过

在这里插入图片描述

  1. 原型过程
    在原型上持续不断的迭代发现用户变化的需求,因此它能很好地适应需求的变化,但是导致了开发周期变长
    在这里插入图片描述
  2. 螺旋模型
    经过多轮的迭代,而每轮都遵循瀑布模式,每轮迭代有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代

在这里插入图片描述

要根据以下因素选择适合的软件过程模型:

  • 用户参与程度
  • 开发的效率、管理的复杂程度
  • 所需要的软件的质量

3.敏捷开发

敏捷开发(Agile development)是指通过快速迭代和小规模
的持续改进,以快速适应变化的开发方式

3.1 主要方法:

3.1.1 极限编程(XP,eXtreme Programming)

极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。

它与螺旋模型相近,将复杂的工程转化为一个个小周期,每个小周期经过交流讨论与用户反馈,确定该周期的问题等,通过反复的修改与迭代,写出最终的程序,重点就是:沟通、简单、反馈与勇气

3.1.2 Scrum

职位划分:

  1. Project Owner:即产品经理,为项目不断增添任务或修改需求(社畜福音)
  2. Scrum Master:类似于项目负责人,保护打工人的利益,满足Project Owner的需求
  3. Team:开发测试设计人员,其中也可以包括Scrum Master
    在这里插入图片描述
    我觉得这玩意可以翻译成码农养成技术。

4.软件配置管理(SCM)和版本控制系统(VCS)

4.1 软件配置管理(SCM)

SCM的任务是跟踪和控制软件的变化,其核心是版本控制和基线的确立

软件配置项(SCI): 是SCM的基本单元,包括源代码、数据、文件、硬件信息、运行环境等

基线(Baseline): 是在某个时间点对产品属性的约定描述,作为定义变更的基础。软件变化的稳定状态

配置管理数据库(CMDB): 存储软件的各配置项随时间发生变化的信息和基线信息

4.2 版本控制系统(VCS)

版本控制(Versioning): 将唯一的版本名或唯一的版本号分配给软件的唯一状态的过程

当信息发生变化时,就给新的项目,分配一个新的版本号,一般来说这些版本号都是递增的

版本控制的优势:

  • 备份软件历史版本,可以回到之前的版本,进行各类操作
  • 在开发者之间共享与协作
  • 记录开发者的动作

版本控制术语:

  • 仓库:相当于于SCM中的CMDB,项目版本的存储
  • 工作拷贝:在开发者本地机器上的一份项目拷贝(副本\备份)
  • 文件:一个独立的配置项
  • 版本:在某个特定时间点的项目内容的记录
  • 变化:即code churn,两个版本之间的差异
  • HEAD:程序员正在其上工作的版本

版本控制系统(VCS)分为以下三种

  1. 本地版本控制系统(Local VCS): 仓库存储于开发者本地机器,无法共享和协作
  2. 集中式版本控制系统(Centralized VCS): 仓库存储于独立的服务器,支持多开发者之间的协作,例如:CVS,SVN(代码版本控制软件)
  3. 分布式版本控制系统(Distributed VCS): 仓库存储于独立的服务器+每个开发者的本地机器,例如:Git

5.Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git库通常由三部分组成:本地的CMDB、工作目录(本地文件系统)、暂存区(隔离工作目录和Git仓库)

而每个Git中的文件有三个状态:

  • 已修改(Modified):本地与git中的不同,未在暂存区
  • 已暂存(Staged):文件已修改且加入暂存区
  • 已提交(Committed):文件在工作目录和git目录中相同

文件版本在Git中的存储是以Object Graph(图)的形式存在的,而复制Git项目,也就意味着复制了Object Graph
在这里插入图片描述
接下来,仔细分析一下Object Graph:

边:例如边A->B,意味着在版本B的基础上作出变化,形成了版本A

结点:象征着一个文件的Commit,分支(branch)指的是指向一个Commit的名称,HEAD指向当前工作的Commit,而一个结点指向一个版本的文件结构的树状结构。自然,Commit结点是文件结构的父节点

传统VCS存储版本之间的变化(代码行)
在这里插入图片描述
Git存储发生变化的文件(而非代码行),不变化的文件不重复存储
在这里插入图片描述
指令:

  • git commit:添加到对象图
  • git push:发送对象图
  • git pull:接收对象图
  • ……

下面介绍具体方法:

  1. 在工作目录中初始化新仓库
git init
git add *.c
git add readme.txt
git commit -m 'initial project version'
  1. 从现有仓库克隆:复制服务器上项目的所有历史信息到本地
git clone ssh://example.com/~/www/project.git
  1. 记录每次更新到仓库
    在工作目录对文件进行修改后,文件自动被标记为已修改,之后需要将更新提交到仓库,将其放到暂存区,标记为已暂存,直到最后一次性提交所有这些暂存起来的文件,标记为已提交

  2. 跟踪新文件、暂存已修改文件
    可以指明要跟踪的文件或目录路径。如果是目录的话,就说明要递归跟踪该目录下的所有文件。指令意味着把目标文件快照放入暂存区域,运行了git add之后又对相应文件做了修改,要重新git add

git add filename
  1. 检查当前文件状态
git status
  1. 查看已暂存和未暂存的更新
    要查看尚未暂存的文件更新了哪些部分,不加参数直接输入git diff
    若要查看已暂存起来的文件和上次提交时的快照之间的差异,可以
    用 git diff --cached 命令

  2. 提交更新
    每次准备提交前,先用git status进行检查,要确认是否还有修改过的或新
    建的文件没有git add过,然后再运行提交命令git commit

  3. 跳过使用暂存区域、移除文件
    Git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上-a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤
    使用git rm命令从Git中移除某个文件,把它从已跟踪文件清单(暂存
    区域)中移除,并连带从工作目录中删除指定的文件

  4. 对远程仓库的操作

  • git remote:获取当前配置的所有远程仓库
  • git remote add [shortname] [url]:添加一个远程仓库
  • git fetch:从远程仓库抓取数据到本地
  • git pull: 从一个仓库或者本地的分支拉取并且整合代码
  • git push [remote-name] [branch-name]:将本地仓库中的数据推送到远程仓库
  • git remote show [remote-name]:查看某个远程仓库的详细信息
  • git remote rm:从本地移除远程仓库
  1. 在Git中创建和合并分支
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

GitHub: 基于web的Git服务器和Internet托管服务,好用的一批

6.软件构造的一般过程

6.1 编码(Programming)

构造语言

  1. 从用途上划分:
    - 编程语言(C,C++,Java,Python)
    - 建模语言(UML)
    - 配置语言(XML)
    - 构建语言(XML)

  2. 从形态上划分
    - 基于语言学的构造语言
    - 基于数学的形式化构造语言
    - 基于图形的可视化构造语言

编程语言(Programming Languages)
你懂~ 你懂~

建模语言(Modeling languages)

建模语言是一种人工语言,可以用来表达信息、知识或系统,其结构由一组一致的规则定义,目的是可视化、推理、验证和交流系统的设计

UML作为建模语言
UML类图
UML顺序图
配置语言(Configuration languages)

配置文件配置程序的参数和初始设置

应用程序应提供创建、修改和验证其配置文件语法的工具

一些计算机程序只在启动时读取其配置文件。其他人定期检查配置文件的更改

就比如VSCode的配置文件改字体,改背景[doge]

目的:部署环境设置、应用程序功能的变量、组件之间连接的变量

文件示例:.ini、.properties、.rc后缀的文本,还可以用XML、YAML、JSON等语言编写配置文件

6.2 代码评审和静态代码分析

代码评审是对源代码的系统检查。
旨在发现在初始开发阶段被忽视的错误,提高整体质量。评审以多种形式进行,如结对编程、非正式演练和正式检查。

正式的检查是非常彻底的,并且已经被证明能有效地发现正在审查的代码中的缺陷

轻量级代码检查通常比正式的代码检查需要更少的开销,不过如果操作得当,它也同样有效

静态代码分析是在没有实际执行程序的情况下对计算机软件进行的分析(对正在执行的程序进行的分析称为动态分析)自动化工具可以帮助程序员和开发人员执行静态分析,例如,CheckStyle、SpotBug、PMD for Java

代码审查有两个目的:

  • 改进代码。发现bug,预测可能的bug,检查代码的清晰性,并检查与项目样式标准的一致性
  • 提高程序员的水平。以人为镜,可以明得失。

6.3 动态代码分析

动态分析(Dynamic code analysis):要执行程序并观察现象、收集数据、分析不足
利用测试度量技术(如覆盖率)确保代码的可能功能均被充分测试到
用来测量程序的时空复杂度,特定指令或函数的调用频率或持续时间,发现代码中潜在问题

6.4 调试与测试

测试:发现程序是否有错误

调试:定位错误、发现错误根源

测试和调试不会提升软件质量,而是发现和解决缺陷的主要手段
软件质量应通过认真的分析需求、良好的设计、高质量的编码来实现。

Debugging is a last resort.

6.5 重构

重构是一种改变软件系统的过程,这种改变不会改变代码的外部行为,也不会改善代码的内部结构

主要就是重命名、语义小变换、改变顺序等。为了使代码更易于维护和修改

标签:文件,Git,代码,配置管理,构造,git,版本,软件,暂存
来源: https://blog.csdn.net/qq_45744028/article/details/118422817

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有