几个星期前,我阅读过一篇文章,一位老师教导自己的学生要积极地去阅读文学文献,其中,我很欣赏他的一句话:“Just think of liturature as if you're reading a long text-message”。引申到这里,对比后才发现自己在现实生活中真的很少在课后花时间来细看自己的专业书籍,说来惭愧,这种情况出现的频率最多的就是在学期末备战考试了。因为这次的作业,我似乎告诉自己这是一个非常“恰当”的理由去让自己提前去完成未完的“任务”。阅读一本书,就要认真,要对得起自己,还要对得起作者。这次阅读邹欣老师著作的《现代软件工程——构造之法 》的第一到第五章,我在课堂上用了3节课的时间,在课下用了一个半小时,受益匪浅!

  • 第一章(概论)1-19

这一章主要是把“软件工程”这四个字剖析了。从一开始的介绍,就让我们了解到 软件=程序+软件工程,程序=数据结构+算法 。

软件工程是把系统的、有效的、可量化的方法应用到软件的开发、运营和维护上的过程。一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数等等。“软件工程”是一个大项目,里面有很多的概念需要我们理解:源代码管理(配置管理)、质量保障、软件测试、需求分析、程序理解、软件维护(服务运营)、软件生命周期、项目管理、用户体验等等。

“软件工程”的概念是在1968年第一次被提出来的,为了更好的了解它的历史及影响,我们拿软件业和航空业来做对比,可以得出好多相似的地方:

软件它是属于逻辑产品,生产的团队很大,虽然维护比较复杂且易退化,但是它不会磨损老化。在1.2.5节中,谈到了什么是好的软件?同时,我也很疑惑,因为Bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性,那么是不是软件没有Bug就是好软件呢?我觉得不然,因为有实际用处的同时又是完美的软件,在这个世界上是不存在的。就算微软很自豪的window8系统也会有偶尔出现蓝屏的现象,但是这并不会直接影响到微软公司的能力,也不会直接影响到window8系统的可用性,因为你的RP是由你的程序质量决定的,所以我个人觉得软件不存在完美,总会有顾客的客观或主观因素而感到不满意,我们不能迎合所有的市场需求,最重要的还是考核市场的主流需求而不断完善自己跟团队研发的作品。

  • 第二章(个人技术和流程)20-41

这一章主要是介绍 PSP(Personal Software Process),也就是指个人软件开发的流程,主要由单元测试和效能分析工具组成。

单元测试可以准确、快速地保证程序程序基本模块的正确性,创建单元测试函数的主要步骤是:设置数据、使用被测试类型的功能、比较实际结果和预期的结果。在2.1.2节中谈到了怎样才算一个好的单元测试,经总结后应该是:单元测试应该在最低的功能/参数上验证程序的正确性;单元测试必须由最熟悉代码的人(程序的作者)来写;单元测试过后,机器状态保持不变;单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟);单元测试应该产生可重复、一致的结果;单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据以保持单元测试的独立性;单元测试应该覆盖所有代码路径;单元测试应该集成到自动测试的框架中;单元测试必须和产品代码一起保存和维护。

效能分析主要有抽样和代码注入这两种分析方法。抽样方法不需要改动程序,运行较快,可以很快找到瓶颈,但是不能得出精确的数据,也不能准确表示代码中的调用关系树。而代码注入可以使程序的各个数据都可以被精确地测量,但运行的时间会大大加长,还会产生很大的数据文件,同时也增加了数据分析的时间,这会影响程序的运行情况。如果我们不经分析就盲目优化分析,也许会事倍功半,所以我们要根据实际情况来选择适合自己程序的分析方法。

2.3节中,对比了大学四年级的学生和工作三年的软件工程师的个人项目耗时,表中可以明显的发现在需求分析和测试这两组数据上,工程师会比大四的学生用时多,而在具体编码上大四学生是比工程师花费的时间多。那这样是不是就一定说明大四的学生不软件工程师弱?我觉得不然,软件工程师是比大四学生多读了3年书,多工作了3年,两类人所处的环境跟所经历的东西不同,所以两个人任务完成的质量要求也就不一样,我觉得,按照目前来说,大四学生在对软件工程运用的熟悉程度上或许还及工程师,但只要经过刻苦的锻炼,丑小鸭也会变成漂亮的天鹅的!

  • 第三章(软件工程师的成长)40-54

    这一章主要讲述了软件工程师中,高级工程师为何会比刚入职的工程师优秀。

初级软件工程师要让自己成长并强大起来,就需要做到:积累软件开发的相关知识,提升技术能力(如对具体技术的掌握,动手能力);积累问题领域的知识和经验;对通用的软件设计思想和软件工程思想的理解深入;提升职业技能(区别与技术技能);有实际成果。高级软件工程师,对于我们现在的水平来说,是不是就触不可及了呢?其实不然,我们现在还年轻,还有很多时间去学习、去实践,在通往高级软件工程师的路途上,我们可以考相关的证书来获取理论上的技能,然后去各相关的单位上实习来获取经验,最后通过自主研究或团队开发来进行实践,进而开发大脑和提升自己的动手能力。

同时,我们要时刻对自己进行自我评估。绝大部分的软件工程师都不是技术天才,很多都是后天形成的,我们要多对自己的能力进行评估并作出及时的改进,然后通过不断的学习,把那些低层次的问题都解决了,变成不用经大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。

  • 第四章(两人合作)56-82

    这一章主要讲述了两人合作的不同阶段和影响他人的技巧。

