软件工程的七条基本原理是:
(1)用分阶段的是的生存周期计划严格管理;
(2)坚持进行阶段评审;
(3)严格实施的产品控制;
(4)采用现代程序技术;
(5)结果应能清楚地审查;
(6)开发小组的成员应该少而精;
(7)承认不断改进软件工程的必要性。
(1)软件日益复杂和庞大
(2)软件开发管理困难和复杂
(3)软件开发技术落后
(4)生产方式落后
(5)开发工具落后
(6)软件开发费用不断增加
(1)软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
(2) 软件过程是软件工程方法学的3个重要组成部分之一。
(3) 软件工程方法学包含三个要素:方法、工具和过程。
(1) 提高软件开发过程的能见度
(2) 提高开发效率
(3) 作为开发人员阶段工作成果和结束标志
(4) 记录开发过程的有关信息便于使用与维护;
(5) 提供软件运行、维护和培训有关资料;
(6) 便于用户了解软件功能、性能。
(1)自顶向下、逐步求精的程序设计方法
(2)使用3种基本控制结构、单入口、单出口来构造程序。
软件危机:
软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。
软件危机的典型表现:
(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对已完成的软件不满意的现象时有发生。
(3) 软件产品的质量往往是靠不住的。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。
(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。
软件危机出现的原因:
(1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。
(2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。
(3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。
1993年IEEE的定义:软件工程是:
① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;
② 研究①中提到的途径。
【补充:软件工程的定义】
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
软件工程的本质特征:
(1) 软件工程关注于大型程序的构造 ;
(2) 软件工程的中心课题是控制复杂性;
(3) 软件是经常变化的,开发过程中必须考虑软件将来可能的变化;
(4) 开发软件的效率非常重要,因此,软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具;
(5) 和谐地合作是开发软件的关键;
(6) 软件必须有效地支持它的用户;
(7) 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。
消除软件危机的途径:
(1) 对计算机软件有一个正确的认识(软件≠程序)
(2) 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目
(3) 推广使用在实践中总结出来的开发软件的成功技术和方法
(4) 开发和使用更好的软件工具
软件生命周期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。
对于软件开发问题,并非都有简单、明显的解决办法,许多问题不可能在预定的系统规模或时间期限之内解决。如果该问题没有可行的解,那么花费在这项工程上的任何时间、人力、软硬件资源和经费都是无谓的浪费。可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
数据字典是描述数据流图中数据的信息的集合。它对数据流图上每一个成分:数据项、文件(数据结构)、数据流、数据存储、加工和外部项等给以定义和说明;它主要由数据流描述、加工描述和文件描述三部分组成。
有数据流图(DFD)、数据字典(DD)、判定表、判定树、结构化语言(PDL)、层次方框图、Warnier 图、IPO图、控制流图(CFD)、控制说明(CSPEC)、状态转换图(STD)和实体—关系图(E—R)等。
(1)需求分析的原因
为了开发真正满足用户需求的软件产品,需求分析是软件开发工作获得成功的前提条件,不能满足用户需求的程序只会令用户失望,给开发者带来烦恼。
(2)对软件系统的需求
功能需求、性能需求、可靠性和可用性需求、出错处理、借口需求、约束、逆向需求、将来可能提出的要求。
模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是不是合理的标准。独立性可以从两个方面来度量:即模块本身的内聚和模块之间的耦合。
因为如果不进行设计直接编码,对无法对各种实现方案进行权衡,极有可能会导致软件项目的失败。
应具备以下条件:
(1)使用标准的控制结构;
(2)有限制地使用GOTO语句;
(3)源程序的文档化 (应具备以下内容)
①有意义的变量名称 —— “匈牙利命名规则 ”。
②适当的注释 ——“注释规范”。
③标准的书写格式:
——用分层缩进的写法显示嵌套结构的层次(锯齿形风格);
——在注释段的周围加上边框;
——在注释段与程序段、以及不同程序段之间插入空行;
——每行只写一条语句;
——书写表达式时,适当使用空格或圆括号等作隔离符。
软件测试的基本任务是通过在计算机上执行程序,暴露程序中潜在的错误。
测试和纠错目的和任务都不相同,测试是为了发现程序的错误,纠错是为了定位和纠正错误,从而消除软件故障,保证程序的可靠运行。
(1)单元测试,目的是代码达到模块说明书的要求
(2)集成测试,目的是将经过单元测试的模块逐步组装成具有良好一致性的完整的程序
(3)确认测试,目的是确认程序系统是否满足软件需求规格说明书的要求
(4)系统测试,目的是检查能否与系统的其余部分协调运行,并且完成 SRS 对他的要求。
测试的目的是判断和发现软件是否有错误,调试的目的是定位软件错误并纠错。
类:是一系列对象的抽象描述,这些对象共享相同属性、操作、关系和语义。
对象:是一个实体、一件事、一个名词,可以获得的某种东西,可以想象有自己标识的任何事物,可以是物理存在、概念中或软件中的实体。
相互关系:
每一个类在某一时刻都有零个或更多的实体,每一个对象都是某一个类的实例。
类是静态的;类的存在、语义和关系在执行前就已经定义。对象是动态的;它们在程序执行时可以被创建和删除
用例图、类图、对象图、构件(组件)图、部署(配置)图、状态图、活动图、顺序(时序)图、合作(协作)图等九种图。
抽象:就是过滤掉对象与当前开发工作无关部分特性,只剩下所需要的属性和操作。
继承:是指一个对象直接从一个类中得到的属性和方法。
多态:不同的类有时具有相同名称的操作。
封装:实质是当一个对象执行自己的操作时,它对外界隐藏了操作的细节。
(1)活动图用来建模某个过程的活动序列,以活动为中心。
(2)状态图用来建模对象生命期中的所有阶段,以状态为中心。
(3)活动图中一个活动结束后将立即进入下一个活动,在状态图中状态的转移可能需事件的触发。
完善性维护:满足用户在使用过程中提出增加新的功能或修改已有功能,以满足用户日益增长的需要而进行的工作;
适应性维护:是软件适应新的运行环境而进行的工作;
纠错性维护:纠正开发期间未发现的遗留错误,即在程序使用期间发现的程序错误进行诊断和改正的过程;
预防性维护:为了改善未来的可维护性或可靠性而修改软件的工作。
(1) 软件的可理解性、可测试性、可修改性;
(2) 文档描述符合要求、用户文档简洁明确、系统文档完整并且标准。