阅读《构建之法》1-5章的感想

这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2178


 

 第1章 概论

       第一章前部分主要说了软件、程序、软件工程三者之间的关系,首先当写了一个程序拥有了一定的用户随之而来的需求这时候便需要出现一个软件去满足各种功能,然后再扩展到一个能保证服务质量的软件服务,而软件构建的过程又是十分复杂的,在保证软件在修改过程中能不断提高质量又保持以前的质量,就需要进行软件测试,一个软件是否实现它的价值这时候就需要从需求分析开始,把合适的需求梳理出来,再开展后续工作,到最后发布软件,总的来说就是:软件=程序+软件工程 一个扩展的推论是:软件企业=软件+商业模式。 软件开发包括四个阶段:1.玩具阶段 2.业余爱好阶段 3.探索阶段 4.成熟的产业阶段 

      接下来读者向我们介绍了什么是软件工程? 总的来说软件工程是把系统的、可量化的方法应用到软件的开发、运营和维护上的过程。包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。

      看完了第一章我有一个疑问就是:我们目前所学的专业知识是否与在外工作所需的知识技能是否匹配呢?


 

 第2章 个人技术和流程

       第二章前部分主要说单元测试,单元测试能有效解决自己负责的模块功能定义无法明确、模块内部改变影响其他模块、模块质量无法保证稳定的、量化的等一系列问题,可是怎样才算一个好的单元测试呢?首先单元测试应该在最基本的功能/参数上验证程序的正确性,单元测试也必须由最熟悉代码的人(程序的作者)来写,单元测试过后,机器状态保持不变,单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟),而且单元测试应该产生可重复,一致的结果,还有独立性-单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性,还有单元测试应该覆盖所有代码路径且集成到自动测试的框架中,并和产品代码一起保存和维护。

      接下来就是讲的是效能分析工具,如何能让自己的程序跑得又快又好,一般的做法是先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析,接着代码分析的结果就出来了,可以继续进行“效能测试,分析改进,再效能测试”的流程,逐渐提高程序的效能和我们的编程水平,但是也要避免没有做分析就过早地进行效能提高,如果我们不经分析就盲目优化也许会事倍功半。

      看完了第二章我有一个疑问就是:如果单元测试的结果是错的,为什么一定是程序出了问题?


 

 第3章  软件工程师的成长

     这一章主要是讲软件工程师的成长,主要从个人能力的衡量和发展、软件工程师的职业发展、技能的反面一共三个方面来讲述软件工程师的成长。

     首先我们应该如何来衡量证明自己的能力呢?首先是成长,读者认为:1.积累软件开发相关知识,提升技术技能。2.积累问题领域的知识和经验。3.对通用的软件设计思想和软件工程思想的理解。4.提升职业技能。5.实际成果。接着衡量软件开发的工作量和质量,从以下四个方面:1.项目任务有多大。2.花了多少时间。3.质量如何。4.是否按时交付。然后是团队对个人的期望:1.交流。2.说道做到。3.接受团队赋予的角色并按角色要求工作。4.全力投入团队的活动。5.按照团队流程的要求工作。6.准备。7.理性的工作。

     那么软件工程的职业是如何发展的呢? 首先考级之路,接下来是职业成长,然后是大公司版本,例如成为一个高级工程师,最后是对自我的评估。

     那么什么是技能的反面呢?就是一个“不精通”的面试者的编程过程实际上就是一个“解决问题”的过程。那么我们该如何提高我们的技能呢?首先我们需要通过不断的练习,把那些低层次的问题解决了,变成不用经过大脑的自动操作,然后才有时间和脑力来解决高层次的问题。

    看完了第三章我有一个疑问就是:在如今的时代,需要一位具备什么职业素养的软件工程师?

 


 

第4章 两人合作

      这一章一开始写的是如何规范我们写的代码:1.代码风格要规范。2.代码设计要规范。 那么代码风格需要怎么样规范呢?首先代码风格的原则是:简明、易读、无二义性(缩进、行宽、括号、断行与空白的{}行 、分行、命名、下划线、大小写、注释);那么代码设计要如何规范呢?最好遵守以下规定:1.函数。2.goto。3.错误处理。4.如何处理C++中的类。

       接着讲代码复审,代码复审的正确定义:看代码是否在“代码规范”的框架内正确地解决了问题,那么代码复审的形式是什么呢?1.自我复审。2.同伴复审。3.团队复审。而同伴复审是最基础的复审手段。代码复审的目的在于:1.找出代码的错误。2.发现逻辑错误。3.发现算法错误。4.发现潜在的错误和回归性错误。5.发现可能需要改进的地方。6.教育(互相教育)开发人员,传授经验让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。那么怎么样是一个简单的代码复审核查表,主要包括:概要部分、设计规范部分、代码规范部分、具体规范部分、具体代码部分、效能、可读性、可测试性。

     在我们以后的项目中,有着非常多的而且多变的项目需求,同时存在着工期、质量、和资源的矛盾,我们团队成员各自的水平、目标也不一致。那么我们如何来构建一个和平友好高效的团队呢?我觉得在一个团队中,每个人都有自己不同的想法和意见,这时如何能说服对方?我觉得我们双方都需要意识到,问题早点出现要比晚点出现要好得很多,并且正确地给自己的搭档给予反馈。

     看完了第四章我有一个疑问就是:为什么要结对编程?我觉得单人编程也挺好的。

 


 

第5章 团队和流程

    这一章一开始写的是非团队和团队。团队是有一致的集体目标一起完成这个目标,一个团队的成员不一定要同时工作,而非团队成员则想搬多少就搬多少,不想搬了就走人。团队成员有各自的分工,互相依赖合作共同完成任务,而非团队成员各自行动独立吧任务完成,软件团队的模式有以下几种:1.一窝蜂模式。2.主治医生模式。3.明星模式。4.社区模式。5.业余剧团模式。6.秘密团队。7.特工团队。8.交响乐团模式。9.爵士乐模式。10.功能团队模式。11.官僚模式。

   接下来讲的是开发流程。有以下几种模式:1.写了再改模式。2.瀑布模式。3.由瀑布模型的各种变形。4.统一流程。5.老板驱动的流程。6.渐进交付的流程,mvp和mbp。7.tsp的原则。

    看完了第五章我有一个疑问就是:流程的目的是什么呢?

 


 

 参考文献

技术人生的职场众生相 – 十多年的经验与心得   http://kayow.com/2018/05/devlife/

 https://www.cnblogs.com/xinz/p/3852177.html《现代软件工程 课件 软件工程师能力自我评价表》

 

posted @ 2018-10-06 21:48  unilee  阅读(179)  评论(2编辑  收藏  举报