![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件构造
Swocky
这个作者很懒,什么都没留下…
展开
-
【软件构造】实验笔记(一)Lab1-Fundamental Java Programming and Testing
前言《软件构造》课程是我校根据MIT、CMU等计算机领域名校的相关课程近年来开展的软件开发相关的课程。课程的实验和课件都很大程度上参考了上述学校。本笔记对在课程实验练习进行中遇到的问题进行总结,方便以后查阅。实验一主要是考察java编程基础,由于大一学的比较仓促,很多东西都有所遗忘,所以本篇笔记也以java编程与相关算法为主。实验要求一、Magic Squares (MIT)要求1A...原创 2019-03-02 18:07:23 · 3701 阅读 · 9 评论 -
【软件构造】课件精译(十二)面向复用的设计模式
为什么需要面向复用的设计模式除了类本身,设计模式更强调多个类/对象之间的关系和交互过程,比接口/类复用的力度更大设计模式分类创建型模式:关心如何创建对象结构型模式:处理类或对象的组合关系行为型模式:关注如何交付和分配责任一、结构型模式(1)适配器模式意图:将某个类/接口转换为client期望的其他形式适配器可以解决接口不兼容问题通过增加一个接口,将已存在的子类封装起来,clie...原创 2019-04-17 08:18:46 · 301 阅读 · 0 评论 -
【软件构造】课件精译(十三)面向可维护性的软件构造思想与原则
一、软件维护和演化什么是软件维护在软件发布后,修改软件以修正错误 和提升性能。运维工程师修复代码后测试所做的修改、回归测试、记录变化除了修复问题,修改中不能引入新的故障,最大的问题:修改后没有足够的文档记录和测试几种软件维护类型纠正性维护、适应性维护、完善性维护、预防性维护软件演化软件演化:对软件进行持续的更新软件的大部分成本来自于维护阶段软件演进中的Lehman法则...原创 2019-04-17 08:46:11 · 528 阅读 · 0 评论 -
【软件构造】课件精译(十四)面向可维护性的设计模式
一、创建型模式(1)工厂方法模式工厂方法也称作“虚拟构造器”,当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个 类的实例化延迟到其子类。在工厂方法模式下: Product p = new ConcreteTwo().makeObject();举例对于静...原创 2019-04-18 23:06:44 · 456 阅读 · 0 评论 -
【软件构造】课件精译(十五)面向可维护性的软件构造技术
一、基于语法的构造本节的目的是理解语法产生式和正则表达式的概念,能够阅读和书写语法或正则表达式,能够将语法和解析器生成器相结合,解析字符串。模块的输入/输出,在内存中存储时为 “串”,在模块间交互时为“流” 。...原创 2019-05-10 11:25:24 · 181 阅读 · 0 评论 -
【软件构造】课件精译(十六) 健壮性构造目标、异常与错误处理
本章之前还介绍了“健壮性与正确性”,理论性比较强而且在最初几章有所提及,这里不再介绍。一、一般性错误与异常错误的类型输入错误、设备错误、物理限制、代码错误错误处理错误处理是指编程、应用程序和通信中错误的预测、检测和解决。预先防止、错误中恢复、优雅地退出难点在于检测错误的代码通常远离可以回滚数据或保存数据并优雅退出的代码错误处理的任务就是将控制权从发生错误的位置转移到可以处理错误的程...原创 2019-05-10 14:38:29 · 301 阅读 · 0 评论 -
【软件构造】课件精译(二十) 动态性能分析方法与工具
一、动态程序分析动态程序分析:根据程序的一次或多次执行的过程与结果,分析代码在时空性能方面所展现出的性质静态与动态分析为使动态分析有效,目标程序必须执行足够多次,以观察到完整的、不同的执行行为。通过分析代码覆盖度,确认动态分析是否已经足够。要尽可能小的影响程序原本的执行,否则性能测量不准确 。测量某事物的行为将会不可避免的干扰/扰乱它,从而改变它的状态。Example 1:程序热点...原创 2019-05-24 15:57:32 · 425 阅读 · 0 评论 -
【软件构造】课件精译(二十一) 代码调优
一、代码调优的策略和过程代码调优是修改正确的代码以实现更高效地运行。调优通常是指小规模的改变在代码层面调优之前,应首先考虑以下策略:不要过分强调不需要的性能高层的架构设计更换数据类型或算法是否由类库中隐藏的对OS的调用导致的问题优化编译器升级硬件代码调优是最后的选择程序优化的Pareto原则20%的程序消耗了80%的执行时间调优的目标就是找到20%的热点,并优化完美是优...原创 2019-05-24 20:23:51 · 512 阅读 · 0 评论 -
【软件构造】课件精译(十七) 断言与防御式编程
一、回忆:设计一个ADT第一次防御:不要引入bug最好的防御就是不要引入bug,可以采用静态检查、动态检查、不可变性、不可变值与不可变引用等方式第二次防御:缩小bug的范围如果无法避免,尝试着将bug限制在最小的范围内;限定在一个方法内部,不扩散;尽快失败,就容易发现、越早修复,例如采用断言。二、断言(1)什么是以及为什么要使用断言断言:在开发阶段的代码中嵌入,检验某些“假设”是否成...原创 2019-05-22 17:26:31 · 224 阅读 · 0 评论 -
【软件构造】课件精译(十八) 调试方法
一、什么是Bug以及什么是Debug(1)什么是Bug(2)Bug的生命周期Bug的生命周期有被发现提出,被审核批准,被分配给开发者,被解决/修正/测试,修改完成后等待重新测试,开始重新测试,通过测试,修复后仍存在问题、重新打开、重走流程, 确认修复成功,关闭bug等阶段(3)Bug的常见类型(4)Bug报告系统和问题追踪系统...原创 2019-05-22 17:54:23 · 207 阅读 · 0 评论 -
【软件构造】课件精译(二十二) 并发和线程安全
前言根据课程安排,第四章《面向可理解性的构造》和第九章《代码重构》均为自学内容,有时间将在后续章节补充,这里直接进入第十章。什么是并发编程并发并发意味着多个运算同时发生为什么要并发处理器时钟速度不再增加新一代芯片都会有更多的内核为了让计算更快运行,我们必须将计算分解为并发模块两种常见的并发模型共享内存:并发程序通过读写内存中的共享对象交互例如:两个处理器共享物理内存;两个程...原创 2019-05-27 10:58:58 · 366 阅读 · 0 评论 -
【软件构造】课件精译(二十三)消息传递与图形化用户界面
一、套接字&网络:在两台计算机间传递信息套接字&网络网络中的Client/server模式,采用socket作为抽象网络通信是并发的,需要考虑线程安全问题需要设计client和server通讯用的线路协议socket的一些阻塞操作使代码编写更容易,但有可能造成死锁客户端/服务器设计模式客户端发起通信,服务器接收、处理、回复,重复此过程,客户端断开连接。服务器可同时处理...原创 2019-05-27 11:11:48 · 263 阅读 · 0 评论 -
【软件构造】课件精译(十一)面向复用的软件构造技术
一、设计可复用的类(1)行为子类型和里氏代换原则(LSP)行为子类型客户端可用统一的方式处理不同类型的对象定义1:如果对一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1所定义的程序P中在o1全都替换成o2时,程序的行为不发生任何变化,那么T2为T1的子类。定义2:所有引用父类的地方都必须能够透明地使用其子类对象。来源:https://www.cnblogs.com/L...原创 2019-04-13 08:38:58 · 368 阅读 · 0 评论 -
【软件构造】课件精译(九)ADT与OOP中的等价性
一、什么是以及为什么要等价性ADT中的操作等价性AF决定了ADT中各操作的实现 ,可通过AF判定ADT中操作的等价。数据类型中值的等价性二、三种看待等价性的方式通过AF或关系AF(a)=AF(b)、离散数学中等价关系的定义通过观察从观察的角度,对两个对象的任何同一操作都会得到相同的结果 。三、==与equals()定义新数据类型时,需要考虑等价的含义,然后实现equals()...原创 2019-04-07 21:30:04 · 477 阅读 · 0 评论 -
【软件构造】课件精译(一)软件构造的多维度视图
系列前言我校《软件构造》课程的很多内容来自像MIT、CMU这样的国外大学,可能是出于培养学生阅读英文文献能力的考虑,学校上课的课件上大多内容没有经过翻译,只有部分关键词予以解释,这给很多同学学习带来了一定困难。为了方便日后查阅,笔者计划尽可能多的对课件中的重要内容进行翻译和拓展,使其更便于阅读和学习。当然因为水平有限,翻译错误的地方还请大家多多指正,实在翻译不好的地方也先用英文代替了。另外...原创 2019-03-06 14:56:33 · 777 阅读 · 3 评论 -
【软件构造】课件精译(三)软件生命周期与配置管理
一、本章概述软件开发的生命周期传统软件开发模型(瀑布模型、增量模型、V模型、原型法、螺旋模型)敏捷开发和极限编程协同软件开发软件配置管理Git总结二、本章目标了解软件开发的一般过程了解传统软件过程模型的原理,包括线性和迭代模型(瀑布模型、增量模型、原型法、螺旋模型和V模型)了解并实践敏捷开发了解软件配置管理(SCM)学习如何将Git用于日常的SCM任务(用于个人开发的基本...原创 2019-06-23 22:39:09 · 559 阅读 · 0 评论 -
【软件构造】课件精译(四)软件构造过程与工具
一、本章概述1、软件构造的一般过程:设计→编程/重构→Debug→测试→构建→发布编程/重构回顾以及静态代码分析Debug和测试动态代码分析/剖析2、软件构成的狭义过程(构建):验证→编译→链接→测试→打包→安装→部署构建系统:组件和进程构建变量和构建语言构建工具:Make, Ant, Maven, Gradle, Eclipse3、总结二、本章目标了解软件构造的一般过程(...原创 2019-03-09 16:32:27 · 568 阅读 · 1 评论 -
【软件构造】课件精译(二)软件构造的质量目标
一、本章概述1、软件系统的质量特性外部 vs. 内部质量因素重要的外部质量因素这两因素间的折中2、软件构造的五个关键质量目标易于理解、便于修改、重用性高、健壮性高、高效运行3、总结二、本章目标了解软件构造关心的质量因素理解质量目标无法完成的后果了解课程中每个质量因素对应的构造技术三、正文1、软件系统的质量特性外部和内部的质量因素外部质量是用户能够感受到的,影响用户使用...原创 2019-03-06 23:21:16 · 427 阅读 · 0 评论 -
【软件构造】课件精译(六)设计规约
本章说明本章简单介绍了程序设计语言中函数的基本概念,然后具体介绍了文档与规约。包括规约的前置条件、后置条件,可变数据对其的影响,如何设计规约等。其实就是教给开发者如果通过编写规范的规约更好的保证函数的正确性,防止异常的产生,和用户更好的协作。正文一、程序设计语言中的函数&方法方法、参数、返回值、变量作用域、方法:积木(主要介绍了函数的基本概念,包括返回值、变量作用域、调用等,较为...原创 2019-03-20 09:58:50 · 430 阅读 · 0 评论 -
【软件构造】课件精译(七)抽象数据类型
一、抽象和用户定义类型抽象意味着什么抽象、模块化、封装、信息隐藏、关注点分离(模块具有单独的责任,不要将一个责任分散在不同的模块中)用户定义类型二、类型和操作的分类三、抽象数据类型举例举例int:不可变数据类型,没有mutator函数List:可变数据类型,接口,有mutator函数String:不可变数据类型,没有mutator函数认识Java中的ADT概念抽象类型是用操...原创 2019-03-25 12:23:59 · 792 阅读 · 0 评论 -
【软件构造】课件精译(五)数据类型与类型检验
前言因为最近开始继续做项目了,课余时间比较紧张。第一篇的前言虽然说要选重要部分翻译,但事实上目前为止几乎是全部翻译,所以以后的内容可能会写的敷衍一些,排版标号也会比较简单,挑一些个人感觉有价值的东西放上来,还请见谅。本章说明从这一章起,课程正式以Java为编程语言讲解一切软件开发的具体事项,不再是前几章那样的软件构造理论。本章还是以Java语法为主,但是值得注意或者易混淆的地方还是很多。本...原创 2019-03-18 17:17:29 · 329 阅读 · 0 评论 -
【软件构造】实验笔记(二)Lab2-Abstract Data Type and Object-Oriented Programming
一、前言因为有一些事情耽误了,这次实验的笔记写的比较晚。而本次实验比上次就要负责了很多,主要考察抽象数据类型和面相对象的编程方法。总的来说算法难度不是特别大,但是任务比较多,实现比较复杂,而且题目要求部分为英文(来自国外大学网站),所以也比较需要时间。二、实验要求1、Poetic Walks请阅读 http://web.mit.edu/6.031/www/sp17/psets/ps2/,遵...原创 2019-03-24 11:34:23 · 1173 阅读 · 1 评论 -
【软件构造】课件精译(八)面向对象编程
一、面向对象的标准OOP以类为核心概念二、基本概念:对象、类、属性、方法和接口类举例:类的静态、实例变量/方法类变量(静态变量)和静态方法与类有关而不是实例。不同于静态变量和静态方法,实例变量与实例方法每个实例都会触发。另外,静态方法无法调用非静态成员(方法和变量)。三、接口接口Java中的接口是一系列方法签名而没有方法体,若要继承接口,需要实现其方法。一个接口可以扩展其...原创 2019-03-27 20:35:23 · 361 阅读 · 0 评论 -
【软件构造】课件精译(十)可复用性的度量、形态与外部表现
前言之前的章节介绍了软件构造的核心理论(ADT)与技术(OOP),其核心是保证代码质量、提高代码安全性。本章面向一个重要的外部质量指标:可复用性——如何构造出可在不同应用中重复使用的软件模块/API。本节探讨可复用的软件应该“长什么样”,下一节学习“如何构造”。一、什么是软件复用性...原创 2019-04-10 23:15:21 · 387 阅读 · 0 评论 -
【软件构造】课件精译(十九) 面向性能的软件构造技术
一、性能指标性能运行时程序性能:主要分为时间性能和空间性能影响运行时性能的因素空间性能:内存分配、垃圾回收时间性能:算法、数据结构、I/O、网络、并发与多线程等如何获得内存消耗如何获得执行时间二、内存分配回忆:操作系统中的内存处理OS通过虚拟内存机制管理物理内存的使用,将物理内存映射为虚拟内存,为每个进程分配虚拟内存空间。内存管理...原创 2019-05-22 22:13:00 · 270 阅读 · 0 评论