1、软件工程导论(4) 软件工程思想,思想?,http:/ 永远不可低估思想的作用 4.2 以人为本 4.3 软件开发不是一门艺术 4.4 向传统工业学习 4.5 软件工程的例外 4.6 软件工厂思想,http:/ 永远不可低估思想的作用 4.2 以人为本 4.3 软件开发不是一门艺术 4.4 向传统工业学习 4.5 软件工程的例外 4.6 软件工厂思想,http:/ 永远不可低估思想的作用 4.2 以人为本 4.3 软件开发不是一门艺术 4.4 向传统工业学习 4.5 软件工程的例外 4.6 软件工厂思想,http:/ 由智力活动所决定 软件工程是知识工程,http:/ 以人为本,尊重软件团队的
2、每一个人,调动每一个人的工作激情和创造能力,发挥每个人的潜力,知识工程的管理就是一种人性化的管理和全员参与的管理,组织的价值需要每个人的价值体现出来,本章内容,4.1 永远不可低估思想的作用 4.2 以人为本 4.3 软件开发不是一门艺术 4.4 向传统工业学习 4.5 软件工程的例外 4.6 软件工厂思想,http:/ 软件质量问题直接危害到人们的生命财产、会造成国家经济的严重损失,企业会为此付出很大的代价 艺术可以定义为“人类以创造美为主要目的的技术及其产品”,http:/ 永远不可低估思想的作用 4.2 以人为本 4.3 软件开发不是一门艺术 4.4 向传统工业学习 4.5 软件工程的例
3、外 4.6 软件工厂思想,http:/ 向传统工业学习,4.4.1 客户为导向 4.4.2 需求分析是基础 4.4.3 过程决定结果 4.4.4 持续改进过程 4.4.5 缺陷预防 4.4.6 围绕项目开展工作 4.4.7 验证和确认缺一不可 4.4.8 以架构设计为中心,客户为导向,满足客户的期望 超越客户的期望 一切从客户出发 体现在具体过程中 让客户参与到公司的质量管理中,http:/ 客户为导向是一种文化,也是一种策略和方针。,质量=客户满意度,以客户为导向,最直接体现在客户需求工作之上 对需求不重视,导致软件开发的返工率很高、成本高、质量低等一系列问题,需求分析是基础,在传统的制造业
4、,产品的每个新特性都是经过仔细推敲后才确定下来,一个惊人的数字,如果在项目执行的最后再来修正错误,那么可能比在项目的需求阶段就修正错误,多付出多少的代价?,一个惊人的数字,在项目的最后阶段修正需求错误比在需求阶段修正它要多花费200倍的代价,过程决定结果,http:/ 产品是构建于过程之中 自动化生产线就是一个很好的例子,“七人分粥”故事,质量不是检验出来的,而是构建出来的,过程活动决定了成本,http:/ IDEAL DMAIC QIP,持续改进,正是冰冻非一日之寒,不能三天打鱼、两天晒网,PDCA,http:/ 测量 分析 改进 控制,QIP,http:/ 如果第一次就把事情做对了,就消除
5、了劣质成本 相比软件测试/质量检验,更有效的方法是开展预防缺陷的活动 在开发的每个阶段实施根本原因分析,为有效开展缺陷预防活动提供依据,http:/ 不管大大小小的事情,都可以看作一个项目 把一个个项目做好了,就把整个工程做好了 围绕项目开展各项工作,围绕项目开展工作,项目,验证和确认缺一不可,http:/ we building the product right?是否正确地构造了软件?即是否正确地做事,验证开发过程是否遵守已定义好的过程规范。 确认过程:Are we building the right product? 是否构造了正确的软件?即是否正在做用户真正所需要的产品,以架构设计为
6、中心,http:/ 良好的架构设计能适应用户不同的需求、支持用户需求的改变 RUP也提倡“以架构设计为中心”的理念,本章内容,4.1 永远不可低估思想的作用 4.2 以人为本 4.3 软件开发不是一门艺术 4.4 向传统工业学习 4.5 软件工程的例外 4.6 软件工厂思想,http:/ 软件工程的例外,4.5.1 迭代 4.5.2 敏捷开发思想 4.5.3 持续构建和集成 4.5.4 永远的Beta 4.5.5 面向对象是一种思想 4.5.6 软件工程应归为知识管理,http:/ 产品开发的资金、周期和资源是有限的 软件的复杂程度不断提高,增加了项目失败的可能性,将一个产品进行分阶段处理,可
7、以尽早发现产品的市场问题或方向错误,降低风险。 对于越来越复杂、庞大的系统,多数情况下不容易一次性整体实现,而是通过分解逐步实现。 软件比较容易修改或扩充,在技术上可以保证软件迭代的可行性。,http:/ Programming极限编程,最简单的可能就是最有效的 极限编程适合 小团队 (2-10 programmers) “高风险” 快速变化或不稳定的需求 强调可测试性 格言 “沟通、简化、反馈、激励”,Kent Beck,XP Lifecycle -生命周期,TDD - Test-Driven Development测试驱动开发,TDD 流程,持续构建和测试,http:/ 借助于持续集成,绝
8、大多数缺陷在其引入的同一天就可以被发现 每日验证,包含了持续的集成验证,可以配合每日构建和持续集成的工作 在持续集成的驱动下,也加快了项目的进展 良好的开发环境和自动化测试可以保证持续构建和测试的实现,从第一天开始持续构建,永远的Beta,http:/ 2.0思想 “追求卓越、永无止境”的境界 对持续构建的发展 充分挖掘大众的智慧和体验,“永远的Beta”正在成为互联网软件开发的主流思想之一,创造一个更为灵活、发展更为迅速的软件工程环境,面向对象是一种思想,http:/ 从具体到抽象,再从抽象到具体 需求定义更彻底 改善软件的稳定性和可维护性,面向对象的编程语言,http:/ 工作是和人打交道
9、 能产生无形的智力产品,软件工程是一种智力活动,应归为知识工作和管理,是因为其符合知识工作的特点,知识管理的原则,http:/ 对于开发人员不能完全靠工作成果的量化来完成绩效考核,不能实施计件工资等,所以必须让知识工作人员管理自己,这样才能真正发挥他们的潜力 需要不断激励他们,不断指导和帮助他们,培养他们的领导力,知识管理体系,http:/ 隐性知识显性化 零散知识系统化,本章内容,4.1 永远不可低估思想的作用 4.2 以人为本 4.3 软件开发不是一门艺术 4.4 向传统工业学习 4.5 软件工程的例外 4.6 软件工厂思想,http:/ 模块化思想 4.6.2 面向构件思想 4.6.3
10、软件复用 4.6.4 中间件 4.6.5 自动化无处不在,4.6 软件工厂思想,模块化思想,“化繁为简”朴素思想的一种表现 将复杂的系统分解为相对简单的模块,对单一模块容易各个击破 新产品(系统) = 通用模块(不变的部分) + 专用模块(变动的部分) 模块能标准化和通用化,http:/ 构件是可独立配置的单元 构件的实现是严格封装的 构件可以在适当的环境中被复合使用 面向构件思想还强调程序在动态运行时构件的自动装载 ,和“软件工厂”的概念已非常接近,面向构件思想,面向构件是一种前沿的软件设计思想,将成熟的工业化生产中标准构件、组装、自动化生产线等概念引入到软件开发过程中,并吸收了软件开发的结构化方法和面向对象方法中的一些优点而形成的,软件复用,http:/ 生成方式,即对模式的复用 组装方式,中间件,http:/ 中间件可以为不同领域内的应用提供系统结构上的支持和标准的服务组件等 中间件已成为许多标准化工作的主要部分,自动化无处不在(1),http:/ 软件开发的自动化思想应该无处不在,从自动构建软件包开始,到自动传递软件包、自动部署、自动验证和测试、自动生成报告、自动发出邮件通知等,形成一个自动化的开发环境,自动化无处不在(2),http:/ & A,http:/