软件都是在相互合作中完成的,翅膀只剩一边是飞翔不起来的,尽管很努力的飞到半空,也不够双翅滑翔的轻松自如,所以合作真的很重要。在合作中,只有互相交流、交换思想,才会发现自己的优势和不足之处在哪里。有了同伴的监督,可以让自己不敢偷懒,让自己更认真的去查看和更正程序的不足,有了一个方向和目标,让大家更有追求。

4.4节中,强调了代码复审的重要性。那我们应该以怎样的情况和环境下进行复审呢?代码复审有自我复审、同伴复审和团队复审,在软件工程中最基本的复审手段就是同伴复审。复审者是要通过发现问题来确保软件质量的,我们做代码复审的目的是为了减少错误的发生,而不是找一个人来对着自己点头,所以,找到一个适合自己的同伴来一起工作是很重要的,让两个人在驾驶员和领航员的角色中互换,进而提高双方的能力水平。

  • 第五章(团队和流程)83-99

   这一章主要介绍的是团队精神

那是不是说只要能组合在一起的就是组成了一个团队了呢?其实不是的,软件团队有各种形式,适用于不同的人员和需求。适合自己的团队才能共赢!

Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter的更多相关文章

  1. Reaction to 构造之法 of Software Engineering From The First Chapter toThe Fifth Chapter(补充版)

    几个星期前,我阅读过一篇文章,一位老师教导自己的学生要积极地去阅读文学文献,其中,我很欣赏他的一句话:“Just think of liturature as if you're reading a ...

  2. Software Engineering: 3. Project planning

    recourse: "Software Engineering", Ian Sommerville Keywords for this chapter: planning sche ...

  3. 第二篇——The communication during software engineering.

    I've learned a lot in my software engineering class about how a program comes out.That's also a esse ...

  4. Software Engineering: 2. Project management

    resources:"Software Engineering" Ian Sommerville For most projects, important goals are: D ...

  5. Software Engineering: 1. Introduction

    Resource: Ian, Sommerville, Software Engineering 1. Professional software development 1.1 Software e ...

  6. SENG201 (Software Engineering I) Project

    SENG201 (Software Engineering I) ProjectSpace ExplorerFor project admin queries:For project help, hi ...

  7. 个人阅读作业2—《No Silver Bullet: Essence and Accidents of Software Engineering》读后感

    在进行了一次结对编程.一次团队编程和一次个人编程项目后,读了<No Silver Bullet: Essence and Accidents of Software Engineering> ...

  8. Software Engineering at Google

    Google的Fergus Henderson在Software Engineering at Google中介绍了Google的软件工程实践. 软件开发 源码仓库 单一源代码仓库,除了核心配置和安全 ...

  9.  Go is more about software engineering than programming language research.

    https://talks.golang.org/2012/splash.article Go at Google: Language Design in the Service of Softwar ...

随机推荐

  1. 在windows上安装不同(两个)版本的Mysql数据库

    1.起因: 需要导入一个sql文件,发现死活导不进去.当执行到这一句时,就有问题.经过一番搜索,原来是我的数据库版本(原先Mysql版本5.5)低了,而支持该语句的版本应该是至少要5.7.那我索性就去 ...

  2. linux 系统运行级别一般为 0-6,请分别写出每个级别的含义

    每个运行级别的含义 0   关机模式(不要把启动级别  运行级别设置为0) 1   单用户模式 2   无NFS多用户模式 3   文本模式(命令行模式,完整的多用户模式) 4   未使用的 5   ...

  3. es6 用generator进行异步方法同步

    可以把以下代码复制到html文件中用chrome执行,或者用nodejs执行 function async1(chain) { setTimeout(function(){ chain.next('a ...

  4. [arc072F]Dam-[单调队列]

    Description 传送门 Solution 首先我们肯定不能那么耿直地直接把水混合起来吧..不然分分钟完球. 那么怎么找到最优解呢?假如我们把水的体积和温度按顺序插入队列,这时我们插入第i天的水 ...

  5. Openstack入门篇(十七)之Cinder服务-->安装并配置一个本地存储节点

    怎样为块存储服务安装并配置存储节点.为简单起见,这里配置一个有一个空的本地块存储设备的存储节点.这个向导用的是 /dev/sdb,此处选用linux-node1节点作为存储节点,需要在vmware中添 ...

  6. 电子设备 Kindle如何删除书籍或漫画

    需要在亚马逊的官方设置好国家: 再在这里就可以管理了 要在kindle的上方小齿轮那里设置(飞行模式右边): 同步kindle 这样就能管理了

  7. 菜鸟vimer成长记——第2.2章、visual模式

    vi是没有可视模式的.然而大多数编辑软件都都是有可视模式.所以我猜测vim是几乎迫于无奈才有了visual模式. 个人建议,能不用就不用.这样能直接在头脑里处理好文本,锻炼文本处理能力,同时能转变过来 ...

  8. Flutter - 左右侧滑菜单:drawer和endDrawer

    侧滑菜单可以从左面滑出,也可以从右面滑出.在Scaffold中有drawer和endDrawer两个参数,分别对应左边的菜单和右边的菜单. drawer: new Drawer( child: new ...

  9. zabbix3.4 监控路由器报错No Such Instance currently exists at this OID

    zabbix 3.4 监控报错No Such Instance currently exists at this OID 1.首先查看监控的路由器的监控项是否报警 监控主机报错出现这个 No Such ...

  10. 【赛后补题】Lucky Probability(CodeForces 110D)

    题意 给定两个\(P,Q\)的正整数区间(\(P,Q\)都符合\([L,R]\)这个区间,并且都\(\le 10^9\)),分别从其中随机选出一个数,选出的两个数作为一个新区间的左右端点.要求新区间内 ...