软件工程
开发、运行、维护和修复软件的系统方法。
软件需求
系统必须完成的事,以及必须具备的品质,包括功能需求、非功能需求和设计约束3方面内容。
业务需求(Business Requirement)
反映组织机构或客户对系统、产品高层次的目标要求。
用户需求(User Requirement)
描述用户使用产品必须要完成的任务和需求。
系统需求(System Requirement)
从系统角度来说明软件的需求。
需求工程
一个包括创建和维护系统需求文档所必需的一切活动的过程,通常包括需求开发(需求捕获、需求分析、编写规格说明书、需求验证)和需求管理(定义需求基线、处理需求变更、需求跟踪)。
工程文件:《软件需求规格说明书》
做好需求调查
What(确定要捕获的信息,与问题域相关的信息、与要求解决的问题相关的信息、用户对系统的特别期望与施加的任何约束信息);
Where(信息的来源);
How(需求捕获的技术和策略)。
真正成功的项目
满足客户的目标,为客户带来预想的价值增长。
问题定义的关键
清晰地界定出问题的内容、性质,以及系统的目标、规模等内容,并形成完整的书面报告。
可行性研究工作的任务
技术可行性、经济可行性、社会可行性。
可行性研究工作的步骤
1)核实问题定义与目标;
2)研究分析现有系统;
3)为新系统建模(系统上下文关系范围图、实体-关系图、用例模型、域模型、IPO表);
4)客户复核;
5)提出并评价解决方案;
6)确定最终推荐的解决方案(成本估价、效益分析);
7)草拟开发计划;
8)以书面的形式提交《可行性分析报告》并进行审查。
要想准确地估算出工作量,通常可以借助的工具是历史数据和经验模型。
分析
通过对问题域的研究,获得对该领域特性及存在于其中(需要解决)的问题特性的透彻理解,并用文档说明。
需求分析的工作
1)绘制系统上下文范围关系图;
2)创建用户接口原型;
3)分析需求的可行性;
4)确定需求的优先级;
5)为需求建立模型;
6)创建数据字典;
7)使用质量功能调配(QFD,其将需求分为三类:期望需求、普通需求、兴奋需求)。
设计测试用例通常有两种常用的测试方法
黑盒测试(在程序接口上进行测试,常用的测试用例设计方法包括等价类划分、边界值分析、错误推测法、因果图);
白盒测试(利用程序内部的逻辑结构和有关信息,设计或选择测试用例,测试程序的所有逻辑路径)。
软件测试步骤分为(自底向上)
单元测试、
集成测试(一次性组装方式和增殖式组装方式)、
确认测试、
系统测试。
软件测试
针对一个程序的行为,在有限测试用例集合上,动态验证是否达到预期的行为。
可分为:
功能测试、
可靠性测试(平均故障间隔时间MTBF和平均故障修复时间MTTR)、
强度测试、
性能测试(响应时间、吞吐量、辅助存储区)、
恢复测试、
启动/停止测试、
配置测试、
安全性测试、
可使用性测试、
安装测试、
过程测试、
容量测试、
文档测试、
兼容性测试(向下兼容和交错兼容)。
通常软件再生工程包括以下六类活动
筛选、文档重构、逆向工程、代码重构、数据重构、重新开发。
在开发时期的每个阶段,特别是设计阶段结束时都要进行严格的技术评审,尽量不让错误传播到下一个阶段,其目的是评价软件产品,以确定其对使用意图的适合性,表明产品是否满足要求。设计评审一般采用评审会议的形式来进行。
数据流图
一种图形化的系统模型,其在一张图中展示信息系统的主要需求,即输入、输出、处理(过程)、数据存储。
DFD中的基本元素包括:过程、外部实体、数据存储、数据流、实时连接。
软件帮助文档
评估软件的帮助系统和文档的有效性是对软件进行易学性度量。
测试划分
从是否关心软件内部结构和具体实现的角度划分为白盒测试、黑盒测试、灰盒测试。
从是否执行程序的角度划分为静态测试和动态测试。
冒烟测试
冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作,其执行者是版本编译人员。
MVC(模型-视图-控制器)
一个框架模式,其强制性地使应用程序的输入、处理和输出分开。
软件度量的3个维度
项目度量、产品度量和过程度量。