系统分析与实训作业2

大学生选课系统

第4周

典型用户模板

1.名字:谢小棉

2.年龄和收入:25岁,月收入6000元人民币。作为一名刚刚毕业的大学生,收入相对较低,但有一定的经济自主性。

3.代表的用户在市场上的比例和重要性:在选课管理系统中,像王小明这样的大学生用户比例较高,因为大学生通常需要进行每学期的选课和课程管理,但相对其他用户群体来说,他们的收入水平较低,因此在市场份额中可能不占优势。然而,由于大学生用户群体数量庞大,因此在整体市场中仍具有一定的重要性。

4.使用这个软件的典型场景:王小明每学期开始时,需要使用选课管理系统来浏览可选的课程,选择符合自己专业和兴趣的课程,并进行选课操作。此外,在学期中可能需要对已选课程进行调整或者退选。

5.使用本产品的环境:通常在家里的电脑上或者学校的图书馆等环境中使用选课管理系统。也有可能在手机或平板电脑上使用,例如在公共汽车上或地铁上。

6.生活/工作情况:作为一名大学生,王小明可能有很多自己的私事,如实习,其他自己找的兼职等,时间相对紧张,因此需要一个方便快捷的选课管理系统来帮助他高效地管理课程安排。

7.知识层次和能力:王小明具有大学本科学历,对于电脑和互联网有一定的熟悉程度,能够熟练操作基本的电脑软件和网络应用。

8.用户的动机、目的和困难:王小明的动机是通过选课管理系统方便快捷地选择适合自己的课程,完成学业要求,并提升自己的专业能力。他的困难可能包括选课系统界面不够友好,学校网络差,选课流程繁琐,或者选课系统容易出现的bug影响了他的选课体验。 

9.用户的偏好:王小明更倾向于使用界面简洁清晰、操作方便快捷的选课管理系统,而不喜欢繁复复杂、操作困难的系统。

1.处于典型场景下的客户

客户我们相信大学生小明是我们的典型客户,他们为了实现顺利完成选课和课程管理的目的,需要完成以下任务。

(1)浏览可选课程

(2)选择符合专业和兴趣的课程

(3)查看课程信息

(4)进行选课操作

(5)调整课程安排

(6)关注选课截止日期和限制条件

(7)确认选课结果

2.位置/责任:在学校里,负责进行选课和管理课程安排。

3.目前工具:使用学校提供的选课系统或网站进行选课和课程管理。

[客户待完成的任务]

4.任务:顺利进行选课和管理课程安排。

5.任务的频繁程度:每学期开始时和学期中需要进行选课操作。

6.任务的细节:浏览可选课程、选择符合自己专业和兴趣的课程、进行选课操作;在学期中可能需要调整已选课程或者进行退选。

客户动机 ]

7.完成任务的动机:完成选课任务可以确保小明能够按时完成学业要求,提升专业能力,达到自己设定的学业目标。

8.完成后达到状态:完成选课后,小明能够安心地开始学习,并有信心面对未来的学习挑战。

客户问题 ]

9.最大的烦恼:选课系统界面不友好、选课流程繁琐、系统容易出现bug,影响了选课体验。

10.绕过问题方式:小明可能会耐心地尝试多次,或者通过咨询同学或学校相关人员来解决问题。

对于 待完成的任务 ] 如果你能改变一件事情,你想改变什么?

11.改变:我想改变选课系统的界面设计和流程,使其更加友好和简单,以提高用户体验和效率。

第5周

  1. 如果你的团队来了一个新队员,有一台全新的机器, 你们是否有一个文档,只要设置了相应的权限,他就可以根据文档,从头开始搭建环境,并成功地把最新、最稳定版本的软件编译出来,并运行必要的单元测试? (在这过程中,不需要和老队员做任何交流)

:是的,我们团队有一个详细的文档,可以帮助新队员从头开始搭建环境,并成功地编译出最新、最稳定版本的软件,并运行必要的单元测试。这个文档包含了所有必要的步骤和设置,以及相应的权限要求。新队员只需要按照文档中的指导进行操作,无需与老队员进行交流。

1.搭建Java环境:

步骤一:下载Java Development Kit (JDK)

