阅读文献(期中作业)
《没有银弹》
当把软件工程这些年的进展和硬件开发相比,会发现软件开发相比硬件要缓慢地多。即使我们弄清楚了主要任务是——打造有抽象软件实体构成的复杂概念结构——我们也无法找到一种降低软件成本的银弹。进一步分析这个问题,我们会发现,没有银弹的本质原因来源于现代软件系统的内在特性:复杂性,一致性,可变性和不可见性。复杂性主要体现在没有太多重复的部分。一致性体现在为了保持接口的一致性带来了相应的复杂性;可变性来源于需求的易变性,不可见性体现在无法可视化软件,无法通过人的直观简化问题。
《可能有银弹》
作者觉得上一文作者对银弹的理解可能不一定正确。在本文作者看来,银弹应该是一种凡是转变和可重复使用的革命。作者列举了下列可能成为银弹的技术。
面向对象技术可以使软件变得有形,是可重用类和客户代码得以出现。
哥白尼革命论证了需求的升级最终会引导软件范式革命的到来。
工业革命在一定程度上说明了软件的工业革命并无可能。我们完全可以将工具的生产和消费和软件的生产和消费相类比。
《大泥球》
大泥球的定义是一种软件系统缺乏可感知的架构。并且这种架构是普遍存在的。在我们的项目中的确存在大泥球。我们的项目中的的功能是紧耦合的,其中包括线程,调试信息,启动程序和消息传递机制。从更好的角度来说,我们应该将架构更加清晰一些。
《catB》
这篇essay对比了两种不同的自由软件开发模型。
教堂模型:每个release的代码都是开源的,但是各个release之间的代码严格受限。比如GNU Emacs和GCC。
Bazaar模型,代码的开发过程完全公开。这个过程的创始人就是Linus。这篇文章的中心思想就是“被越多双眼球关注,出现重大bug的可能性就越小”。
在我们的项目中,由于code review只在两个人中进行,所以这个效应体现得并不明显。
《方法的好与坏》
方法的好与坏对四种普遍观念提出了质疑。
简化:接口和实现都必须简化。
无误:设计必须在任何可观测方面都是无误的
一致:设计可以稍微让步于一致,甚至可能带来复杂和不完整。一致性和正确性一样重要
完整性:设计必须包含和实际中几乎一样的情形。所有合理的期望都必须被考虑
作者觉得应该进行如下更改
简化:和接口比起来实现应当更简单。并且简化性是整个设计中最重要的要素
正确性:重要性稍次简化性
一致性:不能过分不一致。一致性有时可以牺牲
完整性:完整性可以让步于其他性质。
(后面没看,但是讲道理不是很赞同。光从C++, 来看,想写出高质量的可复用代码,减少用户代码出错的各种可能性,就意味着几乎不可能做到简洁。并且我个人觉得接口简单比实现简单更重要。接口一致能避免很多bug的出现)
《瀑布模型》
特点是开发过程按设计的一系列阶段顺序展开。每个阶段都会产生循环反馈,是一种比较流行的模型。缺点是缺少迭代过程,不可逆。
我们团队中用了里程碑,结对编程和scrum的敏捷思想。
阅读材料2
软件工程和计算机科学区别太大了。软件工程注重方法论,注重利用现有的工具写出高效可复用稳定的代码,非常的工程和实际。而计算机科学非常偏理论,注重知识而不是方法。
本校的计算机教育:计算机系的大作业太水,考试靠突击拿高分,整个三年学生连超过千行的大项目都没几个,都是练笔小程序。