软件=程序+数据+文档
?程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。
?数据:使得程序能够适当地操作信息的数据结构。
?文档:描述程序的研制过程、方法和使用的图文资料。
软件的本质特性
软件所具有的复杂性、一致性、可变性、不可见性等特性,使得软件开发过程变得难以控制
软件的复杂性
软件的一致性
软件的可变性
软件的不可变性
软件工程是
①将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即工程化应用到软件上;
②对①中所述方法的研究。
软件工程的发展
软件工程的基本要素
软件工程方法
面向服务:在应用表现层次上将软件构件化,即应用业务过程由服务组成,而服务由构件组装而成。
面向构件:寻求比类的粒度更大的且易于复用的构件,期望实现软件的再工程。
面向对象:以类为基本程序单元,对象是类的实例化,对象之间以消息传递为基本手段。
面向过程:以算法作为基本构造单元,强调自顶向下的功能分解,将功能和数据进行一定程度的分离。
软件开发的基本策略
软件工程的基本原理
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚地审查
开发小组的人员应少而精
不断改进软件工程实践
过程是一组将输入转化为输出的相互关联或相互作用的活动
软件开发活动
问题定义:人们通过开展技术探索和市场调查等活动,研究系统的可行性和可能的解决方案,确定待开发系统的总体目标和范围。
需求开发:在可行性研究之后,分析、整理和提炼所收集到的用户需求,建立完整的需求分析模型,编写软件需求规格说明。
软件设计:根据需求规格说明,确定软件体系结构,进一步设计每个系统部件的实现算法、数据结构及其接口等。
软件构造:概括地说是将软件设计转换成程序代码,这是一个复杂而迭代的过程,要求根据设计模型进行程序设计以及正确而高效地编写和测试代码。
软件测试:检查和验证所开发的系统是否符合客户期望,主要包括单元测试、子系统测试、集成测试和验收测试等活动。
软件维护:系统投入使用后对其进行改进,以适应不断变化的需求。完全从头开发的系统很少,将软件系统的开发和维护看成是一个连续过程更有意义。
软件开发管理与支持活动
(软件项目管理计划、软件配置管理计划、软件质量保证计划、评审记录……)
软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量和风险进行控制和管理的活动。
软件配置管理是通过执行版本控制、变更控制的规程,并且使用合适的配置管理软件,来保证所有产品配置项的完整性和可跟踪性。
软件过程模型
瀑布模型
将基本的开发活动看成是一系列界限分明的独立阶段,这是一种计划驱动的软件过程,有利于规范软件开发活动。
原型化模型
原型是一个部分开发的产品,用于加强对系统的理解,有助于明确需求和选择可行的设计策略。
迭代式开发
将描述、开发和验证等不同活动交织在一起,在开发过程中建立一系列版本,将系统一部分一部分地逐步交付。
可转换模型
利用自动化的手段,通过一系列转换将需求规格说明转化为一个可交付使用的系统。
敏捷开发方法
敏捷开发就是一种有效应对快速变化需求,快速交付高质量软件的迭代和增量的新型开发方法。它强调更紧密地团队协作,