构建之法 —— 读书笔记(1)

前言:

      在没有阅读《构建之法》的之前,以为这本书会和其它软件工程教材一样,内容枯燥乏味,然而,在做好心理准备开始阅读的时候却被它吸引了,邹欣老师的这本《构建之法》有强大的实用性和趣味性,语言幽默,条理清晰,举的例子也都很形象生动!相信自己可以通过阅读本书能大获裨益。

第一章 概 论

    此章节主要实在阐述软件工程的几个概念:

     1. 软件 = 程序 + 软件工程

     几乎所有程序员都知晓 “ 程序 = 数据结构 + 算法 ”,但实际中 “ 软件 = 程序 +软件工程 ”更适用,前一句(程序)是基本功。

     2. 软件工程是什么?把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。

         软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。

     3. 软件的特殊性:复杂性(Complexity)、不可见性(Invisibility)、易变性(Changeability)、服从性(Comformity)和非连续性(Discontinuity)

     4. 文中还提到软件工程和计算机科学的关系,这也是容易让人迷糊的两个概念,很多同学在高考填志愿的时候不知道他们的区别,到学校后发现学的东西差异也不是很大;而实质上这是两个侧重点差异很大的概念;从知识领域上说,计算机科学包含计算机体系结构、操作系统、图形学、人工智能等,而软件工程包含软件需求、软件设计、软件维护、软件测试等。

     5. 软件工程的目标——创造“足够好”的软件。

     那么什么是足够好?不仅仅是没有bug;评价软件的维度包括:用户满意度、可靠性、软件流程的质量、可维护性等。关于软件流程的质量,指的是软件团队和开发流程的问题太多,导致团队成员无法良好协作,按时交付,也可以说是软件团队的bug;  流程的质量往往是我们的研发过程中最容易忽视的地方,反思目前我们的现状,很对研发团队的研发流程实质是处于真空状态,开发人员甚至不知道怎样才是软件开发的正确姿势。

总之,从三点去理解软件工程:

 1 研发出符合用户需求的软件

 2 通过一定的软件流程,在预计的时间内发布“足够好”的软件

 3 通过数据和其他方式展现所开发的软件是可以维护的继续发展的

 

第二章 个人技术和流程

本章的实质是在说明,一个合格的软件工程师是怎样的,他应该具备哪些技能。

 

答:一个合格的工程师在开发时需要同时考虑质量和效率,与之同时需要具备的技能包括:单元测试、效能分析、个人研发流程(PSP)。

 

好的单元测试的标准:

 

1 单元测试应该在最基本的功能/参数上验证程序的正确性

 

2 单元测试必须由最熟悉代码的人(程序的作者)来写

 

3 单元测试过后,机器状态保持不变

 

4 单元测试要快(一个测试用例的运行时间是几秒钟,而不是几分钟)

 

5 单元测试应该产生可重复、一致的结果

 

6 独立性——单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性

 

7 单元测试应该覆盖所有代码路径

 

8 单元测试应该集成到自动化测试的框架中

 

9 单元测试必须和产品代码一起保存和维护

效能分析:

效能分析往往是开发人员容易忽视的步骤,这也是为什么我们一年一年的不停做优化的原因,大部分人对嵌入式的实时性和性能要求没有概念。

Visual Studio实际上提供了性能分析工具(Tools\PerformanceTools\Performance Wizard),其中有两种分析方法:抽样(Sampling)和 代码注入(Instrumentation)。

抽样的原理比较简单,就是用比较短的周期去采用PC指针,看看是在哪个函数在执行,并把当前周期的时长累计为该函数的执行时长,此方法的优点是不需要改动程序,运行较快,可以很快找到瓶颈,但是不能得出精确的数据,也不能准确表示代码中的调用关系树(Call Tree);  代码注入,相当于打点,是将检测的代码加入到每个函数中,程序的各个效能数据都可以被精确地测量,此方法唯一的缺点是运行时间大大加长,还会产生很大的数据文件,相应增加了数据分析的时间,同时,注入的代码也影响了程序的真实的运行情况。

一般进行效能分析的做法是,先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析。

注意:如果我们不经分析就盲目优化,也许会事倍功半。

 

个人开发流程:

     我们熟知CMM和CMMI,软件行业的国际通用标准,这两种能力成熟度模型,他们是用来衡量一个团队能力的模型,由卡内基梅隆大学(CMU)制定推出。其实CMU的专家针对软件工程师也有一套模型,叫Personal Software Process(PSP),即个人开发流程的标准。

PSP特点

    ·不局限于某种软件技术(如编程语言),而是着眼于软件开发的流程

    ·不依赖于考试,而主要靠工程师自己收集数据,然后分析,提高

    ·在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。在这种情况下,程序员的输出(程序/软件)往往质量也不高,然而这并不能全部由程序员负责。

    ·PSP依赖于数据

    ·PSP的目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度

总结:个人开发流程要着眼的是整个软件开发的流程,输出高质量的产品,需要从个人开发流程上去找bug,然后不断修正,工程师才会成长,产品质量才会不断提高。

 

转载于:https://www.cnblogs.com/dingry11-96/p/6684190.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值