问题一:软件工程要求我们学到什么?
第一遍粗略的翻看了《构建之法》这本书,发现书上只有少部分内容出现代码,说明软件工程这门课不是以代码为主。
课本第8页提到“软件工程是什么”:
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
而根据网上查找的资料:
软件工程是指导计算机软件开发和维护的一门工程学科。
软件工程,就是教你如何编软件,而不是仅仅的写代码。当你准备做个比较大的软件的时候,只能按照软件工程的方法来一步步的设计这个软件。对于做软件来说,编代码的人就像民工,很累,很机械,也没有什么技术含量。懂软件工程的人就像工程师,从头到尾设计软件,而不仅仅是程序。
以上,我认为软件工程这门课,不仅仅要求我们写代码,更重要的是如何将代码实现成一个可用的,有效率的软件,它更像是一份设计图,指导着从最开始的需求分析,到后期的维护运营,所以《构建之法》这本书,软件工程这门课,可能是让我们学习一种管理代码,分工合作和高效率编程等的方法吧。
问题二:没有bug的软件才是一个好的软件?
在还没有接触软件工程这门课的时候,我认为bug是一个软件里隐藏的漏洞,比如计算器按了“+”却进行了减法运算。
课本第17页举了几个关于bug的例子,其中一个这么说道:
小芳穿了一条破洞(feature)牛仔裤,有人认为这两个破洞是bug。
这个例子刷新了我对bug的理解,bug不仅仅指的是软件中出现错误的缺陷,也指着未考虑到用户需求的一种漏洞,比如一双封闭的没有开口的袜子,就是一个bug。
所以一个好的软件是不会有bug的?
根据小芳的例子,在软件自身没有错误的情况下,用户的需求是时刻变化着的,所以一个好的软件也应该与时俱进,不断更新。
所以在课本第15页提到
软件工程的目标——创造“足够好”的软件。
所以,既满足了开发效率、可靠性和可维护性,也满足了用户满意性,这就是一个“足够好”的软件。而所说的bug是不可能全部消灭的,在软件后续的版本中完善足以。
问题三:单元测试究竟是什么,它的好处体现在哪?
课本第19页谈到了“单元测试”。
按照我的理解,是测试自己写的模块?并且谈到“覆盖率”的时候也不是很明白,有没有好的通俗的例子举一下?**
看到网上这么一个总结:
在很多程序员的日常工作中是不怎么经常使用的,但是测试在代码编写过程中的重要性,我们都知道。进行了单元测试的项目可以帮助我们修改我们的错误,同时也让我们对我们的项目更加的自信。如果我们的bug很多而且不去处理的话,以后我们就要花费更大的代价去处理我们的问题。所以测试也是一项很重要的活动
但是由于对“单元测试”的不理解,不是很能感受到这段话的含义,希望能通过实践感受一下“单元测试”。
问题四:什么时候适合选择敏捷?
关于什么是“敏捷”,课本第119页给出答案:
敏捷(Agile)是一股思潮,或者说是一种价值观,它涵盖了好几种软件开发的方法论;这些方法论又是建立在许多行之有效的最佳实践方法之上的。
通过查阅资料了解到:
随着计算机的发展,对软件的需求越来越大,软件的规模也变得越来越大,结构越来越复杂,软件开发管理困难而复杂,在这个“软件危机”背景下产生的传统软件工程,用工程化的方法构建和维护有效和高质量的软件。暂时解决了软件的兵荒马乱时代,但随着社会和科技的发展,对软件的需求变化越来越快,传统的软件工程很难再适应瞬息万变的客户需求,敏捷软件开发应运而生,其轻量级、简单、可快速交付、适应性强收到开发团队的青睐,与传统软件工程并肩,形成软件工程中的两大开发体系。
但是对于敏捷的具体内容仍然不了解,敏捷到底包含了哪些方法,有什么作用,什么时候可以用敏捷?
问题五:软件工程这门课该怎么学?
纵观整本书,虽然书上用很多例子来解释各类名词,通俗易懂,非常有趣,但是这门课感觉还是理论居多,而且比较抽象,我们现在编写的程序跟外面别的大工程根本没法比,感觉这门课的很多知识现在无法运用到具体实践上,很难真正领会到所学的内容,基于理论上的知识能够牢固吗?
但是本周还有个任务是结对编程,算是实践了课本第4章的内容。虽然说“实践出真知”,多做项目就能够掌握理解知识点,但是我们现在做到项目感觉很难涉及到课本理论,所以对这一块还是很茫然。