跳到主要内容

软件工程

软件概念、工程目标、软件发展不同阶段、软件危机

历史

从程序---软件---工程 开始软件更像是艺术家的创作,重在挖掘计算机的潜力。 航空与软件的相似

软件分类: os,app

软件危机: 易变性、复杂性、不可见性、服从性, 提升编程效率

软件工程目标

软件的成功以商业的成功为恒量

  1. 开发一款符合用户需求的软件
  2. 在某一时间之前
  3. 软件可维护与可持续发展

知识拓展

游戏是如何运行的? UI + 逻辑 + DB

软件工程师的个人成长之路

初级,中级,高级 需求分析---分析设计---评估工作量-- 可行性分析--代码实现--测试--维护

能力发展:

  1. 积累开发相关知识
  2. 积累问题领域知识
  3. 通用软件设计思想、工程思想
  4. 提升职业技能:发表意见、组织、管理、沟通交流、
  5. 实际成果

职业发展 软件开发是一门工程、艺术、手艺

软件质量的恒量

代码量、规模-功能点、质量、时间

PM 的故事

product Manager , Project Manager , Program Manager

  1. product Manager: 长颈鹿(高瞻远瞩)
  2. project Manager: 狐狸(思维缜密、注重时间成本)
  3. Program Manager:鹰(集大成者)

微软 PM 的来历(保罗-艾伦) 交流成本的上升需求,开发人员更专注于技术性

PM 的技能和工作要求 开发和测试外的工作同行重要。

  • 功能类设计
  • 对商业和客户非常了解
  • 广泛经验,知识、商业、拓展能力

PM 最重要的任务

  • 完成目标
  • 平衡资源
  • 创建、维护软件规格说明书

PM 能力要求

  • 沟通理解、快速学习
  • 分析、管理、(重要、紧急)
  • 专业能力
  • 自省、总结

PM 风险管理 人员、技术、流程、环境

  • 流程(成本、预算、需求)
  • 环境(政策、法律、市场) 解决风险、承受风险、规避风险 软件开展要有前瞻性。(竞争对手以及摩尔定律) 应急计划、把风险变为机遇

代码规范

团队精神 风格规范:简明、易懂、无二义 设计规范:函数、类、(能封装就不要用类,最小开销)

结队编程

why how what 例子: 船长、大副、二副 起因:代价高、专业、高速 优势:攻坚、审核、避免英雄主义 注意事项:3/4 小时互换 how:

  • 阻击手
  • 观察手
  • 交换,时间,不存在上下级关系,好的环境

沟通的方式: 断言、共识(桥梁)、说服、吸引

团队

高效率、高水准的完成任务

团队模式:

  • 主治医生
  • 明星模式(主治医生的极限)
  • 社区
  • 秘密团队
  • 特工
  • 交响乐团(比较无聊,适合大型软件,adobe windows )
  • 爵士音乐模式
  • 功能团队模式(微服务)
  • 官僚模式

流程模式:

  • 敏捷
  • 瀑布
  • 改进式瀑布
  • RUP 统一模型(集大成者)、UML 统一建模语言、里程牌(每个阶段是一个小迭代)
  • 老板流程
  • 渐近发布

管理相信一线员工的直觉,要能给钱

如何解决分岐

  • 独裁、投票、咨询(打击团队信心)、轮流决策、达成共识

萌芽--磨合--规范化--创造--高度自治

MSF 微软解决方案框架-方法论(9 条原则)

  1. 信息公开
  2. 共同远景
  3. 充分授权与信任
  4. 各司其职(管理、开发、测试、发布、体验)
  5. 重视商业价值和渐进价值
  6. 保持敏捷、预期、和变化
  7. 投资质量
  8. 经验分享
  9. 与客户一起工作

绩效管理

猪、鹦武、鸡

敏捷开发

燃尽图

用例与规格说明书 技术规格说明书

功能驱动开发

  1. 问题领域专家(架构、主程) 输出:总体模型,E-R 图,数据流,事件流

  2. 功能、业务活动之间关系

  3. 开发计划

  4. 方法、类属性

文案的重要性

代码复审,效能评估