202206-WGYG 实验八 团队作业5—团队项目需求建模与系统设计(2)

项目 内容
课程班级博客 班级博客
这个作业的要求 作业要求
团队名称 WGYG
实验目的要求 (1)学习使用UML建模工具Visio
(2)掌握面向对象需求分析建模技术
(3)理解和掌握面向对象软件系统设计原理、设计过程和技术
团队成员分工描述 魏瑾川:完成任务一
郭清华:完成任务三
姚恪:完成任务二并撰写博客
古丽妮尕尔:使用Visio,绘制图表
这个作业在哪些方面帮助团队实现学习目标 (1)团队协作学习使用UML建模工具Visio
(2)学习了功能的定位和优先级
(3)通过学习OOA和OOD撰写需求分析说明书和软件设计说明书
团队博客链接 团队博客
团队项目Github仓库地址链接 团队仓库

任务1:使用Visio,应用面向对象分析方法(OOA),完善团队项目的《软件需求规格说明书》,并将该文档上传到团队项目Github仓库

团队学习使用Visio


使用Visio绘制功能需求用例图

  • 用户用例图

  • 管理员用例图

参考《构建之法—现代软件工程》8.5节功能的定位和优先级,给出功能分析的四个象限

  • 四个象限

    • 第一象限(必要需求、杀手功能):社区,文件共享,资源共享
    • 第二象限(必要需求,外观功能):运行算法,系统式学习平台
    • 第三象限(辅助需求,外观功能):界面美化
    • 第四象限(辅助需求,杀手功能):结果可视化
  • 象限示意图

选择适当的UML模型,建立问题域对象模型

完善项目的WBS,估计各项任务所需时间

软件需求规格说明书

已将软件需求规格说明书上传至Github

任务2:查阅资料,回答以下问题

什么是C/S结构?

  • C/S结构

    • C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高, 效率低。
  • 结构示意图

什么是B/S结构?

  • B/S结构

    • B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全 。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。
  • 结构示意图

  • C/S和B/S的比较

    • 硬件环境不同:C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务 器提供连接和数据交换服务. B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比 C/S 更强的适应范围, 一般只要有操作系统和浏览器就行
    • 安全要求不同:C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信 息系统采用 C/S 结构适宜. 可以通过 B/S 发布部分可公开信息. B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户
    • 处理问题不同: C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相 关. 应该都是相同的系统。C/S 的客户端由于是本地程序,因此和本地硬件、程序的交 互性很强,比如可以控制本机的其他程序、可以读写本地磁盘文件、可以与硬件交互。 B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作 系统平台关系最小,正应为如此 B/S 很难和本地硬件、程序、文件进行交互,比如很 难控制本机的其他程序、很难读写本地磁盘文件、很难与硬件交互,当然可以用ActiveX 技术解决,比如网银等就是这么解决的,这样做的问题就是可能会被客户拒绝,而且只局限于 Windows 操作系统。

什么是MVC设计模式?

  • MVC设计模式

    • 模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI设计思路中扮演着非常重要的角色。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式在一种解决方案中结合起来,用来解决许多设计问题。MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Control(控制器)。它们各自处理自己的任务:
    • 模型:模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。
    • 视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图。
    • 控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。
  • MVC模式将它们分离以提高系统的灵活性和复用性,不使用MVC模式,用户界面设计往往将这些对象混在一起。MVC模式实现了模型和视图的分离,这带来了几个好处。

    • 一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。
    • 模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
    • 提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑和数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。
  • 运行机制示意图

任务3:以任务1的成果为基础,使用Visio,应用面向对象设计(OOD)方法,撰写团队项目软件系统设计说明书,以回答:软件是如何实现用户需求的?

采用适合的模式设计软件系统总体结构

  • 由于本项目采用 Django 框架开发,因此采用 MTV 模式。MTV 模式本质上和 MVC是一样的,都是为了各个组件之间保持松耦合关系,只是定义上有些不同。MTV 分别是指:

    • M(Model)代表模型:负责着业务对象和数据库的关系映射(ORM)
    • T(Template)代表模板:负责以何种方式将页面展示给用户
    • V(View)代表视图:负责业务逻辑,并在适当时刻调用 Model 和 Template
    • 除此之外包含一个路由分发器 Urls,它将各种 url 的页面请求分发给不同的 View
      处理,View 再调用相应的 Template 和 Model
  • 设计流程图

设计软件系统数据库逻辑结构

  • 用户表

  • 文章表

  • 评论表

  • 问题表

  • 回答表

  • 私信表

  • 通知表

  • 资源表

说明软件重用方案

  • Django 模板继承
    • 在开发前端页面的过程中,存在多个页面用共同的部分,这是便可将这部分单独抽离出来。写成一个模板,然后在需要的时候进行继承,这样可以避免代码冗余,方便维护,仅仅修改父模板便可以在多个引入改模板的页面生效。
    • 例如:该系统的大多数页面都包含一个导航栏,此时我们便可将导航栏的代码抽离出来,单独编写为一个文件,同时预留相应位置,供子模板修改。
    • 父模块
    • 子模块
  • Form 类重用
    • Django Form 组件用于对页面进行初始化,生成 HTML 标签,此外还可以对用户提交对数据进行校验。在编写代码的过程中会有多个页面要实现类似的功能,他们所用到的代码逻辑相同,于是我们便可以创建一个定制的 Form 类,所有要实现该功能的模块只需继承该类,并进行特定代码的编写即可。这样一方面使得系统的可维护性大大提高,同时也减少了代码的冗余程度。

