1.基本信息

上课时间:10:30am - 12:00am (周一),10:30am - 12:00am (周三), 上课地点:国科大雁栖湖校区教1-107.

主讲教师:罗铁坚, 电子邮件:tjluo@ucas.ac.cn, 办公室: 国科大雁栖湖校区学园2-418, 答疑时间:(周一、周三)3:00pm - 4:00pm.

2.教学目的和内容

什么是软件?软件工程面临什么基本问题? 软件是利用计算机拓展人类理解事物、执行任务和解决问题的智力系统。虽然这些智力会嵌入和融入物理系统或产品,但它与传统的物理系统或产品是有明显区别。人类的智力(Human Cognition) 可分为5个层级(Bloom理论):记忆、理解、应用、分析、评价和创造,计算机软件(Machine Intelligent)的能力是不断逼近或超越人类智力。计算机软件(AI等都是软件的子集)经过80年的研究与发展,已经在某些专门领域(计算、记忆、棋类、电竞、海量信息检索、自动生产线等领域)超过了人类。而软件的研发过程则是理解业务问题,通过设计程序代码或训练模型等方式把解决问题的“智能”封装到计算机系统中的一项活动。我们认为,任何人工智能的载体是计算机软件,它们解决问题的核心能力体现为软件的功能,即更准确的预测和更优化的行动决策。 对软件的创造构思、设计代码、实现系统和组织运营的知识进行系统化归纳提炼而逐步形成了软件工程这个学科领域。软件工程的使命和任务是探索和实践高效研发面向解决实际问题的优质智力系统或产品的理论方法和实现技术。软件不同于物质产品的研发和生产管理,我们经常要面对如下几类问题。 质量保障方面,是否存在或找到最小的测试用例能覆盖程序执行的所有可能分支?是否归纳完整可能的异常使用场景?需求是否合理、准确? 软件架构方面,是否存在或找到一个较好的组织代码的方式来实现软件系统,并且保证迭代演化后软件系统没有退化?什么是优化架构的代码重构方法? 效益成本和资源分配方面,如何寻找软件开发费用与投资人和用户满意度平衡点?是否能设计出一种可持续发展的软件演化途径和模式?软件开发项目技术、人力、时间、质量等优化问题。 从对事物的观察思考并发现问题,通过构思和设计、部署和运营创新软件来解决实际问题是软件工程学科建立的根本动机。软件研发过程是把人类提出的解决方案通过设计程序代码加载的计算机系统中的一项智力活动。

课程的主要授课对象是想成长为高级软件工程师或数据科学家的人员。软件工程师设计的产品更强调为他人所用;而数据科学家是通过设计程序来分析数据、获取新知识。

程序设计是软件工程师或数据科学家必须掌握的基本技能,此外,他们还能寻找或判断对人类有价值的需求或急需解决的问题,提出一种有效的软件系统架构,并设计高质量的代码(正确性、鲁棒性、可升级维护和功能拓展)。他们还要不断反思自己的工程实践方式,养成一种适应变化和追求卓越的情怀。

该课程所涉及的工具和方法的实践性既强,理论概括度也高。课程内容既有项目管理知识(如何驱动人做事方法)、也有软件代码设计技术(如何组合命令完成任务)。如,需求工程、业务建模、软件架构、系统正确性和可用性测试、性能和安全测试、设计模式、用户接口和软件度量等。课程安排了课后作业和小组项目。候选项目可参考第8节中的列表内容。

3.预期效果

(1) 能理解现有软件工程方法的动机、优点、局限、条件和适应场景等;

(2) 学会使用工具分析软件代码结构中的测试覆盖率、软件结构和API调用链等关键信息;

(3) 评价现有软件结构设计模式的好处和不足,使用验证技术来评估软件项目;

(4) 组建一个小组(三人),使用敏捷方法来开发一个学期周期软件项目,反思和总结使用敏捷开发模式的改进空间,能提出重构第一版本代码的思路,并给出具体改变后的效果;

(5) 根据小组的创意或老师提示,合理利用现有资源和参考软件模型,能使用软件用例或用户故事梳理出一个软件项目的有效需求,给用户讲明白该软件的未来蓝图和实施计划;

(6) 规划、设计、实施和评价一个软件,建立自动测试的体系,使用现代软件持续集成的工具和方法( Git and GitLab)

4.授课对象

国科大计算机科学和软件工程专业领域的硕士或博士研究生,也欢迎其他学科领域关心数据科学的研究生。

5.预备知识

中文、英文、HTML、CSS、JavaScript、Ruby、Python 程序设计语言;建议选课学生通过网络开放课程来温习这些知识。

6.讨论主题

(1)软件需求、应用场景

 软件用户在何种应用场景中解决什么问题。

 使用软件后产生效益(工作效率或效果)的示例(含具体的定性或量化指标)。

 表达软件需求的语言,研发软件的必要性和可行性;判断软件交付和运营后的价值。

(2)业务建模、数据模型

(3)软件架构、应用框架

(4)设计模式、代码重构

(5)接口设计、前端编程

(6)安全问题、防御设计

(7)性能评价、优化设计

(8)集成部署、平台运营

(9)软件验证、自动测试

7.评分标准

(1)5次课外作业(15%)

(2)课堂提问或回答问题(5%)

(3)小组项目(40%)

(4)期末考试(40%)

8.候选项目

(1)学习管理系统(Learning Management System),参考https://www.canvaslms.com/

(2)客户管理系统(Customer Management System),参考http://demo.fatfreecrm.com/

(3)答疑和讨论系统(Question Discuss System),参考 https://www.discourse.org/

(4)选课系统(Selecting Course System ),参考 https://github.com/PENGZhaoqing/CourseSelect

(5)训练股票预测模型,参考 https://github.com/PENGZhaoqing

(6)定制对话机器人,参考 https://github.com/PENGZhaoqing/RailsChat

(7)训练国际象棋机器人(用AlaphaGo框架),参考 nature 论文和开源实现

(8)训练玩魔方机器人,参考nature 论文和开源实现

(9)设计与实现一个软件生产线,参考GitHub及其生态系统(如Heroku等)

(10)自主拟定项目

9.教师简介

罗铁坚博士

中国科学院大学教授、博士生导师,中国科学院软件研究所兼职研究员、智能软件研究中心总工程师。

发表学术论文100多篇,英文论著1部,拥有30多项软件著作权和发明专利。完成20多项科研项目。获中国科学院研究生院金新德教育基金奖、中国科学院朱李月华优秀教师奖、中国科学院大学唐立新教学名师奖、中国人工智能学会《大学生智能设计竞赛》优秀指导教师一等奖。指导博士后、博士和和硕士共30多人。

研究兴趣:机器智能、数据科学、软件工程。