From 0 to 1 从无到有 (这不tm废话么)
两种基本类型
线性过程(Linear)
迭代过程(Iterative)
现有的模型有:
瀑布模型
分为概念、启动、分析、设计、构建、测试、实现和维护等阶段。就像瀑布一样流经这几个过程。说白了就是线性的过程。
因为是一条道走到黑,因此无法适应变化
增量过程模型
将一个瀑布模型分为多个瀑布模型去实现,与瀑布模型能适应一定变化的需求了
V字模型
可以看作是瀑布模型的一个扩展
即编写代码之后进行各层次的测试,发现问题,马上返回设计阶段重新来过
要根据以下因素选择适合的软件过程模型:
敏捷开发(Agile development)是指通过快速迭代和小规模
的持续改进,以快速适应变化的开发方式
极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。
它与螺旋模型相近,将复杂的工程转化为一个个小周期,每个小周期经过交流讨论与用户反馈,确定该周期的问题等,通过反复的修改与迭代,写出最终的程序,重点就是:沟通、简单、反馈与勇气
职位划分:
SCM的任务是跟踪和控制软件的变化,其核心是版本控制和基线的确立
软件配置项(SCI): 是SCM的基本单元,包括源代码、数据、文件、硬件信息、运行环境等
基线(Baseline): 是在某个时间点对产品属性的约定描述,作为定义变更的基础。软件变化的稳定状态
配置管理数据库(CMDB): 存储软件的各配置项随时间发生变化的信息和基线信息
版本控制(Versioning): 将唯一的版本名或唯一的版本号分配给软件的唯一状态的过程
当信息发生变化时,就给新的项目,分配一个新的版本号,一般来说这些版本号都是递增的
版本控制的优势:
版本控制术语:
版本控制系统(VCS)分为以下三种
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git库通常由三部分组成:本地的CMDB、工作目录(本地文件系统)、暂存区(隔离工作目录和Git仓库)
而每个Git中的文件有三个状态:
文件版本在Git中的存储是以Object Graph(图)的形式存在的,而复制Git项目,也就意味着复制了Object Graph
接下来,仔细分析一下Object Graph:
边:例如边A->B,意味着在版本B的基础上作出变化,形成了版本A
结点:象征着一个文件的Commit,分支(branch)指的是指向一个Commit的名称,HEAD指向当前工作的Commit,而一个结点指向一个版本的文件结构的树状结构。自然,Commit结点是文件结构的父节点
传统VCS存储版本之间的变化(代码行)
Git存储发生变化的文件(而非代码行),不变化的文件不重复存储
指令:
下面介绍具体方法:
git init git add *.c git add readme.txt git commit -m 'initial project version'
git clone ssh://example.com/~/www/project.git
记录每次更新到仓库
在工作目录对文件进行修改后,文件自动被标记为已修改,之后需要将更新提交到仓库,将其放到暂存区,标记为已暂存,直到最后一次性提交所有这些暂存起来的文件,标记为已提交
跟踪新文件、暂存已修改文件
可以指明要跟踪的文件或目录路径。如果是目录的话,就说明要递归跟踪该目录下的所有文件。指令意味着把目标文件快照放入暂存区域,运行了git add之后又对相应文件做了修改,要重新git add
git add filename
git status
查看已暂存和未暂存的更新
要查看尚未暂存的文件更新了哪些部分,不加参数直接输入git diff
若要查看已暂存起来的文件和上次提交时的快照之间的差异,可以
用 git diff --cached 命令
提交更新
每次准备提交前,先用git status进行检查,要确认是否还有修改过的或新
建的文件没有git add过,然后再运行提交命令git commit
跳过使用暂存区域、移除文件
Git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上-a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤
使用git rm命令从Git中移除某个文件,把它从已跟踪文件清单(暂存
区域)中移除,并连带从工作目录中删除指定的文件
对远程仓库的操作
GitHub: 基于web的Git服务器和Internet托管服务,好用的一批
构造语言
从用途上划分:
- 编程语言(C,C++,Java,Python)
- 建模语言(UML)
- 配置语言(XML)
- 构建语言(XML)
从形态上划分
- 基于语言学的构造语言
- 基于数学的形式化构造语言
- 基于图形的可视化构造语言
编程语言(Programming Languages)
你懂~ 你懂~
建模语言(Modeling languages)
建模语言是一种人工语言,可以用来表达信息、知识或系统,其结构由一组一致的规则定义,目的是可视化、推理、验证和交流系统的设计
UML作为建模语言
配置语言(Configuration languages)
配置文件配置程序的参数和初始设置
应用程序应提供创建、修改和验证其配置文件语法的工具
一些计算机程序只在启动时读取其配置文件。其他人定期检查配置文件的更改
就比如VSCode的配置文件改字体,改背景[doge]
目的:部署环境设置、应用程序功能的变量、组件之间连接的变量
文件示例:.ini、.properties、.rc后缀的文本,还可以用XML、YAML、JSON等语言编写配置文件
代码评审是对源代码的系统检查。
旨在发现在初始开发阶段被忽视的错误,提高整体质量。评审以多种形式进行,如结对编程、非正式演练和正式检查。
正式的检查是非常彻底的,并且已经被证明能有效地发现正在审查的代码中的缺陷
轻量级代码检查通常比正式的代码检查需要更少的开销,不过如果操作得当,它也同样有效
静态代码分析是在没有实际执行程序的情况下对计算机软件进行的分析(对正在执行的程序进行的分析称为动态分析)自动化工具可以帮助程序员和开发人员执行静态分析,例如,CheckStyle、SpotBug、PMD for Java
代码审查有两个目的:
动态分析(Dynamic code analysis):要执行程序并观察现象、收集数据、分析不足
利用测试度量技术(如覆盖率)确保代码的可能功能均被充分测试到
用来测量程序的时空复杂度,特定指令或函数的调用频率或持续时间,发现代码中潜在问题
测试:发现程序是否有错误
调试:定位错误、发现错误根源
测试和调试不会提升软件质量,而是发现和解决缺陷的主要手段
软件质量应通过认真的分析需求、良好的设计、高质量的编码来实现。
Debugging is a last resort.
重构是一种改变软件系统的过程,这种改变不会改变代码的外部行为,也不会改善代码的内部结构
主要就是重命名、语义小变换、改变顺序等。为了使代码更易于维护和修改