前情提要

课程连接:
https://www.bilibili.com/video/BV1Lt411874E?p=2
课件内容:
就是下面的笔记了,没有其他的内容

什么是软件设计和软件工程

  • 软件工程概念的提出将近40年,但是客观的讲软件工程与别的行业相比教还很不成熟,还处在一个摸索发展的阶段
  • 软件工程的发展历史
    • 20世纪50年代软件诞生了,那是软件的从业人员多数为数学家和电子工程师.
    • 早期的软件都是由使用者自己编写的,往往带有很强的个人色彩.并没有一个系统的开发流程。
    • 20世纪60~70年代,软件业进入了一个发展时期,出现了所谓的软件公司。随着软件规模的扩大,软件需求的复杂,软件维护的难度变得越来越大.出现了==>软件危机
    • 这样人们就开始思考如何控制软件的开发,在1968年在德国召开的一次国际学术会议上第一次提出了==>软件工程的概念

软件的生命周期

1、问题的定义及规划: (可行性分析报告和软件开发计划)

此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。

2、需求分析: (需求分析说明书和初步的用户手册)

在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。“唯一不变的是变化本身。”,同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。

3、软件设计: (概要设计、详细设计)

此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。

4、程序编码: (提交源程序及清单)

此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。

5、软件测试: (提交软件维护测试报告)

在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试(白盒)、集成测试(黑盒,功能测试、强度性能测试)以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。

6、运行维护:

软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。(提交软件维护报告)

常用的软件生命周期模型及选择

瀑布模型–最早出现的软件开发模型

增量和迭代模型

  • 增量迭代是RUP (Rational Unified Process)统一过程常采用的软件开发生命周期模型。

  • 增量和迭代有区别但两者又经常一起使用,所以这里要先解释下增量和迭代的概念。

    • 假设现在要开发A、B、C、D四个大的业务功能,每个功能都需要开发两周的时间.
    • 则对于增量方法而言可以将四个功能分为两次增量来完成
      • 第一个增量完成A,B功能,第二次增量完成C,D功能。
    • 而对于迭代开发来将则是分两次迭代来开发
      • 第一次迭代完成A、B、C、D四个基本业务功能但不含复杂的业务逻辑
      • 而第二个功能再逐渐细化补充完整相关的业务逻辑。
    • 在第一个月过去后采用增量开始时候A、B全部开发完成,而C、D还一点都没有动,而采用迭代开发的时候A,B,C,D四个的基础功能都已经完成。
  • RUP强调的每次迭代都包含了需求、设计和开发、测试等各个过程,而且每次迭代完成后都是一个可以交付的原型。

    • 迭代不是并行,在每次迭代过程中仍然要遵循需求->设计->开发的瀑布过程。
    • 迭代周期的长度跟项目的周期和规模有很大的关系。
    • 小型项目可以一周一次迭代,而对于大型项目则可以2-4周一次迭代,如果项目没有一个很好的架构师,很难规划出每次迭代的内容和要到达的目标,验证相关的交付和产出。
    • 因此迭代模型虽然能够很好的满足与用户的交付和需求的变化,但确是一个很难真正用好的模型。

建模的重要性

UML

https://www.baidu.com/link?url=EwQk8Ci5zSdJouCVlzxrjRoAcT9L5wE7cvXBkXozQFMipwHa7UWjHv0pJh1M7iJ4Kle44Oe9bVkyuK1Ky8y38-RrZaMP2cDbhhbFY_6Dg0K&wd=&eqid=baf64a930002b5cd00000006606171b5

系统时间需要设置到2020年之前

——Unified modeling language

  • 一件复杂事情的做法怎样才能想清楚呢?

    • 是不是可以借助一些道具、技巧和方法来帮助想呢?
    • 想清楚以后是不是应该在纸面上留下一些结果,以方便自己使用和与人交流?
    • 这个结果用什么格式来记录,别人才容易看懂呢?
    • UML是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。
  • uml本身是一套符号的规定,就像数学符号和化学符号一样

    • 之所以出现这些符号定义,是因为这些符号背后对应着一套思想和方法,这些符号用于帮助描述这套思想和方法的,这些符号是由这套思想和方法催生的。
    • 要学uml,就是要借助这些符号来掌握背后的思想和方法,这些符号虽然必须掌握,但它远不如它背后对应的思想和方法重要。
  • 必须熟练掌握了某种面向对象的编程语言和跟着实施了若干个软件项目,才适合学习uml和理解uml中的一些内容,才会有好的学习效果。

    • 很难想象一个没有在铁路工地上工作过的人,怎么去设计铁路!!!
    • UML解决编码前的设计问题,而不解决编码过程的实施问题,我们前面学习的各种编程技术是解决编码过程的实施,必须有了这些基础才能理解和运用UML。

