- 时间:2020年春季
- 学分:2学分
- 授课教师:欧阳元新、王德庆
- 上课方式:录播课+腾讯会议答辩
- 考核方式:个人作业(中期成果的视频+最终答辩+最终项目代码和部署说明) + 团队项目(每周答辩+周报文档制度+最终alpha版答辩+最终项目成品和部署说明)+课堂提问(微信群内老师点名提问或问卷星)
- 分数占比:课堂提问、个人作业、团队项目,各自占比不详。团队项目有4次评审,根据4次评审得到团队的整体得分。团队成员协商确定每个成员的贡献度。不及格没有补考,需重修。
前半学期以录播课为主。录播课讲得比较理论,介绍了软件开发过程中的各个过程,及每个过程可能的开展形式。主要分为需求分析、系统建模、团队和流程、项目管理、用户体验、质量保障和测试等章节,随着个人作业和小组作业的推进而循序渐进。内容调理清晰层次分明,欧阳老师上课风格较为轻松。
从个人作业的答辩开始,一直到小组作业结束,基本都是以答辩为主,和零星的几节录播课。个人作业只有一次直播答辩,小组作业几乎每周一次,主要是汇报进展和下周计划,并不算很大的压力。指导我们组的助教每次都会提出非常切中肯綮的建议,而且具有实操性,私下也会通过微信提建议,很负责。
课堂提问。问卷星的题不多,每次还没十道,而且挺简单的,但需要好好看录播课视频才能答,有的问题比较开放性。老师点名提问更加倾向于问看法和理解,稍微难一点,答错了也没关系,老师会纠正,但不答算缺课。老师如果加过你会私戳问你在不在,没加过可能会直接在群里说某某同学不在我们换一个人。如果打字慢可以先回复在打字。但可能疫情结束之后就不会这样授课了。
个人作业。有几个题可供选择,随便选无人数限制。理论上可以自选题,但貌似申请不好通过(老师要衡量难度和复杂度之类的)。题不难也不算太复杂,实现四五个关键功能,还有一些用户体验之类的细节要考虑到。题目比如“图书馆借阅管理”、“银行存取款”、“病人病历管理”等。中期成果要交5min视频,要求至少包括个人作业系统部署说明和功能点介绍。最终答辩是按照题分组答,貌似是按照中期成果的给分排答辩次序(不确定)。个人作业的文档要画图,包括活动图、用例图、顺序图、类图、状态图,对个人作业系统进行建模,除图形化描述外,还应配有相应的说明文字或者表格说明等。
团队项目。有几个题可供选择,但每个题最多两个组。理论上可以自选题,但貌似申请很难通过(理由同上)。题目业务逻辑比较复杂,比如体育赛事、学习小组、公众科学、大学生活动发布等等。必须有AI元素,可以用现成模型,但最好不用API。每周要写周报,包括这周任务完成情况,下周工作安排,有没有偏离总体计划等等。每周答辩要小组成员轮流答,每个组貌似5min,助教会尖锐提问。文档有四篇,分别是需求分析、用户手册、设计报告、测试报告,会有模板和样例。以上周报、每周的进度汇报、文档都会算分。最终答辩是alpha版答辩,需要提交8min展示视频,包括包括系统设计讲解和演示。
- 关于上课的内容,个人感觉各个名词概念还是比较容易混淆的,比如软件团队的模式,有主治医师模式、明星模式、社区模式等等,团队开发流程,有瀑布模型、快速原型模型、螺旋模型等。我们在开发的时候可能并不会遵循其中一种或几种模式或模型,但理解每一种模型的特征和优势,有助于后续分工合作和进度推进。
- 个人作业的时候就可以问问同学朋友,对前后端分离的理解什么的。小组作业最好(必然)前后端分离。个人项目功能尽可能完善,界面比较美观,一般就会受到夸奖。需要注意一些细节,比如出错提醒,注册用户的提醒等等一些细节,老师会比较在意这些细节决定成败的东西。按照正常的使用逻辑完善就好了,老师人很好不会为难人。
- 虽然学期中才会开始小组作业,但可以先组队,确定本组在小组作业的时候可能会用到什么前后端框架,在个人作业的时候可以先行尝试并熟悉。当然如果学习能力强可以随便,想各端都尝试一下的也可以。通常小组作业是网页端+移动端,可以让部分组员在个人作业的时候就用网页端,另一部分用移动端。有些框架确实不好学得很深很透,可能之前有过相关开发经验的同学会有优势,接触过三四周有过小型项目经验和刚上手一周,还是有差距的。
- 抱紧大腿。和大佬一组能学到很多有用的经验性知识,还能偷看代码学习,比如前后端框架的搭建、接口风格、数据库设计等等,稳赚不赔。搞不懂的地方多问有开发经验的同学、助教,有时候能得到简单很多倍的解决方法,别在一个问题上耗着,解决办法有很多,实现才是正道。
- 不论是个人作业还是小组作业,在最开始需求分析的时候,对软件的画饼可以不是太大,但尽量落实到更多的细节。需求只是题目要求的一些基本功能,重点在于如何将这些功能更好更安全更高效地实现。后面有时间可以多实现一些优化用户体验的功能。
- 有的同学可能全程负责了其中一个端的设计和实现,对另一端一无所知,感觉收获少了。如果追求成绩、追求最终效果的话,我觉得这样是OK的,因为花时间和精力去学了另一端的框架,可能学得还不怎么样,反而自己该负责的部分没有尽善尽美。同理,如果组里有对某方面特别擅长的组员,直接交给他干,新手十小时,老鸟十分钟,闲着的组员可以负责别的任务,比如写后端、规范统一代码、整理(编造)数据库、写文档、写周报、准备汇报ppt、真机测试等等也不省事儿。如果不擅长还硬干花了很多时间,还要大佬从头到尾改一遍,甚至不如重写,还不如一开始就别掺和,毕竟这是个团队项目。不会写的可以等别人写完再学习和请教,也可以自己弄个小项目练手,不一定非得把这个关系到整组最终成果和组员成绩的项目,作为自己学习新知识的唯一途径。
- 不管是前端还是后端,学习的第一步是模仿,看看别的小程序、app的功能设计、用户体验设计是怎么死抠细节的。前端需要推陈出新,界面设计千篇一律的app太多了,照抄只能算平庸。但忌讳的是把用户熟悉的手势、功能区位置等等,用稀世罕见的方式安排在稀世罕见的地方,说起来道理简单,但实现的时候就会发现自己做的or别人做的……放到应用市场就是一键卸载。后端逻辑比较简单,如果是几个人合作写的话务必写注释。
- 在数据库设计的时候,助教曾经给过我们一些建议:①不是分布式数据库,没必要搞太复杂;②反爬/防止被黑不需要在id上做文章(id连续,如果在数据传输时不转换或加密,容易被黑客攻击);②项目上线运行期间,理论上不应该对表做修改,即不能新生成、删除、增删表的列;③关于某一变长表项或较难解决的表中套表问题,可以使用json格式存储数据。数据库提前设计好格式规范,并规定哪些是必填项。不然可能有组员不知道就在初始化数据的时候空着或格式错误,到另一个组员手里就疯狂报错。
- git合作。在将代码或者数据库文件上传到服务器之前看看或者问下别人改没改过,不能直接覆盖掉了,万一没副本就gg。
组个好队就是绝世好课。理论不多,重在实操,多看别人优秀的代码和设计,然后自己实现一下。课程的任务量和其他老师的班级相比不多不少,中规中矩,主要的收获是自己亲自动手开发一个程序,学到了很多东西。而且同时很重要的是,给分很好hh~
我选择了ATM系统这一题目,题目介绍详见“个人作业要求.pdf”。采用Flask + Bootstrap + Sqlite搭建,系统文档详见“individual-BankATM/BankATM文档/”。
我们小组选择了公众科学系统这一题目,题目介绍详见“团队作业要求-公众科学系统.pdf”。采用Flask + Flutter(app) + Vue(Web) + MySQL搭建,系统文档详见“group-CitizenScience/documents/”。