瀑布模型
瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。 "被广泛采用的软件开发模型。
核心思想:瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
瀑布模型的优点
1)为项目提供了按阶段划分的检查点。
2)当前一阶段完成后,您只需要去关注后续阶段。
3)可在迭代模型中应用瀑布模型。
增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
瀑布模型的缺点
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4)瀑布模型的突出缺点是不适应用户需求的变化。
项目开发的文件结构
├── ACKNOWLEDGMENTS TensorFlow版本声明
├── ADOPTERS.md 使用TensorFlow的人员或组织列表
├── arm_compiler.BUILD ARM编译器
├── AUTHORS TensorFlow作者的官方列表
├── CODE_OF_CONDUCT.md 代码编程指南。行为守则是一套个人或组织参与开源项目所必须遵循的规则,规范,公约,大多数项目都是采用Contributor Covenant规则。
├── CODEOWNERS code owners
├── configure 需要编译tensorflow时,使用命令'configure',则会调用configure.py来配置tf的环境信息
├── configure.py 需要编译tensorflow时,配置tf的环境信息
├── CONTRIBUTING.md TensorFlow贡献指导
├── ISSUE_TEMPLATE.md 提ISSUE的模板,提ISSUE时Github自动识别读取注入。
├── LICENSE 版权许可
├── models.BUILD 对tensorflow/models目录进行编译。
├── README.md
├── RELEASE.md 每次发版的change log 各个release(发布)版本的变更信息,例如Release 1.4.0的新增功能、变更的op等
└── WORKSPACE 配置移动端开发环境
开源项目的必备文档
-
README.md
开源项目的门面,让用户第一时间了解该项目具体是做什么的,一份好的README文件应包含但不仅限于项目标题、描述、徽章、主要内容、如何安装、如何使用、API文档、如何参与贡献、版权类型等等内容。" -
CHANGELOG.md
用于记录每一次版本升级后的更新说明,包括Bug修复、新功能等等,一般和项目新Tag一起发布。" -
CODE_OF_CONDUCT.md
行为守则是一套个人或组织参与开源项目所必须遵循的规则,规范,公约,大多数项目都是采用Contributor Covenant规则。 -
CONTRIBUTING.md
全方位指导你如何参与贡献代码,如何进行本地开发,如何提ISSUE,如何提PR等等,参与项目前必看的文档。 -
ISSUE_TEMPLATE.md
ISSUE模板,提ISSUE时Github自动识别读取注入。 -
PULL_REQUEST_TEMPLATE.md
PR模板,提PR时Github自动识别读取注入。 -
LICENSE
声明项目所遵循的版权类型。
目录规范
常见目录结构及文件说明,以下只列出一部分,实际项目可变通。
root/
├── .github/ # ISSUE&PR模板文件夹
├── bin/ # 命令行指令入口文件夹
├── build/ # 工程配置类文件夹
├── dist/ # 打包输出后的产品文件夹
├── docs/ # 文档文件夹,最终被静态网站生成器编译
├── examples/ # 使用示例文件夹
├── packages/ # 子模块文件夹
├── lib/ # es编译后的输出文件夹
├── scripts/ # 脚本命令文件夹
├── src/ # 源代码文件夹
├── test/ # 测试文件夹
├── .babelrc # babel配置文件
├── .editorconfig # 编辑器配置文件
├── .eslintrc # ESLint配置文件
├── .eslintignore # ESLint忽略文件
├── .flowconfig # Flow配置文件
├── .gitattributes # Git属性配置文件
├── .gitignore # Git忽略文件
├── .npmignore # NPM忽略文件
├── .stylelintrc # StyleLint配置文件
├── .travis.yml/circle.yml # CI环境配置文件
├── CHANGELOG.md/History.md # 版本更新说明文件
├── CODE_OF_CONDUCT.md # 行为守则说明文件
├── CONTRIBUTING.md # 贡献指导文件
├── AUTHORS # 贡献者列表文件
├── LICENSE # 版权声明文件
├── PATENTS # 专利声明文件
├── README.md # 自述文件
├── Makefile # Make命令文件
├── Gruntfile.js # Grunt配置文件
├── gulpfile.js # Gulp配置文件
├── karma.conf.js # Karma配置文件
├── webpack.config.js # Webpack配置文件
├── rollup.config.js # Rollup配置文件
├── bower.json # Bower入口文件
├── package.json # NPM入口文件
└── yarn.lock # Yarn生成的模块记录文件