《构建执法》要点总结

第一章 概论

《构建执法》中对软件工程的定义是:把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。包括:软件 需求分析、软件设计、软件构建、软件测试和软件维护。软件工程与计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、 工业设计和用户界面设计等学科相关。

对软件的定义是:可以运行在计算机及电子设备中的指令和数据的有序集合。

由于软件开发有复杂性、不可见性、易变性、服从性、非连续性的特点,软件的开发并没有像硬件一样得到飞速的发展。

计算机科学可以分为偏学术的领域和偏理论的领域,前者与数学、逻辑学等关系密切,而后者的侧重点则是人。

软件工程的目标:创造“足够好”的软件,其中要考虑的因素有:用户满意度、可靠性、软件流程的质量和可维护性。

第二章 个人技术和交流

单元测试:模块质量稳定、量化的保证。保证100%覆盖代码。保证程序正确性、测试不产生后作用、速度快、可复现、自动测试。

效能分析:抽样->代码注入。分析找到问题后优化。

个人开发流程:注重需求分析和测试,而不是花费大量时间写代码。

第三章 软件工程师的成长

软件开发流程:包括开发、运营、维护。

IC:Individual Contributor,个人开发者。理解问题、需求和任务;提出多种解决办法并估计工作量;交流并决定可行的方案;执行,编写代码;合作测试实现方案,修复bug;对结果负责。

工程师的成长过程:积累知识、提升技能;积累问题相关领域知识和经验;理解通用软件设计思想和软件工程思想;提升职业技能;实际成果。

技能的反面:解决问题。解决问题是能力,要求随机应变。

第四章 两人合作

代码规范:代码风格规范、代码设计规范

代码风格规范:缩进、行宽、括号、断行与{}行、分行、命名、下划线、大小写、注释

代码设计规范:函数、goto、错误处理(参数处理、断言)。对C++中的类还有其他要求

代码复审:看代码是否在“代码规范”的框架内正确的解决了问题。自我复审+同伴复审+团队复审。发现代码错误、逻辑错误、算法错误、潜在错误和回归性错误、需要改进的地方、传授经验。

结对编程:互补,互换,随时的复审和交流。经常交换,不可连续工作,平等的决策权。萌芽阶段->磨合阶段->规范阶段->创造阶段(解体阶段)。

评价人的层次:行为和后果->习惯和动机->本质和固有属性。

说服人的方法:三明治=面包+肉+面包。

第五章 团队和流程

团队的特点:有一致的集体目标;各有分工,相互依赖合作。

软件团队模式:窝蜂模式、主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式。

开 发流程:CODE & FIX;瀑布模式及各种变形=模拟版本+最终版本;统一流程(RUP)=业务建模+需求+分析设计+实现+调试+部署+配置变更管理+项目管理+环境;老 板驱动流程;渐进交付流程,MVP(最小可行产品) & MBP(最强最美产品)。

第六章 敏捷流程

敏捷开发原则:尽早持续交付;需求变化提高竞争优势;经常发布;每天共同工作;项目核心进取并充分信任;保持有效沟通;用可用软件衡量项目进展;可持续发展;关注技术和设计;保持简明;自我管理;总结如何提高效率,并付诸行动。

敏捷流程 = Product Backlog + Sprint Backlog + Sprint。决定要解决什么问题;决定每个人要做什么;每天报告完成度和计划。时间驱动。

敏捷团队:自主管理、自我组织、多功能型。

第七章 MSF

MSF:Microsoft Solution Framework,支持Scrum和Agile。

MSF基本原则:推动信息共享与沟通;为共同的远景而工作;充分授权和信任;各司其职,对项目共同负责;交付增量的价值;保持敏捷,预期和适应变化;投资质量;学习所有经验;与顾客合作。

MSF团队:产品管理、项目管理、开发、发布管理、测试、用户体验。

MSF过程模型:构思->计划->开发->稳定->部署。

MSF敏捷开发模型:注重于用户交流;防止缺陷;重视实战条件下的质量;精简过程,直奔主题。

