现代软件工程 作业汇总

文档属于这个专栏: ​​​​​​现代软件工程讲义 目录_SoftwareTeacher的博客-CSDN博客

备份:现代软件工程课程

参考:各个学校的编程/软工作业列表

-------

软件工程的作业

-------

很多老师反映软件工程的作业题不好出,学生做的“大作业”也是了无新意。怎么办?师生们身处轰轰烈烈的软件产业的大环境,但是在软件工程课上做的题目却是非常简陋,没有起到应有的作用,这的确是一个很有讽刺意义的事情。有很多因素导致这一结果,这些因素都是可以克服的,在这里不再啰嗦吐槽了。怎么出一些有份量,能帮助学生进步的题目? 我们看到,程序 = 算法 + 数据结构;软件 = 程序 + 软件工程,软件工程的编程作业,是不同于 “熟悉某个数据结构/实现某个算法”  这样的算法课作业的。

在全世界范围,这也是一个普遍现象,这个网站: http://nifty.stanford.edu  ​​​ 汇聚了一些有意思的编程/软件工程的作业, 大家可以参考。 

怎么打分,很大程度上决定了学生的学习行为,请看:

软件工程课的分数系统,和打分方法_SoftwareTeacher的博客-CSDN博客

备份:

软件工程课的分数系统,和打分方法 - SoftwareTeacher - 博客园 (cnblogs.com)

作业的格式

一个作业并不是一上来就贴代码,UML 图, 它应该是学生在 “健身学员/健身教练”这一个关系下, 刻意练习,向自己目标前进的具体努力的体现。在作业的一开始,应该写:

这个作业属于哪个课程<课程的链接>
这个作业要求在哪里 <作业要求的链接>
我在这个课程的目标是<写上目标>
这个作业在哪个具体方面帮助我实现目标 <写上具体方面>
作业正文 ....注意代码要按格式上传
其他参考文献 ...

增加作业的丰富性

一个简单的程序通常是做这种简单的事情:

   对输入数据进行处理,并输出。

此类 “程序”可以从几个维度扩展,成为很有锻炼价值的软件工程作业。下面举例说明。

从数据方面扩展:

  • 从数据本身的属性扩展,例如处理“最大子数组的和”的程序,可以扩展到大数(超过64位的数字),这样引入大数的处理。
  • 从数据的数量扩展,很多老师出题就假设数组只有六七个元素,直接写死在程序中。如果这个数组有一万个,十万个元素呢?
  • 从数据的维度扩展,如果数据是在多维数组中呢?
  • 从数据的其它属性扩展,例如,如果你的程序能处理北京的地铁数据,如何改进你的程序,让它能动态处理上海或其他城市的数据呢?这样就引入了工程的需求。

从需求方面扩展,很多程序的需求都是非常抽象,可以用数学公式描述和验证的,例如:“找出数组中的最大值”。下面有几种扩展的方式:

  • 不是仅仅要求结果,而是要让程序把计算的过程显示出来。请搜索各种“动画显示排序过程”的程序,我们的同学也做了一个类似的题目。
  • 从需求的维度方面扩展,例如学生写了一个“统计程序有多少行” 的程序,我们可以进一步要求,能把注释行,空行,只有一个字符的行去掉么?能处理目录里面的多个文件么?
  • 重复一个成熟的、学生比较熟悉的需求,这是也是可行的,关键是要体现 “工程”的特点。 例如做一个文档编辑软件,要求能处理10M 大小的文本文件;做一个图书信息系统,要求有10万本书,100万条借书,还书记录。很多同学做的图书馆信息系统只有不到10本书的记录,这是图书馆么?
  • 在已有的需求上增量改进,例如,让文档编辑软件支持markdown 语法,支持无限的“后悔”操作;让图书馆信息系统支持手机客户端。
  • 探索创新的方式来满足已有的需求,或即将出现的需求。

从用户的方面扩展,绝大部分大作业都是单机运行,给一个用户(老师)看一次,看完就万事大吉。我们可以考虑下面的扩展方式: 

  • 单用户第二次使用这个软件的时候,能有什么功能,让单用户更喜欢这个软件?(例如:记住上次的状态,自动展现上次文档最后编辑的地方,等)
  • 如果多用户使用这个系统,会出现什么问题,例如,学生的图书馆信息系统考虑到有100人同时查询的情况么?如何模拟这样的测试?
  • 用户从世界各地来,怎么办?你的“程序”能提供多种语言的界面么?
  • 用户有善意的和恶意的,如何让你的程序更安全?如何测试安全性?

