软件工程
软件概念、工程目标、软件发展不同阶段、软件危机
历史
从程序---软件---工程 开始软件更像是艺术家的创作,重在挖掘计算机的潜力。 航空与软件的相似
软件分类: os,app
软件危机: 易变性、复杂性、不可见性、服从性, 提升编程效率
软件工程目标
软件的成功以商业的成功为恒量
- 开发一款符合用户需求的软件
- 在某一时间之前
- 软件可维护与可持续发展
知识拓展
游戏是如何运行的? UI + 逻辑 + DB
软件工程师的个人成长之路
初级,中级,高级 需求分析---分析设计---评估工作量-- 可行性分析--代码实现--测试--维护
能力发展:
- 积累开发相关知识
- 积累问题领域知识
- 通用软件设计思想、工程思想
- 提升职业技能:发表意见、组织、管理、沟通交流、
- 实际成果
职业发展 软件开发是一门工程、艺术、手艺
软件质量的恒量
代码量、规模-功能点、质量、时间
PM 的故事
product Manager , Project Manager , Program Manager
- product Manager: 长颈鹿(高瞻远瞩)
- project Manager: 狐狸(思维缜密、注重时间成本)
- Program Manager:鹰(集大成者)
微软 PM 的来历(保罗-艾伦) 交流成本的上升需求,开发人员更专注于技术性
PM 的技能和工作要求 开发和测试外的工作同行重要。
- 功能类设计
- 对商业和客户非常了解
- 广泛经验,知识、商业、拓展能力
PM 最重要的任务
- 完成目标
- 平衡资源
- 创建、维护软件规格说明书
PM 能力要求
- 沟通理解、 快速学习
- 分析、管理、(重要、紧急)
- 专业能力
- 自省、总结
PM 风险管理 人员、技术、流程、环境
- 流程(成本、预算、需求)
- 环境(政策、法律、市场) 解决风险、承受风险、规避风险 软件开展要有前瞻性。(竞争对手以及摩尔定律) 应急计划、把风险变为机遇
代码规范
团队精神 风格规范:简明、易懂、无二义 设计规范:函数、类、(能封装就不要用类,最小开销)
结队编程
why how what 例子: 船长、大副、二副 起因:代价高、专业、高速 优势:攻坚、审核、避免英雄主义 注意事项:3/4 小时互换 how:
- 阻击手
- 观察手
- 交换,时间,不存在上下级关系,好的环境
沟通的方式: 断言、共识(桥梁)、说服、吸引
团队
高效率、高水准的完成任务
团队模式:
- 主治医生
- 明星模式(主治医生的极限)
- 社区
- 秘密团队
- 特工
- 交响乐团(比较无聊,适合大型软件,adobe windows )
- 爵士音乐模式
- 功能团队模式(微服务)
- 官僚模式
流程模式:
- 敏捷
- 瀑布
- 改进式瀑布
- RUP 统一模型(集大成者)、UML 统一建模语言 、里程牌(每个阶段是一个小迭代)
- 老板流程
- 渐近发布
管理相信一线员工的直觉,要能给钱
如何解决分岐
- 独裁、投票、咨询(打击团队信心)、轮流决策、达成共识
萌芽--磨合--规范化--创造--高度自治
MSF 微软解决方案框架-方法论(9 条原则)
- 信息公开
- 共同远景
- 充分授权与信任
- 各司其职(管理、开发、测试、发布、体验)
- 重视商业价值和渐进价值
- 保持敏捷、预期、和变化
- 投资质量
- 经验分享
- 与客户一起工作
绩效管理
猪、鹦武、鸡
敏捷开发
燃尽图
用例与规格说明书 技术规格说明书
功能驱动开发
-
问题领域专家(架构、主程) 输出:总体模型,E-R 图,数据流,事件流
-
功能、业务活动之间关系
-
开发计划
-
方法、类属性
文案的重要性
代码复审,效能评估