软设复习文档
软件工程标准编制的层次分为5个,分别为 :
国际标准、国家标准、行业标准、企业标准;机构标准;企业(机构)标准、项目标准;课题标准;项目(课题)标准
camelCasing:骆驼拼写法第一个单词的首字母小写,其他单词的首字母大写
PacalCasing:所有单词的首字母大写
C#命名规则
形参、私有变量、局部变量用camelCasing命名法。(记住这个,其他的是PascalCasing命名)
接口应加前缀 “I”
软件工程的要素有哪三个?
过程、方法和工具
软件生命周期“V模型”,简述各测试阶段的关注点
单元测试关注模块内所有重要控制路径;
集成测试关注各模块间的连接正确性、系统或子系统的输入/输出处理、系统或子系统正确处理能力和承受错误的能力;
确认测试关注全部功能和性能要求。
软件生命周期V模型中,各测试阶段的依据是什么?
单元测试阶段的依据是详细设计规格说明;
集成测试阶段的依据是概要设计规格说明;
确认测试阶段的依据是软件需求规范说明。
分析瀑布模型与V模型的优缺点
1、瀑布模型
优点:
1)为项目提供了按阶段划分的检查点.
2)当前一阶段完成后,您只需要去关注后续阶段.
3)可在迭代模型中应用瀑布模型.
缺点:
1)在项目各个阶段之间极少有反馈.
2)只有在项目生命周期的后期才能看到结果.
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段.
2、V模型
优点:
简单、高效
缺点:
1)容易让人误解为测试是在开发完成之后的一个阶段;
2)由于它的顺序性,当编码完成之后,正式进入测试时,这时发现的一些bug可能不容易找到其根源,并且代码修改起来很困难;
3)实际中,由于需求变更较大,导致要重复变更需求、设计、编码、测试。返工量大。
简述SOLID设计原则
(1)SRP(Single Responsibility Principle)
单一职责,一个类应该仅有一个引起它变化的原因
(2)OCP(Open-Closed Principle)
开放-封闭,可扩展,不可修改,避免添加新功能之后产生连锁反应。
OCP关注灵活性,功能的改动是通过增加代码进行的,而不是修改现有代码
(3)LSP(Liskov Substitution Principle)
里氏替换,子类型必须能替换基类型
(4)ISP(Interface Segregation Principle)
接口分离,不强迫类实现它不需要的方法。
如果一个接口中包含许多不大而且不相关的方法,那么就应该分离成多个接口,让实现接口的类只是去实现它所需要的方法
(5)DIP(Dependency Inversion Principle)
依赖倒置,高层模块不依赖于低层模块,都依赖于抽象;抽象不依赖于细节,细节依赖于抽象
简要说明下列软件设计基本原则:
(1)KISS;(2)DRY;(3)Tell,Don’t Ask;(4)YAGNI;(5)SoC。
KISS(Keep It Simple Stupid)
避免不必要的复杂,尽量保持代码的简约
DRY(Don’t Repeat Yourself)
抽取系统中的公共部分,并将其放置在一个地方避免重复
Tell,Don’t Ask
合理封装,将代码方到正确的类中。明确告诉对象我们想要它们去执行怎样的操作,而不是首先询问对象状态,然后我们决定执行什么操作
YAGNI(You Ain’t Gonna Need It)
防止过度设计,只包含必需的功能,不包含你认为将来可能会用到的功能或特性
SoC(Separation of Concerns)
把软件功能分离为单独功能点。被分离的功能点有唯一的行为和数据,而且每个功能点都能被其他所需要的类单独使用。通过该原则,可最大限度地实现代码重用、功能重用、模块重用
设计四则计算器程序,要求实现加减乘除二元运算。
采用接口抽象封装运算,绘制类图
撰写除法类实现代码,操作数数据类型为double,除数为零应抛出异常。
public double Calculate(double operatorX, double operatorY)
{
if (operatorY - double.Epsilon > 1e-5)
{
return operatorX / operatorY;
}
else
{
throw new DivideByZeroException("除数为0");
}
}
软件设计一般被看作是迭代的过程,这里的迭代包括哪两层含义?
第一层含义是,针对给定的需求模型,通过多次从抽象到具体的设计过程,得出足够精细的设计模型以供软件实现之用。
在需求模型发生变化并更新完成后,第一层含义的设计过程再随之展开,直至获得最终的目标软件产品。
软件设计活动主要包括哪些?
体系结构设计、界面设计、模块/子系统设计、过程/算法设计、数据模型设计。
思考-计算器(UI与算法分离)
以计算器新增二元计算log为例,
比较UI与算法分离、UI与算法绑定的优缺点
优点
结构稳定,只需为log增加一个实现类,然后在UI中增加实例化该类的代码
缺点
UI与算法绑定,难以扩展,无论更改表现层技术还是新增功能,都必须对已有代码进行改动,极易引入缺陷。
反思(流程与实例化分离)
针对UI采用switch实例化对象的设计,给出改进建议
改进建议一
用工厂封装Switch
将switch代码封装起来,对外只暴露一个通用的获得实例化对象的方法(输入为字符串,代表四则计算操作符,输出为ICalculate接口类型的对象)
这样新增log计算时,只要更改实例化方法,增加log实现类,UI代码无需更改,保持了结构稳定
改进建议二
流程与实例化分离
UI增加操作符按钮,每个按钮的点击事件负责算法类的实例化,取代switch
计算流程放在等号按钮事件中处理。
新增log计算时,只需要增加log实现类,UI增加log按钮,按钮实例化log类,分工明确、条理清晰。
以如下订单为例,建立软件业务模型,绘制类图
买家姓名 |
张三 |
联系电话 |
123456 |
收货地址 |
南华大学 |
订单编号 |
654321 |
交易时间 |
2013-10-27 23:05:47 |
||
宝贝名称 |
单价 |
数量 |
小计 |
||
LG Nexus5 |
2400 |
1 |
2400 |
||
移动电源11000mah |
158 |
2 |
316 |
||
|
|
总计 |
2716 |
简述抽象与逐步求精的设计过程。
识别业务概念,概念之间关系,类属性和业务方法,属性数据类型与方法签名。
1、软件文档分类:开发文档、用户文档和管理文档
2、开发文档包括可行性研究报告、项目开发计划、需求说明、数据库设计说明、概要设计、详细设计
3、用户文档包括安装配置手册、用户操作手册、需求说明、数据要求说明
4、管理文档包括项目开发计划、开发进度月报、测试计划、测试分析报告、项目开发总结报告
用例常用方法