标签:
最近终于有时间来读读书了。买了《构建之法》已经一年多了,这次静下心来读完了,收获很大。现在想起自己在上大学的时候学习软件工程是机械工业出版社出版的一本外国书籍的翻译版本,当时由于对于整个行业没有太大的感触,而这本书又全部由专业术语和定义组成,所以当时的课是相当痛苦。而老师通过的这门课程的方式又由各种理论知识考试为准,所以当时学习感觉相当“鸡肋”。
1,情景式、对话式对白,有趣易读。这点非常喜欢,很多实际中碰到的问题在这里可以重现。比如:每日构建,在实际开发中,就会由于各种原因导致不愿意或者没时间去构建。比如:MSF章节中,对于推动信息共享与沟通中,讲“宁可过分沟通”,这点在实际开发过程中十分受用,有时甚至只有过分沟通才能暴露出问题。
2,介绍作为软件从业人员的一些准则。这是本书的又一亮点,比如:两人合作章节,讲如何正确地给予反馈,这点对于很多开发人员来讲很重要,因为在开发过程中会有很多意见不同,如何正确的反馈自己的意见,减少不必要的争执,这点对于提高工作效率十分有用。
3,注重实践。软件工程本来就是一门理论和实践并重的课程,可是很多时候,大学的软件工程理论和实践是分离的,甚至只注重理论,讲一堆概念,定义,这对于初学者理解非常不利,我记得当时我上大学的时候,老师讲解白盒测试、黑盒测试、集成测试、单元测试等等,很多测试的概念,这对于不使用这些测试的大学生完全是陌生的,只有实际做了项目,实际中应运了这个测试,才能知道各个测试是干什么的。而这本书不光讲了这些概念,还通过对话式独白讲解了这些概念在实际中的应运,并且通过学生做项目进一步加深了理解。
4,由浅到深。比如:第一章,举例中讲解了软件工程可能涉及到的的方方面面,非常易于理解。(程序、工程、应用软件、软件服务、源程序、数据、构建、源代码管理、配置管理、质量保障、软件测试、需求分析、程序理解、软件维护、服务运营、软件的生命周期、软件项目的管理、用户体验、商业模式等等)。
5,第十三章,软件测试章节的组织和安排非常喜欢。先讲了不同角度的测试分类,然后着重讲了各个测试,又讲了实战中的测试,并讲了测试中的文档,最后介绍了测试工具。非常喜欢。
6,覆盖面广。这也是这本书的特点,比如:职业道德、绩效、IT行业创新、项目经理等章节。
1,我读的这个版本(人民邮电出版社,ISBN 978-7-115-36916-1)中,配图不够清晰,如图2-1、2-3、2-5、2-6、3-1等
2,4.5.2这个题目一定忘记加粗了。
3,图8-15对四个象限的不同建议,四个象限的标注应该是有问题的,每一象限中都写着第二象限。
4,如果作为大学教程,MSF流程章节,其实没有必要单独成为一章。
1,第2章讲个人技术和流程,从接受程度方面感觉有些突兀。
2,第12章用户体验,讲的不够清楚。主要是:作为一个软件项目,用户体验应该考虑的更早,而整个软件开发的过程中都要考虑用户体验。改进建议:
1)用户体验之初体验:一些设计方面好的例子、一些设计不好的例子
2)用户体验的设计步骤和目标。这里最好能够讲解的更为详细一些。比如用户体验是要求从更底层、更早就要考虑的,应该扩展开来讲解。
3)用户体验的一些标准
4)练习。让大家举一些生活中的例子。马桶?
3,书本重广度和易于理解,深度不够,所以对于选择阅读这本的人,可以看看是否适合自己。
1.代码复审
代码复审这块的感触非常大,因为之前接触的公司项目,开发流程不够完整,在公司做开发的过程中,缺少了代码复审的环节。导致在上线过程中总会存在一些问题。今年初管理项目过程中加了代码复审,至少有以下几个方面的提升:
1)代码质量较之前提升很多,上线成功率提高很大。
2)新员工培养。很多时候新的开发人员,即使复审的人员不说话,只让他自己讲解一遍自己的代码都会发现很多问题。
2.敏捷流程
在管理项目的这两年中,其实刚接手项目的新人是没有明确的项目管理流程,刚开始不知道自己是瀑布模型还是敏捷流程,把这段不知道自己是什么开发流程的模式称为:前任模型。因为项目是从带你的老员工手里接过来,为了保证项目顺利开发、人员稳定过度,所以一般的情况下刚接手是不会变的。只有在全部掌握了之后,才会去修改之前流程中的不合理部分。
在管理项目的过程中,最接近敏捷流程的一次应该是去年下半年独立管理一个换版项目过程中。使用的是TDD(Test Driven Development)测试驱动开发。
3.需求分析
现在公司定位的岗位是:项目管理岗位,但是公司对于项目管理的职责范围至少包含了:需求分析师、产品经理、项目经理这三个角色。所以分析需求是工作中的很大一部分。获取和引导需求、分析和定义需求是很考验一个需求分析师能力的时候。
失败案例:
微信公众号系统,项目经理A负责
活动系统,项目经理B负责
业务要求,绑定公众号之后,才能参加活动。
按照业务要求进行的系统功能划分,绑定的判断只能在微信公众号系统判别,而参加活动的业务实现是在活动系统,所以客户绑定之后可以从微信公众号系统跳转到活动系统参加活动,整个活动是在活动系统完成的,符合业务要求(绑定公众号之后,才能参加活动)。但是完成之后,在业务验收阶段:发生如下对话:
业务:为什么我没绑定看不到活动?
项目经理:你要求是绑定只能才能参加活动啊?
业务:是啊,我是绑定之后才能参加活动,但是没绑定的客户要看到活动啊,要给微信公众号系统吸引流量,你绑定判断应该在活动主页的“参加活动”上面加啊,你不能让我们进不来,看不到活动啊。
项目经理:。。。。。。
(因为绑定的判断只能在微信公众号系统,而整个活动功能,活动系统已经实现了,活动系统是不能判断绑定的,所以需要对于功能重新划分实现)。
职责中有需求分析师的工作内容,接触了各个条线的业务人员之后,会发现很多业务方面的需求多是“对产品功能性的需求”,业务条线人员多是不知道“对产品开发过程的需求”、“非功能性需求”的。所以在这方面的开发过程中,作为项目经理务必要对于业务提出的需求进行审核和分析,提高“非功能性需求”质量。
在做需求的过程中,业务和领导问的最多的大概就是这个功能的大概需求多长时间完成,所以项目经理对于项目的计划和估计显得十分重要。书中说的:回溯方法,在很多时候其实就是这样执行的,最终交付日期往前推。
4.事后诸葛亮会议
一个项目或者一个需求完成之后的总结和反思是必不可少的。
在读书的过程中,有一些点讲的非常好,记录下来:
【1】PXII给授课老师和助教的建议:
第一条:沟通
第二条:简明公开的规则
第三条:循序渐进,激励和不断总结
第四条:对付南郭先生
第五条:模拟实战,用客观数据来评分
第六条:截止期限
第七条:构造怎样的学习环境
第八条:聆听,总结,分享,改进
【2】PXVII给授课老师和助教的建议,第七条:构建怎样的学习环境
1,知识体系是构建出来的,而不是接收到的。与其灌输知识,不如让学生自己构建。
2,人的认知模型改变得非常缓慢,搞那些速成的、疯狂的、喊口号的培训未必改变了人的认知模型。
3,提问能帮助构建知识体系。所以我们要鼓励学生思考、辩论。
4,身心投入是学习的关键。没有一定的工作量,怎么能达到“身心投入”呢?
【3】XVIII给授课老师和助教的建议,第八条:聆听,总结,分享,改进
合法性被别人认可,除了自身的资质以外,还有三个因素。
【4】XIX给授课老师和助教的建议,第八条:聆听,总结,分享,改进
美国加州大学一流软件企业对软件工程教学的要求,优先级最高的几项依次是:
1,How to enhance sparsely-documented legacy code(怎样改进缺少文档的老代码);
2,Making testing a first-class citizen(测试与开发并重);
3,Working with non-technical customers(怎么跟不懂技术的客户交流);
4,Working in teams(在团队内有效率地工作)。
【1】什么是软件?
【2】什么是软件工程?
【1】单元测试
单元测试验证标准:
【2】回归测试
回归测试的目的:
【3】效能分析工具
【4】个人开发流程
【1】软件工程包括了开发、运营、维护软件的过程中的很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫”软件开发流程”,软件开发流程的目的是为了提高软件开发、运营、维护的效率,以及提升用户满意度、软件的可靠性和可维护性。
【2】初级软件工程师如何成长?
【3】考证
【4】怎么提高技能
【1】代码风格规范(参考如下自己曾经做过的笔记)
http://www.cnblogs.com/xt0810/p/3543972.html
http://www.cnblogs.com/xt0810/p/3544078.html
http://www.cnblogs.com/xt0810/p/3544356.html
参考:
http://hawstein.com/posts/google-java-style.html
【2】代码设计规范
定义:看代码是否在“代码规范”的框架内正确地解决了问题
目的:
1.找出代码的错误:编码错误和规范问题
2.发现逻辑错误
3.发现算法错误
4.发现潜在的错误和回归性错误
5.发现可能需要改进的地方
6.教育(互相教育)开发人员,传授经验。
步骤:
1,代码复审前
1)代码必须成功编译,在所有要求的平台
2)程序员必须测试过代码
3)程序要必须提供新的代码,以及文件差异分析工具。
4)复审者可以选择面对面的复审、独立复审或其他方式。
5)在面对面复审中,一般是开发者控制流程,讲述修改的前因后果。但是复审者有权在任何时候打断叙述,提供自己的意见。
6)复审者必须逐一提供反馈意见。注意,复审者有权提出很多看似吹毛求疵的问题,复审者不必每一件事都要亲自调查,开发者有义务给出详尽的回答。要记住复审者是通过问这些问题来确保软件质量的,而不是有意找碴儿。
7)开发者必须负责让所有的问题都得到满意的解释或解答,或者在TFS(Team Fundation Server管理和开发软件项目的整个生命周期的平台工具)中创建新的工作项以确保这些问题会得到处理。
8)对于复审结果,双方必须达成一致的意见。
a)打回去
b)有条件的同意
c)放行
2,代码复审中
1)修改之后会不会影响别的功能
2)此类修改是不是只有这一块
3)说明是否明确
4)对于这样的修改,有没有别的成员需要告知
5)导致问题的根本原因是什么?如何以后自动避免问题再次出现?
3,代码复审后
1)更正明显的错误
2)对于无法很快更正的错误,要在项目管理软件中创建Bug把他们记录下来
3)把所有的错误记载自己的一个“我常犯的错误“表中,作为以后自我复审的第一步。
4,核查内容:
1)概要部分
a)代码能符合需求和规格说明么?
b)代码设计是否考虑周全?
c)代码可读性如何?
d)代码容易维护么?
e)代码的每一行都执行并检查过了吗?
2)设计规范部分
a)设计是否遵从已知的设计模式或项目中常用的模式?
b)有没有硬编码或字符串/数字等存在?
c)代码有没有依赖于某一平台,是否会影响将来的移植?
d)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
e)有没有无用的代码可以清除?
3)代码规范部分
修改的部分符合代码标准和风格
4)具体代码部分
a)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
b)参数传递有无错误,字符串的长度是字节的长度还是字符的长度?是以0开始计数还是以1开始计数?
c)边界条件是何如处理的?switch语句的default分支是如何处理的?循环有没有可能出现死循环?
d)有没有使用断言(Assert)来保证我们认为不变的条件真的得到满足?
e)对资源的利用,是在哪里申请,在哪里释放的?有无可能存在资源泄露(内存、问卷、各种GUI资源、数据库访问连接,等等)?有没有优化的空间?
5)效能
a)代码的效能如何?最坏的情况是怎么样的?
b)代码中,特别是循环中是否有明显的可优化的部分?
c)对于系统和网络的调用是否会超时?如何处理?
6)可读性
代码可读性如何?有没有足够的注释?
7)可测试性
代码是否需要更新或创建新的单元测试?
【3】结对编程
如何正确地给予反馈?
强调双方的共同点,从团队共同的愿景讲起,让双方觉得处于一个安全的环境。
重于【行为和后果】这一层面。
【1】瀑布模型
适用范围:
【2】Rational统一流程(RUP)Rational Unified Process
业务建模、需求、分析和设计、实现、测试、部署、配置和变更管理、项目管理、环境
一个大阶段的结束称为一个里程碑。
【1】敏捷的原则
【2】敏捷流程的经验教训
【3】TDD(Test Driven Development)测试驱动开发
【1】MSF基本原则
【2】学习所有的经验
1.把经验总结出来
2.分享经验
1.让团队成员从别人的成果和失败的例子中学到东西
2.帮助新项目重复以往成果的做法
3.培育团队总结的习惯和“批评与自我批评”的文化
【3】责任和驱动
无责任的旁观者和有重大责任的当局者的看法自然是不一样的
【1】准确寻找需求:
【2】需求分类
【3】“三拍”——反例
【4】NABCD模型——N(Need,需求)、A(Approach,做法)、B(Benefit,好处)、C(Competitors,竞争)、D(Delivery,推广)。
【5】功能的定位——四象限方法
外围功能 |
杀手功能 |
|
必要需求 |
第二象限 建议采取“抵消”的办法,快速地达到“和别热差不多”,对于大家都特别看重的功能,采取“优化”的办法,达到行业最佳。 |
第一象限 建议采取“差异化”的办法,全力以赴投资在这个领域 |
辅助需求 |
第三象限 建议采取“维持”的办法,以最低代价维持此功能 |
第四象限(不是用户的刚需,而是辅助功能,但是我们有独特的办法做的更好) 建议采取“维持”的办法,或者现在“不做”等待好的时机。或者让部分人员做实验 |
【6】计划和估计
1)自底向上。团队成员各自估计底层模块和单个功能(及单元测试)所需的时间,再加上集成及基本测试的时间,就是大概的开发时间。这还没有考虑各个模块之间的相互依赖性。
2)回溯。团队从整个项目最终交付之日往回倒推。
【7】分而治之
【1】PM的能力
【2】PM的任务
【1】软件功能说明书
【2】技术说明书
【1】每日构建
每一个公司的形式不同
【2】A/B测试:为同一个目标制定两个方案,让一部分用户使用A方案,另一部分用户使用B方案,记录用户的使用情况,看哪个方案更符合设计。
【1】参考书籍
http://www.cnblogs.com/xt0810/p/4662861.html
【2】用户体验的原则
【1】测试与开发并重
【2】测试文档
【1】软件工程的质量体现:
【1】事后诸葛亮会议
时间成本:持续时间:一个月,集中时间:5天。
前段时间思考自己,惊喜的发现邹老师和周老师对于我的思考进行了指导,在此不甚感激。
书名 |
看书时间 |
笔记时间 |
阅读形式 |
《如何阅读一本书》 |
1月5号-1月25号 |
1月5号-2月4号 |
精读 |
标签:
原文地址:http://www.cnblogs.com/xt0810/p/5102217.html