软件工程概述
1软件发展的历程
程序设计阶段
计算机发展的早期阶段(20世纪50年代初期~20世纪60年代中期)。在这个阶段硬件已经同用花,而软件的生产却是个体化。
程序系统阶段
计算机系统发展的第二阶段(20世纪60年代中期~20世纪70年代末期)。引入了人机交互的新概念。出现了实时系统和第一代数据库管理系统。
软件工程阶段
计算机系统发展的第三阶段(始于20世纪70年代中期)。以软件的产品化、系列化、工程化、标准化为特征的软件产业发展起来,打破了软件生产的个体化特征,有了可以遵循的软件工程化得设计原则、方法和标准。
第四阶段
有复杂操作系统控制的强大的桌面机、广域网络和局域网络,配以先进的软件应用已成为标准。从技术的软件刚才阶段过渡到社会信息化得计算
1软件发展的历程
程序设计阶段
计算机发展的早期阶段(20世纪50年代初期~20世纪60年代中期)。在这个阶段硬件已经同用花,而软件的生产却是个体化。
程序系统阶段
计算机系统发展的第二阶段(20世纪60年代中期~20世纪70年代末期)。引入了人机交互的新概念。出现了实时系统和第一代数据库管理系统。
软件工程阶段
计算机系统发展的第三阶段(始于20世纪70年代中期)。以软件的产品化、系列化、工程化、标准化为特征的软件产业发展起来,打破了软件生产的个体化特征,有了可以遵循的软件工程化得设计原则、方法和标准。
第四阶段
有复杂操作系统控制的强大的桌面机、广域网络和局域网络,配以先进的软件应用已成为标准。从技术的软件刚才阶段过渡到社会信息化得计算样本数据。如果程序有输出信息,必须确定它们所生成的结果及输出格式等。 ● 如果需要解决的问题过于复杂,可以把它分解为多个子问题,在对每个子问题做相应的需求分析。 2.设计阶段 当您仔细分析完问题后,就需要设计相应的算法去解决问题。如果已经将问题分解为若干子问题,那么对每个子问题都需要设计相应的算法。 算法(algorithm):在有限时间内获得问题解决方案的逐步求解过程。
○1结构化设计方法 将一个问题分解为若干个子问题的方法叫做结构化设计方法(structured design)。结构化设计方法又叫做自顶向下的设计方法(top-down design)、逐步求精方法(stepwise refinement)和模块化程序设计方法(modular programming)。在结构化设计方法中,问题被分解为若干子问题,然后分别对每个子问题进行分析和求解。所有子问题的解合并起来就是原始问题的解。使用结构化设计方法进行编程就叫做结构化程序设计(structure programming)。
○2面向对象设计方法
在面向对象设计方法(object-oriented,OOD)中,求解问题的首要步骤是识别称为“对象”(object)的组件(它是运用该方法求解问题的基础)和确定对象之间如何进行交互。比如,我们要为一家录像出租店编写一个可以使其业务自动化的程序。在这个问题中,我们可以确定两个主要对象,即:录像带对象和客户对象。 明确系统中的对象之后,下一步就是为每个对象确定有关数据和数据上进行的相关操作。对于录像带对象而言,数据可能包括影片名称,演员名单,制片人,出版公司,库存副本数等等。在录像带对象可以进行的相关操作包括查询影片名,每租出一盘录像带就将库存副本数减一,客户每归还一盘录像带就将库存数加一。 由上文可知:对象包括数据和在数据上执行的操作。对象可以看作数据和其上操作的统一体。使用面向对象方法编程,最终的程序是交互对象的集合。实现面向对象设计方法的编程语言叫做面向对象程序设计(object-oriented programming,OOP)语言。 面向对象设计方法的3个基本原则: ● 封装性(encapsulation):将数据和操作集成在一个单元(对象)中的能力。 ● 继承性(inheritance):从已有数据类型中派生新数据类型的能力。 ● 多态性(polymorphism):使用相同表达形式来实现不同操作的能力。 在C++中,封装性是通过叫做类(class)的数据类型实现的。
在面向对象的设计方法中,我们要确定需要哪些类,它们的数据成员和成员方法。我们还需要描述个各类之间如何进行交互。 4.实现阶段 在实现阶段,您将编写和编译程序代码,以实现在设计阶段分析得到的类和函数。
最终的程序通常由几个函数组成,它们分别完成不同的任务。有些函数是主程序的一部分,其他的则是在对象上完成的操作。显然函数之间存在交互关系,从而能够利用彼此的函数功能。要使用一个函数,用户只需要知道该函数的功能和用法即可,而不必关心该函数的实现的具体细节。 5.测试和调试
测试(testing)这个术语表示检测程序的正确性,即检查程序是不是完成了需要完成的工作。而调试(debugging)一词指,如果程序存在错误,如何找到并修改错误。
在每写完一个函数或算法后,接下来应该验证它是否正确工作。在复杂的大型程序中,错误是一定存在的。为了提高程序的可靠性,必须在交付用户前发现并修改其中的错误。
您可以使用某些方法,通常是数学方法来证明程序的正确性。然而,对于大型的程序来说,单单使用证明方法是不行的,因为在证明过程中就有可能引入错误。所以,我们必须使用测试的方法考察程序的质量。通过让程序运行一些特定的例子,即测试用例(test case)来找出程序中的问题。