设计关键类的重点服务

本系统要实现的关键类为 view 相关的类,这些类为多个视图函类,简称视图,是一个简单的 Python 类,它接受 Web 请求并且返回 Web 响应。响应可以是一张网页的HTML 内容,一个重定向,一个 404 错误,一个 XML 文档,或者一张图片。无论视图本身包含什么逻辑,都要返回响应。因此该系统的关键类为视图类。
对于该系统来说,关键的类有如下几个

  • Login:负责用户的登录
  • Logout:负责用户的注销
  • Register:负责用户的注册
  • Article:负责博客的增删查改
  • Comment:负责评论的增删查改
  • Resource:负责资源的增删查改
  • User:负责用户信息的增删查改
  • Admin:负责管理员的权限管理以及增删查改
  • Backend:负责后端系统的管理,如资源审核、文章审核
  • Forms:form 类的父类,负责将页面初始化,动态呈现 HTML 标签

软件系统设计说明书

已将系统设计说明书上传至Github

任务四:实验总结

记录完成《实验八 团队作业5:团队项目需求建模与系统设计(2)》各项任务实际花费的时间和分工

任务 预计时间 实际花费时间
任务一 240min 260min
任务二 30min 40min
任务三 240min 220min
任务四 90min 100min
合计 600min 620min

结合实验七、实验八的学习体验,对比陈述结构化软件分析与设计、面向对象分析与设计两类软件开发技术的异同

  • 结构化软件分析与设计的定义:
    结构化方法采用的是自顶向下、逐步求精的设计方法,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口。

  • 结构化软件分析与设计的分析设计方法:
    结构化分析法是基于问题分解与抽象的观点,将任何信息处理过程看作是将要输入数据变换成所要求的输出信息的装置,因此数据流分析是需求分析的出发点。结构化分析方法采用“自顶向下,由外及里,逐步求精的策略对问题进行分析。具体做法是首先将整个系统看作一个加工(信息处理的装置,是一个黑匣子),标识出系统边界和所有的输入/输出数据流。然后再对加工内部进行细化分解,将复杂功能分解为若干简单功能的有机结合,并逐步补充细节描述。结构化分析使用数据流图、加工说明和数据字典等来构造系统的需求分析模型。

  • 面向对象分析与设计的定义:
    面向对象方法解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式从多方面来构造软件系统,这与传统的开发方法构造系统的思想是不一一样的。面向对象方法是一种运用对象、类、继承、聚合、关联、消息和封装等概念和原则来构造软件系统的开发方法。

  • 面向对象分析与设计的分析设计方法:
    面向对象分析强调用对象的概念对问题域中的事物进行完整的描述,刻画事物的静态特征和行为特征,同时也要如实的反映问题域中的事物之间的各种关系,包括分类关系、组装关系等静态关系以及动态关系。面向对象分析主要有五个步骤:标识对象(类);标识结构;标识主题;定义属性;定义服务。

  • 面向对象分析模型与面向对象分析过程模型的比较:

    • 面向对象分析模型:

    • 面向对象分析过程模型:

    • 结构化分析设计主要是将现实世界的问题转化为计算机可以理解的对数据的加工处理,是面向过程的;而面向对象分析设计则是将现实世界的问题直接映射成对象及其接口,面向问题域,符合人们的思维习惯。

从团队分工和协作学习角度,陈述团队实施项目需求分析建模、软件系统设计等学习活动的心得。

  • 魏瑾川
    此次实验由于需要使用UML建模工具Visio,所以我们都各自学习了解了该工具,每位成员都就自己的使用心得进行了阐述,并且就该工具进行了讨论。在后续任务中,我们使用Visio,应用面向对象分析方法(OOA),在上次实验的基础上完善了团队项目的《软件需求规格说明书》。在软件系统设计过程中,我们使用Visio,应用面向对象设计(OOD)方法,撰写了《软件系统设计说明书》。在此次团队学习中,还是一如既往感受到团队协作的力量,争取在大家都认为的艰难阶段-编码阶段能更好的合作。

  • 郭清华
    该实验我们组内分工明确,各司其职。一开始学习使用UML建模工具Visio到后来编写团队项目需求说明书我们都有参与讨论,在进行整体设计和数据库中表的关系那部分时,我们也是商量和讨论之后确定了最终设计。本次团队协作的很融洽,在协作过程中,出现问题能够及时交流,互帮互助。

  • 姚恪
    这次实验,各位成员之间分工明确,团结协作,共同掌握了使用Visio这一个建模工具,通过对上次实验的总结,对软件系统的总体结构,模块设计和设计模式等方面有了更深刻的理解,为后面的工作打下了更好的基础。并且在团队间的合作更有默契也有了更高的效率,希望以后也会越来越合作愉快。

  • 古丽妮尕尔
    本次实验主要学习了建模工具以及面向对象的建模分析,我们在老师的推荐下学习了UML建模工具Visio的使用,并且学习了面向对象设计(OOD)方法和面向对象分析方法(OOA)。在本次任务分工中,我主要负责的是的撰写软件系统设计说明书,在撰写初期也有许多疑问,比如它的具体格式、需要包含哪些模块等,但这些问题都通过团队成员们的讨论及上网搜索找到了答案。通过此次的分析建模以及需求说明、系统设计说明的撰写,相信对我们之后的程序撰写大有益处。

posted @ 2022-05-25 10:53  WGYG  阅读(51)  评论(1编辑  收藏  举报