软件构造第二章总结

前言:经过一周的学习,第二章已经结束了,第一章介绍了软件构造过程中的目标有哪些,这章简单地介绍软件开发的基本过程,有哪些开发模型、开发技术、开发工具。这里记录一些重要的点以及思考来作为学习笔记。

一、软件开发生命周期

1.From 0 to 1

软件开发首先需要开发一个最初版本来,之后才能进行维护、更新等等,这个生命周期可以大致划分如下:
①进行规划:分析市场现状,市场需要的软件功能是什么,开发软件需要多少资源等等
②需求分析:要对软件各类受众的需求进行分析,此处的受众并不单指软件用户,而是包括所有软件利益相关方
③进行设计:解决如何做软件,如何实现的问题
④实现:写代码 ⑤测试与集成 ⑥运行与维护

2. From 1 to n

这主要是指软件发布以后对其不断维护与更新的过程,分析用户的功能需求是否产生了一些变化,软件体验如何等等,不断完善软件以延长生命周期,提高竞争力。

二、传统软件开发模型

这里简单介绍5种传统的开发模型,它们都基于以下两种逻辑的一种:
线性过程:开发过程中按部就班,前一步完成以后进行下一部分的设计,整个过程中不会进行回溯
迭代过程:总体上遵循线性过程,但是可以回溯到之前的设计部分进行迭代

1.瀑布过程

瀑布过程严格遵循线性过程,在构思,启动,分析,设计,构造,测试,实施和维护的各个阶段,稳步向下进行像是瀑布一样。
它有许多优点:是线性推进的,阶段划分清楚,管理起来简单方便;
但同时缺点也很明显,由于设计过程稳步推进,当需求发生变化时便无法适应

2.增量过程

将软件划分为多个增量,每一个增量按照瀑布过程进行设计,是多个瀑布的串行。
显然,增量过程也是符合线性过程的,具有它的一些优点,并作出了一些改进:由于划分增量的存在,当需求增加时可以很好地融入过程中,只需增加增量即可,但如果像是功能发生彻底改变的需求变化,仍然难以适应

3.V字模型

V模型大体可以划分为下面几个不同的阶段步骤,既需求分析、概要设计、祥细设计、编码、单元测试、集成测试、系统测试、验收测试。它通过开发和测试同时进行的方式来缩短开发周期,提高开发效率。可以将它作为瀑布模型的一种扩展来看待

4.原型开发

这一模型不再遵循线性过程而是遵循迭代过程。这一模型的思想是尽早开发出一个软件版本,然后拿给用户得到反馈,然后在原型上不断迭代,修改版本,再拿给用户进行试用,不断重复直到用户满意。这样便能及早发现用户的需求变化并作出应对。
显然,这一过程会有高昂的时间代价,但相应的,开发质量、适应能力也非常高

5.螺旋开发

这是一种风险驱动的过程模型,使用多轮迭代来设计,每一轮迭代都遵循原型过程,进行严格风险分析后才能进入下一轮迭代
每一轮迭代大致过程如下:制定目标→风险评估→开发与测试→计划下一轮迭代

三、敏捷开发

在这里插入图片描述
敏捷开发是现代常用的开发模型,通过快速迭代和小规模的持续改进,以快速适应变化。通过极限的用户参与、极限的小步骤迭代、极限的确认/验证来完善开发过程

四、软件配置管理

核心:版本控制和基线的确立

1.软件配置项:是指软件中发生变化基本单元,如文件。每一个配置项修改后可形成不同版本,某一时刻所有配置项都处于某一特定版本,所有配置项组合成一个特定版本的软件
2.基线:软件持续变化过程中的 “稳定时刻”(例如:对外发布的版本)
3.对于配置项的管理可以采用配置管理数据库(CMDB),存储软件的各配置项随时间发生变化的信息+基线
4.版本控制:采用版本控制系统(VCS),可分为Local,Centralized,Distributed三种。
Local VCS中,仓库存储于开发者本地机器,无法共享和协作
Centralized VCS中,仓库存储于独立的服务器,支持多开发者之间的协作
Distributed VCS中,仓库存储于独立的服务器+每个开发者的本地机器
5.版本控制工具:Git
在这里插入图片描述

在git中,文件的状态一定处于上图中的一种。workspace是当前的工作目录,存储着该工程所有文件。Local repository是git在本地创建的仓库,Remote repository是远程服务器的仓库,staging是暂存区,用于隔离工作目录与,本地仓库。
可通过git add命令将工作目录中文件存入暂存区,然后可以通过git commit命令将暂存区的文件存入本地仓库,只有存入本地仓库的文件才能存入远程仓库。远程服务器上仓库的文件可以由多个开发者共享,可通过git clone命令进行复制

Git的所有操作都是在一个图数据结构(对象图)上进行,对象图是指版本之间的演化关系图,一条边A->B表征了“在版本B的基础上作出变化,形成了版本A”
从另一台机器/服务器复制git项目意味着复制整个对象图–gitclone URL local_repository

