2.1软件过程与配置管理
第一题
agile development敏捷开发过程的特征:
增量式过程
迭代过程
测试驱动开发(Test-Driven)
持续集成,持续交付
V字模型(确认/验证)
第二题
关于软件配置管理SCM的说法正确的是:
用于追踪和控制软件开发过程中的变化
其基本管理单元是软件配置项SCI,即开发过程中发生变化的基本单元
版本是为软件处于特定时刻(moment)的形态指派一个唯一的编号
git是分布式版本控制系统
软件配置项SCI是软件演化过程中发生变化和SCM管理变化的基本单元,不需再细分
第三题
关于git说法正确的:
git中在本地机器上的.git目录对应于SCM中的配置管理数据库CMDB
git中的SCI是文件,有三种形态:已提交(modified)已暂存(staged)已提交(committed)
第四题
用于将github上的某个git仓库设置为本地仓库的远程仓库的指令是:
git remote add
用于将当前staging area 中的文件写入git仓库的指令是:
git commit
第五题
针对git仓库的object graph,正确的说法是:
一个branch(分支)本质上相当于一个指定特定commit节点的指针
可以有两个不同的branch指向同一个commit节点
git commit指令相当于在object graph当前分支HEAD指向的commit基础上,派生出一个新的commit节点
第六题
针对git中commit节点中数据结构,说法正确的:
若说commit相比其他parent来说,某文件f未发生变化,则f在.git中不会重复存储。
如果某个commit节点仅存在于远程服务器的object graph,那么当本地向远程git push的时候,会出现错误提示
包含一个tree,tree中包含一组指针,指向本次commit中包含的所有文件
第七题
将本地仓库中master分支的最新提交推送至远程仓库的指令:
git fetch origin master
git merge
git push origin master
其中origin是远程仓库的网址
2.2软件构造工具
第一题
用于软件设计阶段描述设计思想和设计结果:
Modeling languages(e.g.,JSON)
第二题
关于软件构造过程各阶段的说法不正确的是:
Profiling是static analysis的一种典型形式
正确的有:
Code review 的目的是发现代码中的潜在错误
Refactoring是在不改变代码功能的前提下重写代码,以消除bug,提高质量
Build是将软件从开发状态转化为可运行状态的过程
第三题
以下环节无需执行正在开发的软件:
Code review
需要:
Dynamic code analysis
Debug
Testing
第四题
Dynamic code analysis/profiling解决不了的问题是:
发现程序中潜在的重复代码以便于抽取出来形成可复用函数/类
可以:
发现程序运行过程中的内存分配和占用情况
发现程序运行过程中每个类被实例化的数目,及其所占用的内存
发现程序潜在的性能瓶颈
第五题
以下过程可纳入自动化build:
Compiling .java into .class
Executing JUnit test cases
Using Checkstyle tool to check if code follows Google’s Java code style
Packaging .class files into .jar file and deploying it to a remote server
第六题
常规的构造次序是:
programming-refactoring-debugging-testing-dynamic code analysis/profiling-code review static code analysis-build
通过code review 和profiling找出可能的bug,通过testing找出真实的bug,通过debug找出bug的根源
先根据spec构造完备的测试用例,后续对代码的任何修改,都应重新运行测试用例
Build脚本是由配置语言书写,告知build工具如何一步一步完成自动化build任务