打开 Oracle 官方网站:Oracle JDK 下载页面

同意许可协议并选择合适的 JDK 版本进行下载,根据操作系统选择对应的安装包。

步骤二:安装JDK

双击下载好的 JDK 安装包并按照安装向导进行操作。

设置安装路径,一般推荐默认路径。

完成 JDK 的安装后,设置环境变量:

在系统变量中新建 JAVA_HOME 变量,值为 JDK 的安装路径(例如:C:\Program Files\Java\jdk-1.8)。

在系统变量 Path 中添加 %JAVA_HOME%\bin。

步骤三:验证Java安装

打开命令提示符(CMD)或终端窗口。

输入 java -version 查看 Java 版本信息,确保能够正常显示 JDK 版本号。

步骤四:下载并安装集成开发环境(IDE)

使用 IntelliJ IDEA的 IDE。

安装完成后,打开 IDE 并配置 JDK 路径,确保 IDE 正确识别 JDK。

2.运行代码:

步骤一:获取源代码

从小组成员里获得源码,或则从公司服务器中下载源码(github)。

将源代码下载到本地开发环境中的合适目录。

步骤二:安装依赖项

根据软件设计要求,安装并在idea上配置必要的依赖项和构建工具Spring、Gradle、apche8.5.39,mysql8.30。

确保环境中的所有依赖项都已正确安装并配置。

步骤三:编译软件

把源码导入idea,执行构建命令 gradle build来编译软件。

步骤四:运行单元测试

在编译成功后,执行单元测试以确保软件的基本功能正确性。

使用构建工具提供的命令来运行单元测试

检查测试结果,确保所有单元测试通过。

步骤五:运行软件

如果单元测试通过,可以尝试运行编译后的软件。

根据软件的启动说明,使用相应的命令或界面启动软件。

测试软件的基本功能,确保软件可以正常运行。

步骤六:完成测试与部署

完成单元测试和软件功能测试后,可以将软件在其他环境继续测试。

如有必要,准备软件的部署文档并进行部署操作。

2.你的团队的源代码控制在哪里?用的是什么系统?如何处理文件的锁定问题?

   场景: 程序员甲正在对几个文件进行修改,实现一个大的功能, 这时候,程序员乙也要改其中一个文件,快速修复一个问题。怎么办?

    一个代码文件被签出 (check out) 之后,另一个团队成员可以签出这个文件,并修改,然后签入么?

   有几种设计,各有什么优缺点?

   例如,签出文件后,此文件就加锁,别人无法签出;  或者, 所有人都可以自由签出文件。

答:我们的源代码控制在Github上,使用与之相匹配的Git系统。

有两种设计:

1. 文件锁定

(1)独占锁定(Exclusive Locking):一个代码文件被签出后,其他团队成员无法签出这个文件,直到文件被签入为止。优点是避免冲突和同步问题,缺点是可能会造成团队协作效率低下。

(2)共享锁定(Shared Locking):多个团队成员可以同时签出相同的文件进行修改,但在签入之前需要解决冲突。优点是提高了团队协作效率,缺点是可能导致冲突和代码合并问题。

由于项目较小且项目开发规模较小,于是为了最大化效率,我们没有对文件迁入迁出进行过多的限制。

2. 处理冲突

手动解决冲突:当出现代码冲突时,团队成员需要手动解决冲突并合并代码。

自动合并:一些版本控制系统提供自动合并功能,能够自动尝试合并代码变更,但仍需要人工审核和确认。

3.优缺点

优缺点是:由于现阶段的开发规模比较小,于是为了最大化效率,我们没有对文件迁入迁出进行过多的限制。将文件在迁入迁出时加锁,显然可以保证源代码修改的同步性,减少不必要的冲突和错误,但是这样的缺点是显而易见的,由于缺乏了并行性,项目开发的效率就被极大地降低了,极端情况下很有可能因为一个人的失误,导致全队项目的搁浅。反之,我们采用自由迁入迁出的方式,则与前者的优缺点互反了。

