(1)软件开发过程是什么?软件开发过程是按照软件工业化的标准定义的心之所向,所向披靡➢在软件开发中必须具有的一系列过程规范;➢软件开发过程是定义在软件中的软件需求、软件设计、软件编码、软件测试、软件部署的实现目标和规范化的管理方法论;➢软件开发过程是保证软件工业化生产的法典;➢软件开发过程做的是:定义标准和为了达到标准的路;➢软件开发过程要改善的是:软件开发的效率和质量;➢软件开发过程的实现最重要的是:人。
(2)大多数软件项目失败的原因:a)不完整、不现实的项目需求b)对需求的变更束手无策c)脆弱的架构d)采用不成熟的技术e)测试的不充分性f)拙劣的进度计划和评估g)缺乏资源h)不具备项目管理方法i)缺少管理层的支持(3)软件工程的三个要素:方法、工具和过程(4)A software project failed ifIt is delivered lateIt is runs over the budgetIt does not satisfy the customer’s needIt is of poor qualityClassical software development methods have not solved software crisis.传统的软件开发方法没有能够解决软件危机。
(5)A software engineer’s job:a)Make a working plan.制定工作计划b)Carry out it.(Do their work according tothis plan)按照此计划工作c)Try his/her best to producehigh-quality products.尽最大努力生产出高质量产品(6)3 Key aspectsa)Quality products 高质量产品b)Expected costsc)On agreed schedule(7)Summary of PSPPSP is a framework designed to teach software engineers to do better workEstimate and plan →track →improvequalityQuality methods take time to learn and practice,but it will help you inyou engineering careerEstablish goals →measure quality →understand the process → change and reure process → measure & analyze the results →recycle improvingIdentify the tasks you do(8)敏捷软件开发宣言个体和交互胜过过程和工具可以做到工具的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划敏捷开发的原则:1、我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
尽早交付具有部分功能的系统和质量系统之间具有很强的相关性2、即使到了开发的后期,也欢迎改变需求。
敏捷过程利用变化来为客户创造竞争优势。
关于态度的声明,敏捷过程的参与者不惧怕变化,努力保持软件结构的灵活性。
3、经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间越短越好。
关注的目标是交付满足客户需要的东西。
它们是敏捷实践区别其他过程的特征所在。
4、在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
有意义的、频繁的交互,必须对软件项目进行持续不断地引导。
5、围绕被激励起来的个人来构建项目。
给他们提供所需要的环境和支持,并且信任他们能够完成工作。
人被认为是项目取得成功的最重要的因素。
6、在团队内部,最具有效果并且富有效率的传递信息的方法就是面对面的交谈。
首要的、默认的沟通方式。
7、工作的软件是首要的进度度量标准。
敏捷项目通过度量当前软件满足客户需求的数量来度量开发速度。
8、敏捷过程提倡可持续的开发速度。
责任人、开发者和用户应该能够保持一个长期、恒定的开发速度。
不是50米短跑,而是马拉松。
以快速但是可持续的速度行进。
9、不断关注优秀的技能和好的设计会增强敏捷能力。
高的产品质量是获得高的开发速度的关键。
保持软件尽可能的简洁、健壮是快速开发软件的途径。
10、简单—使未完成的工作最大化的艺术是根本的。
不是构建华而不实的系统,更愿意采用和目标一致的最简单的方法。
11、最好的架构、需求和设计出自于自组织的团队。
任务不是从外部分配给单个团队成员,而是分配给整个团队,然后再由团队来确定完成任务的最好方法。
12、每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
敏捷团队会不断地对团队的组织方式、规则、规范、关系等进行调整,环境变化。
XP:Values of XP : 价值、内容、关系munication2.Simplicity3.Feedback4.CourageXP编程实际上是由这四个价值所驱动的,而不是实践所驱动的,也就是说,如果实现某些XP实践,而得不到这四个价值的话,便失去了XP编程的意义。
(1)简单和沟通之间有一种奇妙的相互支持的关系。
沟通得越多,就越清楚哪些工作需要做并能更加确信哪些工作不需要做;系统越简单,需要的沟通越少,但沟通会更加全面。
(2)沟通、简单和反馈是相互联系的;反馈越充分,沟通越容易,系统越简单,就越容易测试盒提供反馈。
(3)沟通支持勇气,因为它带来了高风险、高回报的试验的可能性;(4)简单支持勇气,因为有了一个简单的系统,你就可以比以前勇敢很多,你无意间将其破坏的可能性也大大减少。
(5)勇气支持简单,因为只要你有可能简化系统,你就会尝试。
(6)反馈支持勇气,因为如果你按下按钮就能够看到测试结果通过(或不通过,这时你可以将代码扔掉),那么即使对代码进行根本的改动你也会感觉安全得多。
5 个 Basic Principles:1.Rapid feedback 快速反馈:指开发人员通过短的迭代周期,得到反馈信息,并迅速查验他们前面的工作是否满足客户要求。
2.Assume simplicity 假定简单:指将系统开发中的每个问题以尽量简单的方法来解决。
没有人能够准确预知未来的需求,因此设计只需要满足现阶段的需求即可。
3.Incremental change递增改变:指用一系列的小改变来逐步解决一个问题。
这一原则可用于计划、开发和设计等。
4.Embracing change 拥抱变化:指在解决紧迫问题时,采取的一种包容的策略。
程序员要明白客户的要求并不是固定的,因此功能的优先级和功能需求都是在变化的。
5.Quality work优质产品:指工作和产品的质量是不容忽视的,不可以因为时间而放弃质量,并作出让步。
XP的项目过程包括以下6个阶段:答:考察阶段、计划阶段、多次反复的发布产品阶段、生产化阶段、维护阶段、死亡阶段XP的最佳实践:答:1、计划2、发布小版本3、隐喻4、简单的设计5、测试6、重构7、结对编程8、集体所有权9、持续集成10、40-hour week 11、现场客户(客户作为团队成员)12、编码标准 13、开放空间 14、Just rules结对编程的优点:1、所有的设计都是由两个人讨论决定的;2、系统的任何一个部分都至少有两个人熟悉,避免了由于人事更替造成的问题;3、减少了忽略编写测试用例的几率,因为结对者会互相提醒对方;4、在编写过程中与不同的人结对可以进一步增强知识与经验的共享;5、所有代码都随时得到检验;6、两个程序员可以同时关注操作层面和理论层面,加强了程序的设计。
The Rules and Practices:planning、designing、coding、TestingSCRUM:What is Scrum?1、Scrum是一种灵活的软件项目管理过程,可以帮助驾驭迭代,递增的软件开发过程。
2、Scrum于1995年由Advanced Development Methodologies, Inc提出,并在2001年“敏捷联盟(AgileAlliance)”形成后受到了更多欢迎。
3、Scrum提供了一种经验方法,它使得团队成员能够独立地,集中地在创造性的环境下工作。
4、它发现了软件工程的社会意义。
这一过程是迅速,有适应性,自组织的,它代表了从顺序开发过程以来的重大变化。
5、Scrum认为软件的开发不应使用和一般制造业相同的方法,也就是不应采用一种反复的模式。
这种重复使得输入和输出参数更加容易预测和描述,但这并不是当今软件工程的主要挑战包括上市时间,投资回报,以及影响顾客的需要等。
总结一下:(1)Developed for managing system development process.用于管理系统开发过程。
(2)An empirical approach applying the idea of industrial process control theory to system development.将工厂过程控制理论应用到系统开发上的一种经验方法。
(3)Reintroduces the ideas of flexibility, adaptability and productivity.再次把灵活性,适应性和高产性引进到系统开发过程当中。
Process 的三个阶段:计划阶段、中间开发阶段、结束阶段(1)计划和体系结构设计(确定性过程)a)将backlog(急待完成的一系列任务,包括:未细化的产品功能要求,bugs,缺陷,用户提出的改进,具竞争力的功能及技术升级等)按优先级排序形成backlog列表,根据该表和风险评估制定产品交付基线;b)建立系统体系结构(如为已有系统改进,则只作优先分析、调整),将backlog项按照高内聚低耦合的原则分解为一系列问题包(Packets,每个packet是一组对象或构件的集合),依据同样原则相应的划分若干个开发小组(Scrum小组),分配各小组合适的Backlog项或问题包,建立开发运行环境.(2)Sprint(经验性过程)该过程由若干个迭代的冲刺活动组成,直到风险评估认为产品可交付为止。
一个Sprint是在限定时间段内(Sprint周期,通常为1-6周,可在前一个Sprint结束时调整)的一系列开发活动(包括分析、设计、编码、测试等),每个Scrum小组并行开发且必须步调一致(在一个Sprint结束后,均需完成所分配的backlog 项并有可执行的产出)。