软件工程2020秋学期 (福州大学 - 数学与计算机科学学院)

  1. 班级首页
  2. 作业列表
  3. 详情

第4次作业-结对编程之实验室程序实现 [已截止]


零、前情提要

你们的上一次结对作业,各显其能,对用户模糊的描述和痛点的陈述,进行了细致分析和梳理,给出了自己的实现方案:WEB、APP、小程序,各种方案丰呈。采用了丰富多彩的原型设计工具,发掘或熟悉了不少原型设计的软件。同时,你们可能也认知到,看上去挺简单的要求或想法、或文字描述,要描述成专业化的原型呈现出来,也需要经过复杂的过程,包括详细的构思、专业的工具、合适的编排,精巧的呈现。也许因为时间紧迫,也许因为经验不足,也许是受模版的影响,有三点遗憾:

  1. 很多组给出的原型设计,大多是用户注册、用户登录的原型,真的到了表达这个解决方案的核心:实验室、学生、导师的关联关系、学生的技能树或成长轨迹,都显得缺乏或简略。其实实际恰恰相反,如果时间很紧,恰恰可以忽略注册和登录,用心思考给出核心方案
  2. 如果核心方案的产品距离你们遥远,不妨可以问问用户,访谈利益相关者。有加入实验室的同学,是否有去问问学长,或实验室的老师。至少我在博客中没有看到这部分的描述。看到两个结对的同学开始了讨论或各自构思,或就着NABCD模型开始分析。大道至简,需求的第一要务要从用户获知资讯,产品经理考虑原型也是要调研用户开始。
  3. 根据痛点和现状、竞品,给出具有产品竞争力的核心解决方案。我们不是缺乏聊天、互动、交流、问答的平台,因此不需要在这个解决方案中,承载这样的功能。我们只是缺乏了解各种群、通讯录背后好友关于技能或成长轨迹的动态,缺乏将“实验室”拟态化为“人”时,缺乏呈现这个“人”的组成、历史、现在和未来。我们不是缺乏朋友圈的描述,无论是微信还是今日校园,都承载了这样的功能。因此,不需要在这个解决方案中,有强社交和富表达的体现。这个产品究竟应该对应痛点儿呈现哪些功能。是目前市面上的各种解决方案所不具备的呢?

聊完了上一次的作业,分享了我在国庆中秋佳节看完大家作品后的感受,你们站在产品经理的视角,做出了一次设计。接下来,需要你们站在程序员的角度,给出这个产品的核心模块的编码的原型。要求如下:
做一个“学术家族树”吧。
需要在网页页面上呈现树形结构形式的师门树,树的节点,鼠标点击后是可以缩放的。同时,支持呈现多棵树并存、两棵关联树共存等形式。此外,尽情添加你喜欢的特点。

一、结对编程正文

输入:
学术家族树以文本形式输入,web页面需要提供一个文本框;考虑学术家族树的文本格式是这样的:
导师:张三
2016级博士生:天一、王二、吴五
2015级硕士生:李四、王五、许六
2016级硕士生:刘一、李二、李三
2017级本科生:刘六、琪七、司四

刘六:JAVA、数学建模

李二:字节跳动、京东云

……

其中,"导师:","级博士生:","级硕士生:","级本科生:"和"、"当做关键词处理;若有多组输入,中间空一行。上半部分是人员信息,下半部分是技能树或所在公司历程。

输出:
文本的呈现方式没有强制要求,可以自定义为普通格式或XML格式;树的节点,鼠标点击后是可以缩放的。同时,支持呈现多棵树并存、两棵关联树共存等形式。点击某个叶节点,呈现该节点的技能及经历。

二、程序要求

1. GitHub仓库

两人中一位同学在GitHub仓库中新建以“第一个学号-第二个学号”为名的仓库;另一位同学fork该项目,有进展时pull request。单元测试不必上传。签入记录不合理的项目会被助教抽查询问项目细节。

2. PSP

在开始实现程序之前,在PSP表格记录下你估计在程序开发各个步骤上耗费的时间,在你实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。

3. 编程语言

使用HTML+CSS+JavaScript实现,可以使用bootstrap这样的框架。注意,使用从官网下载的框架文件时,请使用相对路径

4. 目录结构