从软件构建方面扩展:

  • 如果是改进一个已有的软件,怎么办?
  • 大多数的“程序”都是用单一的语言写的,如果软件有多个语言写成的不同模块,如何定义彼此的接口(API)?
  • 如果软件已经在服务中(例如图书馆信息系统,如何升级部分模块,同时尽量减少系统下线的时间?)
  • 有些老师想给学生出一些数据库方面的团队项目,但是又怕同学全盘抄袭现成的实现。可以考虑这样的方法:我们知道数据库应用一般分三层(数据 | 业务逻辑 | UI 层),老师设计数据库,学生们设计并实现其他两层。 这样可以很容易地检查学生是否能根据别人设计的数据库来做上层的设计。 并且老师可以准备大量数据做大规模的测试。 

如何防止抄袭:

很多同学都做同一个作业,这个作业也被之前的很多学生做过,如何确保学生的作业是经过独立思考和设计完成的?在开放式的教学中,这更是一个难题。 我们在实践中总结了很多方法。

  • 先把规则讲清楚,一旦发现违规,马上公开处理不搞 “下不为例”。 
  • 作业可以根据学生的情况进行参数化,个性化,例如,要求把学生的学号作为程序命名的一部分,一个程序必须一开始就要写程序头的注释部分,把学生的信息写在那里。 
  • 学生的学号可以是程序要求的一部分,例如,一个题目是要处理一个二维数组,那么,二维数组的两个维度可以是学生学号的后四位中的前两位和后两位,如果小于 05 就改为 55.  这样,每个学生要处理的二维数组的维度都不一样。 
  • 记录工作过程。 很多老师只要求学生提交最终的程序,但是,一个正常的学生在写一个足够复杂的程序时,会从无到有,从简到繁写很多版本。 那么,我们就要求学生在源代码控制 (gitcode.net,  github.com) 签入各个版本,例如,至少从最简单的空的源代码框架 (空的 .h .c 文件)到最后解决问题的版本,至少有 5 个版本。 这样,对于一个认真做作业的学生,他只要按时写程序,不断签入代码,那他自然就有较多的版本在几天的时间都有签入。 另外一个要抄袭的学生, 也许他在交卷前最后一小时只有 1 次签入,签入的就是完美的代码,这个显然不符合要求,另外一个学生在交卷前一小时有 5 次签入,每次间隔 1 分钟,几百行代码就写好了,这个记录大家一看就知道是怎么回事了。 当然,现在还有很多检查代码重复度的工具可以使用。  
  • 记录思路。 要求学生在文档中写 “你认为你程序中最精华的部分是什么,请写源代码和注释说明”。 这样,老师和助教比较各个学生的代码的时候,就只看精华部分,而不用看雷同的非关键代码。  很多非关键代码是非常雷同的(例如打开文件读数据),这个地方,学生即使拷贝网上的代码,我认为也无妨。 我们要考察的,是关键代码。  这对于老师出题也是一个挑战, 你出的题目要有挑战,有难度!如果你出的题目就是 “hello world” 那样简单平凡的,那你要好好反思。(参看上面的 “增加丰富性” 的段落)
  • 强调个性化。要求学生写 “你认为你的思路最独特的部分是什么? 你写程序碰到的最困难的点是哪里,你怎么克服的?”。 不同学生应该有很不一样的回答

下面是一些和阅读,提问,分析, 设计,总结相关的作业:

第 0 周,课程的底线; 第一周博客作业

结对调查和分析作业

阅读和调查作业    (中科大的作业实例)

用户体验深入调查和数量化的报告

原型设计,提出项目建议

最后一周总结

和代码相关的作业:

个人项目:

MIT 软件工具基础教程

C++ 基本练习和效能分析 (四则运算)

Java 基本练习和效能分析 (四则运算)

Java 逐步提高练习(用命令行工具逐步练习 Java 技能)

现代软件工程 作业 1: 个人项目     

从一维数组求最大子数组和展开训练

个人项目和结对项目练习 地铁      

期末作业附加题  (同学的读书笔记)

最大子数组的和 - 及其扩展