什么是模型

  • 一幢大楼在建造前必须先有图纸将其外观、内部结构、施工方案描述清楚,这些图纸就是其模型,现实生活中你还接触过哪些模型呢?电路图、地图、地球仪、乐谱等都是模型。
  • 模型的三个特点:
    • 简化:模型可以简化表达出事物的某些方面,让人们可以方便快速地审视、交流和评估事物和系统。
    • 多视角:模型具有不同的视角,有的是对总体进行考量、有的是对局部细节进行考量,例如整个城市的地图和某个街道的局部放大图,整个地图只展示主要的街道和干道,而街道的局部放大图则详细展示出街道的信息。
    • 通用符号:模型的符号要通用和标准,人们讨论模型时的精力就可以集中在对事物本身的理解和研究上,而不是把时间和精力花费在对符号模型的理解上。模型符号需要学习,但不是重点,例如,学音符只是学音乐中的一小部分工作,只是为了能够通过音符将乐曲表达出来和能够看到乐曲,学音乐的重点工作在于学习作曲技巧上。
  • 软件系统在开发前,也要通过模型来将其功能,内部结构,开发方案描述清楚。

uml一览图

  • 用例图(use case)

  • 静态结构图:类图、对象图、包图、组件图、部署图

  • 动态行为图:交互图(时序图与协作图)、状态图、活动图

画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,图好看与否就是看你的字是否规范,至于工具,就像你用什么笔,不算非常重要,关键在于意,而不在于形。

用例图

用例建模是UML建模的一部分,用例建模的最主要功能就是用来表达系统的功能性需求或行为。

  • 参与者(Actor):

    • 参与者不是特指人,是指与系统交互中所扮演的角色。因此参与者可以是人,可以是事物,也可以是其他系统等等。参与者在画图中用简笔人物画来表示:
  • 用例是是系统为参与者提供的功能。

    • 对于对用例的命名,我们可以给用例取一个简单、概括性的名称,一般为带有动作性的词。用例在画图中用椭圆来表示,椭圆下面附上用例的名称:

用例描述

​ 用例图只是简单地用图描述了一下系统,对于每个用例,我们还需要有详细的说明,这样就可以让别人对这个系统有一个更加详细的了解,这时我们就需要写用例描述。

对于用例描述的内容,一般没有硬性规定的格式,但一些必须或者重要的内容还是必须要写进用例描述里面的。用例描述一般包括:简要描述(说明)、前置(前提)条件、基本事件流、其他事件流、异常事件流、后置(事后)条件等等。下面说说各个部分的意思:

  • 简要描述:

    • 对用例的角色、目的的简要描述;
  • 前置条件:
    • 执行用例之前系统必须要处于的状态,或者要满足的条件;
  • 基本事件流:
    • 描述该用例的正常基本流程,指每个流程都“正常”运作时所发生的事情,没有任何备选流和异常流。
  • 其他事件流:
    • 表示这个行为或流程是可选的或备选的,并不是总要执行它们;
  • 异常事件流:表示发生了某些非正常的事情所要执行的流程;
    • 后置条件:用例一旦执行后系统所处的状态;

用例图和用例描述设计实例请看附件文档

把Rose中的图形复制到Word文档

在rose图形上按Ctrl+A,然后按Ctrl+C,在wod中按Ctrl+V就OK。

类图和对象图

  • 用于描述系统中的对象类本身的组成和对象类之间的各种静态关系。
  • 类之间的关系:
    • 依赖、泛化(继承)、实现、关联、聚合与组合
  • 对象图描述一组对象与它们之间的联系,它是系统状态的某一时刻的快照,它的使用相当有限,它主要用于了解系统在某个特定时刻的具体状况和数据结构。
  • 对象图表示方法与类图大体相同,对象图中的对象属性可以有具体值,类图中的一个类可以对应成对象图中多个对象,例如,部门类的自关联就可以对应成多个部门对象之间的关联。