你们需要合理组织你自己的目录结构(HTML, CSS, JavaScript, 图片素材等,以及第三方框架),在博客中提供一份目录说明和使用说明,以供其他测试人员参照。

5. README文档

请使用markdown在你们的GitHub项目中的README文档添加第4步中目录说明和使用说明,方便其他同学了解和使用你的项目。

6. 呈现形式

PC端web网页,在开发与测试时请统一使用谷歌浏览器,防止不同用户访问网页效果不一致;请确保其他同学在下载你的所有文件后,用谷歌浏览器运行html文件就能展现预期结果。

7. 单元测试

使用单元测试[见附录]对项目进行测试,并写出至少5个测试用例确保你的程序能够正确处理各种情况。

三、博客撰写要求

请参照博客评分规则部分。按点答题,保证完成所有方面,也能取得较高分数。

四、作业提交须知

正常作业截止时间deadline1: 2020年10月12日 16:00 。
补交作业截止时间deadline2:2020年10月13日 16:00。
按时交:deadline1之前,得实际分数100%。
迟交:在deadline1后、deadline2前(写了作业没有在博客园提交)补交,扣实际分数 * 10%;一人作业迟交两人扣实际分数 * 10%;(没写作业补交)算0分。
缺交:在deadline2后不再开放提交,该同学本次作业为负分,同时另一个成员扣实际分数 * 10%,请督促对方及时提交。
未完成作业必做项:本次作业为零分。

**请确保在deadline1之前填写了结对表格(包括项目地址),后续评分会使用到。没有在deadline1之前填写表格的,算总成绩*50% **
微信或QQ班级群如果发布相关通知也是作业要求一部分,请及时查看群通知。

五、测试须知

  1. 本次作业不采用自动测试,而采用助教评分+各组互评的形式,各占50%。
  2. 各组请在完成作业之后在班级群统计表中填写GitHub项目地址。
  3. 互评方式参考了K班的互评方式,具体如下:
  • 每组的成果需要接受另外3个小组的评分,评分小组为本组编号加x,x+1和x+2,超过总的组数就取mod。x在作业结束后公布
  • 每个小组要为自己评分的小组,针对成果的各个方面给出评分理由;被评分小组有异议的,评分小组要给出解释;评分表请在结束后在群内查看。
  1. 参照被测评小组提供的目录结构说明,通过PC端浏览器访问web网页,在开发与测试时请统一使用谷歌浏览器,防止不同用户访问网页效果不一致;请确保其他同学在下载你的所有文件后,用谷歌浏览器运行html文件就能展现预期结果。
  2. 请参考程序评分规则,确保你们的程序功能符合要求。

六、评分规则

博客评分规则(60分)

  1. 在文章开头给出结对同学的博客链接、本作业博客的链接、你们队创建的仓库的GitHub项目地址;在群内填写结对表,并在完成作业之后在表中填写GitHub项目地址【2分】

  2. 给出具体分工【1分】

  3. 给出PSP表格【5分】

  4. 解题思路描述与设计实现说明【20分】

    • 代码实现思路,文字描述【5分】
    • 关键实现的流程图或数据流图【10分】
    • 贴出你认为重要的/有价值的代码片段,并解释【5分】
  5. 附加特点设计与展示【10分】

    • 设计的创意独到之处,这个设计的意义【3分】
    • 实现思路【3分】
    • 贴出你认为重要的/有价值的代码片段,并解释【2分】
    • 实现成果展示【2分】
  6. 在博客中给出目录说明和使用说明【5分】

    • 说明你的目录是如何组织的【2.5分】
    • 测试人员如何运行你的网页【2.5分】
  7. 单元测试【10分】

    • 说明你们选用的测试工具,是如何学习单元测试的,能出一份你自己的简易教程吗?【4分】
    • 展示出项目部分单元测试代码,并说明测试的函数【3分】
    • 说明构造测试数据的思路,你是如何考虑各种情况的?你如何考虑将来测试人员的刁难?【3分】
  8. 给出Github的代码签入记录截图【1分】

    • 请合理记录commit信息
  9. 遇到的代码模块异常或结对困难及解决方法【4分'】

    • 问题描述
    • 做过哪些尝试
    • 是否解决
    • 有何收获
  10. 评价你的队友【2分】

    • 值得学习的地方
    • 需要改进的地方

程序评分规则

