wiki:ASE2016

2016年秋-高级软件工程

基本课程内容+实验 - 课外阅读 - 专业提升

特别说明:2016-2017学年预计会在第一学期和第二学期各开设一次高软,第一学期的高软面向专业基础薄弱、缺少编程经验或仅有较小规模代码编写经验的同学,而且仅要求具有C语言和数据结构基础;第二学期的高级软件工程对专业基础和学习能力要求较高,要求边学习新语言和框架边按要求进行应用开发。

课程安排:课程内容分为两个子课程,《C编码实践篇》和《分析设计与过程管理》,其中《C编码实践篇》以在线MOOC方式授课,线下一对一检查作业,《分析设计与过程管理》通过课堂教学方式+项目一对一检查方式进行。

上课地点:明德楼239 实验检查地点:思贤楼303

课程适用对象和先修课程要求

  • 本课程适用于本科高年级、研究生低年级的同学及相关从业人员学习参考之用。
  • 本课程要求学习者具有专业计算机软件基础知识和技能,比如C语言与数据结构、面向对象技术基础等。

课程实验环境

本课程主要实验都在Linux环境(实验楼)下演示,如果您之前从来没有接触过Linux系统或者不熟悉Linux Shell的基本命令,请您参考Linux GetStarted

代码编辑和阅读的常用工具:JetBrains ToolboxVim\Emacs(Linux),Sublime Text\UtraEdit?\SourceInsight?(Windows)

项目托管平台coding.net 版本控制工具git

原型设计工具:墨刀 UX-App Axure Proto .......

腾讯云通过学生认证申请到免费主机

基于react的mobile.ant.design,使用react的童鞋也可以向这里https://coding.net/u/mengning/p/Oneness pull requset

基本课程内容+实验

《C编码实践篇》的内容参见http://mooc.study.163.com/course/USTC-1000002006

《分析设计与过程管理》的内容如下:

  • 线下课程作业二(11月5日前三选一,选择第一个的还是三选一)
    • Demo + Code Review
      • 【必做】每个用户都有一个通过用户ID(微信服务号openid)可以存取的用户信息表(mongodb json文档),即查看个人名片
      • 课程子系统,查看课程列表、查看课程(包括课程二维码)
      • 用户子系统,查看联系人列表,添加联系人(通过扫描个人二维码)
      • 群聊子系统,查看群聊列表(暂定动态菜单),查看群聊消息和发消息,参考meteor提供的whatsapp范例
    • UP Modelling
      • 完成一份基本完整的分析与设计建模文档
    • Product UI Protype
      • 完成一版动态UI原型和一份ppt文档解释产品设计思路
  • Designing the Architecture 1 2
    • Most design work is routine design, solve problem by reusing and adapting solutions from similar problems
    • Some design problems have no existing solutions,Designers must decompose to isolate key problems
    • architectural views:
      Decomposition view
      Dependencies view 
      Generalization view
      Execution view
      Implementation view
      Deployment view
      Work-assignment view
      
    • Architectural Styles and Strategies
    • Achieving Quality Attributes
      Modifiability
      Performance
      Security
      Reliability
      Robustness
      Usability
      Business goals
      
  • Design Patterns
  • Modeling the Process and Life-Cycle
    • Waterfall model,V model,Prototyping model,Phased development: increments and iteration,Spiral model,RUP,Agile methods
    • Static model and Dynamic model,prescriptive and descriptive process
    • 我们自己的编码开发过程是什么样?从hello world开始的学编程,到编写大一点的程序时利用伪代码或代码框架,都体现了打草稿约束我们的思路并逐步细化优化(增量与迭代)的过程,从这一点上来讲,程序员与画家或建筑设计师的工作流程是类似的。
    • 上帝也在打草稿,3个月内受精卵逐步演变为胎儿,这一时段最易流产。与带原型的瀑布模型是否比较相似。
    • if you don't know where you are ,a map won't help.(Watts S.Humphrey)在繁琐的过程控制中迷失了方向,敏捷方法应运而生。
    • RUP - 用例驱动,以架构为中心,增量且迭代!其中不也是打草稿的思想吗?
    • 草稿即作品!就像画画没有画完的时候
    • DevOps
    • 轻松理解CMMI
    • Scrum简介
  • Planning and Managing the Project - 1-2-3-4
    • People - 项目人员包括项目参与者、项目负责人、软件项目组,协调和通讯,人员的角色特征和工作风格;
      • 根据在项目中扮演的角色不同,对能力(技术能力、交流能力和管理能力等)和经验要求不同;
      • 工作风格:内向-外向,感性-理性,各不同工作风格的人最优先考虑的问题的相关信息?胆汁质、粘液质、多血质和抑郁质,各不同气质特点的人对问题的反应速度及情感表达方式有何不同?。
      • 人与人之间的交流成本:如果给一个本已延期的项目增加人手只会使项目延期更多。
      • 项目组织方式,高度结构化和松散结构化,首席程序员制(chief programmer team)和忘我方法(egoless approach)
    • Problem - 软件范围(见后面章节,主要是需求分析)、问题分解(见后面章节,主要是设计)
    • Process - 合并问题和过程,过程分解、工作量估算、风险管理、进度跟踪等
  • Chapter-7 Writing the Programs
    • Localize input and output
    • Employ pseudocode
    • Revise and rewrite, rather than patch
    • Reuse
    • Things to consider when writing a code
      • organizational standards and guidelines
      • reusing code from other projects
      • writing code to make it reusable on future projects
      • using the low-level design as an initial framework, and moving in several iterations from design to code
    • 代码规范与代码复审
  • Chapter-8 Testing the Programs
    • It is important to understand the difference between faults and failures
    • Integration testing strategies
    • The goal of testing is to find faults, not to prove correctness
  • Testing the System
    • Regression testing
    • Configuration management
    • 作为开发者您希望怎样的配置管理和测试管理能最大化提高开发者的工作效率?
    • 可靠性稳定地增长但无法预测下一次失效时间
  • Delivering the System
    • Considering the Audience in Training and Documentation
  • Chapter-11 Maintaining the System
    • Software does not degrade or require periodic maintenance,However, software is continually evolving,so Maintenance process can be difficult.
    • The more a system is linked to the real world, the more likely it will change and the more difficult it will be to maintain
    • Impact analysis builds and tracks links among the requirements, design, code, and test cases
    • Software rejuvenation involves redocumenting, restructuring, reverse engineering, and reengineering
    • 我们的设计和开发工作大多都是在维护重用已有的软件

课外阅读

专业提升

Last modified 12 months ago Last modified on 11/24/16 17:26:43

Attachments (5)