第八章 需求分析

软件需求:获取和引导需求->分析和定义需求->验证需求->在软件的生命周期中管理需求。

软件需求划分:功能性需求;开发过程的需求;非功能性需求;综合需求。

软件利益相关者:用户(直接使用者);顾客(接收软件的人);市场分析师;监管机构;软件工程师。

获取用户需求(用户调查):焦点小组(找到目标用户代表);深入面谈;卡片分类(把需求写成卡片进行分类);用户调查问卷;用户日志研究;人类学调查(深入了解用户习惯);眼动跟踪研究;快速原型调研(纸上模型);A/B测试。

竞争性需求分析框架:NABCD模型。Need + Approach + Benefit + Competitors + Delivery。

功能定位和优先级:杀手功能(核心)·外围功能(UI);必要需求·辅助需求。

第九章 项目经理

PM:Program Manager

PM解决的问题:交流成本问题;需求转化;功能设计;领域化。

PM风险管理:代码签入、技术风险、自然风险、法律风险。

风险管理层次:危机管理;缓和并防止问题;预计;把问题变为机会。

PM能力要求和任务:观察、理解和快速学习能力;分析管理能力;一定的专业能力;自省能力。

PM任务:带领团队形成目标、远景;管理软件生命周期;创建并维护规格说明书;分析带领成员对缺陷、变更达成一致意见并实施;带领成员维持平衡,跟踪项目进度,确保发布满意软件;收集数据,分析优缺点,提振士气。

第十章 典型用户和场景

典型用户:不同特点、不同需求、不同属性(年龄、收入、环境、能力、偏好等),深入理解用户需求。

场景:背景(用户信息);场景(用户使用时会发生的事情)。根据需求设计场景。

用例:标题、角色、主要成功场景、扩展场景;

规格说明书:软件功能说明(概念、假设、边界条件、交互、副作用、服务质量) + 软件技术说明(原则P218)。

功能驱动设计:FDD。构造总体模型->构造功能列表->制定开发计划->功能设计阶段->具体实现功能。

第十一章 软件设计与实现

分析和设计方法:需求分析(实体,抽象出属性,了解需求)->设计与实现阶段(如何解决需求)->测试和发布阶段(是否解决需求)

图形建模和分析方法:表达实体和实体之间关系(思维导图、实体关系图、用例图UCD);表达数据流动(划分层次);表达控制流;统一的表达方式(UML图)。

其他设计方法:形式化方法、文学化编程。

从Spec(设计文档)到实现:控制代码签入,遵循标准开发工作流程,完成代码。

开发阶段日常管理:闭门造车(免打扰),每日构建、构建大师(发生错误的人,负责下一次构建)、宽严皆误(规则和流程控制)、Bug Hell(控制每个人可以出bug的总数量,超过则优先修复bug)。

第十二章 用户体验

用 户体验要素:用户第一印象(目标用户,仅保留最重要的功能?),从用户的角度考虑问题(需求、情况、用户能力)、记住用户选择(在相同系统中保持相同条 件,优化选择)、短期刺激和长期影响(长期使用需要喝多变化和更好的适应性)、不让用户犯简单错误(增大简单错误的触发难度)、用户体验和质量、情感设计 (本能、行为、反思)。

用户体验设计步骤和目标:认知阻力、交互方式、行为。

评价标准:尽快提供可感触的反馈,系统界面符合用户现实惯例,用户有控制权,一致性和标准化,适合各种类型用户,帮助用户识别、诊断和修复错误,有必要的提示和帮助文档。

第十三章 软件测试

基本名词:BUG, TEST CASE, TEST SUITE。症状、程序错误、根本原因。

分 类:设计方法(黑箱、白箱),测试目的(功能测试=单元测试+功能测试+集成测试+场景测试+系统测试+外界使用测试、非功能测试=压力测试+效能测试+ 可访问性测试+本地全球化测试+兼容性测试+配置测试+易用性测试+安全性测试),测试时机&作用(冒烟测试、构建验证测试、验收测试)。

