文章目录
*前言
🤍即将大二读软工,大一为计算机大类,大二分流选择了软件工程,那么什么是软件工程?为什么自己选择了软件工程?keke,从实际生活中出发,软件工程师工资高,国家需求岗位高,自己考研可以一条路走到黑,偏软件,偏实践,不用像计科学那么多。这是从个人角度看待软工,接下来通过较学术,较产业的角度来加深认识了解软件工程。视频是从华为云上找到的,免费的,笔记是自己思考理解为主+知识点记录下来的。
1.软件危机和软件工程
❤我们现在所处的世界是被软件定义的世界,其实仔细观察我们的世界,Software is everywhere.手机上各种APP,去医院,自动取号设备,去超市,自动付款设备,课堂上多媒体设备,小区人脸识别…从吃穿住行,到宇宙航天,随着时间,软件的比重越来越多,软件的规模也越来越多。软件规模越大,技术要求就越高。就如我国社会主要矛盾是人民日益增长的美好生活需要与当前不平衡不充分发展的矛盾一样,***软件危机是指当前时代落后的软件生产方式无法满足当前时代迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。***从本质分析:四大困难与挑战—复杂性,不可见性(更符合本质),可变性,一致性。而软件工程为了应对软件危机而产生。**软件工程是用工程化的方法,构建和维护有效的、实用的和高质量的软件学科。**它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
❤既然是软件工程,字面意思上可以从两个核心问题去看待。从软工管理视角,成功是否可以复制?传统管理行业成功方法能否复制?从软工技术视角,问题是否可以解决得更好?例如算法,是否有更好的算法对于解决这个问题。
2.软件项目管理和软件过程管理
❤软件项目管理:管理三大关键要素—目标,状态,纠偏(可以从你学期学习项目角度思考)软件项目管理是应用方法、工具、技术及人员能力来完成软件项目,实现项目目标的过程。软件项目典型的三大目标—成本,质量,工期。估算,计划,跟踪,风险管理,范围管理,人员管理,沟通管理,等等。
❤软件过程:成功是否可以复制?软件过程是为了实现一个或者多个事先定义的目标而建立起来的一组实践的集合。这组实践之间往往有一定的先后顺序,作为一个整体来实现事先定义的一个或者多个目标。生命周期模型,是对软件过程的一种人为的划分。软件过程不包含人员因素。
❤广义软件过程:理论基石----软件产品和服务的质量,很大程度上取决于生产和维护该软件或者服务的过程的质量。广义软件过程包括技术,人员以及狭义过程(流程图)。同义词:软件开发方法,软件开发过程。(keke,以下为一堆看不懂的名词:净室Cleanroom方法、极限编程方法、Gate方法;敏捷软件过程/方法,轻量型过程/方法以及重型过程/方法描述也是恰当的。)
❤生命周期模型与软件过程:同一个软件过程,可能有不同的生命周期。区别与联系【生命周期模型是对软件开发过程的人为划分,生命周期模型是软件开发过程的主框架,是对软件开发过程的一种粗粒度划分,生命周期模型往往不包括技术实践】典型的生命周期模型:瀑布,迭代式,增量~,螺旋,原型法等等。
❤软件过程管理:管理对象是软件过程,管理目的是为了让软件过程在开发效率,质量等方面有着更好性能绩效(performance)
3.软件发展阶段和软件工程经典工作
❤驱动力:三个本质难题因项目而异,四个本质难题相互促进,本质难题带动软件方法(过程)演变。本质是不可见,随着技术迭代,计算机硬件的迭代,软件规模大,导致软件的复杂(规模),一致性(机器对接),可变性(设备迭代)
❤第一阶段:软硬件一体化阶段(50年代~70年代)细分两个阶段:软件完全依附于硬件,软件作坊。
软件完全依附于硬件a—软件应用典型特征:软件支持硬件完成计算任务,功能单一,复杂度有限,几乎不需要需求变更b—软件开发典型特征:硬件太贵,团队主要以硬件工程师和数学家为主。
软件作坊a—软件应用典型特征:功能简单,规模小b—软件开发典型特征:很多非专业领域的人员(电子表格)涌入软件开发领域,高级程序语言出现,质疑权威文化盛行
❤第二阶段:软件称为独立的产品(70年代~90年代)软件应用特征:摆脱了硬件束缚(OS),功能强大,规模和复杂度剧增,个人电脑出现(普通人成为软件用户)需求多变,兼容性要求,来自市场的压力。形式化方法,结构化程序设计(分而治之)和瀑布模型。问题和不足(效率和质量):形式化在扩展性和可用性方面存在不足,瀑布模型成为一个重文档,慢节奏的过程。成熟度模型
❤第三阶段:网络化和服务化(90年代中期迄今)软件应用特征:功能更复杂,规模更大,用户数量急剧增加(这会带来什么问题?)快速演化和需求不确定,分发方式的变化(SaaS)迭代式:大型软件系统的开发过程也是一个逐步学习和交流的过程,软件系统的交付不是一次完成,而是通过多个迭代周期,逐步来完成交付。XP方法:偏重于一些工程实践的描述,有一个迭代式框架,但没能流行开,SCRUM:管理框架和管理实践,kanban:精益生产(丰田制造法)的具体实现,可视化工作流,限定WIP,管理周期时间。开源软件开发方式:是一种基于并行开发模式的软件开发的组织与管理方式。代码管理。一些演化:内部开源,众包。当前软件发展现状:软件应用典型特征:仍然处于网络化和服务化阶段,近乎苛刻的用户期望,多:功能丰富,快:快速使用,及时更新。好:稳定,可靠。省:用户的获得成本低,最好免费
。软件开发典型特征:空前强大的开发和部署环境–Xaas,盛行共享文化,潜在支持获得了长足进步AI,cloud.错综复杂的部署和运维环境。典型DevOps实践和方法。。。。(实在听不懂,看不懂。就不记了)
4.敏捷软件开发
❤敏捷软件开发:是一组强调在不确定和混乱的情况下适应软件需求快速变化的,基于迭代式开发的软件方法和实践。
敏捷软件开发是当前应对模糊需求,快速变化需求的最佳方式。云,互联网时代的软件开发:易变,要求快速支付。
相对计划驱动方法(瀑布模型)两个更深层的特点:敏捷型方法是适应性而非预见性。敏捷型方法是面向人的而非面向过程的。解释有价值的迭代高于文档,但是并不是说文档是被禁止的 。
所有敏捷软件开发方法都是迭代式方法
5.Scrum与软件敏捷开发管理实践
❤Scrum:Scrum是一个框架,在此框架中人们可以解决复杂的自适应难题,同时也能高效并创造性地交付可能最高价值的产品。特点:轻量的,易于理解的,难以精通的。Scrum基于经验过程控制理论,或称之为经验主义。透明,检视和适应是经验过程控制的三大支柱。
❤Scrum 3355:三个角色:Scrum Master、Product Owner(产品负责人)和Team(团队)。三个工件:Product Backlog(产品待办事项),Sprint Backlog(Sprint待办事项)和可交付产品增量(燃尽图)五个仪式:Sprint(冲刺),Sprint Planning(Sprint规划),Sprint Daily Standup(每日站会),Sprint Review(Sprint评审)和Sprint Retrospective(回顾)。五个价值观:Courage(勇气),Openness(开放),Focus(专注),Commitment(承诺),Respect(尊重)。根据Scrum,每个冲刺应该产出什么?答:一个潜在的可交付的产品功能增量
❤角色:product owner产品负责人,Scrum Master、Team全功能团队,特性团队,自组织团队。(emmm.后面视频课程以做做题为主吧)1.自从上一个迭代后,团队已经从6名成员增加到了14名。结果,在当前迭代中,团队工作的场地特别拥挤并且在每日站会时都觉得不舒服。这让团队花费了比理想中更长的时间去完成这个站会。这个站会给团队当前的进度带来了一些问题。根据这些信息,项目经理应该:把这个团队分成几个子团队并且让他们安排各自的站会。2.Scrum团队最强大的能力是什么?自组织和全功能。3.是谁来促进Scum中的实践?SM。4.一个高效的敏捷团队应该:自组织,授权决策。5.对于每个功能的商业价值,由谁来负责定义?PO.6.哪个是SM的职责?提供领导、指南和教练的角色。
❤用户故事:1.在敏捷开发中,用户故事的主要元素是什么?故事对话、书面描述、故事的验收标准。2.某敏捷团队的迭代并不顺利。团队成员对需要开发的用户故事有诸多疑问,且用户故事失败。用户故事失败的原因?在规划过程中讨论的用户故事不包括验收标准,并且没有充分讨论
❤用户故事地图:用户故事地图是一门在需求拆分过程中保持全景图的技术。敏捷软件开发中使用用户故事地图来发现,管理需求。史诗故事可以分解成较小的用户故事。
❤估算:1.团队A每个迭代完成61个故事点,团队B每个迭代完成20个故事点。团队A有更多的高级工程师。一个管理者要求团队B在下一个迭代时要与团队A的故事点数相当。基于这些信息,以下哪个是更应该告诉管理者的最合适的说法?单独比较两个团队的故事点数是没有意义的。2.故事点是什么?一个用户故事规模的相对测量。3.用故事点的方法去估算项目工作,最好的方法是:团队成员一起进行估算。4.以下哪个是对计划扑克估算的最佳描述?团队成员各自给出故事的估算,然后互相讨论理由直到达成一致
❤会议实践:1.在每日站会上,一个团队成员声明遇到了一个问题。这将团队引入到了一个解决问题的讨论中。SM应该怎么办?告诉团队成员在会议结束前搁置这个讨论。2.每日站会上的3个问题是:“你昨天完成了什么”“今天打算做什么”和“____”。你遇到了哪些障碍。3.冲刺回顾会议的目的是什么?识别哪些做得好,哪些做得不好,哪些工作可以在下一个过程中改进。4.Sprint评审会议的主要目的是什么?演示迭代中已完成的功能。5.燃尽图的一个目的是什么?显示剩余的工作量还有多少。6.每日站会的主要目标是什么?增加每个人工作的可视性,从而确保工作的集成。7.在每次迭代结束时,团队应向谁演示完成的工作?干系人。
❤Kanban:看板方法的核心实践1.可视化工作流程。2.限制进行中的工作。在 Scrum 实践中在哪个部分最合适结合看板实践?冲刺
6.extreme programming与敏捷软件开发部分技术实践
❤XP:快速反馈1.XP团队努力避免____?人工回归测试。2.持续集成确保一个产品____。可以在任何时间进行技术部署。3.对于Scrum和XP之间关系的最好的描述是哪一个?每种方法的实践通常是互补的。4.TDD是一个快速的____循环?测试,编码,重构。5.在XP中,分析、设计在什么时间进行?每天工作中
7.敏捷软件开发现状与大规模敏捷
❤(keke,给的一堆英文报告我看的一脸懵)
1.下面哪一项不是敏捷软件开发带来的好处?公司获得更多的投资.2.当前应用最为广泛的大规模敏捷方法是?SAFe.3.根据2019年发布的13th Annual State of Agile Report,当前应用最为广泛的敏捷方法是?Scrum.
*小结
🤍主要讲了现代软件工程,软件过程,软件项目管理等的概念,三个软件工程阶段,一些方法,介绍了敏捷软件开发,scrum和XP极限编程…emmmm,看来程序员和项目管理区别还是蛮大哈。简言之,软件工程是顺应时代需求而产生的一门学科,用工程化的方法来解决软件等一列问题。