2020年9月26日-02-软件工程-工程化思维+瀑布模型+敏捷开发

此博客用于记录2020年9月26日每日分享,
软件工程中的集中常见模式,瀑布模型,敏捷开发等

日期:2020年9月26日
主题:

  1. 讨论讨论怎么使用软件工程的思想来解决问题
  2. 软件工程中的集中常见模式,瀑布模型,敏捷开发等

文章目录

  • 软件工程
  • 常见的开发模型
    • 瀑布模型
    • 敏捷开发
    • 小结

软件工程

  软件工程是一门用工程化方法解决软件项目问题的学科,其本质也是一门工程学科,这门课的知识在学完后,不仅可以应用在软件项目中,还可以应用于日常生活中遇到的一些问题。

Everything is a project。

  有目的、有计划、有步骤地解决问题的方法就是工程方法。

在这里插入图片描述

  • 想法:想法阶段通常是想要解决问题。最开始问题通常是模糊的,所以需要清晰地定义好问题,研究其可行性,检查是否有可行的解决方案。
  • 概念:概念阶段就是用图纸、草图、模型等方式,提出一些概念性的解决方案。这些方案可能有多个,最终会确定一个解决方案。
    计划:计划阶段是关于如何实施的计划,通常会包含人员、任务、任务持续时间、任务的依赖关系,以及完成项目所需要的预算。
  • 设计:设计阶段就是要针对产品需求,将解决方案进一步细化,设计整体架构和划分功能模块,作为分工合作和开发实施的一个依据和参考。
  • 开发:开发阶段就是根据设计方案,将解决方案构建实施。开发阶段通常是一个迭代的过程,这个阶段通常会有构建、测试、调试和重新设计的迭代。
  • 发布:将最终结果包括文档发布。

常见的开发模型

瀑布模型

  严格按照一定的流程开发,需求分析-设计-编码-测试,部署这样的流程开发,每个阶段都有相应的产出。但是当客户的需求变化了,就不得不重新来一次从头到尾的分析,灵活性较差。
在这里插入图片描述
瀑布模型的优缺点
  你会发现瀑布模型其实跟我们传统的建筑建造方式非常类似。我们拿盖房子的过程来看看瀑布模型。

