【软件工程】阅读《构建之法》1-5章
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2178
第一章:概论
看了第1章的内容,了解到软件工程是把系统的、有序的、可量化的方法应 用到软件的开发、运营和维护上的过程。这一章主要讲解了软件工程的基本内涵。我比较认同文中程序 (算法、数据结构)是基本功,软件工程决定了软件的质量这个观点。在1.1节中提到用二叉树的遍历算法,二叉树是数据结构,遍历的实现是算法,但是单独的这个程序在实际中的用处似乎并不大,而软件工程就可以使这个程序合理的应用在特定的场景。
软件开发应用到软件工程的思想,通过合理规划软件开发的流程,就能使软件开发的成本大大减少,书中提到工程师的宗旨时:我构建,故我在,我有点不太理解,软件工程和机械工程、航空工程等工程学科一样,其中也有工程理论、质量控制论的原理,是一门偏理论的学问,我查了一下资料,有人做了这样的比喻,软件工程主要是设计,就象盖大楼之前画那个设计图;软件技术主要是编程,就象盖大楼的人,所以一名优秀的软件工程师,除了不断学习做开发前的设计之外,需不需要更多的提高自己软件开发的能力,还是说到达某一阶段止步就好?
第二章:个人技术和流程
看了第2章的内容,了解到单元测试、回归测试、效能分析、个人软件开发流程(PSP)的一些基本概念和技术。
在2.2节效能分析工中提到大家也要注意避免没有做分析就过早地进行“效能提高”,如果我们不经分析就盲目优化,也许会事倍功半。效能分析是根据影响效能的主要因素,运用一般系统分析的方法,在收集信息的基础上,确定分析目标,建立综合反映某事物达到规定目标的能力测度算法,最终给出衡量某事物效能的测度结果。那应该在什么时候进行效能提高呢?我了解了一下关于效能的评估,对于一个程序(效能来说)的评估,主要从时间和空间来进行考虑的。时间是指程序运行的时间,称为时间复杂度,空间方面则是指程序在计算机内存所占用的时间大小,称为空间复杂度。
其中有一些在开发时提高效能的小技巧:
1、少用多层循环嵌套,据一同学透析他接盘的一老项目,发现了一个套了至少五六层循环,且每层循环中 包含了 数量不一的sql 查询。 运行一次要好几分钟 ,好像是输出表报的一个功能。如此糟糕的代码,且无注释,当事人写完以后也难以记清逻辑。
2、循环中创建对象,可以在循环外 定义一个 对象 Class A,在循环中在进行初始化 new ClassA();
3、变量应该在 使用的时候在去定义 ,而不是全局。
这是在编程细节上进行的效能提高,那整个项目的的效能提高又应该从什么时候开始呢?
第三章:软件工程师的成长
看了第3章的内容,了解到了一些衡量一个优秀的软件工程师的标准以及成长的方向。
在3.1节中提到初级软件工程师应该从几方面的成长,首先是积累软件开发相关的知识,提升技术技能;其次需要积累问题领域的知识和经验;再次是对通用的软件设计思想和软件工程思想的理解;从次是提升职业技能,包括自我管理的能力,表达和交流的能力,与 人合作的能力,按质按量完成任务的执行力等,最后些实际的工作成果。其中对实际成果的衡量给出了很详细的评价标准,如:项目大小、花费时间、质量以及按时交付等因素。
这里提到随着经验的增长,一个工程师可以掌握更广 泛、更深入的技术和问题领域的知识,那一名优秀的软件工程师,需要了解多少其他领域的知识,以及需要掌握的领域又是哪些?比如说软件工程师中有金融软件工程师,是具备软件研发基础和金融业务知识的高级技术人才,既要懂软件技术,又要掌握金融知识。
第四章:两人合作
看了第4章的内容,了解到代码的规范和两人合作的不同阶段和技巧。
如果个别人使用了不同的风格,以后大家在阅读,修改代码时就会有很多不便之处。同时团队中制定的这么简单的规范都不能实施的话,会让大家感觉不好,对以后其他工作也有影响。在本章4.5.2节中提到,在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。我觉得这个观点稍微有点片面了,因为每个人擅长的东西不一样,有些人擅长布局和UI设计,有人擅长算法,而一个程序的质量不是说界面好看就水平高了,也不是说只有功能而没有好看的视图给到用户体验也不好,只能说只有在团队中发挥自己最大的作用,充分利用团队里每个人的优势,才能使程序达到最大。找了一下百度,无论是对开发团队还是对于个人,结对编程都会是非常不错的注意。
下面是一些结对编程的优点:
- 程序员互相帮助,互相教对方,可以得到能力上的互补。
- 可以让编程环境有效地贯彻Design。
- 增强代码和产品质量,并有效的减少BUG。
- 降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
- 在编程中,相互讨论,可能更快更有效地解决问题。
第五章:团队和流程
看了第5章的内容,了解到软件的团队模式和软件的开发流程,一个良好的团队模式和开发流程能够使软件开发事半功倍。
团队成员有各自的分工,互相依赖合作,共同完成任务,软件团队有各种形式,适用于不同的人员和需求,基于直觉形成的团队模式未必是最合适的。本章5.2节中提到的团队模式有主治医师模式,明星模式,社区模式,业余剧团模式,秘密团队,特工团队,交响乐团模式等等,有这么多的团队模式,那哪一种模式才适合某个团队呢,是自然形成的与以上或未提及的团队模式相似的模式好,还是在进行组织团队时就定好一个团队模式方向去发展好,但是每个团队都有各自的特殊性,不一定会按照原方向发展。书中还提到很多软件公司的团队最后都演变成功能团队,简而言之,就是具备不同能力的同事们平等协作, 共同完成一个功能。那就是说大部分的团队都会往功能团队模式发展吗。
一支程序开发团队之所以成立,是为了承担并完成某项由任何个人都无法独立完成的任务。因为只有团队合作,才能将复杂的事情变得简单,将简单的事情变得容易,使做事的效率倍增,可以说,团队合作正推动企业向简单化、专业化、标准化的方向发展。在软件这个特殊的行业,更需要如此,国内的软件企业长不大,出不了好的产品,第一大原因就是管理,第二大原因可能就是没有一个出色的团队。组建团队的目的是希望通过最小的代价获得最佳的开发效果。不管怎样只要是团队中的每个人能做好自己的事情,并能不断的和别人交流,那么这个团队就是成功的。
总结
阅读《构建之法》第1-5章的知识内容后,获益匪浅,慢慢的对软件工程有了一些模糊的理解,了解到了软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。质量与生产率之间有着内在的联系,高生产率必须以质量合格为前提。通过工程化的思想,能够使软件开发更高效。还了解到了在软件开发中团队合作的重要性,还有对软件的开发流程有了重新的认识,一个优秀的产品,需要一个完整的开发流程,先理清用户需求再进行程序的开发和维护,而不是直接就开始写代码后期又一点一点地改。在团队合作中需要每个成员的协调,使团队发挥最大作用,才能大大提高开发产品的质量。