一、软件工程概述
1. 软件生存周期
软件:包含程序、数据及相关文档
软件工程:涉及到软件开发、维护、管理等多方面的原理、工具与环境 。最终的目的是开发高质量的软件。
目的:提高软件生产率、提高软件质量、降低软件成本。
文档作用:
提高软件开发过程的能见度
提高开发效率,便于发现错误和不一致性;
作为开发人员在一定阶段的工作成果和结束标志;
记录开发过程中的有关信息,便于协调以后的软件、开发、使用和维护;
提供对软件的运行、维护和培训的有关信息,便于相关人员和用户之间的协作、交流和了解;
便于潜在用户了解软件的功能、性能,为选购提供选择依据。
2. 软件生成周期模型
(1)瀑布模型(Waterfall Model)
按软件生成周期为序来制定的开发模型,适合需求明确的模型,但缺乏灵活性。
原型模型的概念
在短时间先开发一个很简易的原型版本。
(2)演化模型(Evolutionary Model)
基于原型模型,对需求缺乏准确认识的情况下,根据用户使用过程中提出的意见和建议对原型不断重复改进,缺点是要对用户要求加以控制。
(3)增量模型(Incremental Model)
基于原型模型,把需求先划分多个模块,每个模块可进行增量开发。
(4)螺旋模型(Spiral Model)
适合风险比较大的项目,加入了风险分析。
(5)喷泉模型(Fountain Model)
以用户需求为基础,适用于面向对象开发。开发要重复多次。
(6)统一过程(Unified Process)
用例和风险驱动,以架构为中心。
(7)敏捷方法(Agile Development)
尽可能早地、持续地对有价值的软件的交付,强调是快速、时效性高,不强调文档。
3. 软件开发方法
(1)结构化方法
自上向下逐层分解。
(2)面向对象开发方法
面向对象分析、设计与实现,适合比较复杂的项目模型。
(3)Jackson方法
面向结构的开发方法。
(4)原型化方法
需求不清晰、业务不确定的情况。
二、软件需求分析
(1)可行性分析
技术可行性
经济可行性
操作可行性
(2)需求分析
功能需求
非功能需求
设计约束
三、软件设计
(1)软件设计的原则
抽象:内聚(模块内的交互程度)、耦合(模块间的交互程度),希望高内聚、低耦合;
模块化
信息隐蔽
模块独立
(2)内聚和耦合
内聚类型:
功能内聚:最强的内聚,完成一个单一功能;
顺序内聚:前一个功能的输出是后一个功能的输入;
通信内聚:所有处理元素集中在一个数据结构的区域上;
过程内聚
暧时内聚(时间内聚):同时执行的动作组合在一起
逻辑内聚
偶然内聚:功能间没有任何联系
耦合
非直接耦合:模块间没有直接关系,模块间不传递任何信息。
四、软件测试
1. V模型
2. 软件测试的过程
(1)单元测试、模块测试
一般使用白盒测试(知道内部结构和程序流等)
(2)集成测试
黑盒测试,按系统设计说明书进行测试。
(3)确认测试
黑盒测试,检查软件的功能、性能和其他特征是否与用户的需求一致。
(4)系统测试
墨盒测试,把软件放在实际的硬件和 络环境中进行测试,主要测试软件的非功能需求和质量属性是否得到满足。
3. 黑盒测试与白盒测试
语句覆盖:被测程序的每个语句至少执行一次(最弱的覆盖标准)。
判定覆盖:判定条件(if)至少获得一次真、假值。
条件覆盖:每个判定语句中的每个逻辑条件的各种可能值至少满足一次。
路径覆盖:覆盖所有可能的程序运行路径。
判定/条件覆盖:同时满足判定和条件覆盖。
条件组合覆盖:……
4. 测试原则与注意事项
(1)测试原则
尽早测试、测试应贯穿在开发的各个阶段;
测试工作应避免由开发者承担;
设计测试方案的时候,不仅要确定输入数据,还要根据系统功能确定预期的输出结果;
设计测试用例时,要输入不合理的数据或条件;
测试程序中要检验程序是否做了该做的事、还要确认不要多做了事情;
测试要有计划,测试计划、测试用例作为文档的一部分保存;
测试用例精心设计 ,便于重复使用。
(2)测试注意事项
发现错误较多的模块,在纠正错误后,遗留的错误也比较多;
测试的目的是为了发现错误,而不是验证程序没有错误;
通过软件测试不可能完全发现错误;
不可能保证程序100%没问题;
测试工作由开发方负责,从需求阶段提出;
开发时将质量也构建进产品;
测试人员与开发人员要密切合作;
软件测试的目的不仅要找出缺陷,还要随时提供质量相关信息。
五、软件运行与维护
可理解性
可测试性
可修改性
软件维护类型:
正确性维护:更正程序错误。
适应性维护:使用软件适应新技术变化或管理需求变化。
预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件的变化,主动增加预防性的功能。
完善性维护:扩充功能和改善性能。
六、程序员职业素养
1. 软件工程基本原理
用分阶段的生命周期计划严格管理,将复杂问题简化处理;
坚持进行阶段评审;
严格的版本管理;
采用现代程序设计技术,但不追求最新技术;
审查记录;
开发小组人员少而精;
知识管理。
2. 软件工程的最终目标
正确性
可用性
可靠性
友好性
可读性
健壮性:不合理的数据操作可以检查、纠正、提示;
效率
可移值性
3. 程序员的职业素养
有团队精神和较强的沟通能力
文档与知识管理
版本管理
编码规范
测试体系
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!