什么是过程:一个用来产生某种输出有关的活动、约束和资源的步骤序列,即一组有序的任务.为建造高质量软件需要完成的任务的框架,一个过程通常涉及一组工具和技术。
软件工程和软件过程的区别:一个软件过程包括从软件的计划、需求分析、软件设计、程序编码、软件测试、运行和维护的过程(强调活动)。但软件工程还包含该过程中应用的技术一一技术方法和自动化工具。更重要的一点,软件工程强调工程性,即是有创造力、有思想、有技术和知识,在成熟的软件过程框架中进行的。
软件过程模型:也称软件开发生命周期(SDLC, System Development LifeCycle )或者软件工程范型(process paradigms),是软件过程的简化表示。每个过程模型都是从一个特定的侧面表现软件过程,只提供过程的部分信息。通用过程模型是软件过程的高层和抽象描述,能用于解释不同的软件开发方法,可以视作一种过程框架。
三种常用的软件过程模型:1、瀑布模型是最早的工程过程模型之一。瀑布模型是计划驱动的软件过程的一个例子,至少应该在软件开发开始之前对所有的过程活动进行计划和进度安排。原则上后续的阶段在前一阶段结束前不应该开始,意味着只适用于嵌入式系统(硬件不灵活,将软件的功能决策推迟到开发时通常是不行的)、关键性系统(在实现阶段修复规格说明和设计中与安全相关的问题通常非常昂贵、航空母舰载人航天之类的)、大型软件系统(多家企业合作共同开发,一开始就需要完整的规格说明使不同的子系统可以独立开发,又能集成)。
在软件生存周期的瀑布模型中,一般包括可行性分析、需求分析、设计、编码、测试、维护等阶段。需求分析阶段出错对软件的影响对大。
瀑布模型的不足:不能适应需求的动态变更
选择瀑布模型的条件:应用场景:
在开发时间内需求不变化或变化较少的项目;
分析设计人员对应用领域较熟悉的项目;
不能轻易试错的项目;
用户使用环境相对稳定的项目;
2、增量式开发:先开发出一个初始的实现,然后从用户那里获取反馈并经过多个版本的演化直至得到所需要的系统。反映了我们解决问题的方法。
增量模型(Incremental Model):根据需求规模说明书将系统按功能分解成若干个子系统。开始开发一个子系统的功能,经过设计、实现、集成、测试后交付使用,然后再开发其他子系统,再加入已有的系统中,逐渐构成能完成全部功能的完整系统。系统的每一个增量或版本包括用户需要的一部分功能。分批逐步向用户提交产品,每次提交一个满足用户需求的可运行的产品。
增量与螺旋模型:增量倾向于开发前各个增量或者功能大概是知道的;如果开发前不太清楚,可能风险比较大,而螺旋模型快速原型的特点、也有瀑布模型的特点,最主要它引入了风险分析。在出现风险的时候及时停止。
判断:
增量式开发可以是计划驱动的,也可以是敏捷的,也可以是混合的。(Y)
计划驱动的增量式开发中,系统的增量早期是确定好的,后面的增量取决于进度和客户优先级。(N)
增量开发优点缺点:降低了实现需求变更的成本。快速得到客户的反馈意见。早交付,利于客户尽快从软件中获取价值。|||过程不可见,不利于管理人员掌握进度。系统结构会逐渐退化。
选择增量模型需要具备的条件:应用场景:在整个开发过程中,需求都可能发生变化,客户接受分阶段交付产品的项目;分析设计人员对应用领域不熟悉的项目;中高等风险项目;用户愿意参与到整个开发过程中的项目;使用面向对象语言或第四代语言开发的项目;软件公司自己有较好的类库,构件库;大型软件系统。开发周期较长(超过1年);分批投资的项目.
3、(面向复用的软件工程)集成与配置:
在大多数的软件项目中,都存在一定程度的软件复用。面向复用的方法依赖于一个可复用的软件构件库以及一个用于构建组装的集成框架。
三类经常复用的软件构件:1、独立应用系统,集成时需要调整和适配。2、构件或者开发包(如Java Spring框架的包)3、按照服务标准通过互联网远程调用的Web服务
集成与配置的优缺点:降低开发量,降低成本,降低风险|||不能完全满足客户的真实需求。可能失去对系统演化的控制,因为组件可能是第三方的,版本及功能不受控制。
应对变化:对于所有的大型软件项目而言,变化都是无法避免的。变化导致重新做,叫返工(rework)。
降低返工的两种思路和具体方法:1、变化预测=》系统原型。2、容忍变化=》增量交付
原型:是一种软件系统的早起版本,用于演示概念、尝试候选设计方案、更好地理解问题以及可能的解决方案。控制成本、可以在软件过程的早期试用原型系统。
建立原型的主要原因是为了解决在产品开发的早期阶段不确定的问题,利用这些不确定性来判断系统中哪一部分需要建立原型和希望从用户对原型的评价中获得什么。原型可以使他们的想象更具体化,有助于说明和纠正这些不确定性,总的来说通过原型法可以很好的减少项目风险。
原型化方法是用户和设计交换最频繁的方法。
快速原型模型主要特点之一是及早提供全部完整的软件作品
软件原型可以帮助预测变化:
需求工程过程中,帮助需求抽取和确认;
系统设计过程中,可以探索解决方案、GUI开发
增量式交付:采用增量式开发,制定一系列的交付增量,每个增量提供系统功能的子集,按照增量的优先级逐步交付给客户。
增量式交付的优缺点:1.客户可以将早期的增量作为原型,从中获取后续需求的经验。2.客户无需等到整个系统的实现才能从中获益。3.保持了增量开发的优点,变更相对容易加入到系统中。4.最重要的部分被充分测试。|||1.替换系统时,难以迭代开发。2、难以确定全体增量所需的公共设施。3.与大型机构签订匹配的合同有困难。
过程改进:过程成熟度方法、敏捷方法到底改进什么?通过软件过程提升软件质量、降低成本、加速开发过程。
两种方法又有“冲突”:过程成熟度方法会引入与程序开发不直接相关的活动,通常会增加额外开销; 敏捷方法关注所开发的代码,并特别将形式化和文档进行最小化。