测试方法:单元测试,代码覆盖率测试,构建验证测试,验收测试,探索式测试(Ad hoc Test),回归测试,场景/集成/系统测试,伙伴测试(代码签入前构建测试),效能测试,压力测试,内部/外部公开测试,易用性测试,Bug Bash。

实际测试:测试设计说明书+测试用例+错误报告+关闭缺陷报告+测试报告。

测试工具:手工测试+自动测试。

第十四章 质量保证

软件的质量 = 程序质量+ 软件工程质量(开发过程可见性,风险控制,中间阶段交付质量、管理工具因素,成本控制,质量指标完成情况)。衡量标准:CMMI

软件质量保证(QA):软件团队为了让软件达到事先定义的质量标准而进行的所有活动,包括测试工作。

第十五章 稳定和发布阶段

版本:Aapha(内侧)、Beta(公测)、ZBB(0 bug build)RC(发布候选版本)、RTM(最终发布版本)、RTW(网络发布版本)。

会诊:对于每个bug,修复/设计本来如此/不修复/推迟修复。

渐进发布:对于不同用户组,采用不同频率的发布。

总结会议:发布之后,探索出现问题的根源。

第十六章 IT行业的创新

创新:灵感顿悟VS日常积累和思考;改良式创新VS颠覆式创新;好的想法VS先入为主的优势;最早提出VS做得最好;领域知识VS实现想法;最强的技术VS满足用户需求;团队成功VS创新能力。

创新时机:先行一步,带动趋势发展;技术成熟度曲线指导。

创新的方法:SWOT分析框架(强项+弱项+机会+威胁);平衡动量&加速度控制产品的生命周期…

第十七章 人,绩效和职业道德

参与者:全身心投入(重大决定)、参与、围观。

RASIC:承担责任,负有责任,提供支持,咨询,知会者。

绩效管理:评估(技术能力、劳动生产力、对团队贡献、对产品贡献),区别对待(2:7:1)。

矛盾:高效率多bug VS 低效率少bug。

团队合作阶段:萌芽阶段(依赖于领导)->磨合阶段(疑惑&冲突)->规范阶段(一致意见)->创造阶段(高度自治,职责转换)。

软件工程师的职业道德:与公众利益一致;客户和雇主利益最大化;产品满足最高专业标准;完整独立的专业判断;领导采用复合道德规范的管理;软件工程师保证职业诚信和利益;对同事提供支持和帮助;不断提高专业水平。

欢迎读者进行补充,或在评论中交流想法。

时间: 2024-10-10 02:33:47

《构建执法》要点总结的相关文章

[.NET] 《Effective C#》快速笔记 - C# 高效编程要点补充

<Effective C#>快速笔记 - C# 高效编程要点补充 目录 四十五.尽量减少装箱拆箱 四十六.为应用程序创建专门的异常类 四十七.使用强异常安全保证 四十八.尽量使用安全的代码 四十九.实现与 CLS 兼容的程序集 五十.实现小尺寸.高内聚的程序集 这是这一系列的最后一篇. 四十五.尽量减少装箱拆箱 值类型是数据的容器,不支持多态. 装箱把一个值类型放在一个未确定类型的引用对象中,让该值作为引用类型所使用.拆箱指从引用类型的位置取出值的一个副本. 装箱拆箱都是比较影响性能的手段,应

《Effective C#》快速笔记 - C# 高效编程要点补充

目录 四十五.尽量减少装箱拆箱 四十六.为应用程序创建专门的异常类 四十七.使用强异常安全保证 四十八.尽量使用安全的代码 四十九.实现与 CLS 兼容的程序集 五十.实现小尺寸.高内聚的程序集 这是该系列的最后一篇.也许有些理论有可能会过时,我想它仍有存在的必要,人的知识水平也是一个不断成长的过程,学会站在前人的肩膀上,尝试不断的借鉴与总结. 四十五.尽量减少装箱拆箱 值类型是数据的容器,不支持多态. 装箱把一个值类型放在一个未确定类型的引用对象中,让该值作为引用类型所使用.拆箱指从引用类型的

