首页 > 其他分享 >20240125打卡——《构建之法》读书笔记第1~4章

20240125打卡——《构建之法》读书笔记第1~4章

时间:2024-01-25 13:45:18浏览次数:16  
标签:复审 软件开发 读书笔记 代码 工程师 单元测试 软件 打卡 20240125

第一章 概论

在这一章中,作者为我们介绍了一些关于软件工程的基本知识。

①软件=程序+软件工程:正是因为对软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容的完成,才能完成把整个程序转化成为一个可用的软件的过程。

扩展的推论:软件企业=软件+商业模式

②软件开发的不同阶段:玩具阶段→业余爱好阶段→探索阶段→成熟的产业阶段

③软件所具有的特殊性:复杂性、不可见性、易变性、服从性、非连续性(由软件的本质所决定的)

软件还有其他特性:

·有许多不同的程序设计语言、软件工具和软件开发平台

·存在许多不同的软件开发流程

·软件团队中存在许多不同的角色

·软件通常既可以存储在磁带上,也可以存储在CD/DVD上

④作者邹欣总结的自己做过的项目的各自特点:

• Build To Learn:开发软件,构建系统的目的是做进一步的试验,试图发现客观规律或某个试验方法的优点与缺点。这些项目经常是科研论文的基础工作。

• Build To Show:为了突出地展现某个技术的作用,开发一些演示为目的的软件,这些项目很吸引眼球,经常获得新闻报道,但是功能未必全面。

• Build To Serve:为了服务一定范围的目标用户而构建的工具等,有时以公开的SDK形式发布。

• Build To Win:以在市场上赢得用户为目标而构建的软件。这也是种种科学发现,技术突破最好的试金石。这是我在研究院之外的十余年中做的最多的项目类型,也是这本书的英文名字。

第二章 个人技术和流程

2.1 单元测试

①重要的单元测试:有效解决程序员对模块功能的误解、疏忽或不了解模块的变化之类的问题,使自己负责的模块功能定义尽量明确,模块的质量得到稳定的、量化的保证。

②好的单元测试的标准:

在最基本的功能/参数上验证程序的正确性

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

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

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

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

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

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

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

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

③单元测试的基础上能够建立关于这一模块的回归测试,目的是:

(1)验证新的代码的确改正了缺陷

(2)同时验证新的代码有没有破坏模块的现有功能,有没有Regression

2.2 效能分析工具

效能分析方法:抽样和代码注入

2.3 个人开发流程

个人开发流程PSP(Personal Software Process)

特点:(1)不局限于某一种软件技术,而是着眼于软件开发的流程,这样,开发不同应用的软件工程师可以互相比较。

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

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

(4)PSP依赖于数据(工程师输入数据的时间代价、数据可能遗失或者不准确的风险、可能会出现一些数据不利于工程师本人的情况)

(5)PSP目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度,工程师有可能很高效地开发出一个顾客不喜欢的软件。

第三章 软件工程师的成长

3.1 个人能力的衡量与发展

①软件工程包括了开发、运用、维护软件的过程中的很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”,软件开发流程的目的是为了提高软件开发、运营和维护的效率,以及提升用户满意度、软件的可靠性和可维护性。

②初级软件工程师的成长包括以下几种:

(1)积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力)。例如:对JAVA、C/C++、C#的掌握,诊断/提高效能的技术,对设备驱动程序、内核调试器的掌握,对于某一开发平台的掌握

(2)积累问题领域的知识和经验(例如对医疗或金融行业的了解)

(3)对通用的软件设计思想和软件工程思想的理解

(4)提升职业技能(区别于技术技能),包括:自我管理的能力、表达交流的能力、与人合作的能力、按质按量完成任务的执行力

(5)实际成果——最重要的评价标准

3.2 软件工程师的职业发展

自我评估,自我评价

第四章 两人合作

4.1 代码规范

包括代码风格规范和代码设计规范

4.2 代码风格规范

代码风格原则:简明、易读、无二异性

缩进:4个空格,而不是TAB

行宽:限定为100字符

括号

断行与空白的{}行

分行

命名:匈牙利命名法

下划线:分隔变量名字中的作用域标注和变量语义

大小写(Pascal形式和Camel形式)

注释

4.3 代码设计规范

函数:只做一件事,并且要做好

goto:有助于程序逻辑的清晰体现

错误处理:参数处理、断言

类的处理

4.4 代码复审

①形式:自我复审、同伴复审、团队复审

②目的:找出代码错误、发现逻辑错误、发现算法错误、发现潜在的错误和回归性错误、发现可能需要改进的地方、传授经验

③代码复审后把记录整理出来:

(1)更正明显的错误

(2)记录无法很快更正的错误

