201771030107-廖堃焱 实验一 软件工程准备—<读《现代软件工程—构建之法》的提问>
项目 | 内容 |
作业归属课程 | https://www.cnblogs.com/nwnu-daizh/ |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/12369881.html |
学习目标 | 1.学习GitHub的相关知识。2.通读《构建之法》提出3个具体的问题。3.练习使用Markdown |
这个作业在哪些方面帮助我实现学习目标 | 通过阅读进行理解和质疑 |
参考文献 | 邹欣. 构建之法:现代软件工程[M]. 人民邮电出版社, 2014. |
问题一:托尼霍尔因何造成巨大损失?NULL为什么有如此大的影响?
在读到这本书p13时看到这样的内容:
托尼本人反省, 他在20世纪60年代设计Algol W语言的时候引入了NullReference,对后来的编程语言影响很大,他自己估计给工业界造成的损失应该在10亿美元以上。.
对书中上下文阅读并没有再找到与这次损失的相关的信息,对其中托尼所估计的给工业界造成的损失很好奇。是什么原因致使这样巨大的损失呢?通过我对NullReference的简单了解,NullReferenceException是一种异常抛出,而Algol语言似乎并没有被广泛使用,"ALGOL在美国和欧洲广被从事计算机研究的科学家们采用,其标准输入/输出设施在描述中从缺与及大型计算机供应商对本语言缺乏兴趣致使它在商业应用上受阻",为什么一个小小的异常抛出机制会造成如此之大影响?
通过对他本人生平的了解后找到以下信息:
2009年3月他在Qcon技术会议上发表了题为"Null引用:代价十亿美元的错误"的演讲,回忆自己1965年设计第一个全面的类型系统时,未能抵御住诱惑,加入了Null引用,仅仅是因为实现起来非常容易。它后来成为许多程序设计语言的标准特性,导致了数不清的错误、漏洞和系统崩溃,可能在之后40年中造成了十亿美元的损失。他在同月出版Communications of the ACM中表示,如何证明程序的正确性仍然是计算机科学中有待解决的重大课题。.
错误的程序就是无法运行,会抛出异常,而如何证明程序的正确性,这个判断标准又是怎样的。
问题二:效能分析是怎样进行的?
在读到这本书p27时看到这样的内容:
1.抽样( Sampling ).
2. 代码注人( Instrumentation )
简单来说,抽样就是当程序运行时,Visual Studio时不时看一看这个程序运行在哪一个函数内,并记录下来。程序结束后,Visual Studio就会得出一个关于程序运行时间分布的大致印象。这种方法的优点是不需要改动程序,运行较快,可以很快找到瓶颈,但是不能得出精确的数据,也不能准确表示代码中的调用关系树( Call Tree )。
另一方面,代码注人就是将检测的代码加入到每一个函数中, 这样程序的一举一动都被记录在案,程序的各个效能数据都可以被精准地测量。这一方法的缺点是程序的运行时间会大大加长,还会产生很大的数据文件,也相应增加了数据分析的时间。同时,注入的代码也影响了程序真实的运行情况(这有点像量子物理学中的“测 试的光线干扰了被测物体本身”的现象)。.
对于这两个专业术语,我感觉自己并没有真正理解透彻。还有它进行效能分析的工作原理是什么?
问题三:软件开发的工作量和质量怎么衡量呢?
在读到这本书p50时看到这样的内容:
软件开发的工作量和质量怎么衡量呢?
a.项目任务有多大?
b.花了多少时间?
c.质量如何?
d.是否按时交付?
其实我会有这样的疑问,软件的开发和维护都有许多人一起共同完成,大家负责不同的工作,那么在对待同一个问题时也会有各自的不同的见解和标准。软件开发的质量是大家共同达到某个标准还是各自有各自的要求呢?并且我通过查阅计算机相关资料了解到有程序员会为了保证公司不能解聘自己而在代码程序段中加入“定时炸弹”,类似于多久时间没有该程序员的命令,整个程序就会瘫痪。那么,在衡量软件工程的质量和工作量时,存在此种风险是否也会一同被核验到?