类图

类图—依赖关系(Dependence)

只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了。

类图—泛化关系(generalization)

泛化关系实际上就是继承关系,他是依赖关系的特例

类图—实现关系(Implementation)

实现关系实际上就是A类实现B类,他是依赖关系的特例

类图—关联关系(Association)

  • 关联关系实际上就是类与类之间的联系,他是依赖关系的特例
  • 关联具有导航性:即双向关系或单向关系
  • 关系具有多重性:
    • 如“1”(表示有且仅有一个),“0…”(表示0个或者多个),“0,1”(表示0个或者一个),“n…m”(表示n到 m个都可以),“m…*”(表示至少m个)。

类图—关联关系(Association)

自关联

类图—聚合关系(Aggregation)

  • 聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。
  • 聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
    • 如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的
  • 使用带空心菱形的实线来表示:

类图—聚合关系(Aggregation)

如果我们人Mouse,Monitor和Computer是不可分离的,则升级为组合关系

类图—组合关系(Composition)

  • 也是整体与部分的关系,但是整体与部分不可以分开。

    • 如:我们定义了两个实体:Person与IDCard,在Person实体中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除

活动图(Activity Diagram)

在UML里,活动图本质上就是流程图,它描述系统的活动,判断点和分支等。下面是用户登录的活动图

时序图(Sequence Diagram)和协作图(Collaboration Diagram)

  • 时序图(Sequence Diagram)是强调消息时间顺序的交互图。

    • 时序图描述类系统中类和类之间的交互,它将这些交互建模成消息交换。时序图是一个模型,用于描述对象组如何随着时间在某些行为方面进行协作。
  • 时序图是一种强调消息时间顺序的交互图,他由活动者(Actor)、对象(Object)、消息(Message)、生命线(Lifeline)和控制焦点(Focus of control)组成。
    • 在UML中,对象表示为一个矩形,其中对象名称标有下划线;
    • 消息在时序图中由有标记的箭头表示;
    • 生命线由虚线表示,控制焦点由薄薄的矩形表示(也称可为Activation Bar “活动条”)。
  • 协作图(Collaboration Diagram,也叫合作图)是一种交互图(interaction diagram),强调的是发送和接收消息的对象之间的组织结构。
    • 一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。
  • 时序图主要侧重于对象间消息传递在时间上的先后关系,而协作图则侧重于对象间及对象和角色间交互的静态关系。

时序图(Sequence Diagram)

组件图

  • 组件图用来建立系统的各个组件之间的关系,它们是通过功能或者文件组织在一起,使用组件图可以帮助读者了解某个功能位于软件包的哪一位置,以及各个版本的软件包含那些功能。

    • 如javabean、ejb 、jsp都是组件。
    • 在UML中,组件使用在左侧有两个小矩形的大矩形表示。

组件图可以用来帮助设计系统的整体构架。

部署图

部署图用来帮助读者了解软件中的各个组件驻留在什么硬件位置,以及这些硬件之间的交互关系。

  • 节点:

    • 用来表示一种硬件,它可以是打印机、计算机等。
    • 节点的标记符号是一个三维框,在框的左上方包含了节点的名称。
  • 通信关联:
    • 节点通过通信关联建立彼此的关系,采用从节点到节点绘制实线来表示关联。如下图所示:

的软件包含那些功能。

  • 如javabean、ejb 、jsp都是组件。
  • 在UML中,组件使用在左侧有两个小矩形的大矩形表示。

[外链图片转存中…(img-K98Eitjt-1616999503335)]

组件图可以用来帮助设计系统的整体构架。

部署图

部署图用来帮助读者了解软件中的各个组件驻留在什么硬件位置,以及这些硬件之间的交互关系。

  • 节点:

    • 用来表示一种硬件,它可以是打印机、计算机等。
    • 节点的标记符号是一个三维框,在框的左上方包含了节点的名称。
  • 通信关联:
    • 节点通过通信关联建立彼此的关系,采用从节点到节点绘制实线来表示关联。如下图所示:

韩顺平 uml视频教程 笔记相关推荐

  1. 韩顺平Linux视频教程—笔记(全)

    Linux操作系统学习 linux的特点 优点: 1.免费的/开源的系统 2.支持多线程/多用户的系统 3.安全性好 4.对内存和文件管理优越 linux体积最少只需要内存4M,由于小所以可以做嵌入式 ...

  2. 第1讲韩顺平 PHP视频教程 zend framework zend介绍 zend快速入门 韩顺平php视频教程ppt 笔记心得

    韩顺平 PHP视频教程  zend framework  PPT笔记心得 本教程贯穿了两个软件公司常用的两个项目,数据采集系统和购物车,共分20讲从本质上深入浅出的分析了zend framework运 ...

  3. 韩顺平mysql优化笔记_韩顺平 mysql优化笔记.doc

    韩顺平 mysql优化笔记.doc 还剩 6页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: ? 垂直分割表如果你的数据库的存储引擎是 MyISAM 的 ...

  4. 韩顺平的php东方航空_韩顺平php视频教程

    韩顺平php从入门到精通视频教程是由知名的讲师韩顺平制作讲解的一套php基础入门教程,也是自学PHP必备的一系列教程.包含了php开山篇.html介绍.html运行原理.网上支付平台开发实例.XML编 ...

  5. 韩顺平php教程笔记,PHP笔记,韩顺平php笔记_PHP教程

    PHP笔记,韩顺平php笔记 Mysql ----------------------------------------------------------------------------- M ...

  6. 韩顺平Java自学笔记 反射

    一.反射入门案例 目录 一.反射入门案例 二.反射的机制 1.反射的原理 2.反射相关的类 3.反射的优点和缺点 三.Class类详解 1.Class类的特征 2.Class的常用方法 3.获取Cla ...

  7. 韩顺平MySQL万字笔记

    数据库 数据库存储位置 数据库的存储位置取决于你把数据库放建在哪,你建你在你电脑本地,那数据库就在本地.你放服务器上,那数据库就在服务器上.本质跟你在本地新建一个Excel表,和在百度云上建,是同一个 ...

  8. 韩顺平php视频笔记83-87 防盗链 $_SERVER http协议相关 文件相关

    第83集略(内容之前讲过) http协议 1. http协议是建立在  tcp/ip协议基础上. 2. 我们的web开发数据的传输都是依赖于http协议. 3. http协议全称是 超文本传输协议 h ...

  9. 韩顺平php视频笔记75-76 抽象类 接口

    抽象 为什么设计抽象类这个技术? 1. 在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承,这样可以到达代码复用. 同时利于项目设计者,设计类. ...

最新文章

  1. 浙江大学PAT考试1009~1012(1010上帝是冠军。。)
  2. IDEA下的使用git
  3. error LNK2001: unresolved external symbol _WinMain@16
  4. eclipse调试java web_eclipse调试web项目
  5. python资料-Python 有哪些好的学习资料或者博客?
  6. SQL Server 软件环境安装与配置
  7. 龙讯LONTIUM LT8711EH-C. DP1.2转HDMI2.04K60HZ带HDCP 国产芯片
  8. Mike and Cellphone
  9. 高速下载百度网盘资料(Tampermonkey+百度网盘直链下载助手+xdown)
  10. AI产品经理的前世今生
  11. 《绝版游戏之信长之野望12—“统一日本的游戏“》
  12. 小程序报错 Invalid regular expression: invalid group specifier name
  13. 常见的NLP处理手段和相应的spaCy库使用
  14. android 9 申请动态权限android.permission.WRITE_EXTERNAL_STORAGE 允许后应用闪退
  15. VLAN 虚拟局域网
  16. Linux运维工程师前景
  17. 虚拟内存(分页机制)
  18. 10个免费的响应式布局HTML5+CSS3模板
  19. python制作网络社交图
  20. OCP学习基本知识点总结

热门文章

  1. Selenium多浏览器测试
  2. pandas 玩转 Excel 操作总结
  3. 23种设计模式之代理模式
  4. CocosCreator 创建纯色精灵(Sprite单色)组件
  5. 天地不仁,通货在膨胀
  6. linux获取时间戳精确到毫秒,微妙
  7. uva11942 Lumberjack Sequencing
  8. 笔记本电脑屏幕PWM调光频率测试调节软件
  9. android智能电灯,X-Light智能灯泡
  10. 关于petitfatfs的移植问题