结对项目:

两人合作作业的模式

Word Count (wc.exe) 全套练习

四则运算扩展: 模块化,单元测试,回归测试,TDD

动态展现程序的工作过程

英语文件中找到单词词频

结对和团队项目建议 - 黄金点游戏

现代软件工程 作业 2: 结对项目  (电梯调度设计)  (如何自动测试电梯调度程序)

有意思的游戏:汉字构成 + 俄罗斯方块 + 2048

团队项目:

    团队项目计划

    现代软件工程 作业 3: 团队作业  

    2012 团队作业

    团队项目建议 - 英语学习 App

    源代码管理的10个问题

    团队项目的总结,请看:现代软件工程讲义 11 项目管理 - 事后诸葛亮会议 - SoftwareTeacher - 博客园 (cnblogs.com)

    团队项目的评审,请看: 软件工程课的分数系统,和打分方法 - SoftwareTeacher - 博客园 (cnblogs.com)

百花齐放:各个学校的编程/软工作业列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程 作业 第一周博客作业

(软件工程作业汇总) 第一周的博客作业 (这是历届学生的练习中&#xff0c; 从各个老师的作业中汇集而来&#xff0c;特别是北航的作业&#xff0c;东北师大的作业) 1. 介绍自己&#xff0c;建博客 在 http://www.csdn.net 建账号。关注老师和助教&#xff0c;关注一些和你一起…

java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)

在此篇中我们将简要介绍关于grpc对java客户端的实现。在开始开发前&#xff0c;我们需要先导入io.grpc grpc-netty 1.11.0io.grpc grpc-protobuf 1.11.0io.grpc grpc-stub 1.11.0如果是Android除了这几个包外&#xff0c;你可能还需要一个javax.annotation:javax.annotation-ap…

现代软件工程 作业 团队第一个作业

