软件工程实践2019第五次作业——结对编程的编程实现

deadline 1: 2019.10.19 23:00

补交deadline 2: 2019.10.22 23:00

零、写在前面的话

上次的结对作业中,大家做出了不同风格的原型设计,有一些是Web风格的,不少是移动终端风格的;采用的原型工具有墨刀、Axure等;有一些组还通过思维导图来细化功能逻辑;你们通过实践的方式,体会了从几段用户视角的文字描述,到初见软件原型的过程,掌握了原型模型开发的能力,学会了原型开发工具。这些,都将为你们下一个阶段的组队开始系统化的软件开发打下基础。在这些作业中,也看到一些不足:一些组抓的用户“痛点”不够准确和到位,很多组的原型就是一个简化或直男版的微信雏形原型,虽然这是一个社交软件,但和微信或QQ的区别是什么? 同时,这又是一个轻度使用的软件,做成独立的APP或web,是否会存在用户或活跃度不足的问题。采用什么样形式的原型,既要考虑到满足用户的需求,又要考虑到后期的推广和软件长远的生命力。所谓的“杀手”功能,就是要考虑到现实的痛点,又要比别人活得更“旺盛”。另外,大家对于结对的形式,也有了新的体会。两个人共同完成一份作业,互动交流,激荡创新。


一、编码要求

  1. 两人中一位同学在Github仓库中新建以“第一个学号&第二个学号”为名的项目;另一位同学fork该项目,有进展时pull request。单元测试不必上传。签入记录不合理的项目会被助教抽查询问项目细节。
    github管理团队编码有这些参考:
    GitHub 从单机到联机:玩转 Pull Request
    如何使用github中的pull request功能?

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

  3. 使用html+css+javascript实现,可以使用bootstrap这样的框架;请使用下载的框架文件,并使用相对路径引入到项目中;

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

  5. 同时将这份目录说明和使用说明用markdown添加到项目的README文档,方便其他同学了解和使用你的项目,参考这里

  6. 在测试时请用谷歌浏览器运行,以防效果不一致;请确保其他同学在下载你的所有文件后,用谷歌浏览器运行html文件就能展现预期结果。

  7. 重要:使用单元测试[附录3]对项目进行测试;并写出至少10个测试用例确保你的程序能够正确处理各种情况。


二、博客撰写要求

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


三、开启第二次结对编程

上上次是编程作业,上一次是美术作业,这次自然就是延续“学术家族树”的编程作业了:
需要在网页页面上呈现树形结构形式的师门树,树的节点,鼠标点击后是可以缩放的。同时,支持呈现多棵树并存、两棵关联树共存等形式。此外,尽情添加你喜欢的特点。

输入:

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

其中,"导师:","级博士生:","级硕士生:","级本科生:"和"、"当做关键词处理;若有多组输入,中间空一行。

输出:

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


四、作业提交须知

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

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


五、测试须知

1.本次作业不采用自动测试,而采用助教评分+各组互评的形式,各占50%。

2.各组请先在群内填写结对表,并在完成作业之后在表中填写Github项目地址。

3.互评方式参考了K班的互评方式,具体如下:

  • 每组的成果需要接受另外3个小组的评分,评分小组为本组编号加x,x+1和x+2,超过总的组数就取mod。x在作业结束后公布
  • 每个小组要为自己评分的小组,针对成果的各个方面给出评分理由;被评分小组有异议的,评分小组要给出解释;评分表请在结束后在群内查看。

4.参照被测评小组提供的目录结构说明,用谷歌浏览器运行,以防效果不一致;请每组同学确保其他同学在下载你们的所有文件后,用谷歌浏览器运行html文件就能展现预期结果。

5.请参考程序评分规则,确保你们的网页能处理那些问题。


六、评分规则

博客评分规则

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

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

3.给出PSP表格【1'】

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

  • 代码组织与内部实现设计(类图)【5'】
  • 说明算法的关键与关键实现部分流程图【10'】
  • 贴出你认为重要的/有价值的代码片段,并解释【5'】

5.附加特点设计与展示【10'】

  • 设计的创意独到之处,这个设计的意义【3'】
  • 实现思路【3'】
  • 贴出你认为重要的/有价值的代码片段,并解释【2'】
  • 实现成果展示【2'】

6.在博客中给出目录说明和使用说明【4'】

  • 说明你的目录是如何组织的【2'】
  • 测试人员如何运行你的网页【2'】

7.单元测试【10'】

  • 说明你们选用的测试工具,是如何学习单元测试的,能出一份你自己的简易教程吗?【4'】
  • 展示出项目部分单元测试代码,并说明测试的函数【3'】
  • 说明构造测试数据的思路,你是如何考虑各种情况的?你如何考虑将来测试人员的***难?【3'】
  • ps:上一次编程作业是比较欠缺的部分,请同学们认真完成此次单元测试,请看附录部分说明。

8.贴出Github的代码签入记录【1'】

  • 请合理记录commit信息

9.遇到的代码模块异常或结对困难及解决方法【4'】

  • 问题描述
  • 做过哪些尝试
  • 是否解决
  • 有何收获

10.评价你的队友【2'】

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

程序评分规则

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

1.正确性【15'】

  • 输出呈现的形式符合文本要求吗?
  • 各种输入情形的处理:多棵树并存、两棵关联树共存等形式等等。
  • 对于各种情况都有考虑并且正确展示的,可给满分

2.美观性【15'】

  • 字符显示有无乱码?
  • 结点展开流畅度怎样,点击可以展开吗?界面设计、树的设计、结点设计怎样?
  • 主观性评分。不加修饰,但是树的行为正确的取最低分5分,在此基础上越漂亮分越高

3.方便【6'】

  • 有没有README.md?里面的内容直观易懂吗?
  • 网页操作方便吗?要想获取输出,查看树的某个节点,操作麻烦吗?

4.附加特点【10'】

  • 你和你的队员有没有做其他人性化、方便的设计,效果怎么样呢?可以尽情思考,添加你认为好的特点。

七、附录

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的更多内容,请自行阅读邹欣老师的博客:工程师的能力评估和发展


2.Github
请阅读邹欣老师的博客:源代码管理,了解源代码管理的10个实践问题。
本次作业要求使用Github进行源代码管理,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。
对代码签入的具体要求如下:根据需求划分功能后,每做完一个功能,编译成功后,应至少commit一次。具体的功能划分,请自行定义,并在撰写博客时体现出来,遵循自己对需求的功能划分来提交代码即可。
对Commit不是很熟悉的话,请阅读阮一峰的博客:Commit message 和 Change log 编写指南,了解更多细节。


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

重点
这是一个对于自学能力/信息搜集能力要求比较大的部分。
针对javascript的单元测试,这里有一些教程以供参考,如果你有更好的,可以在群内分享:
廖雪峰的javascript
测试框架 Mocha 实例教程
有哪些测试工具可以使用?这里有一些参考,如果你有更好的建议,可以分享出来:
10个可靠的JavaScript测试工具

posted @ 2019-10-08 23:11  福大软工和面向对象  阅读(390)  评论(0编辑  收藏  举报