构建之法读书笔记
by whut 软件zy1702 杨佳佳
读书笔记
思维导图
笔记明细
第一章:概论
1.1什么是软件?
软件=程序+软件工程
1.2什么是软件工程?
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
第二章:个人技术和流程
2.1单元测试
单元测试验证标准:
1单元测试应该在最低的功能/参数上验证程序的正确性
2单元测试必须由最熟悉代码的人(程序的作者)来写
3单元测试过后,机器状态保持不变
4单元测试要快(一个测试的运行时间是几秒,而不是几分钟)
5单元测试应该产生可重复,一致的结果
6独立性——单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性。
7单元测试应该覆盖所有的代码路径
8单元测试应该集成到自动测试的框架中
9单元测试必须和产品代码一致保存和维护
2.2回归测试
目的:
1验证新的代码的确改正了缺陷
2同时要验证新的代码有没有破坏模块的现有功能
2.3效能分析工具
抽样
代码注入
2.4个人开发流程
第三章:软件工程师的成长
3.1初级软件工程师如何成长?
1积累软件开发相关的知识
2积累问题领域的知识和经验
3对通用的软件设计思想和软件工程思想的理解
4提升职业技能
5实际成果
3.2职业发展——考级
第四章:两人合作
4.1两人合作的不同阶段
1萌芽阶段(Forming)
2磨合阶段(Storming)
3规范阶段(Norming)
4创造阶段(Performing)
5解体阶段(Deforming)
4.2代码风格规范
原则是:简明,易读,无二义性
4.3代码设计规范
1函数:只做一件事,并且做好
2goto
3错误出来
4处理好c++做的类
5代码复审
4.4结对编程
第五章:团队和流程
5.1开发流程
瀑布模型…
5.2典型软件团队模式
5.3MVP,MBP
5.4 Rational统一流程(RUP)
业务建模、需求、分析和设计、实现、测试、部署、配置和变更管理、项目管理、环境
第六章:敏捷流程
6.1敏捷的原则
1尽早并持续地交付有价值的软件以满足顾客需求
2敏捷流程欢迎需求的变化,并利用这种变化来提高用户的竞争优势
3经常发布可用的软件,发布间隔可以从几周到几个月,能短则短
4业务人员和开发人员在项目开发过程中应该每天共同工作
5以有进取心的人为项目核心,充分支持信任他们
6无论团队内外,面对面的交流始终是最有效的沟通方式
7可用软件是衡量项目进展的主要指标
8敏捷流程应能保持可持续的发展。领导、团队和用户应该能按照目前的步调持续合作下去
9只有不断关注技术和设计,才能越来越敏捷
10保持简明——尽可能简化工作量的技艺——极为重要
11时时总结如何提高团队效率,并付诸行动
6.2敏捷流程的经验教训
第七章:MSF
7.1MSF基本原则
1 推动信息共享与沟通(Foster open communications)
2 为共同的远景而工作(Work toward a shared vision)
3 充分授权和信任(Empower team members)
4 各司其职,对项目共同负责(Establish clear accountability and shared responsibility)
5 交付增量的价值(Deliver incremental value)
6 保持敏捷,预期和适应变化(Stay agile, expect and adapt change)
7 投资质量(Invest in quality)
8 学习所有的经验(Learn from all experiences)
9与顾客合作(Partner with internal and external customers)
7.2MSF敏捷开发模式
第八章:需求分析
8.1如何准确寻找需求
1获取和引导需求
2分析和定义需求
3验证需求
4在软件产品的生命周期中管理需求
8.2用户需求获取
8.3软件需求划分
1对于产品功能性的需求
2对于产品开发过程的需求
3非功能性需求
4综合需求
8.4NABCD模型
NABCD模型——N(Need,需求)、A(Approach,做法)、B(Benefit,好处)、C(Competitors,竞争)、D(Delivery,推广)
8.5分而治之
第九章:项目经理
9.1团队角色分工
9.2PM的专业能力
9.3PM的任务
第十章:典型用户和场景
10.1典型用户和场景
10.2用例的基本元素
l 标题:描述这个用例要达到的目标
l 角色(Actor):和软件系统交互的角色,例如用户,其他实体,甚至时间(在描述一些和时间相关的场景时有用)
l 主要成功场景(Main Success Scenario):一系列步骤描述角色是怎样和系统交互,从而达到目标的。
l 步骤(Step):描述每一步的交互(例如一套正常的ATM取款流程)
l 扩展场景(Extension):描述一些扩展的交互,例如一些意外情况(例如取款时账户余额不足)。
10.3 软件功能说明书
1定义好相关的概念
2规范好一些假设
3避免一些误解,界定一些边界条件
4描述主流的用户/软件交互步骤
5服务质量的说明
10.4技术说明书
1抽象
2内聚/耦合/模块化
3信息隐藏和封装
4界面和实现的分离
5如何处理错误情况
6程序模块对于运行环境、相关模块、输入输出参数有什么假设?这些假设和相关的人员验证过么?
7应对变化的灵活性
8对大量数据的处理能力,如果数据量增大,程序还能保持高的效率么?
第十一章:软件设计与实现
11.1图形建模和分析方法
11.2每日构建
11.3A/B测试
第十二章:用户体验
12.1用户体验的一些原则
1仅提供可感触的反馈
2系统界面符合用户的实现惯例
3用户有*控制权
4一致性和标准化
5适合各种类型的用户
6帮助用户识别、诊断并修复错误
7有必要的提示和帮助文档
第十三章:软件测试
13.1测试工作中的文档
13.2测试方法
1单元测试(Unit Test)
2代码覆盖率测试(Code Coverage Analysis)
3构建验证测试(Build Verification Test,BVT)
4验收测试(Acceptance Test)
5“探索式”的测试(Ad hoc Test)
6回归测试(Regression Test)
7场景/集成/系统测试(Scenario/ Integration / System Test)
8伙伴测试(Buddy Test)
9效能测试(Performance Test)
10压力测试(Stress Test)
11内部/外部公开测试(Alpha/Beta Test)
12易用性测试(Usability Test)
13“小强”大扫荡(Bug Bash)
第十四章:质量保障
14.1软件工程质量的衡量
1软件开发过程的可见性
2软件过程的风险控制
3软件内部模块,项目中间阶段的交付质量,项目管理工具的因素
4软件开发成本的控制
5内部质量指标的完成情况
第十五章:稳定和发布阶段
15.1常见软件版本名字
15.2事后诸葛会议
第十六章:IT行业的创新
第十七章:人、绩效和职业道德
17.1RASCI模型