迈克尔·恩斯特发布的软件
这是由发布的软件包的部分列表迈克尔·恩斯特。我总是很高兴收到评论,bug报告和修复,以及对代码的改进。我会尽力协助您遇到问题或将更改合并到主源中。除非另有说明,所有软件都应被视为GNU公共许可证所涵盖。在一两种情况下,软件是通过请求而不是直接提供的下载。此外,可用的软件比此处列出的要多得多;如果你对我的一些特别的东西感兴趣研究,尽管问我。一般来说,我会尝试发布我的所有软件,尽管是知识产权我的研究伙伴施加的限制有时会阻止一个特定的包。
内容:
程序分析
多种语言
Daikon:动态检测程序不变量
Daikon是一个动态检测排序程序不变量的系统可能写在断言
声明或正式声明规范。这样的程序属性对于各种各样的软件构建、理解、重用和修改任务,但代码中通常没有它们。C、C++、Java、,Perl和其他数据源。
Daikon主页
下载Daikon
DynComp:Java、C和C的抽象类型推理++
程序员经常使用原始类型,例如整数
(整数)到代表各种概念:日期、文件描述符、秒自1970年以来,等等。使用声明类型的分析将表现不佳分析以这种方式重新使用类型的程序时。(例如,它报告文件描述符的整数值为小于1970年以来的秒数。)使用的DynComp分区到细粒度抽象类型中,每个概念一个。这是一种动态跟踪程序中价值流的分析,以确定价值观相互作用(因此可以假设是相关的抽象类型)。DynComp是针对C/C++二进制文件实现的(使用法亚拉工具箱)和Java程序(类文件)。
DynComp的两个版本都作为Daikon公司分布.
仅Java
Checker框架:Java的可插入类型检查器
Java的类型系统在运行时检测并防止许多错误。但是它不能阻止足够地错误。我们已经编写了检查程序作为javac的插件运行,检查更具表现力的类型系统。支持的检查器有四个示例:
- 空解引用检查:提供编译时保证您的程序永远不会抛出空指针异常。
- 相等测试检查:告诉您是否滥用了
==
运算符,方法是对非内插值调用它,或误用这个等于()
方法对实例化值调用它。
- 引用不变性检查:告诉您分析或您调用的库可能会修改您传递给他们或您从他们那里收到的。(另请参阅爪哇岛参考推理工具不变性。)
- 对象不变性检查:告诉您程序可能会错误地修改对象。
我们还分发了Checker Framework,它使您可以轻松地像我们分发的那样编写新的检查程序。
这些工具来自JSR 308网页:
JSR 308网页
Javarifier:引用不变性推理
Javarifier推断出不变性(根据爪哇人语言)Java程序中的引用。换句话说,它转换Java程序和库到Javari。它注释源代码或.class类
格式具有向后兼容的注释或属性。
注释程序帮助开发人员推理代码并在不引入细微突变错误的情况下对其进行修改。注释图书馆很重要,因为Javari程序使用库如果没有Javari注释,通常不会进行类型检查。手动确定每个(公共)参数和返回类型的可变性非常繁琐容易出错。Javarifier自动执行此分析。
Javarifier网页.
Eclipse的与泛型相关的重构
Java5将参数多态性或泛型类型引入Java语言。为了获得错误检测和文档记录的好处对于泛型类型,现有Java代码必须转换为Java5。我们的研究小组已经创建了重构工具来解决这项任务。实例化取代的非通用用途按泛型用途划分的泛型类型,例如转换列出字符串;
到列出<String>strings;
.参数化添加类型参数到类声明,例如转换类列表{...}
到类列表<T>{…}
.三个序列文件(1,2,3)讨论了这些转换。
- 这个第一篇论文麻省理工学院进行了研究,但被后续工作取代,因此我们不发布实施。
- 这个第二纸张是麻省理工学院和IBM研究部门的联合工作。它实现作为Infer Generic Type参数重构提供Eclipse的。有关文档,请参阅日食和J2SE 5.0Eclipse手册的第节。
- 这个第三的纸张是麻省理工学院和IBM研究部门的联合工作。其实施包含IBM专有代码,因此我们无法发布它。
Eclipse下载
并发程序:重构并发
Concurrencer是一组Eclipse重构,可帮助程序员让他们的程序在多核机器上运行得更快。一些Concurrencer的重构将使用锁的代码转换为无锁的版本。Concurrencer的其他重构转换顺序代码生成多个线程的代码。
Concurrencer网站
仅限C/C++
Fjalar:二进制指令插入工具包
Fjalar是一个用于插入已编译可执行文件的工具包(目前对于Linux/x86);插入检测代码可以创建动态分析。观察数据值的动态分析(与仅仅控制流)由于存储器不安全而难以写入,需要记录源代码结构方面的信息在整个分析过程中(不仅仅是在最后),以及其他因素。Fjalar采用“混合级别”方法,结合了以下优点基于源的检测和二进制检测。
Fjalar是Kvasir公司工具和其中之一这个DynComp公司工具。
Fjalar主页
Fjalar手册
Kvasir:C/C++可执行文件的数据跟踪
Kvasir可以描述为值分析器或数据跟踪工具。它运行程序并报告变量在运行期间的值时间。使用的功能法亚拉框架,它遍历复杂的数据结构而不会导致崩溃或输出无意义的值,即使存在部分初始化的数据和内存错误。
Kvasir作为Daikon公司分布.
Flowcheck:测量定量信息流
处理机密数据的程序不可避免地会泄露一些信息关于该数据(希望程序只显示少量信息)。Flowcheck是一种安全测试工具,用于测量信息量关于一个程序的秘密输入在它的公共输出中被揭示。
Flowcheck网站.
cline.pm:linewise C扫描和解析
cline是一个轻量级的C代码扫描器和解析器。它读取C程序并返回物理行、逻辑行(可能跨越行延续指令)和全标记行(可能跨越C标记)。它适用于许多情况下,即使输入不严格遵循C语法,使其对包含语法错误的程序有用。
斜坡.pm2019年9月13日。
测试
重新崩溃:为系统崩溃创建单元测试
ReCrash是一种轻量级技术,用于监视程序的故障例如崩溃。当发生这样的错误时,ReCrash会创建多个单元以一种需要两次失败的模式ReCrash创建单元测试,其开销低于2%,允许进行例行测试使用。供应商可以使用ReCrash检测分布式程序,从而减少用户的bug报告负担和bug复制负担对于开发人员来说。
ReCrash主页
Eclipse的连续测试插件
连续测试使用开发人员工作站上的多余周期来在后台连续运行回归测试,提供快速编辑源代码时有关测试失败的反馈。其目的是减少保持代码经过良好测试所需的时间和精力,并防止长时间未捕获导致的回归误差。
注:持续测试插件尚未更新随着Eclipse界面的变化,使用最新版本的Eclipse。欢迎有兴趣更新它的维护人员。
连续测试主页
安装Eclipse插件说明
Eclat:测试输入的随机生成和分类
Eclat是一个为Java自动生成测试输入的工具程序。Eclat与其他生成测试的工具的不同之处在于它使用新颖的选择机制来过滤掉大多数候选测试,只向用户展示最有可能揭示程序中的错误或现有测试套件中的缺陷。
Eclat主页
要求Daikon公司.
Randoop:反馈定向随机测试生成
Randoop(以前称为“Joe”)为Java程序创建测试输入。测试是随机创建的,但Randoop采用了一种称为反馈定向测试一代将测试生成指向状态空间。(天真的随机生成会造成许多非法或无趣测试。)从本质上讲,它们只建立在看起来表明正确的行为;指示问题(错误或非法输入)不需要通过随机搜索进行扩展。Randoop和C#名为Randoop的实现发现了数百个真实的、以前未知的Sun JDK和Microsoft公共语言运行库中的错误是广泛使用且经过大量测试的组件。
Randoop主页
Palulu:模型导向随机测试生成
Palulu扩展了兰多普有两种方式。首先,它生成一个法律方法序列模型,然后使用该模型指导随机测试生成,导致创建更复杂的通过普通随机生成可以生成的状态。第二,它通过要求类似的测试,将观察到的行为转化为回归测试未来运行时的行为(不相同-这将过于脆弱)。Palulu在Sun JDK的多个版本中发现了错误IBM JDK。
J机组4
流行的JUnit回归测试框架的版本4是内置的麻省理工学院项目分析小组成员,David Saff(与Kent Beck和Erich Gamma)。
J机组4
Eclipse下载
Eclipse的JUnit插件
JUnit插件随日食(3.2版及更高版本)是由David Saff和其他人在麻省理工学院的项目分析小组中建立。
Eclipse下载
Java扩展
JSR 308:带扩展注释的Java
JSR 308型,“Java类型注释”,丰富了Java注释系统。它允许注释出现在超过Java 6允许的位置;一个例子是泛型类型参数(列表<@NonNull对象>
)。这些注释系统的增强需要次要的、向后兼容的更改Java语言和类文件格式。这些更改计划成为Java7语言的一部分。
JSR 308主页
Javari:具有引用不变性的Java
Javari是Java语言的扩展,允许规范以及编译时不变性约束的验证。明确地,不可变引用引用的对象的传递状态无法使用该引用修改。
Javari实现已被基于新实现的上检查器框架.
另请参阅爪哇岛推理工具引用不变性,适用于新的Javarifier实现。
Javari主页
Javari检查器文档
IGJ:不变性通用Java
IGJ是Java语言的扩展,允许规范和编译时验证参考不变性和也对象不变性。这使得它比爪哇语语言。
IGJ实现已被基于新实现的上检查器框架.
检查器框架下载页面
IGJ检查器文档
其他研究工具
Medic:SAT-规划问题汇编
Medic规划师将规划问题编码为命题逻辑(CNF)公式,为该公式找到满意的真值赋值,以及然后将作业转化为解决原始问题的计划规划问题。医疗系统在IJCAI’97论文中进行了描述自动中的权衡SAT-规划问题汇编.
Medic是将问题编译成SAT或逻辑的第一个工具可满足性。(这个想法是由Kautz和Selman提出的,但这是第一次实现。)这种转变很有价值,因为研究表明,SAT编译速度非常快。今天,解决将问题简化为SAT是所有计算机科学领域。
medic.tar.gz医生2019年9月13日。
游戏人工具包:游戏理论分析
截至2003年7月,您最好不要使用David Wolfe的GamesmanToolkit(也不是我的扩展,它链接到下面)。相反,使用AaronSiegel的重新实现,具有新功能、可移植性、可扩展性、,以及易用性。它包括Konane的实现。你可以从https://cgsuite.sourceforge.net网站/.
1998年3月4日发布的David Wolfe的Gamesman工具包用于组合博弈理论分析。包括迈克尔·恩斯特的代码用于评估古夏威夷科纳纳游戏中的位置。1995年UMAP杂志描述了科纳纳的博弈论分析纸张扮演科纳内数学上:组合博弈论分析.
大卫·沃尔夫的游戏.tar.gz2019年9月13日。
由取代组合游戏套件
Gud:统一调度模型
Dubious With Predicate Dispatching,也称为Güd,是一个简单的解释程序演示谓词调度的特性。谓语调度是一种统一的调度模型,它概括了以前的调度机制;有关详细信息,请参阅ECOOP’98文件谓词调度:A统一调度理论.A手册包含在实现中。主要作者实现是克雷格卡普兰.
gud.tar.gz公司版本0.1.11998年7月22日。
灰色代码:搜索灰色代码
格雷码搜索格雷码(n位数字的序列,每个仅在一个位位置上不同),以满足某些约束。本文报告了该程序的一些结果“格雷码诱导的图形”.
灰度.tar.gz2019年9月13日。
教学
集团思维规范练习
这个群体思维规范练习是一项有趣的、类似游戏表演的活动学生了解团队合作和规范。另请参阅UpopVote(向上投票)软件。
groupthink规范-exercise.zip2019年9月13日。
UpopVote:为Groupthink规范练习计票
这个群体思维规范练习可以运行没有软件支持,但UpopVote软件允许其运行更加平稳。UpopVote软件在一个配有每个学生的InterWrite PRS遥控器。
UpopVote.zip2019年9月13日。
返回:编程作业评分
麻省理工学院6.170班:实验室软件工程,编程作业由课程人员、学生修改并重新提交作业。这个“反复”给学生一个改正错误的机会。学生尝试使用(他们自己的)遗留代码,帮助他们欣赏好的设计和文档的好处。学生是考虑到几次重新投入的尝试,但重新投入的功劳是全力以赴,让学生有动力应用智能工具当然:测试、推理等。
此基础结构可根据要求提供。
BibTeX公司
bibtex2web:从BibTeX文件创建网页
给定一组BibTeX文件,bibtex2web可以创建以下任何一个:
- 每篇文章一个网页(给出摘要,并链接到文章自身以及作者和场地)
- 按日期列出所有文章的网页
- 按主题分类文章的副主题网页
- 每个作者一个网页,列出作者的文章,加上一个网页链接到所有作者的网页
这很方便,因为您只需要保留一组(BibTeX)源最新版本,从而避免网页和参考书目之间的偏差。
bibtex2web的输出是可定制的。您可以在以下位置看到bibtex2web的输出示例:PAG酒吧,按主题,作者.
下的每个文件https://groups.csail.mit.edu/pag/pubs/是由bibtex2web自动生成。
这个bibtex2web手册包含在分布(但是链接到此处供参考)。
您可以通过克隆获得bibtex2web这个源代码来自github.
bib-缩写:缩短LaTeX参考书目
bib-abreviate维护两组书目缩写(bibstring)文件夹。您可以在它们之间进行选择,以便轻松选择verbose或简明扼要的书目条目。
bib-缩写.pl2022年11月9日。
bibstring-master.bib,2022年11月9日。
WWW和HTML
bibtex2web:从BibTeX文件创建网页
请参见本页其他地方.
html-update:更新html目录和链接日期
html-update由两个脚本组成。
html-update-toc
更新网页的目录(如文件顶部的目录)。
html-更新链接日期
更新引用linked-to的日期和文件大小文件(如本文件中所示)。
这些脚本(和其他脚本)位于这个羽状lib/html-tools存储库。
html2texi:将HTML转换为Texinfo
html2texi将HTML文档树转换为Texinfo格式。Texinfo格式可以轻松转换为Info格式(用于在中浏览Emacs或独立信息浏览器)、打印手册或HTML。因此,html2texi.pl允许将HTML文件转换为Info格式,以及其次,可以生成网页层次结构的打印版本。
与HTML不同,信息格式是可搜索的。由于Info集成到Emacs,无需启动单独的Web即可阅读文档浏览器。此外,信息浏览器(包括Emacs)包含Web浏览器缺少的便利功能,例如简单的索引查找和无鼠标浏览。
html2texi用于创建Python信息文件.
html2texi公司2022年8月24日。
要求检查参数.pm.
WWW-index:HTML文档中的图书式索引
WWW-index是一个创建和维护索引的系统(就像一本书的索引,而不是用于编程搜索的数据库)到一组HTML文件。索引是一个HTML文档,其中列出了术语和文档指的是术语。在索引中,文档标题是指向文档,而在文档中,索引项是指向相应的索引的一部分。
网址:www-index.tar.gz2019年9月13日。
anymonze.pl:从电子邮件中删除姓名和地址
此筛选器从其输入中删除电子邮件地址和姓氏(通常是邮件存档);全名和电子邮件地址被替换使用独特的昵称。
使匿名2019年9月13日。
要求实用程序_模板.pm2019年9月13日。要求检查参数.pm.
编程
checkargs.pm:Perl参数检查
checkargs检查运行时传递给Perl函数的参数数量时间,捕获一些常见错误,否则这些错误在稍后在节目中。
它在中提供这个羽状lib/html-tools存储库。
cppp:CPP部分评估员
cppp简化了条件编译结构(if等)基于用户指定的预处理器宏。如果指定的宏如果不足以完全计算条件,则保持原样。
氯化聚丙烯2019年9月13日。
要求检查参数.pm,斜坡.pm、和paren.pm(帕伦·pm).
paren.pm:查找匹配的分隔符
给定一个参数字符串,paren中的函数计算不平衡的括号、大括号和其他分隔符,或查找结束符与指定的开放分隔符匹配的分隔符。
paren.pm(帕伦·pm)2019年9月13日。
Python信息文件
注意:这个程序不再感兴趣了。在其他地方,你可以找到Python的信息版本手册和Emacs Lisp代码查找PythonEmacs中的文档.
六本Python手册可在https://www.python.org/doc网站/在一个多种格式,但不是信息格式。与HTML不同,信息格式是可搜索的。由于Info集成到Emacs,无需启动单独的Web即可阅读文档浏览器。此外,Info浏览器(包括Emacs)包含Web浏览器缺少的便利功能,例如简单的索引查找和无鼠标浏览。
蟒蛇信息.tar.gz,2019年9月13日Python 2.1。
python-info-Make文件2019年9月13日:用于创建信息文件的Makefilehtml2texi公司.
电子邮件
sieve-delay:将电子邮件发送延迟到特定时间
我发现经常收到新的电子邮件会让我分心。筛子延迟延迟邮件递送:你将不会整天源源不断地发送邮件定期接收一批消息。(如果你有意愿只要不检查你的电子邮件,你就不需要打开邮箱由于其他原因,您不需要sieve-delay工具!)
筛网延迟取代procmail-mde公司工具。
筛分-延迟-adme2019年9月13日。
procmail-mde:邮件分离和延迟
procmail-mde被筛网延迟工具。
procmail mde是支持拆分的脚本和数据文件的集合将您的电子邮件分为多个投递邮件。例如,我将邮件过滤到四次投递邮件:
- 未经请求的垃圾邮件(可能永远不会被阅读)
- 大宗邮件(很少打印和阅读)
- 每日邮件(每天移动到我的主邮箱一次)
- 默认(立即交付)
我觉得这很方便,因为我的工作不会被邮件中断我订阅的邮件列表;这些消息被推迟到第二天早上,或者我决定要读它们。
procmail-mde.tar2019年9月13日。
Emacs公司
Emacs扩展
我的Emacs黑客单独出现。
EDB:Emacs数据库
自1997年起,我不再支持EDB。然而,Thien-Thi Nguyen已经接管了EDB,新版本可在获取https://gnuvola.org/software/edb/.
EDB是GNU Emacs的数据库程序。它允许你操纵Emacs中的结构化(或非结构化)数据,并提供许多常见的数据库功能,包括:可自定义的文件布局;键入字段(例如,整数、日期、字符串);任意数据显示格式;选择性显示记录;标准GNU Emacs编辑命令;数据库总结;排序;数据库的合并与协调;报告根据数据库信息生成;高度可定制;由100页的手册。
(另请参阅我的其他Emacs扩展.)
请参阅教育局的主要网页https://gnuvola.org/software/edb/.一些历史信息也可以使用,例如EDB 1.21版。
其他
plue-lib:一个有用的编程抽象库
Plume-lib是一个用于编程的有用抽象库。它包括:
- 独立程序
- 为Java、Emacs Lisp和Perl编写的库
请查看它文档.
倒计时:大屏幕倒计时计时器
countdown.ppt是一个PowerPoint演示文稿,以非常大的形式显示数字,表示演示文稿中剩余的时间。它有助于在会议上主持会议,在面向演讲者,以便演讲者始终准确知道还剩多少时间会议主席无需分散演讲者的注意力来指示时间剩下的。
countdown.ppt的灵感来自于查尔斯·雷瑟森在最近20世纪80年代,在Macintosh的Future Basic中(参见Charles E.Leiserson,《计时员》,SIGACT新闻,第23卷,第4期,1992年秋季,第81-82页)。
提示:当你有许多相同长度的演示时可以编辑countdown.ppt以删除除所需时间外的所有时间。然后,您可以只按主键进入演示文稿,而不必拖着鼠标查看数量你想要的时间。
倒计时.ppt2019年9月13日。
检查日期:生日提醒
检查日期读取包含日期信息的文件并列出所有日期在今天之前或之后的指定天数内。这很粗糙,但是这对我很管用。
支票日期.tar.gz2019年9月13日。
帮助:段落grep
“帮助”程序本质上执行逐段grep/搜索,尽管有一些附加功能,例如文件包含。鉴于一系列单词“help”打印与所有话。其中一个用途是在明文文件中查找匹配的记录,例如地址列表。另一个用途是查找您的简短笔记写给自己解释各种重要信息。
“帮助”程序是被取代的由更一般的和便携式“查找”程序,它是羽状库。查找会搜索一组文件就像grep一样。但是,Lookup按条目搜索(默认情况下,段落)而不是按行,尊重注释(忽略其中的匹配项),尊重\include指令(搜索命名文件),并具有其他选项。查看其文档.
帮助.tar2019年9月13日。
返回到迈克尔恩斯特的主页.