| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zjlg/rjjc20 |
|---|---|
| 这个作业的目标 | <阅读《构建之法》并提出三个问题并思考> |
| 姓名-学号 | <潘天文>-<2018330301088> |
软件基础第二次作业
问题一
我看了《构建之法》第一章的以下内容:
我们知道许多计算机硬件的能力大致以每两年提高一倍速度发展,而软件开发的流程却没有这样的提速过程,开发成本也没有下降,为什么?软件开发过程有什么特别的难题?学者们总结了下面五点:
1.复杂度(Complexity)
2.不可见性(Invisibility)
3.易变性(Changeability)
4.服从性(Conformity)
5.非连续性(Discontinuity)
看完这段话,我有个问题:在人工智能快速发展的时代,未来的代码可能交由电脑来自己编写,未来软件的开发会有哪些难题呢?我也进行了相关资料的调查,发现现任特斯拉人工智能总监的OpenAl前研究科学家Andrej Karpathy是是这么说的:
未来很大一部分程序员不会维护复杂的软件存储库,编写错综复杂的程序或分析其运行时间。他们收集,清理,操纵,标记,分析和可视化为神经网络提供数据的数据。
虽然对于未来软件的发展是怎么样,我也不知道,但是我认为对于软件开发的复杂性这一个问题,应该会有比较好的改善,未来软件的各个模块之间的各种显性或隐形的依赖关系,在人工智能的参与下,会更有效地理解运用并处理这种复杂关系。而不仅仅依赖与人的智力、记忆力。

问题二
我看了《构建之法》第二章中的以下这段话:
把单元测试的责任和代码作者绑定在一起后,代码作者就能更真切地体会到复杂代码的副作用,因为验证复杂代码的正确性要困难得多。要注意:100%的代码覆盖率并不等于100%的正确性!分析如下:
a.代码覆盖率对于“应该写但是没有写的代码”无能为力。例如代码申请了内存或其他资源,但并没有释放。又如,代码中并没有处理错误情况。就像没有处理和文件、网络相关的一些异常情况,例如文件不存在、权限有问题,等等。
b.代码中有效能问题,虽然代码执行了,并且也正确地返回了,但是代码效率非常低。有些情况下,可以针对代码效率写一个单元测试。
c.多线程环境中地同步问题,这个问题和代码执行的时序、共享资源的锁定有关。
d.其他与外部条件相关的问题(例如与设备、网络相关的问题)。
看完这段话后,我有个问题:代码覆盖是起什么作用,和单元测试是什么关系,代码覆盖率和代码的正确性之间存在什么关系。我在百度上搜索,查到了这样的观点:
代码覆盖是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率。在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或90%。
所以我知道了代码覆盖率可以用来衡量测试的好坏,但是我又有了一个困惑,一段代码的好坏应该用什么评判标准来衡量。
问题三
我看了《构建之法》第二章中的以下这段话:
单元测试必须由最熟悉代码的人(程序的作者)来写。代码的作者最了解代码的目的、特点和实现的局限性。所以、写单元测试没有比作者更合适的人选了。
看完这段话后,我有个问题:单元测试一定要作者自己写吗?
在我查阅了部分资料后,我发现了其实开发人员和测试人员都可以写单元测试。对于一些测试人员供给不足的小公司,要求开发人员写单元测试,而对于一些大公司,常常设置有测试部门进行。开发人员对代码最熟悉,而且开发技能也强,开发自己写单元测试效率上和覆盖率上都比较高。而且单元测试有时候需要开发对代码进行部分重构才方便进行,开发自己做这些重构也比较顺手。但是开发人员可能会因为业务代码的繁重而顾不及单元测试的书写,如果只是写单测对软件的进益帮助不大。测试人员写测试有比较好的测试思想,可以更好地保证用例的覆盖。而且通过写单测测试能更好地了解具体代码结构、流程,对于后续的业务测试也有利。但是测试人员对代码没有开发人员熟悉。
浙公网安备 33010602011771号