《构建之法》阅读笔记二
这次的阅读笔记是《构建之法》的七到十二章,记录的内容如下:
7实战中的软件工程
7.2 MSF九项基本原则
·推动信息共享与沟通
·为共同的远景工作
·充分授权和信任
·各司其职,对项目负责
·重视商业价值,提供渐进的价值
·保持敏捷,预期和适应变化(预期变化,不是适应变化)
·投资质量
·学习所有经验
·与顾客合作
7.3MSF团队模型
·测试团队要做的事:发现问题和解决问题
7.4MSF过程模型
·阶段:团队在某段时间集中精力做一件事情,团队的重心随阶段的转移而转移
·里程碑:上一阶段的结束,下一阶段的起始。
7.5实战中的软件工程
·注重与实际结合,而不是盲目跟风
·切忌Cargo Cult,否则最终只会导致失败
7.6联系与讨论
软件工程原则:
·使用分阶段的计划管理流程,强调需求分析和抵制随意改变项目计划
·持续检查认证,在早期发现问题
·坚持规范的产品控制--验证过的程序或文档只有通过规范的流程才能修改
·使用现代的编程方法和工具
·确保团队成员能够分阶段、分模块地产生可以测试、可以复审的结果,并对结果负责
·用少而精的人员,减少交流成本,提高效率
·持续地收集数据和反馈,争取通过多个迭代实现流程的改进和整体软件质量的提高
看完这一章,我认为这本书更适合已经踏入工程领域的人阅读,我目前的阶段虽然还不太适合,但对我接下来的学习仍有重要的指导意义。在任何一个项目中,或大或小,都应该遵守那几个原则,减少代码的出错率,降低维护成本。根据课程安排,下学期我就会与人合作完成一个项目,在一个团队中,制作一个项目要有清晰的计划,项目的完成流程,最重要的是与实际结合,切忌货船效应。在项目开发过程中,必不可少的是与人打交道,学会与人交流,了解彼此的需求,对于项目的开发和后期的维护和更新会有很大的帮助。个人方面,写完一部分代码之后,必须进行测试,减少后期代码修改的成本,同样这也是一个自我检测,毕竟错误越早解决越好。
8需求分析
8.1软件需求
·获取和引导需求
·分析和定义需求
·验证需求
·在软件产品的生命周期中管理需求
软件的需求:①产品功能性需求;②对产品开发过程的需求;③非功能性需求;④综合需求
8.2软件产品的利益相关者
·从软件出发,推演出利益相关者,争取每个人的意见,虽不能让人人满意,但尽可能做到最好。
8.3获取用户需求-用户调研
·焦点小组
·深入面谈
·卡片分类
·用户调查问卷
·用户日志研究
·人类学调查
·眼动跟踪研究
·快速原型调研
·A/B测试
8.4竞争性需求分析的矿建
·NABCD模型:需求、做法、好处、竞争、推广
8.5功能的定位和优先级
·杀手功能/外围功能
·必要需求/辅助需求
8.6计划和评估
·目标、估计、决心
·找出估计后面的假设
·提高估计能力的招数
·影响软件成本的因素:产品、平台、人员、项目
8.7分而治之
·WBS产品:保证所有子节点覆盖全部父节点包含的内容;保证各个子结点不要相互覆盖;叶子节点保证足够小,能在一个里程碑中完成;从结果出发构建WBS,而不是从团队的活动出发。
看完这章之后,对于产品的需求明白更深。一个软件的完成,不仅仅来自客户的需求,还有制作者的理解,更有各户将其投入使用后所能得到的效益。客户的需求非常重要,但有时在交流的过程中,客户也不能准确表达自己的需求,所以在制作的过程中,需要不断与客户交流,降低产品的维护成本;其次是制作者的理解,我们或做过或见过考研默契的互动游戏,但是最懂结果大都不理想,软件的最终成型模样有很大一部分原因取决于制作者的理解。客户将产品投入使用之后获得的效益往往是最重要的,一个软件好不好,并不取决于客户的描述和制作者精彩的制作,而是取决于使用它的普通人,举个例子:我装杀毒软件只装一个火绒,而普通人装杀毒软件恨不得装7个加速球组成小金刚。一对比就出来了,真正的好软件需要“傻瓜”都会用。除此之外,还要考虑软件制作和维护的成本,尽可能地降低成本,是一个项目公司真正缺少的。
9项目经理
9.1PM是啥
·product manager:产品经理-正确做产品
·project manager:项目经理-正确做流程
·program manager
9.2微软PM的来历
·交流成本问题:MP(伪代码)、SP(实际代码)
·开发和测试都搞不定的事:与客户交流、了解竞争对手、产品的可用性、团队流程
9.3PM做开发和测试之外的所有事情
·PM的分类:做功能设计的、了解商业和客户、具备经验和知识面以及商业拓展能力的、做驱动流程的、负责软件国际化的、做技术转化的
·PM需要的能力:
1、观察、理解、快速学习能力
2、分析管理能力
3、一定的专业能力
4、自省的能力
·PM最好的要求:过程创新可能超越产品创新,但两个创新并驾齐驱则胜于任何一个。
9.4领导力-高效的团队讨论
·组织者做到:
1、明确会议目的
2、推动会议进程
3、总结会议,记录要点
·思维活动的类型:理清事实、表达直觉和感情、从乐观的角度分析问题、从悲观角度分析问题、从创意角度分析问题、
9.5PM和风险管理
·应对风险的手段:进一步研究、接受、规避、转移、降低、制定应急计划
·风险管理水平的多个层次:①大问题,对风险没有任何准备;②缓和并防止问题,对问题有一定的准备;③预计,预测到问题的发生,有有效准备;④把问题变成机会,能够把问题转化成机会。
读完这章之后,对于项目经理背后的辛酸更加了解。项目经理作为一个沟通程序员和用户的桥梁,需要做的事情以及需要交流的东西有很多,尽管其不需要写代码。项目经理把握着整个团队的前进方向,除却需要专业的知识和技能外,还需要有相匹配的经验和气质。
10典型用户和场景
10.1典型用户和典型场景
·典型用户的价值:从用户角度出发考虑问题
·怎样定义典型用户:软件不是为所有人使用的
·从典型用户到场景
·从场景到任务:UI层、逻辑层、数据库
10.2用例
·用例的基本元素:标题、角色、主要成功场景、步骤、扩展场景
·用例的原则:
1、通过将简单的故事来传递信息
2、保持对全系统的理解
3、关注用户的价值
4、逐步构建整个系统,一次完成一个用例
5、增量开发,逐步构建整个系统
6、适应团队不断变化的需求
10.3规格说明书(spec)
·功能说明书:实践、实践、再实践
·功能说明书的模板:不可盲目套用模板
·技术说明书-设计文档的原则:
1、抽象
2、耦合/内聚/模块化
3、信息隐藏和封装
4、界面和实现的分离
5、如何处理错误情况
6、程序模块对于运行环境、相关模块、输入输出参数有什么假设
7、应对变化的灵活性
8、对大量数据的处理能力
10.4功能驱动的设计
构造总体模型->构造功能列表->制定开发计划->功能设计->实现具体功能
这一章主要讲解典型的用户和场景,在软件开发中,做出来的成品始终不是给所有人用的,就拿人人都用的微信来说,对于老一辈的人来说,他们更喜欢使用电话。除此之外,软件开发满足的是客户的需求,在开发过程中,往往不能按照自己的意愿行事,因为别人并不是开发者。最后,在软件开发过程中,软件如何制作,以及做完之后如何使用,对其进行功能设计也是一个技术活。看完这一章,对于软件如何按计划开发,软件设计文档的书写,以及如何应对典型用户和场景有了新的认识。
11软件设计与实现
11.1分析和设计方法
·需求分析:分清楚关系,解决用户需求
·设计和实现:软件是否解决需求,如何实现信息交换
·测试和发布:软件是否解决客户需求,解决效率如何,方式如何。
11.2图形建模和分析方法
·表达实体和实体之间的关系:思维导图(了解概念、强化记忆)、实体关系图(实体关系)、用例图(UCD)
·表达数据的流动
·表达控制流
·统一的表达方式:UML
11.3其他设计方法
·形式化的方法
·文学化编程
11.4从Spec到实现
·把修改集集成到代码库
11.5开发阶段的日常管理
·闭门造车:学着说“不”、管理信息、与团队交流
·每日构建:构建基本的框架,保证其不倒
·构建大师:让这类人的生活速度慢下来,找出失败原因。
·宽严皆误:严格规则和宽松规则,学会审势
·小强地狱:修复bug
11.6实战中的源代码管理
·软件的质量=程序的质量+软件工程的质量
11.7代码完成
应该写的代码都写了,功能全部实现,但仍有bug待修改。
这一章主要讲的是软件的设计和实现,在软件设计过程中,必不可少的就是画图,使用图形构建出软件的运行路线,软件功能的实现思路,在写软件的工程中,学会管理自己的时间,否则效率将会很低下。拿自己来说,如果在写代码的工程中突然被打断,那么等重新回到状态时,你会看不懂自己写的是什么。软件开发过程中必须将框架搭建好,否则软件很容易崩溃,想要保证软件的质量,必须将功能实现之后,继续修改bug。
12用户体验
12.1用户体验的要素
·用户的第一印象
·从用户的角度考虑问题:用户需要的功能
·软件服务始终要记住用户的选择:用户的选择,使用偏好
·短期刺激和长期影响:在实验室喝可乐和在家喝可乐
·不让用户范简单的错误:高明的设计会替用户省钱
·用户体验和质量:两者之间的重要性不能准确衡量
·情感设计:本能、行为、反思层次的设计
12.2用户体验设计的步骤和目标
·概要设计->行为设计->界面设计
12.3评价标准
·尽快提供可感触的反馈
·系统界面符合用户的现实惯例
·用户有控制权
·一致性和标准化
·适合各种类型的用户
·帮助用户识别、诊断并修复错误
·有必要的提示和帮助文档
12.4贯穿多种设备的用户体验
在不同的设备上,用户的体验如何?在pc端,手机端...用户有和不同的体验。
看完这一章,我觉得还是那句话正确,用户的体验很重要。我们在开发程序的过程中,不能总想着写出多少高级的功能,而是能写出多少实用的功能,用户真正需要的就是我们要实现的功能,除此之外,我们更要明白,开发出来的产品面向的用户是谁?我在上学期写程序时,自己的界面就做的很粗糙,每实现一个功能就得跳转一个界面,比起那些“好看的”界面相差太远,就会导致用户的体验很差。甚至,自己都对它很嫌弃。所以,在开发软件的过程中,必须重视用户的体验,从用户的体验出发,做一个好的软件,在后期逐渐修复bug。