本文用书
《软件工程导论》第六版张海藩、牟永敏 清华大学出版社
典型表现:
(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对已完成的软件不满意的现象时有发生。
(3) 软件产品的质量往往是靠不住的。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。
(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。
来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。
软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。
供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心
为了解决软件危机,既要有技术措施,又要有必要的组织管理措施。人们可以从其他产业的工程化生产得到启示,采用工程的概念、原理、技术和方法来开发和维护软件。
软件工程是指导计算机软件开发和维护的一门工程学科。
定义:软件工程是① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;② 研究①中提到的途径。
本质特性:
基本原理:
软件工程方法学三要素:方法、工具、过程。
方法:完成软件开发任务的各项技术方法
工具:运用方法而提供的自动的或半自动的软件工程支撑环境
过程:过程是为了获得高质量的软件所需要完成的一系列任务框架,规定了完成一系列任务的框架。
方法学:在软件生命周期过程中使用的一整套技术方法的集合。
使用最广泛的方法学:传统方法学、面向对象方法学
传统方法学:
又称为生命周期方法学或者结构化泛型。
采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。把软件生命周期的全过程一次划分为若干个阶段,然后顺序地完成每个阶段的任务。对于问题的解决类似于队列的方法,只有队首出队才能完成后续人的出队操作,即只有阶段式完成目标并进行严格的技术审查和管理复审才能进行下一阶段的操作,并把前一阶段的结果作为下一阶段的标准。审查的一条主要标准是每个阶段完成时都应该交出“最新式”高质量文档资料,把当前阶段所完成的任务以文档形式详细说明,如果文档不完整,即可认为有某些工作忘记做了,在下一阶段开始前应将其补足。(了解下)
优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。
缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。
面向对象方法学
四个要点:
(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。
(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。
(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。
(4)对象彼此之间仅能通过传递消息互相联系。
优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。
定义时期:问题定义、可行性研究、需求分析
开发时期:总体设计、详细设计、编码、单元测试、综合测试
维护时期
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
瀑布模型
特点:
优点:
缺点:
快速原型模型
快速原型模型是快速建立起来的可以再计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。他可以让用户快速试用原型系统并给出意见。
优点:
缺点
增量模型
增量模型也称渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能
使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能
把软件产品分解成增量构件时,唯一必须遵守的约束条件是,当把新构件集成到现有构件中时,所形成的产品必须是可测试的
优点:
缺点:
螺旋模型
可以理解为每个阶段增加了风险分析的快速原型模型。在进行下一阶段的原型开发时,首先进行风险分析(钱够不够了?竞争对手什么水平了?)
螺旋模型是风险驱动的,需要相当丰富的风险评估经验和专门知识,否则风险更大;主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险;随着迭代次数的增加,工作量加大,软件开发成本增加 。
优点:
缺点:
很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。
喷泉模型
喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。各活动之间无明显边界,例如设计和实现之间没有明显的边界,这也称为“喷泉模型的无间隙性”。由于对象概念的引入,表达分析、设计及实现等活动只用对象类和关系,从而可以较容易地实现活动的迭代和无间隙。
优点:
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
缺点:
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
RUP(Rational 统一过程)
RUP强调采用迭代和检查的方式来开发软件,整个项目开发过程由多个迭代过程组成。在每次迭代中只考虑系统的一部分需求,针对这部分需求进行分析、设计、实现、测试和部署等工作,每次迭代都是在系统已完成部分的基础上进行的,每次给系统能够增加一些新的功能,如此循环往复地进行下去,直至完成最终项目。(基本上现在的软件都是这么来的)
优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。
敏捷过程
特点:
1、软件危机:在软件开发和维护中遇到的一系列问题。
表现:
(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对已完成的软件不满意的现象时有发生。
(3) 软件产品的质量往往是靠不住的。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。
(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。
为什么:
2、您开玩笑呢?又不是只有编码错误!万一你这一开始就设计错了,您编码再他妈牛逼也白瞎啊。给您一个图自己感受下。
3、软件工程
什么是?软件工程是指导计算机软件开发和维护的一门学科
定义:1、把系统的、规范的、可度量的途径应用到软件开发、运行、维护中。2、研究1中提到的途径
怎么解决软件危机:
对计算机软件有一个正确的认识(软件≠程序)
必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目
推广使用在实践中总结出来的开发软件的成功技术和方法
开发和使用更好的软件工具。
4、结构化泛型与面向对象泛型
结构化泛型又称为生命周期方法学或者结构化泛型。
他是把软件开发过程分为了若干个阶段,每个阶段十分独立,必须顺序的完成各个阶段。上一个阶段的文档就是下一个阶段开始的文档。
优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。
缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。
面向对象方法学
四个要点:
(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。
(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。
(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。
(4)对象彼此之间仅能通过传递消息互相联系。
优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。
6、软件过程
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
他是软件工程方法学三个组成部分的一部分
7、软件生命周期模型
软件生命周期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
特点前面有写
8、因为使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,或者说是无缝连接的,这自然就很容易实现各个开发步骤的反复多次迭代,达到认识的逐步深化,而喷泉模型则很好的体现了面向对象软件开发过程迭代和无缝的特性。
9、优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。
10、RUP适用项目
大型的需求不断变化的复杂软件系统项目
11、敏捷过程适用范围
适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束
12、微软开发适用范围 适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式
9、优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。
10、RUP适用项目
大型的需求不断变化的复杂软件系统项目
11、敏捷过程适用范围
适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束
12、微软开发适用范围 适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式