实验八 团队作业5:团队作业5:团队项目需求建模与系统设计(2)
课程班级博客链接 | 班级博客 |
这个作业要求链接 | 作业要求 |
团队名称 | 泰山 |
团队成员分工描述 | 谢金鑫:选择适当的UML模型,建立问题域对象模型;完善项目的WBS,估计各项任务所需时间 余宝鹏:任务1、任务3、博客编写以及参考《构建之法——现代软件工程》,总结功能分析的四个象限 郑文潇:任务4,包含设计软件系统总体结构、软件系统数据库逻辑结构、软件重用方案以及关键类的重点服务 常祺:负责项目功能需求,采用用例图(Visio)表示;采用OOA技术编制《XXX软件需求规格说明书1.2》 |
团队的课程学习目标 | 1、学习使用UML建模工具Visio 2、掌握面向对象需求分析建模技术 3、理解和掌握面向对象软件系统设计原理、设计过程和技术 4、按照课程目标推进软件项目的进程,体会团队协作学习的好处 5、团队成员在分工明确的基础上进行互帮互助,讨论解决重难问题 |
这个作业在哪些方面帮助团队实现学习目标 | 1、通过企业微信会议对UML建模工具Visio进行团队协作学习 2、通过实验内容掌握面向对象需求分析建模技术,体会其在软件工程设计中的应用 3、通过实验内容理解和掌握面向对象软件系统设计原理、设计过程和技术,体会其在软件工程设计中的应用 4、通过团队协作学习,增进团队关系,推进学习过程的进行 |
团队博客链接 | 团队博客 |
团队项目Github仓库地址链接 | 仓库链接 |
任务1:按团队项目互评名单,对互评方《实验七 项目需求分析建模与系统设计(1)》的项目成果进行评价,具体要求如下:
(1)阅读互评团队项目博文作业并进行评论,评论要点包括:博文结构、博文内容、任务分工与时间耗费。将以上评论内容发布到互评团队博客评论区。
(2)下载并阅读互评方团队项目资料。
-
结对方团队博客链接
-
结对方Github项目仓库链接
-
符合(1)要求的博客评论
-
结合实验七评分标准,给出互评团队作业评分成绩
-
评分方法
-
实际得分
(135 + 130 + 130 + 125)/ 4 = 130(分)
-
-
下载并阅读互评方团队项目资料
任务2:使用Visio,应用面向对象分析方法(OOA),完善团队项目的《软件需求规格说明书》,并将该文档上传到团队项目Github仓库,文档内容要求如下:
(1)采用用例图表示项目功能需求,模型使用规范一致的图形符号和文字描述内容;
(2)参考《构建之法—现代软件工程》8.5节功能的定位和优先级,给出功能分析的四个象限;
(3)选择适当的UML模型,建立问题域对象模型;
(4)完善项目的WBS,估计各项任务所需时间
-
采用用例图表示项目功能需求,模型使用规范一致的图形符号和文字描述内容
-
用例图(User Case)是被称为参与者的来外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,源以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。
-
将每个系统中的用户分出工作状态的属性和工作内容,方便建模,防止功能重复和多余的类。
-
用例图定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现。
-
具体的用例图如下:
-
购票者的用例图
-
影院管理者的用例图
-
游客的用例图
-
-
-
参考《构建之法—现代软件工程》8.5节功能的定位和优先级,给出功能分析的四个象限
-
很多事情的处理可以按照不同性质进行多个维度的划分,这样复杂的事情可以通过清晰的逻辑划分而简单化。比如:工作繁琐的事情可以按照事件的重要性和紧急度进行这两个维度的划分,如下图所示:
-
根据重要性和紧急度两个维度可以将事情划分为四个象限:第一象限的事情是首先要进行处理的,第二象限的事情是应该在第一象限处理后进行处理的,第三象限的事情可以在重要的事情处理完成后,在闲暇的时间内进行处理,第四象限的事情是不在预期范围内突然发生的事情,比如,在你处理第二象限的事情时,来了一个电话,也许不重要,但是你必须要接这个电话。
-
在软件工程进行需求分析的时候,四象限分析法可以帮助你清晰定位软件的功能特点和将来要进行研发的创新点,如下图所示:
-
上图的4个功能介绍:
杀手功能:针对某一应用需求我们的竞争对手和用户已经决定了的必要满足的需求,我们的创新功能也在这一部分。
外围功能:辅助性的功能,比如良好的用户体验界面等。
必要需求:能够准确解决用户主要功能的需求,比如词典软件要保证短语释义的准确性。
辅助需求:非必要需求,比如换肤等功能。
-
针对不同的功能,有五种解决方法:
1、维持----以最低成本维持此功能
2、抵消----快速地达到“足够好”、“和竞争对手差不多”
3、优化----花大力气做到并保持行业最好
4、差异化----产生同类产品比不了的功能或优势
5、不做----砍掉一个功能,有时我们不需要做所有的功能
-
-
选择适当的UML模型,建立问题域对象模型
-
类图一般在详细设计过程中出现,主要用来描述系统中各个模块中类之间的关系,包括类或者类与接口的继承关系,类之间的依赖、聚合等关系。
-
它还描述每一个类的详细信息,包括变量,和方法。
-
通过类图,就能实际的把系统中的各个类,即对象描述清楚,下一步就是按照这个详细的设计编码了。
-
按照如上所述,本系统的UML模型如下:
-
-
完善项目的WBS,估计各项任务所需时间
-
项目的WBS图如下:
-
各项任务所需时间估计如下
- 票务管理:对电影票的出售、退票、预订进行管理,主要有常祺和余宝鹏负责,预计完成时间72-84小时。
- 信息管理:对影院的影片上档、下档进行管理;主要由郑文潇和谢金鑫负责,预计需要时间72-96小时。
- 结算管理:对影院的日、月销售额进行统计与查询,主要有常祺和余宝鹏负责,预计完成时间48-72小时。
- 统计管理:对影院的影片上座率、售票情况进行统计,主要由郑文潇和谢金鑫负责,预计需要时间48-60小时。
- 各部分完成以后,主要由谢金鑫和余宝鹏进行整合统一,预计完成时间需48-72小时。
-
-
将《软件需求规格说明书》上传到团队项目Github仓库
任务3:查阅资料,回答以下问题:
(1)什么是C/S结构?
(2)什么是B/S结构?
(3)什么是MVC设计模式?
-
什么是C/S结构?
-
C是英文单词“Client”的首字母,即客户端的意思,S是英文单词“Server”的首字母,即服务器的意思。C/S就是“Client/Server”的缩写,即“客户端/服务器”模式。
-
C/S结构是一种软件系统体系结构,也是生活中很常见的。这种结构是将需要处理的业务合理地分配到客户端和服务器端,这样可以大大降低通信成本,但是升级维护相对困难。比如我们手机中安装的微信、QQ、王者荣耀等应用程序就是C/S结构。
-
C/S结构可用如下图来表示:
-
-
什么是B/S结构?
-
B是英文单词“Browser”的首字母,即浏览器的意思;S是英文单词“Server”的首字母,即服务器的意思。B/S就是“Browser/Server”的缩写,即“浏览器/服务器”模式。
-
B/S结构是随着互联网的发展,web出现后兴起的一种网络结构模式。这种模式统一了客户端,让核心的业务处理在服务端完成。你只需要在自己电脑或手机上安装一个浏览器,就可以通过web Server与数据库进行数据交互。我们每天在手机或电脑上用浏览器上百度搜索、看新闻等就是在使用“B/S”结构进行数据交互。这种“B/S”结构有很多好处,维护和升级方式更简单,客户端是浏览器,基本不需要维护,只需要维护升级服务器端就可以。
-
B/S结构可用如下图来表示:
-
-
什么是MVC设计模式?
-
模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI设计思路中扮演着非常重要的角色。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式在一种解决方案中结合起来,用来解决许多设计问题。MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Control(控制器)。它们各自处理自己的任务:
(1)模型:模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。
(2)视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图。
(3)控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。
-
运行机制:
-
MVC模式将它们分离以提高系统的灵活性和复用性,不使用MVC模式,用户界面设计往往将这些对象混在一起。MVC模式实现了模型和视图的分离,这带来了几个好处:
(1)一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。
(2)模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。
(3)提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑和数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。
-
任务4:以任务2的成果为基础,使用Visio,应用面向对象设计(OOD)方法,撰写团队项目软件系统设计说明书,以回答:软件是如何实现用户需求的?文档内容要求如下:
(1) 采用适合的软件设计模式设计软件系统总体结构;
(2) 设计软件系统数据库逻辑结构;
(3) 说明软件重用方案;
(4) 设计关键类的重点服务。
-
采用适合的软件设计模式设计软件系统总体结构。
-
软件设计模式
-
软件系统总体结构
-
-
设计软件系统数据库逻辑结构。
数据库逻辑设计主要是把数据库概念设计时设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。它包括数据项、记录及记录间的联系、安全性和一致性约束等等。导出的逻辑结构是否与概念模式一致,从功能和性能上是否满足用户的要求,要进行模式评价。
本系统数据库名称为db_secondhandmarket,数据库中包括:
1)种类表(category)
2)影片表(goods)
3)影片内容表(goodsdetail)
4)影片种类表(goodsdetailtype)
5)图片表(pic)
6)用户表(user)
各表数据结构如下:
(1)种类表(category)用来记录是管理员还是用户
(2)影片表(goods)用于记录影片
(3)影片内容表(goodsdetail)用于记录影片细节
(4)影片种类表(goodsdetailtype)用于记录影片种类
(5)图片表(pic)用于记录图片
(6)用户表(user)
-
说明软件重用方案。
-
从广义的角度来说,本系统在以下三个层次进行了重用,知识的重用,方法和标准的重用以及软件成分的重用。
-
知识的重用是如软件工程等相关知识的重用,应用相同的知识设计规划、建设不同的软件产品。
-
方法和标准的重用是比如本产品是利用面向对象方法设计又或者是采用国家标准局制定的软件开发文档规范。
-
具体内容参考《项目软件系统设计说明书1.2》
-
-
设计关键类的重点服务。
本系统主要设计了三个大的关键类:servers , user, goods,即管理员类,用户类,商品类。基于这三个父类的基础上,继承更行,查询,修改等子类。
GoodsServers类主要负责对电影的上架,下架以及排片的工作;
HomeServers类只要负责用户的注册信息入库以及增删改查用户的个人信息。
Category类负责定义电影的分类;
Goods类负责定义电影的分类、ID、名字、图片、评分等信息;
Goodsdetail类时Goods的子类,负责记录电影的内容和名字;
Goodsdetailtype是Goodsdetail的子类,负责电影具体分类的工作;
Pic类用于记录图片信息;
User类负责记录一些用户的个人信息,对用户的属性信息操作服务。
以上为本系统设计关键类的对应重点服务,遵循软件工程中软件设计的模块化原则,力求尽量达到“高内聚,低耦合”的程度,降低类的复杂度,且使方法属性单一,逻辑关系简单。这样可以提高类的可读性,降低功能模块之间的关联性。
-
将《项目软件系统设计说明书》上传到团队Github仓库
任务5:完成《实验八 团队作业5:团队项目需求建模与系统设计(2)》团队博文作业:
-
记录完成《实验八 团队作业5:团队项目需求建模与系统设计(2)》各项任务实际花费的时间和分工;
成员姓名 分工 花费时间 组内角色 谢金鑫 选择适当的UML模型,建立问题域对象模型;完善项目的WBS,估计各项任务所需时间 240 PM 郑文潇 任务4,包含设计软件系统总体结构、软件系统数据库逻辑结构、软件重用方案以及关键类的重点服务 300 开发 余宝鹏 任务1、任务3、博客编写以及参考《构建之法——现代软件工程》,总结功能分析的四个象限 260 文档,博客 常祺 负责项目功能需求,采用用例图(Visio)表示;采用OOA技术编制《XXX软件需求规格说明书1.2》 240 测试 -
结合实验七、实验八的学习体验,对比陈述结构化软件分析与设计、面向对象分析与设计两类软件开发技术的异同。
-
基本思想
-
遵从原则
- 结构化软件分析与设计:1.抽象原则;2.分解原则;3.模块化原则
- 面向对象分析与设计:1.抽象原则;2.模块化原则;3.封装原则;4.层次原则
-
特点
-
结构化软件分析与设计:
(1)面向用户,用户自始至终参与系统的分析工作;
(2)强调调查工作的重要性;
(3)对管理业务中的各种数据进行分解;
(4)采用了层次分解的系统思想;
(5)用图形工具来分析和构建新方案。 -
面向对象分析与设计:
(1) 强调系统开发的整体性和全局性
(2) 侧重于数据转换的过程而不是数据本身
(3) 系统的开发周期长
(4) 封装性
(5) 继承性
(6) 多态性
(7) 易维护性
-
-
-
从团队分工和协作学习角度,陈述团队实施Visio建模工具学习、项目需求分析建模、软件系统设计等学习活动的心得
-
谢金鑫
通过团队分工和协作学习,我对于建模工具等有了更深入的了解,我们每个人都有自己不同的分工,这让我懂得了在软件工程方面,一个团队需要有合理的分工操作,对于我们来说,各自负责了属于自己的那一个模块,我们分工明确,使得项目进行的更加顺利,每个人的任务量都不会特别重,更使得团队的每个人直接关系更加融洽,每个人都付出了自己的努力,得到了属于自己的回报。
-
郑文潇
通过这次实验,我搞清楚了之前很多很熟悉但又不太会的知识,例如怎么画E-R图、如何写逻辑结构总体设计等,这次最直接的一个感受就是收获颇丰,感觉学会了很多不懂的知识。这次工作量很大,但我们团队分工依然清晰明确,各项工作有条不紊的进行着,最后终于顺利完成,团队的默契配合也在这次作业中得到了很好的锻炼。
-
余宝鹏
在本次实验初期,我们团队通过企业微信会议对实验内容进行了了解以及分工。由于本次实验所需要的很多图需要用到Visio建模工具,所以我们对Visio建模工具进行了团队学习,并且发表了各自的看法。在项目需求分析建模阶段,团队成员经过讨论,将项目的需求分析研究到了很深的阶段,最后由常祺进行总结。在软件系统设计过程中,我体会到软件系统设计是一个循序渐进的过程。要想设计出一个比较完善的系统,必须得按照一定的软件设计方法进行。在这个阶段中,我们运用了结构化软件分析与设计以及面向对象分析与设计两种方法对软件进行设计。总之,此次实验虽然花费了很多时间,但让我体会到了软件工程这门学科的真正意义。
-
常祺
作业前期任务主要是利用Visio工具绘图。大家共同学习了Visio工具,完成了用例图、类图、WBS、数据流图等。完成了一系列分析建模。其实主要的问题不在于绘图工具的使用,而在于我们对于需要建立的模型的认识不明朗,例如绘制类图的时候无从下手。完成了这些,大家又协作完成了项目需求报告和系统设计报告。我其实不是一个可以独立做事情的人,所以很喜欢这种大家可以一起商量共同完成事情的氛围,非常感谢队友的帮助以及通力合作。
-