客户想要盖一栋房子(初步的想法)。

  • 客户一开始可能没想清楚想要什么样子的房子。(客户对需求还不清楚
  • 施工方开始找客户确认:用途是什么,要个几层的房子,什么建筑风格,希望什么时间完工,预算多少。(问题定义
  • 施工方根据客户提的需求,对比工期和预算,评估是不是值得做。(可行性研究
  • 施工方评估后觉得可行,于是和客户签订合同,约定价钱和工期。(立项,制定项目计划
  • 施工方开始跟客户沟通确认需求,例如每层户型如何,将来的装修风格等。(需求分析
  • 确认完需求后,施工方开始出建筑施工图,还画了漂亮的建筑效果图。(系统设计和 UI 设计
  • 施工方按照设计图开始施工。(程序编码
  • 这期间如果客户去参观施工情况,客户只能看到毛胚,只有最后施工完成才能看到最终样子。(在中间客户看不到结果,只有最后能看到结果
  • 原定二层是两个卧室,在房子施工过程中,突然客户说两个卧室不够,要改成三个卧室。这意味着施工方要对施工图重新设计,很多已经建好的房间要拆掉重建。(瀑布模型是很难响应需求变更的,而且越到后期代价越大
  • 工程质量检查人员对施工结果进行质量检测,如果不满足质量要求,需要修改。(测试
  • 最后验收通过后,客户入住。(上线
    所以你看,用瀑布模型开发软件,就像建筑工程里,盖房子一样简单和自然。每个阶段都有侧重的事情,就像需求阶段专注于搞清楚需求,编码阶段专注于实现。

  最重要的是,这种编码前先设计、编码后测试、整个过程重视文档的方式,开发出来的产品,质量相对是有保障的。

  但用瀑布模式开发,也存在一些问题。

  最大的问题就是不能及时响应需求变更,越到后期变更代价越大。另外,通常要到最后阶段才能看到结果是什么样子。
在这里插入图片描述


敏捷开发

你如何理解敏捷开发?

  敏捷开发更多的是一种思想,开发当中注重“人”作用,更多的关心客户合作,团队之间的交流之类的
在这里插入图片描述
  各种敏捷框架、方法论和工具,就像是“术”,告诉你敏捷开发的方式,而敏捷则是“道”,是一套价值观和原则,指导你在软件项目开发中做决策。

什么是敏捷开发详解2

如果用敏捷的方式盖房子?
客户想要盖一栋房子(初步的想法)。

  • 产品经理和客户进行了初步的沟通,把用户的需求写成了一个个用户故事(用简单的用户故事代替繁重的需求文档),例如:

作为一个上班族,我想要一个卧室,以便于休息;
作为一个家庭主妇,我想要一个厨房,以便于做饭。

  • 施工人员根据用户故事和客户进一步沟通(客户合作高于合同谈判),然后对用户故事进行设计和实现;
  • 每个用户故事开发时,还要给一个测试机器人编写测试脚本,让机器人可以自动测试(大量采用自动化测试),并且做好的用户故事可以随时被测试验收(随时发布,持续集成);
  • 每个 Sprint 四个星期时间(时间盒子,迭代时间固定);
  • 第一个 Sprint 搭了个草棚,一张床就是卧室,厕所就挖了一个坑,厨房还来不及搭建(每个 Sprint 会选择高优先级的用户故事),屋顶还在漏水(每个 Sprint 会定期发布,客户可以随时看到可用版本,即使还不完整);
  • 第二个 Sprint 有了简易厨房,同时修复了屋顶漏水的毛病(每个 Sprint 不仅完成用户故事,还会修复 Bug);
  • 第三个 Sprint 升级成了小木屋,但是忘记加上窗户(敏捷推崇自动化测试,但可能会测试不完备);
  • 第四个 Sprint 升级成了砖瓦房,窗户也开好了,客户可以入住。但是这时候客户发现一家三口的话,完全不够用,需要扩建到 3 个卧室。于是决定下个迭代改成 3 个卧室(响应变化高于遵循计划);
  • 第五个 Sprint,升级成了 3 个卧室,升级过程中把厨房下水道弄坏了(迭代过程中可能会导致质量不稳定);
  • 第六个 Sprint,修复了下水道的问题,房子也装修好了(迭代中不断完善);
    客户验收使用(上线)。

  敏捷开发对团队成员的要求较高,可能某个小功能从需求分析,设计,编码,测试都需要你独立开发,如果客户不愿意配合你,那么敏捷开发也很难运行起来

  其他几个模型因为用的不是特别多,增量模型,螺旋模型,用的不是特别多,所以这里只简单地列出他们在哪些场景常见,其他的会把部分资料发到群里大家有空的时候一起学学吧。

小结

  根据项目特点,选择好合适的开发模型,可以让你事半功倍,降低项目风险,提高项目开发效率,控制项目成本。比如说:

  • 一个以确认需求为主要目的的项目,就可以不用花太多时间在代码质量上面,低成本、高效做出来才是最重要的;
  • 一个高风险的项目,则可以采用螺旋模型,出现问题及时止损;
  • 一个很长时间加班加点,却一直没法上线,导致士气低落的项目,可以改成增量模型,先上线一个小模块,让大家看到成绩提升士气,然后再迭代,逐步上线其他模块。

  • 快速原型模型:不见兔子不撒鹰。期初不考虑质量、架构,用最快的速度见效,并向用户确认需求。经过几轮直观、快速的反馈,把需求确定下来。接下来,既可以抛弃原型用瀑布精密重构,也可以在模型基础上完善。优点是快速有效的确认需求。不足难以有效应对后续的需求变更。

  • 增量模型:分而治之。将大系统横向拆分成相对独立的若干小模块,每个模块采用瀑布模式分批次交付。优点是较快见到成果,且能够及时了解项目进展。不足是存在需求明确、系统可拆分、交付可分批等适用条件。

  • 迭代模型:罗马不是一天建成。把软件项目纵向划分成若干阶段,从核心功能入手,逐渐深化、细化,直到满足用户的全部需求。每个阶段都是一个瀑布,都要在前一阶段成果基础上加工、打磨。优点是快速满足基本需要,并体会软件演进的快感。不足是需求演化具有不确定性,会导致代码冗余、系统重构风险、项目周期不可控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解...

1、安装PowerDesigner15、MySQL5.不详细讲解了。网上一大把。请各位亲参考去。 2、安MyODBC-standard-3.51.0.7-win.msi、mysql-connector-odbc-5.1.5-win.msi两个文件。可以支持odbc在win7下创建连接。 3、安装好之后,最好重新启动系统。不要试图在win7控制面板内找…

转换机器学习:面向多学科问题,构建机器学习新生态

来源: 集智俱乐部作者:Ivan Olier译者:郭瑞东审校:张澳编辑:邓一雪导语机器学习方法在生命、物理、社会经济等复杂系统的应用日渐频繁。如何针对特定任务选取合适的机器学习方法,如何综合利用各类机器学习方…

nginx正向代理 反向代理

1、正向代理 1.我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站 2.于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。 3.客户端必须设置正向代理…

【综述专栏】从微分几何和代数拓扑的视角来重新探讨图神经网络

来源:知乎—努力努力再努力q地址:https://zhuanlan.zhihu.com/p/435040892在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可…

2021-07-27-jeesite学习笔记

2021年7月30日 https://blog.csdn.net/weixin_43886319/article/details/102668518 日了狗 2021年7月29日 sqlJenkins充吧 第一天 参考博文 安装jdk https://blog.csdn.net/qq_42815754/article/details/82968464 有关linux环境变量 https://blog.csdn.net/ljheee/articl…

elasticsearch-1

单实例安装 1、官网下载tar压缩包 https://www.elastic.co/downloads/elasticsearch 2、将下载好的压缩包elasticsearch-5.5.2.tar.gz上传到linux服务器,并解压缩 tar -vxf elasticsearch-5.5.2.tar.gz 3、cd进入到elasticsearch-5.5.2目录中,启动ela…

清华博士后用10分钟讲解AlphaCode背后的技术原理,原来程序员不是那么容易被取代的!...

来源:AI科技评论不久前,DeepMind 的团队发布了一个可以自动生成竞赛级代码的人工智能系统——AlphaCode,号称「媲美普通程序员」,一经发表就在国内外的AI圈里引起了巨大轰动。 -论文地址:https://storage.googleapis.c…

css基础选择器

文章目录css简介css语法规范css代码风格:css选择器的作用css基础选择器标签选择器:类选择器多类名选择器id选择器:id选择器和类选择器的区别:通配符选择器:选择器总结css简介 ​ CSS 是层叠样式表 ( Cascading Style …

深度学习模型模拟大脑地形图,有助于回答大脑不同部分如何协同工作

来源:ScienceAI编辑:凯霞大脑中处理视觉信息的部分——颞下(IT)皮层——受损可能是毁灭性的,尤其是对成年人而言。那些受影响的人可能会失去阅读能力(一种称为失读症的疾病)或辨认面孔&#xff…

深度学习再登Science:万物皆可做神经网络处理器,你甚至可以用锅碗瓢盆

来源:机器学习研究组订阅想象一下,你周围的任何东西,比如一个煎锅、一个玻璃镇纸,都可以用来当成神经网络的中央处理器,那是什么感觉?神经网络简单来说,是一种模仿大脑执行复杂任务的只能系统&a…

css目标

第一天 第二天

Gotta Catch Em All!——三元环计数

传送: https://vjudge.net/problem/Kattis-gottacatchemall 前置知识: 三元环计数 https://www.cnblogs.com/Dance-Of-Faith/p/9759794.html 思路: 首先去重边,记每个点的度数为n,三元环个数为m,答案为(∑…

【前瞻】机器人领域十项前沿技术

来源:工业互联网观察 机器人大讲堂近些年来,机器人行业发展迅速,机器人被广泛应用于各个领域尤其是工业领域,不难看出其巨大潜力。与此同时,我们也必须认识到机器人行业的蓬勃发展,离不开先进的科研进步和…

day27 网络编程一

网络编程 基础 一 软件开发架构 # c/s架构(client/server) c:客户端 / s:服务端 # b/s架构(browser/server) b:浏览器 / s:服务器 ps:bs架构本质也是cs架构 手机端看上去cs架构比较火,实际上bs已经在崛起,微信支付宝都在做一件事:统一接口,手机端之后肯定也是bs比较火 未来应用…

不止摩尔定律,计算领域值得学习的定律还有哪些?

来源:新智元当下,计算机领域最受欢迎的两大定律是:摩尔定律和梅特卡夫定律。摩尔定律,是以Intel(英特尔)联合创始人Gordon Moore(戈登•摩尔)为命名,摩尔定律预言,芯片上…

世界一流大学如何建设人工智能学科

来源:光明日报作者:李锋亮 庞雅然 人工智能人才培养是变革核心人工智能、基因工程、纳米科学并列为21世纪三大尖端技术,是工业革命4.0的变革核心。其中,人工智能涉及广泛的知识领域,包括技术体系内的数学基础、技术基础…

机器学习获量子加速!物理学家与计算科学家「自然联姻」

来源:新智元AI和量子计算的碰撞,会产生什么神奇的火花?IBM团队的一项研究表明,在机器学习任务上,已经找到了量子计算能够加速数据分类的证据,远超传统算法。未来,基于量子的机器学习加速器可能就…

day28 socket网络编程

一 socket 套接字 二 粘包问题 一 socket 套接字 1.1 为何学习socket一定要先学习互联网协议: 1.首先:网络编程目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件 2.其次:C/S架构的软件(软件属于应用层…

2022年值得关注的8个人工智能趋势

来源:AI前线作者:Michael Spencer译者:Sambodhi策划:凌敏1. AI-on-5G2022 年,工业 AI 和 AI-on-5G 物联网应用将会成为主流。想象一下,当我们以元宇宙为目标的时候,我们对物理空间的升级方式同样…

我国科学家首次揭示“时空”记忆在猕猴大脑中表征的几何结构

来源:央视新闻客户端作者:帅俊全 2月11日,国际学术期刊《科学》以长文形式发表了题为《序列工作记忆在猕猴前额叶表征的几何结构》的研究论文。近日,中国科学院脑科学与智能技术卓越创新中心与国内多家单位合作,发现神…