这里对基本的git命令进行列举:
–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.编程

①编程语言+集成开发环境
②建模语言:以一套一致的规则定义来可视化、推理、验证和交流系统的设计,最常用的便是UML图
③配置语言: 配置文件配置程序的参数和初始设置。将程序中可变与不可变的因素,稳定与不稳定的因素隔离开来,可以把可变、不稳定的部分放在配置文件中,避免修改程序

2.代码评审(静态)

静态的代码评审不需要运行程序,而是对代码直接进行分析。经常采用的手段有正式的代码评审会议、结对编程、走查、自动化评审等等。
正式的代码评审会议在一个正式场合召集开发人员,集体对代码进行分析,是一种非常有效的手段。那种固存在自己编程经验中的Bug一般很难自己找出来,但对于他人来说却可能很明显。

3.动态代码分析

动态代码分析要执行程序并观察执行结果,根据结果来收集数据,从而分析代码中存在的不足。测试是否充分、测试达到的覆盖度有多少、能否测量程序的时空复杂度都是设计时需要关心的问题。

4.调试与测试

测试与调试是两个不同的概念,但都是重要的环节。
测试的目的是要发现程序中是否存在错误,因此一个好的测试用例要能够发现程序中潜在的bug而不是存在着bug却顺利地通过了样例。
在测试发现错误以后,需要通过调试进一步定位错误的位置,修改对应位置的代码,纠正错误,调试之后再来进行测试,通过测试说明纠正了错误,否则仍需要继续调试。这样不断往复来提高软件的正确性。
但要注意的是,调试与测试并不能够提高软件质量,它们只是来发现并纠正程序中不应存在的bug,软件质量是需要通过高质量的编码与良好的设计来完成的。

5.重构

代码重构并不是指将代码完全推到重写,它要求软件对外部的接口保持不变,即在不改变功能的前提下优化代码,对代码内部进行优化来提高质量。

六、狭义软件构造过程:Build

这里我们的目标是借助于工具,将软件构造各阶段的活动“自动化“(诸如编译、打包、静态分析、测试、生成文档、部署、…),尽可能脱离“手工作业”,提高构造效率

1.针对不同类型的语言或是文件,构建过程也是各不相同的。

①编译型语言,构建过程需要先将源代码编译为目标文件,再进行打包,从而到目标机器上执行
②解释型语言,构建过程可以省略目标文件,直接从源代码进行打包,但这不意味着没有编译就不能保证正确性,它采用额外的手段在书写代码时进行部分正确性检查
③Web-Based应用:这是编译代码、解释代码、配置或数据文件的混合,因此在打包的文件中,存在由源代码直接打包而来的,也存在经过目标文件进行中转的,是混合体

2.构建系统的组件

构建系统由很多部分组成,包括版本控制工具、代码树、对象树(目标文件)、编译工具(如编译器、链接器等)、构建工具(主要用来编排整个构建过程)、构件机器(由目标机器与构建机器是否相同可分为原生编译与跨平台编译)、生成可安装在用户机器上的软件等等

3.构建语言

类似编程语言,遵循一定的编写规范,告诉构建工具如何一步步地进行构建,描述整个构建过程的

4.构建工具

①make:用一些简单地命令进行组合,动态指定构建的行为如运行、打包等
–# make new 生成子目录(src, bin, res等)
–# make build 在bin中编译并生成Java类
–# make clean 清理编译结果
–# make rebuild 清理编译结果并重新编译(clean + build)
–# make run 检查执行结果
–# make jar 生成可执行的jarfile
②Ant:将构建系统中的每个任务封装成高级task形式
–ant compile: 用于将所有Java源文件编译成类文件
–ant jar: 用于将类文件打包到单个Jar文件中
–ant package: 创建完整的软件发行包,附上版本号
–ant clean: 用于从构建树中删除所有生成的文件
–ant javadoc:使用Javadoc工具生成API文档
–ant: 用于执行默认目标,该目标很可能与软件包目标相同
③Maven:只需在项目的pom.xml简单声明,Maven可自动将所需依赖项从远程服务器下载到本地并加入项目,省去了繁琐的手工配置过程。下载的JAR在本地由Maven统一管理,在各个本地项目之间共享。更多的功能可以插件形式进行扩展。
运行方式:一般情况下,在命令行执行maven指令(clean, compile, test, package, install, deploy, …);在Eclipse中可以以plugin的形式加入maven支持,直接创建符合Maven标准的project,并加以build
④Gradle:采用自几的构造语言,这里不多做介绍
⑤Eclipse:可进行普通的java工程构建,提供了一套完整的开发工具,用于代码编辑,编译,版本控制,测试和任务跟踪,可以以可视化的方式进行构建

总结:这一章主要是大致对软件构造的基本过程进行介绍,对各种开发技术、开发工具都有所涉及,指导我们如何实现第一章的质量目标

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值