软件构造月总结1

1.软件多维度视角

可以分成build-和run-time、moment和period、code和component、elements、relations、models这些角度
软件构造月总结1
这里面Build-time,moment,code-level角度上:有代码、由代码构成的一个AST树和UML的类图
在Build-time,period,code-level这个角度:代码在每个时期的改变
Build-time,moment,component-level这个角度:我们在编译器目录里面能见到的东西各种文件,各种库,库的链接和静态的链接,UML组件图
Build-time,period,component-level这个角度:各个版本,比如我们在git中提交的版本
Run-time,moment,code-level这个角度:Code snapshot这个图,内存占比
Run-time,period,code-level这个角度:UML的序列图、文件在编译的时候的路径
Run-time,moment,component-level这个角度:UML的部署关系图
Run-time,period,component-level这个角度:事件日志记录

2.软件的构建方式

从无到Code:Programming / Coding和Review, static analysis/checking(写代码的过程)
从Code到Component:Design和Build: compile, static link, package, install, clean(这里需要用ADT和OOP的知识)
从Build-time到Run-time:Install / deploy和Debug, unit/integration testing(测试)
从Moment到Period:Refactoring、Version control和Loading, dynamic linking, interpreting, execution (dumping, profiling, logging) (利用一些版本控制工具来帮助我们更好的开发)

3.软件的质量目标(有矛盾的、需要利弊取舍)

内部质量因素:写代码的人关心的
外部质量因素:使用这个软件的人关心的
(外部质量取决于内部质量)再怎么样,最基本的是代码跑得动啊!!

3.1外部质量(最重要的是折中!!!)

正确性(最重要!!!):对正常的输入产生正确的输出(严格符合规约中定义的行为
健壮性(鲁棒性):能应对异常输入(规约外的情形也要考虑)
可扩展性:当规约更改的时候能不能很容易的修改(应对需求的变化)
可复用性:一次开发多次使用
兼容性:不同软件之间容易集成
性能(得有正确性作支撑才有意义)
可移植性:不同技术环境之间
方便使用:
功能(别太多,会占用磁盘空间而且复杂)
及时性(得能在deadline之前搞完啊)
其他:可验证性,完整性,可修复性,经济性

3.2内部质量

可读性、清晰、代码少等

4.测试优先的编程(在实验中有体现)

4.1测试(测试策略也得写啊)

只能证明是对的,但是不能证明没有错误!!
测试是为了证明有错而进行的

好的测试的标准:能够发现错误;不冗余;有最佳特性;不要太复杂也不能太简单

测试的层次:
软件构造月总结1
静态测试(干看);动态测试(运行然后整点参数试试)
测试(看有没有错);调试(改错)
黑盒测试(按照规约测试);白盒测试(在代码层次上测试)

黑盒测试:就是在规约中写测试,然后测试Spec跟program的交集
软件构造月总结1
白盒测试:按照程序的思路写测试,然后测试Spec和程序的交集软件构造月总结1

4.2测试优先的编程

先写spec(规约),然后写测试用例,然后写代码

4.3选择测试用例

等价类划分!!!(要包括边界值)
例子:
n是正奇数:
正数:>0、<0、0
奇数:奇数、偶数
奇数隐含着整数:整数、非整数

5.软件的生命周期和配置管理

传统软件的编程模型:
1.瀑布模型:
线性推进、阶段划分清楚、整体推进、无迭代、管理简单、无法适应需求、增加/变化
2.增量模型:
线性推进、增量式(多个瀑布的串行)、无迭代、比较容易适应需求的增加
3.V字模型:测试完了重新编程
软件构造月总结1
4:原型模型:
开发出来之后由用户试用/评审,发现问题反馈给开发者,开发者修改原有的实现,继续交给用户评审。
5.螺旋模型:
多轮迭代基本遵循瀑布模式,每轮迭代有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代