第一章:软件工程概述
- 理解什么是软件工程,软件工程包含那些领域,以及为何要搞软件工程?
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括下列领域:
软件需求分析、软件设计、软件构建、软件测试和软件维护。
为何要搞软件工程:
需求复杂,软件要满足不同类型用户的多种需求,并且能长时间提供服务
系统太复杂。工程是必要的,因为这些系统可能包含数百万行代码。
人们的生命,财产依赖于软件。几百万美元,人命,生意都取决于它。
- 理解软件的特性
复杂性:软件可以说是人类创造的最复杂的系统类型。
不可见性:软件工程师能直接看见源代码,但是源代码不是软件本身。软件以机器码的形式高速运行,还可能在几个CPU核上同时运行,工程师是“看”不到自己的源代码如何具体地在用户的机器上被执行的。源代码不可见
易变性:软件看上去很容易修改,修改软件比修改硬件容易多了。
服从性:软件不能独立存在,它总是要运行在硬件上面,它要服从系统中其他组成部分的要求,它还要服从用户的要求、行业系统的要求(例如银行利率的变化)。
非连续性:软件系统有时输入变化很小,会引起输出上极大的变化。
新特性:
有许多不同的程序设计语言;
软件工具和软件开发平台;
存在许多不同的软件开发流程;
软件团队中存在许多不同的角色;
软件通常既可以存储在磁带上,也可以存储在CD/DVD上;
AI 可以写程序,GitHub 社区。
第二章:个人技术
1.掌握基本的单元测试技术,能够根据给定的程序写出相应的测试案例
单元测试应该在最基本的功能/参数上验证程序的正确性。
单元测试应该产生可重复、一致的结果。
单元测试应该覆盖所有代码路径。
2.了解什么是回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
第三章:个人软件流程
1.PSP2.1里的各项指标的含义
Personal Software Process个人软件流程
Team Software Process团队软件流程
2.PSP优缺点
优点:
不局限某一种软件技术(如编程语言),而是着眼于开发流程,便于比较。
不依赖于考试,而主要依赖于工程师自己收集数据,然后分析,提高。
缺点:
在小型的创业团队,很难找到高质量的需求分析文档,导致后续的活动非常随机,开发活动可能随时变化。
依赖于数据,要求开发人员手动记录所有活动数据,会有丢失数据或者不准确数据的状况出现。
如何记录 “工作大小”,代码行数是唯一的衡量?
重用代码,用别人的类库vs自己从头写
开发者删除了2000行有问题的代码,他的绩效如何?衡量最终的结果么?
目前可以衡量工程师是否有效地实现了软件需求,但是不知道如何衡量用户是否对产品满意。
在小型创业团队,很难找到高质量的需求分析文档,导致后续活动非常随机,开发活动可能
随时变化。
依赖于数据,要求开发人员手动记录活动数据,会有数据丢失或者数据不准确的现象发生。
如何记录工作量大小,代码行数是唯一标准吗
重用代码,别人的类库,自己从头写。
目前可以衡量工程师是否有效实现了软件的需求,但不知道如何衡量用户是否对产品满意。
3.理解软件工程师的四个误区
①分析麻痹——没有做到实践紧跟分析。篮球场上,有100%的把握再出手
②依赖链条过长——没有分清主次,一直在解决不重要或者非工作的琐事。
③过早优化——没有着眼当前,思考离自己最近的问题。
④过早泛化——没有从简单的项目开始,好高骛远。
第四章:两人合作
1.了解代码复审的三种形式
自我复审 自己vs自己,用同伴复审的标准来要求自己,如果持之以