《More Effective C++》要点总结

1.指针与引用的区别 任何情况下都不能使用指向空值的引用,使用时必须初始化.这使得使用引用时的效率比使用指针要高,因为在使用之前不需要测试它的合法性. 引用总是指向在初始化时指定的对象,以后不能改变. 重载某个操作符时,应该使用引用. 2.尽量使用C++风格的类型转换 static_cast, const_cast, dynamic_cast, 和 reinterpret_cast. (double)number,改成使用static_cast<double>(number). 3.不要对数组

《Effective Java》要点总结

1. 用静态工厂方法代替构造器. 2.遇到多个参数构造器时考虑用构建器. 3.用私有构造器或美剧型强化Singleton. 4.通过私有构造器强化不可实例化的能力. 5.避免创建不必要的对象. 尽量使用String str = "XXX":而不是String str = new String("XXX"): 6.消除过期的对象引用. 7.避免使用终结方法. 终结方法的何时被调用或是否被调用是不确定的. 8.覆盖equals是要遵守通用规定. 需要遵守自反性.对称性.

《Effective Modern C++》要点中英文对照

目录 CHAPTER 1 Deducing Types 章节1 类型推导 Item 1:Understand template type deduction. 条款1:理解模板类型推导. Item 2:Understand auto type deduction. 条款2:理解auto类型推导. Item 3:Understand decltype. 条款3:理解decltype. Item 4:Know how to view deduced types. 条款4:知道如何查看推导出来的类型.

Effective前端1:能使用html/css解决的问题就不要使用JS

  借用Effective之名,开始写Effective系列,总结一些前端的心得. 为什么说能使用html/css解决的问题就不要使用JS呢?两个字,因为简单.简单就意味着更快的开发速度,更小的维护成本,同时往往具有更好的体验,下面介绍几个实例. 1. 导航高亮 导航高亮是一种很常见的问题,包括当前页面的导航在菜单里面高亮和hover时高亮.你可以用js控制,但是用一点CSS技巧就可以达到这个目的,不需要使用JS. 在正常态时,每个导航的默认样式为: 正常态透明度为0.5 CSS 1 2 3 n

Objective-C 2.0 基础要点归纳

本文的阅读基本条件: 具备C/C++基础知识,了解面向对象特征 阅读过<Objective-C 2.0 程序设计(第二版)>.<Objective-C 程序设计 第6版>或相关基础OC书籍 参考资源: 1.<Effective Objective-C2.0> 2. <Objective-C 2.0 程序设计(第二版)>/<Objective-C 程序设计 第6版> 3. http://www.cnblogs.com/pengyingh/artic

Effective Modern C++ 读书笔记 Item 1

最近发现了<Effective Modern C++>这本书,作者正是大名鼎鼎的Scott Meyers——<Effective C++>.<Effective STL>的作者. 而就在C++11逐渐普及,甚至是C++14的新特性也进入大家的视野的时候,<Effective Modern C++>一书应运而生.此书与其前辈一样,通过数十个条款来展开,只不过这次是集中于C++11和C++14的新特性.auto.decltype.move.lambda表达式……

【《Effective C#》提炼总结】提高Unity中C#代码质量的22条准则

本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/53869998 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 引言 我们知道,在C++领域,作为进阶阅读材料,必看的书是<Effective C++>. 而<Effective C#>之于C# ,是类似<Effective C++>之于C++一样的存在. 这篇文章,

《Effective C++》重点摘要(八)

<Effective C++>第八章:定制new和delete 了解new-handler的行为.new和delete不是函数,是申请和释放内存的操作符.当new提出获得内存申请失败时会发生什么?老旧的编译器是返回null指针.现在呢,如果申请失败,会先调用一个错误处理函数,那就是new-handler.这就像一个回调函数,系统有一个默认的,用户也可以自行编写一个错误处理函数并使用set_new_handler函数设置之.通常自行编写的错误处理函数可以使用这些策略: 1) 多次尝试申请内存.