Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1427|回复: 0

[默认分类] 现代软件工程讲义 目录

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-25 12:18:29 | 显示全部楼层 |阅读模式
    2017年7月更新: 《构建之法 - 现代软件工程》第三版已经出版。(第三版的豆瓣讨论第二版多看 电子版, 对我的采访微博
    ****
    这是迄今为止采用《构建之法》 的情况 (很多学校采用了网上课堂的形式,可以前往围观):
      注:排名按照学校所在地大致由北向南排列, 一个学校采用《构建之法》 的情况有多种方式,包括:作为教材,作为参考书,使用课件或参考课件,采用 “做中学”的教学方法,采用有工程经验的助教帮助教学,等等。 (对,我们有老师和助教的微信群,欢迎加入)

      
       
        学校  
        任课 教师  
        学生 级别  
        博客/Github (部分)  
        部分优秀学生博客  
       
       
        东北师范大学  
        杨贵福  
        研究生  
        课程名:软件项目管理  教学博客  
        郑蕊 濮成林 演奏者
       
       
        沈阳航空航天大学
      
       张翼飞
       大三 下
       教师博客  助教博客

        薛鹏飞  Ray
       
       
        北京工业大学 / 耿丹学院  
        冯花平  
        大三  
        老师博客   
       周阳   
       
       
        北京工业大学 (本部)
      
        杨红丽  
        大三  
        助教博客  学生博客  
         
       
       
        清华大学 软件学院  
         刘强  
         大二 下  
         学生博客: http://www.cnblogs.com/juicygroup  
        ZhaoYang
       
       
        北京航天航空大学 计算机学院  
         罗杰  
        大三  
        教师博客。  学生博客列表:2014 个人2014 团队 2015  
       SkyJoker 传奇 殷鹏程 zmpy VeryBigMan 黄可嵩 刘乾
       
       
        人民大学
      
       刘青
         
        助教博客  
         
       
       
        北京电子科技学院 信息安全系  
        娄嘉鹏  
        大二 下  
        教师博客   学生博客   
        lwr  刘伟康
       
       
        天津大学 软件学院  
        章亦葵  
         研一  
        学生博客:http://www.cnblogs.com/voidsh/p/4338183.html http://www.cnblogs.com/hugozou/   
         
       
       
        石家庄铁道大学 软件工程系  
        王建民  
        大二 下  
        教师博客:http://www.cnblogs.com/wangjm1975/ 学生团队和个人博客:http://www.cnblogs.com/wangjm1975/p/4812581.html http://www.cnblogs.com/wangjm1975/p/4812559.html   
         
       
       
        齐鲁工业大学 软件工程系   
        赵培英  
         大二 下  
        教师博客:http://www.cnblogs.com/qluZhao/ 助教博客1:http://www.cnblogs.com/math/p/4567801.html 助教博客2:http://www.cnblogs.com/xiaozhi_5638/p/4490764.html 学生个人博客及Github列表学生团队博客列表  
         
       
       
        南通大学 计算机科学与技术学院  
        鞠小林  
        大三 上  
        教师博客:http://www.cnblogs.com/juking/ 助教博客:宝玉学生个人博客列表  
        苗中峰
       
       
        安徽巢湖学院  
        卜华龙  
        大三
      
        学生博客  
         
       
       
        上海海洋大学  
        葛艳   
        大三  
        教师博客  
         
       
       
        河南职业技术学院 软件工程系  
        陈红根  
        大二上  
        助教博客:http://www.cnblogs.com/gmailcs/articles/4804157.html  老师博客  
         
       
       
        四川师范大学计算机系   
        廖雪花  
        研一,本科  
        教师博客 助教博客     
         
       
       
        东华理工大学 软件工程系  
        李祥  
        研一  
        高级软件工程课 教师博客   学生博客  
         
       
       
        华中科技大学 机械学院  
        陈冰  
        大四  
        老师博客  
         
       
       
        中国地质大学(武汉)    
       范萍
         
        老师博客  
         
       
       
        武汉大学
      
       李小红

         
        教师博客  
         
       
       
        湘潭大学
      
       宋小波
         
        教师博客  
         
       
       
        福州大学 数学与计算机科学学院  
        张栋  
        大三  
        教师博客 助教博客  学生博客  
        西瓜 少棉  
       
       
        福建闽江学院  
        测试课程  
        大三  
        教师博客  考核 助教博客  
         
       
       
        广州商学院 信息工程与技术学院  
        杜云梅  
        大二 下  
        教师博客 助教博客  学生个人博客列表  学生团队作业  
         
       
       
        微软亚洲研究院 创新人才培训班 (各个学校的优秀学生)  
         
        大四  
        团队博客代表  2015年 2014年 2012年  2011年  
         
       
      

      
    软件工程牵涉的范围很广, 同时也是一般院校的同学反映比较空洞乏味的课程 (不信就请看 微博上的软工)。 但是软件工程的技术对于投身IT 产业的学生来说是非常重要的。 经过几年的探索, 我总结了在16周的时间内让同学们通过 “做中学 (Learning By Doing)” 掌握实用的软件工程技术的教学计划。这几年教书的过程中, 我学习了一些 好老师的建议,  还有些教课的心得, 也对中国大学的 IT 教育有些反馈。近两年高等教育有不少创新的尝试, 希望这个软件工程课也能实践一些创新的点子。  
    在正式编辑出版前,这套讲义在下面的学校正式课程中运用过:
      

    2007 – 2010   清华大学理论计算机科学研究中心 (姚班) 主要是大四上学期
    2009,  2012    北航计算机系  大三上学期
    2010,2011,2012 秋季   中科大-微软 计算机实验班 (微软亚洲研究院创新人才班 ) 大四上学期         
    还有在北大合作的教学:  
    2007 - 2009 北京大学软件学院 研究生课程 (课程名叫 - 微软软件实现技术, 我是讲师之一, 只讲了本课件的少部分内容)

    这套讲义有这样的特点:

    理论和实践相结合,讲现代理论,同时讲体现理论的工具
    结构紧凑,个人项目/结对项目/团队项目紧密配合, 能在16 周讲完。
    面向实战,强调做中学 (learning by doing), 项目都公开发布,用户数量和反馈是项目重要的评价标准。
    讲人在软件工程中的不同角色和作用 (软件过程, 软件工具, 软件人员的技术能力和职业能力)
    有丰富的材料给教师/TA 使用 (见下面的 “学生作业”)
    练习量大 (其实学生工作量和国际一流大学相仿), 内容多:  参考书 (20 本)

    讲义内容:   
    1. 概述

    课程教学方法 - 这门课应该有什么样的师生关系?
    习而学的软件工程教育 - 怎么教工程类的专业?
    软件工程概述
    项目剖析 微软学术搜索项目 10个版本的历程
    练习与讨论

      
    2. 个人开发技术

    PSP: Personal Software Process,   
    程序效能分析
    单元测试    (在最小的编程单元上保证正确性)  &  回归测试   (保证程序在修改的过程中, 原有的功能保持稳定 )
    技能的反面
    练习与讨论 (个人技术) &  练习与讨论 (工程师的成长),软件工程师能力自我评定表

    3. 两人合作
        a. 代码规范和代码复审
        b. 结对编程, 有记载的最早的结对编程发生在 1987年3月…  
        c. 给人提意见的方式 - 送一个汉堡包
        d. 练习与讨论
      
    4. 软件过程/方法论

    各种方法概述  
    敏捷方法:  酒后的敏捷,  敏捷宣言敏捷原则
    Scrum/Sprint,  TDD, FD  
    MSF-Agile
    支持软件过程的工具 (TFS)   
    练习与讨论: 团队与流程  &  敏捷 & MSF

    5. 团队中的角色与合作

    团队的类型团队合作的阶段
    团队成员不同的投入和心态  - 猪/鸡/鹦鹉   
    角色 – PM   PM Spec, PM 的成长, 项目管理的细节    练习与讨论: PM
    角色 – Dev   Dev 的成长  软件开发不是闭卷考试   顶级程序员的心得–Coders at Work   
    角色 – QA & Test 质量保证和测试, QA 的闰年问题QA/Test 的角色和分工,练习与讨论: 测试质量保证


      
    6. 需求
    a. 项目需求分析和建议   
    b. 用户调研的方法
    c. 目标和远景  - 反面例子画扇面
    d. 计划阶段, 软件估计 (1) (2)  
    e. 场景/典型人物,  spec
    f. 练习与讨论
      
    7. 设计和开发   

    基本的分析和设计方法
    模块API 的设计 (例子: elevator design,  mvc/mvvm,  interface)
    开发阶段的日常管理
    用户界面,用户体验的设计   
    源代码管理 - 你的团队能做到这些么?
    练习与讨论: 场景设计  &  软件设计与实现 & 用户体验  

    8. 稳定阶段, 发布和维护
    a. 测试的计划和执行
    b. 从CC 到 ZBB, 到最后的软件发布
    c. 练习与讨论
      
    9. 软件和 IT 业的创新
        a. 创新的迷思  连载   (1) (2) (3)  
       b. 创新 - VCD 的故事
        c. 创新的时机
        d. 魔方的创新   
        e. 如何提出靠谱的项目建议 (NABC)  
        f.  创新的出路 - 走进作坊;  创新的招数
        g. 练习与讨论
      
    10. 软件项目的管理

    绩效管理
    代码量和树叶量
    Postmortem - 事后诸葛亮会议  
    软件工程师的职业道德
    人的问题同学的感想
    练习与讨论

    附录, 参考书, 论文阅读

    教材 (3本, 同学选择一本, 同时借阅另外两本) :
    1. Rapid Development  Steve McConnell (ISBN 1-55615-900-5)
         中文版 快速软件开发斯蒂夫·迈克康奈尔 著 译者: 席相霖 等 ISBN 9787505372856
    2. Code Complete (2nd Ed)Steve McConnell ISBN: 9780735619678
         中文版 代码大全 (第二版)斯蒂夫·迈克康奈尔 ISBN: 7121022982
    3. 构建之法 - 现代软件工程 邹欣 (ISBN: 9787115369161)
    主要参考书:
         Dreaming in Code by Scott Rosenberg, ISBN: 9781400082469
         中文版《梦断代码》, 译者 韩磊, ISBN: 9787121066795

      
    -------
    软件工程的作业
    -------
    很多老师反映软件工程的作业题不好出,学生做的“大作业”也是了无新意。怎么办?师生们身处轰轰烈烈的软件产业的大环境,但是在软件工程课上做的题目却是非常简陋,没有起到应有的作用,这的确是一个很有讽刺意义的事情。有很多因素导致这一结果,在这里不能详细阐述。我们看到,程序 = 算法 + 数据结构;软件 = 程序 + 软件工程,软件工程的编程作业,是不同于  “实现某个算法”  这样的算法课作业的。
    一个简单的程序通常是做这种简单的事情:
      对输入数据进行处理,并输出。
      
    此类 “程序”可以从几个维度扩展,成为很有锻炼价值的软件工程作业。下面举例说明。
      
    从数据方面扩展:
      

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

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

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

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

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

      
    从软件构建方面扩展:
      

    如果是改进一个已有的软件,怎么办?
    大多数的“程序”都是用单一的语言写的,如果软件有多个语言写成的不同模块,如何定义彼此的接口(API)?
    如果软件已经在服务中(例如图书馆信息系统,如何升级部分模块,同时尽量减少系统下线的时间?)

      
      
    个人项目:
        现代软件工程 作业 1: 个人项目     个人项目和结对项目练习 地铁    现代软件工程 作业 4: 阅读和调查作业      期末作业附加题  (同学的读书笔记
        最大子数组的和 - 及其扩展
      
    结对项目:
        四则运算扩展: 模块化,单元测试,回归测试,TDD
        动态展现程序的工作过程
        英语文件中找到单词词频
        结对和团队项目建议 - 黄金点游戏
        现代软件工程 作业 2: 结对项目  (电梯调度设计)
        现代软件工程 作业 5: 结对调查和分析作业  
      
    团队项目:
        现代软件工程 作业 3: 团队作业   
        2012 团队作业
        团队项目建议 - 英语学习 App
        现代软件工程 作业 用户体验深入调查和数量化的报告
        源代码管理的10个问题

      
    -------
    部分学生的感想:
    http://www.cnblogs.com/-OwO-/p/5116725.html
    http://www.cnblogs.com/wx1306/p/5117461.html
    http://www.cnblogs.com/malinlin/p/5058509.html
    http://www.cnblogs.com/dasusu/p/5061566.html
    http://www.cnblogs.com/maxx/p/5060565.html
    http://www.cnblogs.com/lizanqirxx/p/5066399.html
      
    现代软件工程系列 学生精彩文章(7) 宝贵的教训
    现代软件工程系列 结对编程 两周写好3D 陆战棋  
    现代软件工程系列 学生的精彩文章 (6) 我们其实还不懂互联网  
    现代软件工程系列 学生的精彩文章 (5) 其实还是人的问题  
    现代软件工程系列 学生的精彩文章 (4) 为用户服务  
    现代软件工程系列 学生的精彩文章 (3) 如何在Bug 不断的情况下还能保持平常心... [zz]  
    现代软件工程系列 学生的精彩文章 (2) 到底是谁的 bug?  
    现代软件工程系列 学生的精彩文章 (1)
      
        2012 部分北航学生的感想:  

      
       
        http://www.cnblogs.com/jessica-song  
       
       
        http://www.cnblogs.com/DOOM-lyx/  
       
       
        http://www.cnblogs.com/yinpc/  
       
       
        http://www.cnblogs.com/Tjamie/  
       
       
        http://www.cnblogs.com/felix1993  
       
       
        http://www.cnblogs.com/linlu1142/  
       
       
        www.cnblogs.com/coolcrow/  
       
       
        http://www.cnblogs.com/DOOM-zxz/  
       
       
        http://www.cnblogs.com/xyqhello  
       
       
        http://www.cnblogs.com/quanfengnan  
       
       
        http://www.cnblogs.com/DOOM-cbx/  
       
       
        http://www.cnblogs.com/honghong1191  
       
       
        http://www.cnblogs.com/ieverx  
       
       
        http://www.cnblogs.com/Highestop/  
       
      

      
      
    所有讲义, 作业都可以分享给教师用于教学, 只要注明引用来源即可,  不必事先取得同意。
      
    欢迎反馈和意见。
      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-19 15:30 , Processed in 0.375851 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表