软件工程学习大纲(简)

软件工程学习大纲

这里有一份PDF格式的软件工程的笔记

软件,是计算机系统中与硬件相互依存的另一部分,它是包含程序、数据及其相关的文档的集合。其具有逻辑和开发上的复杂、成本高、风险大、维护困难等特征。这也就导致一些软件危机的产生,具体表现如:成本高、软件质量得不到保证、进度难以控制、维护非常困难等。因此,对于大型、复杂软件系统的开发,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动。

软件工程是使用系统化的、规范的、可量化的方法指导软件开发、运行和维护的一门学科,它涉及到计算机科学(构造模型和算法)、工程科学(制定规范、降低成本及确定权衡)、管理科学(计划、资源、质量及成本等管理)、数学等领域的综合性知识及实践的应用,它的目的是建造用户满意的高质量的软件。其具有关注于大型程序的构造、中心课题是控制复杂性、软件经常变化、开发软件的效率非常重要、和谐地合作是开发软件的关键、软件必须有效地支持它的用户、在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人等特性。其基本原理为:用分阶段的生命周期计划严格管理、坚持进行阶段评审、实行严格的产品控制、采用现代程序设计技术、结果应能清楚地审查、开发小组的人员应该少而精、承认不断改进软件工程实践的必要性。

我们通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。软件工程方法学包含3个要素:方法、工具和过程。概括的来说软件生命周期由软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码、单元测试、综合测试)和运行维护3个时期组成。

软件生命周期的每一阶段都有明确的任务,那么各阶段的活动如何衔接、开发过程中采用什么样的策略,应遵守什么样的规定和制约等内容需要用一种模型来进行表示,这种软件开发全部过程、活动和任务的结构框架就称之为软件过程模型(或软件开发模型或软件生命周期模型)。我们需要根据实际情况去选择合适模型进行开发。如:瀑布模型、快速原型模型、螺旋模型、增量模型、面向对象模型、可重用部件组装模型等等。

问题定义主要解决的就是三个问题:为谁设计,用户是谁?要解决哪些问题?为什么要解决这些问题?

可行性研究的主要目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。主要任务是“了解客户的要求及现实环境,从技术、经济和社会因素等方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步项目开发计划。”技术可行性是指使用现有的技术能否实现这个系统。经济可行性是指这个系统的经济效益能否超过它的开发成本。操作可行性是指这个系统的操作方式在该客户组织内是否行得通。可行性研究的过程为:复查系统规模和目标、研究目前正在使用的系统、导出新系统的高层逻辑模型、进一步定义问题、导出和评价供选择的解法、推荐行动方针、草拟开发计划、书写文档提交审查。

需求分析是软件定义时期的最后一个阶段,他的基本任务是准确地回答“系统必须做什么?”其意义就在于软件需求的深入理解是软件开发工作获得成功的前提条件,不论我们把设计和编码做得如何出色,不能真正满足用户需求的程序只会令用户失望,给开发带来烦恼。需求分析的任务包括确定对系统的综合要求(功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、 逆向需求、将来可能提出的要求)、分析系统的数据要求、到处系统的逻辑模型、修正系统开发计划。与用户沟通获取需求的方法包括:访谈、面向数据流自顶向下求精、简易的应用规格说明技术、快速建立软件原型。这里还要注意要有分析建模和软件需求规格说明。还要验证软件的需求,主要从一致性、完整性、现实性和有效性四个方面进行验证。

总体设计的基本目的就是回答“系统应该如何实现”这个问题。主要的任务就是划分出系统的物理元素程序、文件、数据库、人工过程和文档等,以及设计软件的结构。设计的过程包括:设想供选择的方案、选取合理的方案、推荐最佳方案、功能分解、设计软件结构、设计数据库、指定测试计划、书写文档、审查和复查。其设计原理包括:模块化、抽象、逐步求精、信息隐藏和局部化、模块独立。启发规则包括:改进软件结构提高模块独立性,模块规模应该适中,深度、宽度、扇出和扇入都应该适当,模块的作用域应该在控制域之内,力争降低模块接口的复杂度,设计单入口单出口的模块,模块功能应该可以预测。

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。其任务不是具体地编写程序,而是要设计出程序的“蓝图”,以后程序员根据这个“蓝图”写出实际的程序代码。设计的方向主要包括结构程序设计和人机界面设计。

编码就是把软件设计结果翻译成用程序设计语言书写的程序,是对设计的进一步具体化,因此程序的质量主要取决于软件设计的质量。这里要注意程序设计语言选择的重要性,同时也要注意程序的设计风格,如:源程序文档化、数据说明、语句结构、输入/输出方法。当然程序的效率也是非常重要的。

软件测试的目的就是为了发现程序中的错误而执行程序的过程。其根本目的是尽可能多地发现并排出软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。软件测试准则包括:所有测试都应该能追溯到用户需求、应该远在测试开始之前就指定出测试计划、pareto原则(测试发现的错误中的80%很可能是由程序中20%的模块造成的)、应该从“小规模”测试开始,并逐步进行“大规模”测试、应该从“小规模”测试开始,测试用例应由输入数据和预期的输出结果两部分组成,并兼顾合理的输入和不合理的输入数据、穷举测试是不可能的、为了达到最佳的测试效果,应该由独立的第三方从事测试工作、程序修改后要回归测试、应长期保留测试用例,直至系统废弃。软件测试的策略和方法分为静态测试方法(人工测试方法和计算机辅助静态分析方法)和动态测试方法(白盒测试方法和黑盒测试方法)。测试步骤为:模块测试、子系统测试、系统测试、验收测试、平行运行。

软件就是在软件已经交付使用之后,为保证软件在相当长的时期能够正常运作所进行的软件活动。维护的类型有四种:改正性维护、适应性维护、扩充与完善性维护、预防性维护。

相关工具方法:

系统流程图、数据流图、数据字典、代码行技术、任务分解技术、自动估计成本技术。

实体-联系图、数据规范化、状态转换图、层次方框图、Warnier图、IPO图、PSL/PSA系统。

有穷自动机、Petri图、Z语言。

层次图、HIPO图,结构图,面向数据流的设计方法。

程序流程图、盒图(N-S图)、PAD图、判定表、判定树、过程设计语言、Jackson图、McCabe方法、Halstead方法。

黑盒测试方法、白盒测试方法。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值