1理论学习
1.1 慕课第四章学习
学堂在线4-1节:课程视频对软件过程进行了说明,定义了过程的含义。需求-过程(程序、监视测量)-客户满意的产品。以麦当劳食品的过程管理为例对过程的要求及客户需求及销售等进行了对比,最终获取质量保证。过程:管理过程、实现过程、支持过程。软件过程:问题定义、需求开发、软件设计、软件构造、软件测试。软件开发活动,以学生排队买票为例比较不同方案。软件测试与软件维护,定义新需求,进一步开发,修改系统。
学堂在线4-2节:了解了软件过程模型,定义了热舞之间关系和架构方法。模型类别:瀑布模型(开发阶段严格按照线性,需要后期才能发现错误,目前很少采用)、原型化模型(满足需求的不确定性,迅速进行原型化,修改灵活,关注用户行为)、迭代式开发(构建发布,迭代更新各版本,补充完善)、可转换模型(比较需求,必要时更新,安全可靠性极高)。软件开发具有迭代性,需要不断反复尝试。案例分析:汽车ABS系统、在线课程网站。
学堂在线4-3节:敏捷开发过程,采用增量及迭代的方法替代传统的瀑布模型。软件项目存在难以预知的内容和风险,需求不断更新。专注于交付的价值,需要迭代演进。用户对创新变化要求较高。敏捷方法强调适应而非预测,其是自适应。敏捷更强调灵活,响应变化。客户合作胜过合同谈判,相应变化胜过遵循计划。尽早和持续的交付有价值的软件,自组织团队。通过对比瀑布模型及敏捷方法发现敏捷方法的巨大优点。
学堂在线4-4-1节:邹欣经理对自身在微软公司的经历体悟进行了介绍。其从1996年即开始进入微软参与工作,并参加了诸多项目,如必应词典、必应输入法、Win10系统、FaceSDK/Cortana人机交互。软件构建:build to learn、build to show、build toserve、build to win。
学堂在线4-3-2节:邹欣经理介绍了软件开发流程。How – a brief history,以比尔盖茨首次见到Cowboy开启创业之路。通过一个Basic软件在新墨西哥州开始。Excel、NotePad早期软件开发,跟踪软件开发过程中的问题,开发Raid-bug killer,消除bug。1997年微软利用BBS系统进行软件管理,后来利用Microsoft Project对项目进展进行管理。Product Studio是Raid的升级版。
学堂在线4-4-3节:本节邹欣经理继续介绍了软件开发流程。MSF History仙姑、MSF principles要求的9条规则。强调微软完成一个项目后,都会回头总结发现开发过程中的错误,避免下次再犯!遵循以上原则,更容易获取良好的软件。编写软件代码需要长期学习,减少错误。MSF & other property、Drive for result – death march。
1.2 慕课第五章学习
学堂在线5-1节:团队组织与管理,课程视频首先以西游记引出团队合作的重要性。团队的组织与管理:人力资源规划、项目团队组建、项目团队建设、项目团队管理,可分为系统分析员、系统架构员、程序员、测试人员、培训人员。通过案例描述,对项目团队管理进行了相关介绍,软件及硬件的开发。人员选择(平台经验、应用领域经验、编程语言经验、解决问题能力、沟通能力、适应性),感性、理性、理性内向、理性外向都需要考虑。团队的概念是相互互补,开发团队组织模式(民主式结构、主程序员式结构、矩阵式结构)
学堂在线5-2节:项目沟通管理,沟通对人影响极大,良好的人际沟通占75%。沟通是你被理解了什么而不是说了什么。沟通的复杂性,对分解后的任务需要相互沟通交流,软件开发是一种沟通复杂的工作。Brooks法则,赶进度通过加班解决,而不是通过增加人员解决。选择合适的沟通方式,口头沟通(适合复杂沟通、肢体语言表达)、书面沟通(传播信息量大、互动反馈比较大)、电子沟通(内容丰富广泛)。项目沟通管理,将客户与项目团队沟通起来,增强团队凝聚力。
学堂在线5-3节:软件项目计划,对项目过程中活动、资源、任务进行制定。项目计划管理:开发问题描述(以微信为例,说明问题描述)、定义顶层设计(明确设计目标、初始子系统分解、不断分解和求精、任务组织和分配)、定义工作分解结构(基于功能进行分解,根据产品系统进行分解)、建立初始时间表(识别任务、识别任务依赖关系、估算任务时间、定期更新)。
学堂在线5-4节:软件项目估算,估计软件交付的时间及成本,软件规模越大,复杂性越高,成本越高。做出相对有价值的估算,主要针对结果进行。首要准则:对结果进行估计,而不是活动。专家判断(借鉴历史信息,给出估算上限)、参数估算(历史数据进行统计分析,进而估算,主要通过功能点方法)、结构化成本模型(COCOMO利用经验模型进行工作量及成本估算)、用例点估算(估计规模及工作量)。
1.3《构建之法》讲义学习
本周进行了《构建之法》讲义中“软件过程/方法论”及“团队中的角色与合作”两个章节的学习,相关学习总结如下:
(1)各种方法概述:讲义中再次强调了团队合作,一个合适的团队结构,能更大地改进交流的效率,让团队更能把注意力集中在最主要的目标——解决用户需求上面。讲义中先以王屋村的一幕与划龙舟两个例子对比突出非团队与团队之间的强烈差别。引出团队特点:一、团队有一致的集体目标, 团队要一起完成这目标。二、团队成员有各自的分工, 互相依赖合作, 共同完成任务。最后,讲义介绍了软件团队的形式:一窝蜂模式 (chaos team)、主治医师模式: (Chief-Programmer Team, surgical team)、明星模式 (Super-star model)、社区模式 (Community Model)、业余剧团模式 (Amateur Theater Team)、秘密团队 (skunk work team)、特工 (SWAT) 团队、交响乐团模式 (Orchestra)、爵士乐模式 (Jazz Band)、功能团队模式 (feature team)、官僚模式 (bureaucratic model)。
(2)敏捷方法:讲义中说明敏捷 (Agile) 是一股思潮, 它包括了好几种软件开发的方法论 (methodology);这些方法论又是建立在许多业界证明行之有效的最佳实践方法上的。敏捷思潮的价值观: Individuals and interactions over processes and tools(个人和交互重于过程和工具)、Working software over comprehensive documentation(可用的软件重于完备的文档)、Customer collaboration over contract negotiation(和客户协作重于 合同谈判)、Responding to change over following a plan(响应变化重于遵循计划)。
敏捷开发原则:一、尽早并持续地交付有价值的软件以满足顾客需求;二、敏捷流程欢迎需求的变化, 并利用这种变化来提高用户的竞争优势;三、经常发布可用的软件,发布间隔可以从几周到几个月,能短则短;四、业务人员和开发人员在项目开发过程中应该每天共同工作;五、以有进取心的人为项目核心,充分支持信任他们;六、无论团队内外,面对面的交流始终是最有效的沟通方式;七、可用的软件是衡量项目进展的主要指标;八、敏捷流程应能保持可持续的发展。 领导, 团队和用户应该能按照目前步调持续合作下去;九、只有不断关注技术和设计才能越来越敏捷;十、保持简明——尽可能简化工作量的技艺——极为重要;十一、只有能自我管理的团队才能创造优秀的架构, 需求和设计;十二、时时总结如何提高团队效率, 并付诸行动。
(3)Scrum/Sprint:Scrum/Sprint是一种敏捷的开发方法:一、找出完成产品需要做的事情;二、决定当前的冲刺需要解决的事情;三、冲刺。Sprint/Scrum 对项目的众多需求采取分而治之的办法,能让相关人员集中精力,在一定期限内解决部分问题。对任务的改进方法:一、定义好任务究竟是什么;二、要在每一个任务中记载我们完成这个任务还需要多少时间。Scrum对团队的要求:self-managing、self-organizing、cross-functional。
(4)MSF-Agile:MSF,即Microsoft Solution Framework,也就是微软推荐的做软件的方法。MSF基本原则:一、推动信息共享与沟通(Foster open communications);二、为共同的远景而工作(Work toward a shared vision);三、充分授权和信任(Empower team members);四、各司其职,对项目共同负责(Establish clear accountability and shared responsibility);五、重视商业价值(Focus on delivering business value);六、保持敏捷,预期变化(Stay agile, expect change);七、投资质量(Invest in quality);八、学习所有的经验(Learn from all experiences)。
(5)团队的类型与团队的合作阶段:团队合作的阶段:萌芽阶段(个人的角色和职责不清楚,做事的规程往往被忽略)、磨合阶段(要进行充分的交流,并且告知团队成员,不允许将信息滞留在小团队内部)、规范阶段(成员们就很多事情取得了一致。角色和职责定义得非常清楚)、创造阶段(成员们相互鼓励,积极提出自己的意见和建议,也对别人提出的意见和建议给出积极评价和迅速反馈)。
(6)团队成员不同的投入和心态——猪/鸡/鹦鹉:团队中不同的人对于团队的承诺是不一样的。讲义分别以猪/鸡/鹦鹉描述具有不同承诺想法的成员,重大决定由 “猪” 来定夺。在遵循敏捷原则的团队里, 成员们并不忌讳谈论不同的投入和负责程度。
(7)角色-PM、PM Spec,PM 的成长,项目管理的细节:不同的人还要在团队中担负不同的任务。微软的PM —— Program Manager源自微软的经理叫 Program Manager。PM分类:一、做功能设计的PM;二、有些需要对商业和客户很强的了解能力 (如 Office 应用软件的PM );三、有些需要广泛的经验和知识面, 商业拓展能力 (如 MSN 部门的 PM)。PM 最大的, 最独特的贡献是保持团队的平衡。Spec-specification分类: 一、 functional spec, 软件功能说明书, 主要用来说明软件的外部功能, 和用户的交互情况 (把软件当作一个黑盒子);二、technical spec, 软件技术说明书, 又叫 design doc, 设计文档, 主要用来说明软件内部的设计 (把软件当作一个透明的箱子)。
(8)角色-Dev、Dev 的成长,软件开发不是闭卷考试:个人的劳动成果有序地组织起来, 就是团队的流程。软件开发流程不光指团队的流程, 软件团队是由个人组成的。一个好的团队流程能把冲突的积极方面 (各自尽力把自己的工作做好,说服别人) 释放出来, 而避免消极方面 (因为冲突而产生的消极,抵触情绪等)。
(9)角色-QA & Test 质量保证和测试:质量保护(QA)。团队中的管理人员/PM 负责分析市场,设想功能,定义用户到底要什么;团队中的开发人员/Dev 负责实现功能,搞清楚怎么才能满足用户的需求;团队中的测试人员/QA 搞清楚我们的软件是否满足了用户的需求。构建验证测试是指在一个构建完成之后,团队自动运行的一套验证系统基本功能的测试。在软件开发的一定阶段,我们要对一个软件进行全面和系统的测试,以保证软件的各个模块都能共同工作,在各方面都能满足用户的要求。这时的测试叫系统/集成测试。
2 实践学习
在本周周五,在教员的组织下我们进行了组队及对队友的代码库、代码质量评价、代码结构等进行了讨论,并提交了讨论作业。主要以前3周所完成的任意程序为例,学习如何基于代码仓库,完成两人合作的软件开发。熟悉如何使用两个账户,共同操作一个代码仓库,如何分工编写程序,流程上如何设计以避免冲突,两人共同编写同一文件时,如何解决冲突、合并更改。
3 学习时间安排
2020.03.09:学堂在线4-1节、4-2节及4-3节课堂视频学习。
2020. 03.10:学堂在线4-4节视频学习,以及学堂在线第四章课后测试题完成。
2020. 03.11:学堂在线5-1节、5-2节、5-3节及5-4课堂视频学习,以及学堂在线第四章课后测试题完成。
2020. 03.12:《构建之法》讲义第四节“软件过程/方法论”及第五节“团队中的角色与合作”的学习及Python基础编程电子书阅读与实践学习。
2020. 03.13:Python课程小组讨论学习,并提交相应作业。
2020. 03.14:Python编程电子书学习,python编程的讲解视频学习。
2020. 03.15:课后作业题编程练习的完成,完成各项任务汇总并上传作业。