评分组从github项目链接获取项目到本地,参照被评分组readme.md里的目录组织和操作说明。
请各组在10月14日中午13:00之前评分完成,并汇总到群内的表格;每少完成一组在自己组的分数上扣33%
10月14日13:00~10月14日21:00反馈异议,此时评分者需要给出理由。

本次测试需要关注以下几个方面:

  1. 正确性【15分】
    对于各种情况都有考虑并且正确展示的,可给满分。
  • 对于简单情况,输出呈现的形式符合文本内容吗?点击节点可以展开吗?【8分】
  • 各种输入情形的处理:多棵树并存、两棵关联树共存等形式等等。【7分】
  1. 美观性【15分'】
  • 字符显示有无乱码?
  • 结点可以展开,比较流畅
  • 朴素不加修饰,但是树的行为正确,满足以上两点的,取最低分【5分】;在此基础上越漂亮分越高:
  • 界面设计
  • 树的设计,结点设计
  1. 便捷性【6分】
    一般有描述清楚的操作指南和目录说明,评分者能按其复现出正确结果,可给满分。
  • 如果有额外环境要求,操作指南描述清晰的不扣分;描述不清楚的酌情扣【1分】~【2分】;运行出现意外的问题,请联系相应的被测试组。
  • 有没有README.md?里面的内容直观易懂吗?
  • 网页操作方便吗?要想获取输出,查看树的某个节点,操作麻烦吗?
  • 【6分】
  1. 附加特点【10分】
    你和你的队员有没有做其他人性化、方便的设计,效果怎么样呢?可以尽情思考,添加你认为好的特点。
  • 作业要求内容不算做额外特点;一个特点根据其意义以及呈现效果,取分值【5分】;有两个或以上较好特点的,可给满分。
  • 比如支持上传文本文件作为输入;右键某一个节点,可以再单独输入,添加其子节点;支持输入额外信息,比如联系方式,点击某个节点可以查看其额外信息;呈现结果可以导出图片等等。

七、附录

1. PSP表格

PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
Estimate 估计这个任务需要多少时间
Development 开发
Analysis 需求分析 (包括学习新技术)
Design Spec 生成设计文档
Design Review 设计复审
Coding Standard 代码规范 (为目前的开发制定合适的规范)
Design 具体设计
Coding 具体编码
Code Review 代码复审
Test 测试(自我测试,修改代码,提交修改)
Reporting 报告
Test Repor 测试报告
Size Measurement 计算工作量
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划
合计

一个功能完备的程序不是一蹴而就的。可将一个大任务划分为可操作的小任务,同时最好按照任务难度或紧急程度指定各个任务的完成次序。因此,在动手开发之前,要先估计将在程序各模块开发所需耗费的时间,以及完成整个项目所需的时间,将这个[估计值]记录下来,写成PSP 的形式。

PSP的目的是:记录工程师如何实现需求的效率,和我们使用项目管理工具(例如微软的Project Professional,或者禅道等)进行项目进度规划类似。

有关PSP的更多内容,请自行阅读邹欣老师的博客:工程师的能力评估和发展

更多其他小伙伴完成的PSP记录:表格中既有数据也有图示,参见这里:https://www.cnblogs.com/flow-time/p/13687352.html#4698580https://www.cnblogs.com/ranh941/p/7999266.html


2.Github 参考资料


3. 单元测试

重点:这是一个对于自学能力/信息搜集能力要求比较大的部分。
请根据自己以往积累的测试经验,在编码完成之后,提交产品之前,设计测试用例,并编写单元测试,对自己的项目进行测试。
首先,至少应采用白盒测试用例设计方法来设计测试用例,其他测试方法不限。其次,要设计至少10个测试用例,确保你的程序能够正确处理各种情况。最后,结合测试评估的要求,对自己的测试设计进行评价,这些测试用例能满足该程序测试的要求吗?
另一个重要的措施是要把单元测试自动化,这样每个人都能很容易地运行它,并且可以使单元测试每天都运行。每个人都可以随时在自己的机器上运行。团队一般是在每日构建中运行单元测试的,这样每个单元测试的错误就能及时被发现并得到修改。

推荐阅读邹欣老师的博客:关于单元测试和回归测试

针对javascript的单元测试,这里有一些教程以供参考,如果你有更好的建议,欢迎在群内分享:


学号 成员名 提交作业标题 提交日期 分数