![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hit软件构造
软件构造课程总结
~泊舟~
17级哈尔滨工业大学计算机大数据专业,个人网站地址https://1173710224.github.io/,个人公众号BBIT
展开
-
HIT 软件构造 设计规约
一个完整的方法方法的规约方法的实现Specification: Programming for communicationspecification输入/输出的数据类型功能和正确性性能只讲“能做什么”,不讲“怎么实现”behavioral equivalence(行为等价性)站在客户端角度看行为等价性根据规约判断行为是否等价两个函数符合这个规约,故它们等价规约结构(前置...原创 2019-06-12 12:50:44 · 3864 阅读 · 0 评论 -
HIT软件构造 数据类型、类型检查
数据类型基本数据类型在java中为小写字母int long boolean double char只有值,没有idimmutable对象数据类型在java中大写字母开头String BigInteger有idsome mutable,some notstatic vs. dynamic types静态类型语言在编译阶段进行类型检查动态类型在运行阶段进行类型检查Jav...原创 2019-06-12 10:39:57 · 4057 阅读 · 0 评论 -
HIT 软件构造 面向复用的设计模式
设计模式除了类本身,设计模式更强调多个类/对象之间的关系和交互过程—比接口/类复用的粒度更大分为创建型模式、结构型模式、行为类模式结构型模式adapter(适配器模式)什么时候使用将某个类/接口转换为client期望的其他形式同故宫增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类模型结构其实它的本质就是使用一个中间的类,将原来的方法隔离,为原来的...原创 2019-06-11 22:27:55 · 3855 阅读 · 0 评论 -
HIT 软件构造 软件构造技术 (面向复用--设计可复用库与框架)
设计可复用的库和框架library和framework被称为系统层面的复用,是因为它们不仅定义了可复用的接口/类,并且定义了这些类之间的交互关系、调用关系术语API:应用编程接口,库和框架的接口client:使用api的codeplugin:定制框架的客户端代码extension point:框架内预留的空白,开发者开发出符合接口要求的代码,框架可调用,从而相当于开发者扩展了框架的功能...原创 2019-06-11 17:45:35 · 3886 阅读 · 0 评论 -
HIT 软件构造 软件构造技术(面向复用--设计可复用的类)
设计可复用的类具体的技术有封装和信息隐藏、继承和重写、多态、子类型、重载、泛型编程本节讲解:行为子类型、lsp(李氏原则)、委派、组合Behavioral subtyping and Liskov Substitution Principle (LSP)子类型多态客户端可用统一的方式处理不同类型的对象行为子类型(java)compiler强制:子类型可以增加方法,但不可删除子...原创 2019-06-11 16:02:21 · 3887 阅读 · 0 评论 -
HIT 软件构造 可复用性的度量、形态、外部表现
什么是软件复用通过现有的软件组件实现或者更新一个软件系统两个问题开发出可复用的软件(for reuse)利用已有的软件系统搭建出软件系统(with reuse)为什么复用降低成本和开发时间经过了充分的测试标准化,能够在不同的一个用中保持一致复用的代价做到复用需要有清晰的定义、简洁明了的接口设计以及对未来可能用途的看法,左到这些需要代价白盒复用源代码可见,可修改和扩展直接将...原创 2019-06-11 00:26:35 · 3844 阅读 · 0 评论 -
HIT 软件构造 语法 正则表达式
语法驱动的构造(Grammar-based construction )学习目标对于正则表达式能读能写什么时候使用有一类应用,从外部读取文本数据, 在应用中做进一步处理。输入文 件有特定格式,程序需读取文件并从中抽取正确的内容从网络上传输过来的消息,遵循特定的协议用户在命令行输入的指令,遵循特 定的格式内存中存储的字符串,也有格式需要总之,处理的是由统一格式的一组字符语法(gr...原创 2019-06-10 18:53:39 · 3868 阅读 · 0 评论 -
HIT 软件构造 设计模式(面向可维护性)
关于如何创建类的新实例的模式(creational patterns)工厂方法模式(factory method pattern)什么时候使用当客户端代码不知道要创建哪个类的实例的时候当客户端不想在client代码中指明具体的要创建的类时给出一个例子现在这里有一个接口Trace,FileTrace和SystemTrace分别是继承这个接口的两个子类,正常使用如下:Trace lo...原创 2019-06-10 15:57:55 · 3997 阅读 · 0 评论 -
HIT 软件构造 软件维护 设计原则
什么是软件维护修复错误、改善性能软件维护需要注意的问题测试所做的修改进行回归测试记录变化除了修复问题,修改过程中不能引入新的故障软件维护不仅仅是运维工程师的工作,在软件开发阶段就要考虑了可维护性的指标圈复杂度:程序中不同代码路径的数量(这个数字越大,维护起来就越难)代码行数:程序的代码的行数(如果一个类的代码行数太多,可能意味着这段代码做了太多的工作,他需要被分割)继承深度:...原创 2019-06-06 11:08:40 · 4087 阅读 · 0 评论 -
HIT软件构造 软件测试 测试优先的编程
测试基本概念测试等级单元测试集成测试系统测试验收测试各部分测试内容见下图Static vs. Dynamic testing静态测试:用眼睛看,评审、走查、检查等动态测试:使用测试用例集进行测试测试套件每个测试集的目标和说明测试运行的配置说明使用这些测试的前置条件单元测试(unit test)含义:针对软件的 最小单元模型开展测试,隔离各个模块,容易定位错误和调试...原创 2019-06-05 16:34:59 · 3990 阅读 · 0 评论 -
HIT 软件构造 bug debug
bug存在说明什么代码错误需求没有完成用户需求理解错误设计文档中有逻辑错误测试不足在复现bug的时候需要控制什么控制软件版本控制环境相同控制输入数据相同调试的过程复现错误(repreduce)在进行错误复现的时候,要控制软件版本、运行环境、输入数据不同的版本的spec是不一样的不同的环境,比如不同的操作系统在控制输入的时候,一定要尽量减小input的size如...原创 2019-06-04 17:30:54 · 3778 阅读 · 0 评论 -
HIT 软件构造 断言 防御式编程
断言定义在开发阶段的代码中嵌入,检验某些“假设”是否 成立。若成立,表明程序运行正常,否则表明存在错误。断言正确,则继续执行在实际使用时,assertion都会被disabledJava实现assert condition; [condition是一个true或者false类型的表达式]assert condition : message;[当判断结果是false时打印message...原创 2019-06-04 10:03:46 · 3800 阅读 · 0 评论 -
liscov替换原则
子类型中的前置条件不能加强子类型中后置条件不能变弱父类的不变量必须保存在子类中子类型方法参数,逆变子类型方法返回值,协变子类型中的方法不应该抛出新的异常,除非这些异常本来就是父类抛出的异常...原创 2019-06-11 10:30:35 · 4037 阅读 · 0 评论 -
HIT 软件构造 错误和异常处理
java中所有“异常和错误”的基类java.lang.Throwablejava.lang.Exceptionjava.lang.Error它们之间的关系如下图:Error 和 ExceptionError:一般是内部错误,一旦发生就无法挽回,所以就只能终止程序的运行。例如:空指针、资源枯竭Error分类:用户输入错误,设备错误,物理限制Error举例:VirtualMach...原创 2019-06-03 16:52:29 · 4027 阅读 · 0 评论 -
HIT 软件构造 健壮性 正确性
健壮性定义系统在不正常输入和不正常外部环境下仍能够表现正常的程度面向健壮性的编程处理未期望的行为和终止即使终止执行,也要准确/无歧义地向用户展示全面的错误信息封闭实现细节(不给用户获得库、数据结构、指针的途径)Robustness principle (Postel’s Law)Be conservative in what you do, be liberal in what...原创 2019-06-02 11:47:16 · 3957 阅读 · 0 评论 -
HIT 软件构造 并发编程 锁 同步
锁含义:使用锁机制,获得对数据的独家访问权限,其他线程被阻塞,不得访问实现方法:synchronized (obj) { … } ,其中obj是锁,也可以简单的在函数定义的时候在public和void之间添加一个synchronized关键字被大括号包围的代码块在执行过程中不会被别的线程的代码块X打断,前提是代码块X也是被synchronized关键字修饰并且使用的锁也是obj也就是锁...原创 2019-06-01 17:24:19 · 3771 阅读 · 0 评论 -
eclipse配置virtualVM环境
先下载两个文件附上网址:https://github.com/1173710224/virtual-VM.git这里面有两个文件,在eclipse中选择install new software,注意这里使用的是带launcher的文件然后一路点击确定结束之后进行配置https://wellkingsen.iteye.com/blog/2099854...原创 2019-05-31 12:28:41 · 3777 阅读 · 0 评论 -
HIT 软件构造 动态性能分析
分析方法代码插入定义:在原始程序中加入某些语句来收集运行时数 据,这些语句不改变原程序的语义,但对原程序的性能有了轻微变化实现:可以自己实现,也可以使用自动工具,从中间语言(比如汇编)添加,向二进制文件中添加,运行时注入(运行时跳转到help函数)但是不管是哪种方式都会改变程序性能优点:准缺点:源代码被修改了采样定义:以特定的频率观察程序执行的特 定时刻所展现出的行为与状态实现:...原创 2019-05-30 05:35:34 · 3846 阅读 · 0 评论 -
HIT软件构造 代码优化
设计方法(对象生成、复用)Singleton Pattern (单例模式)核心思想:某些类在应用运行期间 只需要一个实例优点:它其实式通过全局变量进行的优化。节省创建新的对象的时间系统内存的使用也会减少实现方法:设置静态和 final变量来存储单一实例对象将构造器设置为private,提供静态方法来获取单一实例对象Flyweight Pattern(轻量模式)核心思想:允...原创 2019-05-30 03:29:05 · 3831 阅读 · 0 评论 -
HIT软件构造 JVM垃圾回收
JVM内存的结构下面这张图是对jvm内存的额一个比较详细的解释所有的内存分成三部分:新生代,旧生代,永久区(meta space)新生代又分为eden,from,to三个部分所有的allocated对象最开始是直接分配在eden中YGC之后(eden空间不足),所有的object转移到from区from和to之间进行n次交换(复制方法)to中存留下来的进入老年代在静态域中存储的是...原创 2019-05-29 13:08:39 · 3854 阅读 · 0 评论 -
HIT 软件构造 质量目标
本节学习目标软件构造过程中应考虑的重要质量指标如果达不到期望的质量目标,会有什么后果有哪些面质量指标的软件构造技术软件系统的质量属性外部质量因素,软件运行的速度或者易用性(使用者)内部质量因素:软件的模块化、可读性(开发者)外部质量取决于内部质量外部质量因素correctnessrobustness针对异常情况的处理没有被specification覆盖的情况就是“异常”e...原创 2019-06-14 19:48:44 · 3883 阅读 · 0 评论 -
HIT 软件构造 多维度视图
本节目标从三个维度看软件构造的构成用什么杨的模型/视图描述软件系统将“软甲构造”看作“不同视图之间的转换”软件构造的多维度视图按阶段划分:构造时、运行时按动态性划分:时刻、阶段按构造队形的曾次划分:代码、构件build-time viewsidea =>requirement=>design=>code=>installable/executable p...原创 2019-06-14 19:02:13 · 4135 阅读 · 0 评论 -
HIT 软件构造 过程、系统、工具
软件构造的一般流程编码,重构,调试,测试,性能分析,代码评审,构建,发布coding从用途上划分:编程语言、建模语言、配置语言、构建语言从形态上划分:基于语言学的构建语言、基于数学的形式化构造语言、基于图形的可视化构造语言编程语言建模语言建模语言是一种用于展示结构中的信息的人工语言,它的目标是可视化地理解、验证、交流一个系统的设计配置语言配置文件配置程序的参数和初始设置,为了改...原创 2019-06-14 17:02:36 · 4164 阅读 · 0 评论 -
HIT软件构造 软件生命周期 配置管理
传统软件的过程模型基本的类型线性过程、迭代过程现有的模型瀑布过程、增量过程、V字过程、原型过程、螺旋模型选择合适的过程模型的依据用户参与度有多大开发效率/管理复杂度开发出的软件的质量waterfall(sequential,non-iterative)requirements -> design -> implementation -> verificatio...原创 2019-06-14 13:26:43 · 3942 阅读 · 0 评论 -
HIT 软件构造 ADT和OOP中的等价性
等价关系自反、传递、对称immutable types的等价性如果AF映射到同样的结果,则等价这里区分引用等价和对象等价== vs. equals()==说的是引用等价,说的是两个引用指向了相同的内存空间equals()说的是对象等价,说的是两个对象的field是相同的重写equals方法在自定义ADT时需要重写object的equals方法在object中实现的equals方...原创 2019-06-13 22:22:35 · 3999 阅读 · 0 评论 -
HIT 软件构造 OOP(面向对象)
interfacesafe from bugseasy to understandready for changeEnumerations在值集比较小的时候,使用枚举比使用常量接口更加方便封装和信息隐藏信息隐藏和封装是软件设计的基本原则信息隐藏的好处解耦组成系统的类类之间可以并行的发展维护起来很简单启用有效的性能调优有利于软件复用信息隐藏的方法使用接口类型声明变量客...原创 2019-06-13 16:10:15 · 3876 阅读 · 0 评论 -
HIT 软件构造 抽象数据类型
抽象数据类型(ADT)ADT的特性:表示泄漏、抽象函数AF、表示不变量将ADT的操作分类你可以从下图来理解T是ADT本身,t;是其他类型,*和+说的都是出现次数,和正则是一样的creator 构造器直接构造出一个新的对象,可以有参数,但是不能直接将参数作为返回值可能实现为构造函数或者静态函数producer 生产器基于旧的对象生成新的对象observer 观察器查看rep的...原创 2019-06-12 17:14:42 · 3871 阅读 · 0 评论 -
HIT 软件构造 垃圾回收
空间回收针对三种内存管理模式静态管理模式:在静态内存分配模式 下,无需进行内存回收:所有都是已确定的在栈上进行内存空间回收:按block(某个方法)整体进行在heap上进行内存空间回收,最复杂 ,接下来对这个问题进行详细的讨论。使用活性决定回收与否可达与不可达:与根对象直接相关或者间接相关。根对象:默认请记住(静态区域的数据 ,寄存器中的数据,目前的执行栈中的 数据所指向的内存对...原创 2019-05-28 23:26:48 · 3890 阅读 · 0 评论 -
HIT软件构造 内存管理
理解三种内存管理模式分类静态内存分配在编译阶段就已经进行完毕动态内存分配基于栈:运行时栈,存储函数中变量的引用和简单数据类型的值,不支持复杂数据类型基于堆: 在一块内存里分为多个小块,每块包含 一个对象,或者未被占用;存储复杂数据类型,也就是new出来的对象结合图像理解堆和栈所有局部的基本数据类型都在栈上创建所有对象都在堆上创建 (new),即使是局部变量的object也是...原创 2019-05-28 17:22:13 · 3777 阅读 · 0 评论 -
HIT软件构造 第十章 并发编程 进程 线程 线程安全
名词解释进程(Process)和线程(thread):并发编程的两个基本单元。进程:(1)和同一个机器上的其他进程是彼此隔离的。(2)拥有私有的内存空间,运行时不能共享变量。(3)通过IPC(pipe/socket)进行通信。线程:(1)共享所在进程的内存空间(2)共享可变对象的共享时,需要同步(使用synchronization关键字维护线程安全)。(3)有独立的运行时栈,就像一个普通的函数...原创 2019-05-28 11:06:18 · 3907 阅读 · 0 评论