3.如何看到这个文件和之前版本的差异? 如何看到代码修改和工作项 (work item),缺陷修复 (bug fix) 的关系。

   场景: 程序员看到某个文件被修改了,他怎么看到这个文件在最近的修改究竟改了哪些地方? (例子

   场景: 程序员看到某个文件在最新版本被改动了100 多行, 那么和这100多行对应的其他修改在什么文件中呢? 这个修改是为了解决哪些问题而作的呢? 那些问题有工作项 (work item,issue),或者bug 来跟踪么?

答:在版本控制系统中,通常可以通过以下方式查看文件和之前版本的差异,并查看代码修改与工作项(work item)、缺陷修复(bug fix)的关系:

1.查看文件差异:

基于Idea工具解决:在Git窗口的Log选项卡中选中需要对比的代码版本右击 Compare Versions和show history。

 

在idea中使用Git的git diff命令可以显示文件内容的差异,包括具体的修改内容和行号。

使用版本控制系统的图形界面:大多数版本控制系统提供图形化界面,可以直观地查看文件差异并比较不同版本之间的代码变化。

2. 查看修改关系和工作项关系:

(1)提交信息:团队成员在提交代码时通常会写明修改的目的和关联的工作项或缺陷修复编号。

(2)关联工具:团队通常会使用项目管理工具来跟踪工作项和缺陷修复,可以通过工具中的关联功能查看代码修改与具体的工作项或缺陷的关系。

(3)代码审查工具:用GitHub的Pull Request功能可以将代码修改、工作项和缺陷修复关联起来,方便查看代码变更的背景和目的。

示例场景应用:

(1)查看文件修改内容:程序员甲可以使用版本控制系统的git diff命令查看某个文件最近的修改内容,了解具体改动的地方。

(2)查看相关修改和问题:如果某个文件被修改了100多行,程序员甲可以查看提交信息或关联的工作项/缺陷修复编号,进而找到与这次修改相关的其他文件修改以及解决的问题。

通过以上方法,团队成员可以更好地了解代码的变化情况,追踪工作项和缺陷修复与代码修改之间的关系,有助于提高团队的协作效率和代码质量。

4.如果某个文件在你签出之后已经被别人修改,并且签入了,那么你在签入你的修改的时候,如何合并不同的修改(merge)? 你用了什么工具来帮助你?

答:先找出签入修改的地方,在进行修改。

再使用Beyond Compare。 

 

比较和合并。

5. 你有20个文件都是关于同一个功能的修改,你要如何保证这些文件都同时签入成功(修改的原子性),或者同时签入不成功?

场景: 程序员要签入 20 个文件,他一个一个地签入, 在签入完5 个 .h 文件之后, 他发现一些 .cpp 文件和最新的版本有冲突,他正在花时间琢磨如何合并... 这时候, 程序员从客户端同步了所有最新代码, 开始编译, 但是编译不成功 - 因为有不同步的 .h 文件和 .cpp 文件!  这时候, 别的程序员也来抱怨同样的问题,应该怎么办?

答:

1.使用版本控制系统的事务提交:确保所有文件修改作为一个事务一起提交,避免部分文件提交成功而另一部分失败的情况。

2.提交前先进行本地测试:在进行大规模提交之前,程序员甲应该先在本地进行全面的代码测试,确保修改之间没有冲突和错误。

3.分批次提交文件:如果涉及多个文件修改,可以将它们分成逻辑上相关的批次逐一提交,而不是一次性提交所有文件。

4.及时解决冲突:在提交过程中遇到冲突时,程序员甲应立即处理冲突,确保代码合并正确,避免影响其他人的工作。

在场景中,当程序员甲发现冲突时,他应该立即停止继续签入其他文件,而是解决当前发生的冲突。然后,通知团队成员(如程序员乙)进行代码同步,确保所有人都使用相同的代码版本。同时,程序员甲应及时与其他程序员沟通,告知他们出现的情况,并共同协商如何解决这一问题,避免造成更大的混乱和影响编译结果。最终,团队应该一起合作,确保代码提交的顺利进行,避免出现不同步的文件导致的问题。

6.你的PC 上有关于三个功能的修改, 但是都没有完成,有很多文件处于半完工的状态,这时你要紧急修改一个新的 bug,如何把本地修改放一边,保证在干净的环境中修改这个 bug, 并成功地签入你的修改 --- changelist management

答:步骤一:使用版本控制工具保存当前修改

(1)使用 Git 进行 changelist 管理:如果您正在使用 Git 版本控制工具,您可以使用 git stash 命令将当前的修改保存到一个临时的 stash 中,以便稍后再恢复。

(2)提交或保存工作目录:另外,您也可以通过提交您已经完成的部分修改,或者将它们保存到另外一个分支或者存档中,以便稍后再恢复。

步骤二:切换到干净的工作环境

切换分支:使用 Git 可以通过 git checkout 命令切换到一个干净的分支,确保您的工作目录中没有未提交的修改。

获取最新代码:使用 git pull 命令从版本控制系统中获取最新的代码,以便开始处理新的 bug。

步骤三:解决并提交新的 bug 修改

修复 bug:在干净的工作环境中,开始解决新的 bug,并进行相应的 Java 代码修改。

测试:确保您的修改能够成功解决 bug,并且不会引入其他问题。

提交修改:使用版本控制工具提交您的修改到版本控制系统中。

步骤四:恢复之前的修改

恢复之前的修改:根据之前保存的 changelist 或者存档,恢复您之前的修改。

继续工作:回到您之前的工作状态,继续进行尚未完成的工作。

7.规范操作和自动化

    你的团队规定开发者签入的时候要做这些事情:

    - 运行单元测试,相关的代码质量测试

    - 代码复审 (要有别的员工的名字)

    - 和这次签入相关的issue 编号, 任务/task, 缺陷/bug 编号,等等, 以备查询。

请问你的团队有这样的自动化工具让开发者方便地一次性填入所有信息然后提交么?  (高级功能, 代码提交之后, 相关bug 的状态会改动为  “fixed”, 并且有链接指向这次签入。),举个例子

答:

1.Git Hooks:您可以编写自定义的 Git 钩子脚本,在开发者提交代码时自动运行单元测试、质量检查等,并在通过检查后才允许提交代码。这样可以确保每次提交的代码都是经过测试和质量检查的。

2.Code Review 工具:许多团队使用像 Gerrit、GitHub、GitLab 这样的代码协作平台来进行代码复审。这些平台通常提供了方便的界面,开发者可以创建代码复审请求,并邀请其他团队成员进行代码审查。

3.Issue 跟踪系统集成:许多版本控制系统和持续集成工具都支持与 issue 跟踪系统(如 JIRA、Bugzilla 等)的集成。开发者可以在提交代码时关联相关的 issue 编号,从而方便查询和跟踪。

4.持续集成工具:持续集成工具(如 Jenkins、Travis CI、CircleCI 等)可以设置自动化任务,在代码提交后自动触发构建、测试和部署流程。开发者提交代码后,持续集成工具会自动运行单元测试,并将测试结果反馈给开发者。

版本控制系统集成:有些团队的版本控制系统也可以与 bug 跟踪系统集成,当代码提交包含了特定的关键字(如 bug 编号)时,版本控制系统会自动更新相关的 bug 状态,并在 bug 跟踪系统中创建链接。

举例来说,一个开发者提交了代码并关联了一个 bug 编号,版本控制系统可以在提交后自动更新 bug 状态为 "fixed",并在 bug 跟踪系统中创建一个指向这次提交的链接,从而方便团队进行跟踪和管理。

8. 如何给你的源代码建立分支?

    场景:你们需要做一个演示,所以在演示版本的分支中对各处的代码做了一个临时的修改,同时,主要的分支还保持原来的计划开发。你们怎么做到的?在演示之后,演示版本的有些修改应该合并到主分支中,有些则不用,你们是怎么做到的?

场景:你们的软件发布了,有很多用户,一天,一个用户报告了一个问题,但是他们是用某个老版本,而且没有条件更新到最新版本。这时候,你如何在本地构建一个老版本的软件,并试图重现那个问题?

答:

在这两种场景下,可以通过以下步骤来建立源代码分支:

1.建立演示版本的分支:

(1)在源代码管理工具(如GitHub)中,创建一个新的分支,用于演示版本的修改。

(2)在演示版本的分支中进行临时的代码修改和调整,确保主要分支保持原计划的开发。

(3)在演示结束后,评估哪些修改需要合并回主分支,哪些修改是临时性的可以丢弃。

2.合并修改到主分支:

(1)对于需要合并回主分支的修改,可以使用源代码管理工具的合并功能将这些修改合并回主分支。

(2)确保在合并前进行代码审查和测试,以确保合并的修改不会引入新的问题。

3.构建老版本的软件:

(1)使用源代码管理工具中的标签或分支来定位到对应老版本的代码状态。

(2)根据老版本的标签或分支,在本地构建该版本的软件。

(3)重现用户报告的问题,以便定位并解决该问题。

通过这些步骤,可以有效地管理源代码的分支,确保演示版本和主要版本的开发能够顺利进行,并能够在需要时构建和测试老版本的软件。

9. 一个源文件,如何知道它的每一行都是什么时候签入的,为了什么目的签入的(解决了哪个任务,或者哪个bug)?

   场景:一个重要的软件历经几年,几个团队的开发和维护,忽然出现在某个条件下崩溃的事故,程序员甲经过各种debug手段,发现问题是在某一个文件中有一行代码似乎显然出了问题但是这个模块被很多其他模块调用,这行代码是什么时候,为了什么目的,经过谁签入的呢?如果贸然修改,会不会导致其他问题呢?怎么办?

答:

在这种情况下,可以通过以下步骤来了解特定源文件的每一行是什么时候签入的,为了什么目的签入的:

版本控制系统:

需要查看版本控制系统(如GitHub等)中的提交历史记录。

通过版本控制系统的命令或界面,可以查看特定源文件的提交历史,包括每一行的修改记录。

提交信息:

每次提交代码时,程序员通常会附带一条描述提交内容的信息。这些提交信息可以帮助您了解每次提交的目的和解决的问题。

代码审查:

如果您的团队有代码审查的流程,审查记录中可能会有更多关于特定代码修改的信息,包括背景、目的和解决的问题。

团队合作:

跟团队其他成员交流,了解特定代码修改的背景和目的。可能有其他团队成员对这次修改有更深入的了解。

风险评估:

在修改代码之前,确保评估修改的风险。考虑修改可能带来的影响,以及是否会导致其他问题。

测试:

在修改代码之后,进行充分的测试,包括单元测试、集成测试和系统测试,以确保修改不会引入新的问题。

10. 如何给一个系统的所有源文件都打上标签,这样别人可以同步所有有这个标签的文件版本?

   代码每天都在变,有时质量变好,有时变差,我们需要一个 Last Known Good(最后稳定的好版本)版本,这样新员工就可以同步这个版本,我们如果需要发布,也是从这个版本开始。那么如何标记这个 Last Known Good 版本呢?

答:

要给一个系统的所有源文件打上标签,以便他人可以同步所有带有该标签的文件版本,可以按照以下步骤进行操作:

1.使用版本控制系统:

使用版本控制系统(如GitHub等)管理源代码。

版本控制系统可以帮助您跟踪源文件的修改历史,并为每个提交分配唯一的标识符(如提交哈希值、提交号等)。

2.创建标签:

在版本控制系统中,可以为特定的提交或提交序列创建标签。标签是对特定代码版本的有意义的命名,通常用于标识重要的版本或里程碑。

创建一个名为“Last Known Good”的标签,并将其附加到我们认为是最后稳定的好版本的提交上。

3.同步标记版本:

其他团队成员可以通过检出或拉取标记版本来同步所有带有“Last Known Good”标签的源文件版本。

这样团队其他成员就可以从这个稳定版本开始工作或发布。

4.维护标签:

随着代码的更新和新的稳定版本的出现,可以随时更新“Last Known Good”标签,以确保团队始终可以访问最新的稳定版本。

11. 你的项目的源代码和测试这些代码的单元测试,以及其他测试脚本都是放在一起的么? 修改源代码会确保相应的测试也更新么?你的团队是否能部署自动构建的任务?

    在签入之前,程序员能否自动在自己的机器上运行自动测试,以保证本地修改不会影响整个软件的质量?

    在程序员提交签入之后,服务器上是否有自动测试程序, 完成编译,测试,如果成功,就签入,否则,就取消签入?

团队是否配置了服务器,它自动同步所有文件,自动构建,自动运行相关的单元测试,碰到错误能自动发邮件给团队

答:我们项目的源代码和测试代码是放在同一目录下的,其中测设代码在该目录下的test文件夹中。 修改源代码会确保相应的测试代码也同步更新。我们从网上资源中找到了一个框架叫“Spring Boot”,它可以帮助我们完成自动部署的任务。在签入之前,我们能在自己的机器上运行自动测试,以保证本地修改不会影响整个软件的质量。在我们的服务器上还没有设置自动测试测序。团队配置了服务器,它自动同步所有文件,自动构建,自动运行相关的单元测试,碰到错误能自动发邮件给团队。

12.分析比较各种软件构建环境:

就像一个厨师要分析各种厨房用具,挑选适合自己的工具组合, 一个软件团队也要挑选适合自己的源代码管理和其他配套工具,请选择至少三种,比较各自的优点缺点,成本:

github

Gitee 高校版 - 助力计算机专业教学改革与「新工科」实践落地 

coding.net 

code.csdn.net

gitcafe.com

www.visualstudio.com

code.taobao.org

Visual Studio Team Foundation Server

gitblit, 在Windows系统下构建 git 服务,带网页端管理…

Visual Source Safe (VSS)

本团队自行搭建的系统

答:

我们挑选的三种源代码管理软件是 GitHub、Gitee 和 Code.CSDN.net 这三种。

以下是这三种的优点、缺点和成本:

GitHub:

优点:全球最大的开源代码托管平台,社区活跃,支持团队协作,具有强大的分支和合并功能,易于使用,提供丰富的第三方集成。

缺点:对私有仓库收费,一些高级功能需要付费订阅。

成本:免费版提供公开仓库,私有仓库需要付费订阅。

Gitee:

优点:国内开发者较多,速度较快,提供企业版支持,支持中文界面,具有持续集

成和部署功能。

缺点:功能和生态系统不如GitHub完善,知名度不如GitHub高。

成本:提供免费版和企业版,收费根据使用规模和功能等级不同而定。

Code.CSDN.net:

优点:CSDN旗下的代码托管平台,与CSDN社区结合紧密,便于技术分享和交流。

缺点:功能相对较少,可能不适合大型团队或复杂项目。

成本:可能提供免费使用,具体收费情况需要查看平台规定。

13.每个小组说明自己团队的开发环境和流程有什么需要改进的地方?

答:

在团队中,我们的开发环境是基于Java语言的Spring框架和MySQL数据库。我们的开发流程主要包括需求分析、设计、编码、测试和部署等阶段。

有几个方面我们觉得需要改进的地方:

(1)沟通协作方面:我们团队目前用的是微信和线下见面进行日常沟通,但有时候信息容易遗漏。

(2)代码审查:我们计划加强代码审查流程,通过团队成员之间的互相审查,提高代码质量和减少潜在的bug。

(3)文档管理:我们需要更好地管理项目文档,包括需求文档、设计文档、接口文档等,以便团队成员之间更好地沟通和协作

在流程方面我们也觉得有需要改进的几个方面:

(1)敏捷开发方法:我们希望能够引入敏捷开发方法,如Scrum或Kanban,以更好地应对需求变化和提高团队的灵活性。

(2)任务分配和跟踪:我们计划优化任务的分配和跟踪机制,确保每个团队成员都清楚自己的任务和进度,避免任务重叠或遗漏。

(3)版本控制:我们需要更好地管理代码版本,确保代码的安全性和可追溯性。

(4)持续改进:我们将建立一个持续改进的机制,定期回顾团队的开发流程,发现问题并及时调整,以不断提升团队的效率和质量。

13考虑下面的软件需求:•手机英语背单词软件,用户可以选择单词本的类型(四级,六级,GRE,等),每天背单词的进度。•可以和好友分享自己背单词的进度。还可以挑战好友,挑选20个单词,送给好友,让好友选择正确的解释,并把成绩自动分享回来。•假设有微博/微信/email 可以确定用户的身份•假设有服务器可以返回 【中文 – 英语单词】的对应关系用下面的工具进一步分析这些需求,做出草图•思维导图•ER图•Use Case•Data Flow Diagram•UML

思维导图

ER图

Use Case

Data Flow Diagram

UML类图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值