这是现代软件工程作业系列的一部分 1. 团队成员介绍 介绍每个成员(照片&#xff0c;主页&#xff0c;技术特长&#xff0c;在团队中担任的角色)。 建议拍一张有创意的合影。 在介绍的时候&#xff0c;可以采用艺术照等形式&#xff0c; 保护同学的隐私&#xff0c;不想说明真实…

asp.net 文本框显示xml格式数据_Excel 办公小技巧,查找和替换数据,您值得拥有...

在数据处理的过程中&#xff0c;有时需要在工作表中查找一些数据&#xff0c;以便查看或修改数据。若工作表的数据能一目了然&#xff0c;则可手动进行查找&#xff0c;但在记录繁多的工作表中查找所需数据并替换&#xff0c;效率比较低&#xff0c;而且极易出现遗漏。这时就可…

webpack打包后的文件夹是空的_vue+webpack 打包文件 404 页面空白的解决方法

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问&#xf…

微软认知服务应用秘籍 – 与机器人聊知识

在本篇博客中&#xff0c;我们将会学习到零代码情况下&#xff0c;如何利用已有的技术建立自己的知识问答系统&#xff0c;这种系统的可以广泛适用于学校、企业、客服、政府公开信息等领域&#xff0c;代替传统的电话咨询、电子邮件沟通等高人工负荷的方式。 建立知识库 什么…

.net 开发怎么实现前后端分离_ASP.NET Core模块化前后端分离快速开发框架介绍

源码地址GitHub&#xff1a;https://github.com/iamoldli/NetModular演示地址地址&#xff1a;http://118.24.75.170:6220/账户&#xff1a;admin密码&#xff1a;admin前端框架演示地址(临时)地址&#xff1a;http://progqx5cu.bkt.clouddn.com/skins/index.html#/账户&#x…

微软认知服务应用秘籍 – 支持跨平台客户端的视觉服务中间层

不断演进的应用场景 初级应用场景—宅在家里 场景&#xff1a;Bob同学有一天在网上看到了一张建筑物的图片&#xff0c;大发感慨&#xff1a;"好漂亮啊&#xff01;这是哪里&#xff1f;我要去亲眼看看&#xff01;"Bob同学不想问别人&#xff0c;可笑的自尊心让他…

python建立列表并输入_python操作列表

遍历列表 for magic = [a,b,c] for m in magic: print(m) 输出控制台 image.png 深入for以及for之后进行操作 for m in magic: print(m.title()+ good boy) print(hahaha) 输出控制台 image.png 创建数值列表 使用函数range for value in range(1,5): print(value) 输出控制台 …

现代软件工程 作业 原型设计

[ 现代软件工程 作业系列] [ 这个作业来自福州大学 ] 软件工程课不是大家埋头写程序的课&#xff0c; 而是教给大家在软件需求 - 设计 - 实现 - 测试 - 维护 过程中的原理&#xff0c;方法和工具。下面我们就看如何用原型设计工具来帮助我们理清用户需求。 一、阅读《构建之法…

就业技术书文件表格_429页标准指南,教你如何管理工程监理文件资料,丰富图表一看就会...

房屋建筑工程监理文件资料的管理&#xff0c;参差不齐&#xff0c;也给监理工作带来了很大障碍。这份房建工程监理文件资料管理标准指南&#xff0c;能够帮助广大监理和资料员们实现监理文件资料标准化管理&#xff0c;能够有效地补充和支撑现场监理工作&#xff0c;对于工程资…

微软认知服务应用秘籍 – 君子动口不动手

概述 科技的不断发展带动着人们生活质量不断的提升&#xff0c;其中一方面就体现在日常家庭生活中&#xff0c;智能设备层出不穷&#xff0c;给人们的生活带来了很大的便利。 以电视为例&#xff0c;几十年前的电视还是按钮式的&#xff0c;每次换台还要跑到电视跟前&#xf…

一阶广义差分模型_经济学中的序列相关(自相关)

序列相关性异方差性表现于模型的随机误差项。我们将讨论模型的随机误差项违背了互相独立的基本假设的情况&#xff0c;称为序列相关性。序列相关性同样表现于模型的随机误差项。一、序列相关性(Serial Correlation )对于模型i1,2,…,n随机误差项互相独立的基本假设表现为&#…

AI应用开发实战 - 手写算式计算器

扩展手写数字识别应用 识别并计算简单手写数学表达式 主要知识点 了解MNIST数据集了解如何扩展数据集实现手写算式计算器 简介 本文将介绍一例支持识别手写数学表达式并对其进行计算的人工智能应用的开发案例。本文的应用是基于前文“手写识别应用入门”中的基础应用进行扩…

sed 删除某一行_Linux常用命令三剑客之sed,您真的会用吗?

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言本文主要讲解Linux系统中的sed命令的作用与使用案例。sed用于查找、过滤、文本替换、替换和插入、删除等文本操作。它是Linux/Un…

现代软件工程 期中/期末总结博客作业

(软件工程作业列表) 经历了一个学期的学习&#xff0c; 可以把经历和收获总结一下。 第一部分 耕耘 请说明你付出了多少时间&#xff0c;写了多少代码&#xff0c;多少注释&#xff0c;多少文档(博客)&#xff0c;多少次签入&#xff0c;最好用折线图或其他合适的图形化的方式…

idea怎么更改推到github的路径_IDEA 拉取、上传、更新 项目到 Gitee+GitHub_超详细超简单版...

注&#xff1a;本人使用的idea是最新版(2019.1.2)&#xff0c;要是其他的版本的不要惊慌〜&#xff0c;基本上都一样&#xff0c;没有什么太大的差别的首先我要说一下&#xff0c;拉取项目分两个&#xff0c;一个&#xff0c;你就没有项目&#xff0c;拉取仓库的整个项目&#…

现代软件工程 作业 结对编程 模板

【现代软件工程作业汇总】 技术要求部分 请看以前的各项结对作业的技术要求&#xff0c;例如(电梯调度&#xff0c;四则运算&#xff0c;数独&#xff0c;地铁出行&#xff0c;黄金点游戏) 博客要求部分 1)在博客开头给出作业要求的博客链接&#xff0c; 你们项目的Github地址 …

caj转pdf python_PDF怎么转换成Word?2种方法3秒一键转换!建议收藏

Hello&#xff0c;大家好&#xff01;今天给大家带来&#xff1a;PDF一键转Word的干货&#xff01;保证全方位满足你工作和学习的需求~01Word转换法适用&#xff1a;纯文字简单型PDF文件。其实对于简单纯文字的PDF文件&#xff0c;直接使用Word就能转换&#xff0c;操作也非常简…

AI应用开发基础傻瓜书系列1-神经网络的基本工作原理

Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源&#xff0c;请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下…