MIT[Software Construction] Readings阅读心得

引言:
阅读了MIT课程6.031 [Software Construction]的Readings,以下做一总结:
课程链接:http://web.mit.edu/6.031/www/sp20/
Readings部分共有30篇,此处针对第1、3、4、5章节做一总结:
MIT[Software Construction] Readings阅读心得
如图所示:所要总结的章节是:
1.静态检查 Static Checking
3.测试 Testing
4.代码审查 Code Review
5.版本控制 Version Control

1.静态检查 Static Checking

在编程过程中,可以考虑一种语言有以下三种自动检查:
**1)静态检查:**在程序运行前发现错误
例如:在idea/eclipse中编写java代码时,如果出现拼写错误或者中文分号时,会有自动提醒,以便及时发现错误
**2)动态检查:**执行代码后会自动发现该错误:
例如:运行java程序后,发现数组越界或者整除0的情况
**3)不检查:**单纯靠人工发现错误

对于以上三种检查方法从强到弱可排为:
静态检查>动态检查>不检查

静态检查的作用:
1.避免错误。 静态检查通过在运行时捕获类型错误和其他错误来帮助提高安全性。
2.容易明白。 因为类型在代码中明确声明,所以有助于理解。
3.随时进行更改。 静态检查可以通过识别需要串联更改的其他位置来更轻松地更改代码。例如,当我们更改变量的名称或类型时,编译器会立即在使用该变量的所有位置显示错误,并提醒我们也更新它们。

2.测试 Testing

在编程时,特别是开发一个较大的系统时,我们需要不断的进行测试以达到早发现早解决的目的
一般我们可选择测试优先编程,即在编写代码之前,先编写测试。
MIT[Software Construction] Readings阅读心得如图所示:测试用例的编写方法有很多
主要分为三大部分:
1.白盒测试
2.黑盒测试
3.灰盒测试

在黑盒测试中,我们使用分区和边界值对系统进行测试
分区测试:
通过划分不同的子域,可以使用例足够小和详尽,以便于查找程序中的错误
边界测试
错误通常会发生在子域的边界处,所以边界测试必不可少
例如:对于函数abs(),我们可以做以下分区
MIT[Software Construction] Readings阅读心得对于其边界可以对0进行测试:
0是正负数的边界

白盒测试:
可以通过不同的覆盖范围进行用例测试
1.语句覆盖
2.分支覆盖
3.路径覆盖

在我们测试的过程中尽可能对每个模块进行单元测试
可以使用JUnit进行自动化单元测试
JUnit是一个广泛采用的Java单元测试库,方法前加@Test,使用像断言方法还检查结果
例如:测试max()MIT[Software Construction] Readings阅读心得另外自动化的回归测试可防止错误的再次出现。
**

3.代码审查 Code Review

**
所谓的代码审查,就是形成一个良好的代码编写风格
对于如下例子:
MIT[Software Construction] Readings阅读心得我们可以看到代码的重复冗余,所以在编写代码的过程中,要尽量减少代码的重复
**注释:**使代码更易于理解,更易于避免错误,并且易于更改。
快速失败:越早失败越是容易发现错误;此处静态检查就可以更快的发现错误,在程序未运行之前就能够对拼写等错误进行提示
见名知义对于变量的命名,要做到见名知义,使自己和他人能够更好的理解程序
缩进对于我们所编写的程序,使用一致的缩进,使代码更加易于阅读
方法应返回结果,而不是打印结果
对于java语言而言 应该使用return返回结果,而不是System.out.println()

4.版本控制 Version Control

如果我们个人写一个小程序:输出三个数的最大值;这一个代码的工作并不大,我们可以随时修改;但是对于一个项目的开发,每一次对项目的更改都可能造成比原始版本更加严重的错误,因此我们要在开发过程中对每一版本进行规划,以便发生错误时,可以恢复到之前的版本
个人版本的改变:MIT[Software Construction] Readings阅读心得个人在不同的平台改变MIT[Software Construction] Readings阅读心得多个开发人员的使用MIT[Software Construction] Readings阅读心得对于以上几种情形,为了保证我们的代码版本能够有效的存储和恢复,我们可以使用Git
其分布式版本控制系统允许各种不同的协作图,其中团队和团队子集可以轻松地尝试使用备用版本的代码和历史记录,将版本合并在一起。

总结:

总的来说,要有良好的代码风格,测试要优先编程,可以使用Git对编程版本进行备份。