(3)把所有的错误记在自己的一个“我常犯的错误”表中,作为以后自我复审的第一步

4.5 结对编程

①角色:

驾驶员:控制键盘输入

领航员:起到领航、提醒的作用

②好处:(1)在开发层次,可以提供更好的设计质量和代码质量,两人合作解决问题的能力更强。

(2)对开发人员,带来更多的信心,高质量的产出带来更高的满足感。

(3)企业管理层次上,有效地交流,相互学习和传递经验,分享知识,取得更高的投入产出比。

标签:复审,软件开发,读书笔记,代码,工程师,单元测试,软件,打卡,20240125
From: https://www.cnblogs.com/newzeon/p/17986973

相关文章

  • 《Hive编程指南》读书笔记
    前言:最近刚接触写HiveSQL,却发现许多查询的执行速度远不如预期。为了提升查询效率,我去阅读了《Hive编程指南》,希望通过理解其底层机制来找到优化的方式,并为未来能编写出高效的SQL奠定基础。谨以此文做个记录。一、Hive因何而生先有Hadoop再有HiveHadoop实现了一个计算模型——......
  • 只需要1天和10元,上线我的第①个工具站 - 50个工具站打卡计划
    2023年用了一整年的时间探索技术变现的方式,学习到了特别多的理论知识。2024年到了爆发的时间了。今年计划上线50款出海工具站计划,我会详细记录开发工具站的全部流程。工具站的核心任务是找到关键字,找对关键词并成功找到适当的域名,那就成功了一半。例如,最近推出的GPTStore,由于有人......
  • 《the psychology of money》金钱心理学-英文原版书籍-读书笔记
    ————————————————————introduction————————————————————2024.01.20尽管我们周围的世界充满了明显的事物和现象,但人们往往忽视它们“softskills”financialsuccessisnotahardscience.Itisasoftskill,wherehowyoube......
  • datawhale-leetcode打卡:001-012题
    这次这十二个题目属于是极限肝出来的,有两个参考了一下题解,还是很有意思。我会按照我个人的感觉去写这个东西。螺旋矩阵(leetcode054)这个题目比较恶心的就是跑圈的过程怎么描述。首先,顺时针一圈下来是先从左到右,顶到最右边i<m,好再往下,顶到最下边i<n,好现在i--往回排,最后j--走完一......
  • 《人月神话》读书笔记2
    第六章贯彻执行:手册、或者书面规格说明,是一个非常必要的工具,尽管光有文档是不够的。手册是产品的外部规格说明,它描述和规定了用户所见的每一个细节;同样的,它也是结构师主要的工作产物。第七章:为什么巴比伦塔会失败:即使拥有充足的技术、人力、时间等资源也是不够的。还要有沟通、......
  • 《人月神话》读书笔记1
    《人月神话》是讲软件工程中人与团队的关系,讨论那些由团队开发的大程序。第一章焦油坑:焦油坑对应软件,程序员对应各种野兽的比喻很贴切。事实上在实际工作中的感受确实如此,为何精心编制的作品终有一日成了这样的焦油坑?这里无需找其他类似于历史债务、团队水平等借口为自己开脱,程......
  • 大二打卡(12.23)
    uml作业:实现视图建模:(2)、绘制顺序图充值消费子系统:  身份识别门禁子系统: 校方卡片授权信息管理子系统:(3)、绘制协作图充值消费子系统: 身份识别门禁子系统: 校方卡片授权信息管理子系统: (4)、绘制活动图充值消费子系统: 身份识别门禁子系统: 校方卡片授权信息......
  • 大二打卡(12.18)
    今天做了什么:在期末考试的那一天,早早地来到了考场,准备迎接这场挑战。考试铃声响起,老师开始逐一发放试卷。深吸一口气,开始认真地审题。说实话,经过这么长时间的练习,已经对这类题目驾轻就熟了。建立表、编写页面、编写Java文件,这些步骤几乎成了肌肉记忆,几乎不需要思考就能完成。考......
  • 大二打卡(12.19)
    uml作业:逻辑视图建模:(1)分析系统用例,确定对象类:“校园卡管理系统”包括“身份识别门禁系统”“充值消费系统”和“校方卡片授权信息管理系统”等。[系统业务需求描述]:身份识别门禁系统:完成人员的身份识别和认证、门禁控制、门锁控制、通道控制、考勤管理、会议签到等业务。......
  • 大二打卡(12.20)
    uml作业:逻辑视图建模:[系统边界类与系统控制类]系统边界类主要是指系统与用户交互界面有关的类。身份识别门禁子系统中涉及与用户交互的界面类有3个:(1)待机界面类:在镜头前没有人脸需要识别时,待机暂停图像信息的录入与识别。(2)人脸面部信息录入窗口类:开启摄像头的信息录入功能......