云计算与软件工程

想找点云计算的网课来看看,无意中发现了这个不错的mooc:CS169.1X 云计算与软件工程。内容涵盖云计算概念,软件工程的相关理念,以及如何通过云计算满足软件工程的需求。遂打算深入学习一下,并做了如下笔记(持续更新)。

如课程所讲,软件工程是一个需要终身学习的概念,这其实更应该是一个程序员的核心技能,但往往我们都对此忽视,往往注重于单一的技能的术,而忽视最根本的道,即使是软件工程专业课,也只是沦为简单的概念背诵。希望可以通过这个课程,这个笔记,时刻提醒自己勿忘核心。

软件工程概论

  • SaaS: 软件即服务

    • 无需担心安装/环境配置
    • 无需担心数据丢失
    • 易于协作同样数据
    • 中心化数据
    • 统一硬件系统环境:兼容性
    • 易于更新:中心化
  • SOA:面向服务架构

    • 系统由能提供服务的独立模块组成,每个模块通过接口提供服务,模块间通过接口进行通信
    • 设计时最先设计接口
  • SaaS‘s Demand On infrastructure

    1. Communication: 服务可交互
    2. Scalability:可扩展性(增加规模服务
      • 集群
    3. Dependability:可靠性
  • 软件质量

    • 遗留代码:遗留的功能可用的代码,质量差 不算失败
    • 质量标准:可用/易于开发调试修改
    • 测试
      • 检验与确认:do the thing right and do the right thing
      • 黑盒测试与白盒测试
      • 单元/模块/集成/系统测试
      • 回归测试:测试修改部分
      • 测试覆盖率:覆盖率高不等于测试好
  • 生产力因素

    • 代码简洁
      • 代码简短易于阅读
      • 抽象等级高:高级语言
    • 代码合成
      • code by example
    • 复用
      • 复用函数
      • 标准库
      • 对象/类
      • 设计模式
    • 自动化工具

开发过程

  • plan-and-document

    • 模型

      • 瀑布模型
      • 螺旋模型
      • RUP
    • 问题:

      • 需要强大的PM
      • 沟通成本
      • 文档驱动
  • 敏捷开发

    • 四大宣言:个体协作/能用的软件/客户沟通/拥抱变化
    • 极端编程:如果某个事是好的,则做到极致/最大化
    • 测试驱动开发
    • 行为驱动设计
    • Scrum开发
      • team size
      • role:master PO
      • 3个问题
      • 解决冲突
  • 结对编程

    • driver
    • observer

Ruby

课程的核心内容为利用Rails on Ruby搭建SaaS服务,所以Ruby也是一个重点。因为个人而言,编程语言最好的学习方法还是动手去做,因而就没有记录笔记了。下面为一些可能会用到的链接和个人的一些见解。

语言特点

列举比较特别印象深刻的或者是其它没有的

  • 究极面向对象:一切变量皆对象,一切函数皆方法
  • 诗歌式编程:因为调用均方法=>可省略括号=>像语句一样
  • 字符串/正则良好支持
  • 元编程与反射:
    • 元编程:编写代码的代码
    • 反射:运行时动态获取对象属性方法
    • method_missing当方法在类中未定义时,进入该方法
  • 函数式编程
  • duck-typing: 能响应相同方法的被视作相同的类
    • Module:为实现特定方法的实例提供相应的方法

相关链接

  • Ruby学习 菜鸟教程

  • 课程编程作业

    1. 环境配置(待填坑 : 大坑!

      • 官方建议使用云端cloud9框架的IDE服务已被收归AWS并且停止原服务,使用还得绑定信用卡
      • 本地自行搭建的cloud9服务也无法按照官方仓库wiki配置方法进行配置
      • 文档没有写清楚最重要的Ruby版本要求以及相关package的
    2. hw-ruby-intro

BDD和TDD

BDD:行为驱动设计

  • User Story:
    • As role
    • to do what
    • So that achieve
  • 评价准则:SMART
    • Specific & Measurable:场景具体且易于测量/评价
    • Achievable:1轮迭代可实现
    • Relevant:具有实现价值
    • Timeboxed:具有时间界限
  • 流程:与用户交互生产user story card,并将其添加到待办项。根据优先级与难度选取用户故事进行实现
  • 任务点数评价用户故事的难度,通常投票决定
  • 使用Tracker可以追踪用户故事完成情况及开发速率

TDD: 测试驱动开发

  • FIRST原则:针对单元测试
    • Fast
    • Independent
    • Repeatable
    • Self-Checking
    • Timely
  • RSpec

SaaS应用结构

  • C/S结构
  • 3层结构
    • Web Server
    • App Server
    • Database
      • ActiveRecord:model自己知道如何CRUD
      • DataMapper:通过mapper进行对象与数据库记录的映射
  • MVC
    • view: template view | transform view
    • 陷阱:fat controller/view
  • RESTful

Rails

  • MVC
    • Model:ActionRecord
    • Controller:通过router转发到控制器
    • View:haml
  • 约定优于配置:符合约定不需配置文件,仅在不符合约定时配置文件
  • 调试:RASP
    • print
    • log
    • interactive

敏捷开发

质量度量

  • Code Smells
  • SOFA原则
    • Short
    • One:代码只做一件事
    • Few Arguments
    • Abstract:抽象在同一等级
    • Reek工具可分析
  • ABC评分:变量,分支,条件数量
    • 通过flog评分,超过20有问题
  • 通过路径数量评分